|
78546
|
2757
|
16
|
2026-05-27T12:42:56.540437+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885776540_m1.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Search
Associate File Types with PhpStorm…
Add
Rem Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON...
|
[{"role":"AXTextField","text [{"role":"AXTextField","text":"Search","depth":1,"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Associate File Types with PhpStorm…","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.18402778,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".dockerignore (DockerIgnore)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore (GitIgnore)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".ignore (IgnoreLang)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Apache config","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Archive","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AspectJ (syntax highlighting only)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Blade","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BladeHTML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C#","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C/C++","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cascading style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CassandraQL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cookie storage file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV/TSV data","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cucumber scenario","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Diagram","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Doctrine query language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"exclude (GitExclude)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File containing settings for editor","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File type auto-detected by file content","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Files opened in associated applications","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Flow JS","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub actions expression language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitLab CI Expression language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GNU Makefile","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Haskell","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HiveQL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTTP requests","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IDL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Image","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"INI config","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaFX","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript testing snapshot (Jest)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JIRA query","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSHint configuration","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"}]...
|
-2673706997690608581
|
-6897625495896296036
|
click
|
accessibility
|
NULL
|
Search
Associate File Types with PhpStorm…
Add
Rem Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78545
|
2758
|
18
|
2026-05-27T12:42:54.107612+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885774107_m2.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PHP
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"PHP","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"}]...
|
-5486238706915803809
|
-5486238706915803809
|
click
|
hybrid
|
NULL
|
PHP
PhpStormPwovscorsViewNeWENNCCoocCaravelKetdcio PHP
PhpStormPwovscorsViewNeWENNCCoocCaravelKetdcioTOOl-Window$2 JY-20915-fix-npho l0005.ongpheo matl.criyPmoxo.ongPYlkowle"medd"sueamine.oneHwowercalonephp queue.phpsdlestorce.onesamconephp secure-headers.phgwpservices.ohgppslack.ohephptimezones.ohgphp webhook-server.ohg> En contrit.→darabasrontcent>Ulangnode modtles hhrary toon→tnanstant mualiid> @ resourcesv hroutesphe api.phpphe api_v2.phpne concole nbophe customer_api.phpMoamsioo0o.oneMo haalth obopupro cetco weo.oneMaweb chepp weonook.one> scriptev(ln storage> O apo>@ debugbar> &a frameworkvMloasrcitionore0 audio wav= custom log= nubspocioumal-poullodOtexkehysece.ohpphpljiminny.phpusonce wihny servcostwi16©public function -_constructeUANUNNNNЛАЛААAЛAAAAHSScredentals = storage oathd pathetexterellay1sonlonoutenv assianment: 'GOOGLE_APPLICATION_CREDENTIALS=' • Scredentials):* Sareh the nnteet soceacas chnca the nher euoemuhise funet son evne tt hanasSmailbox = config( key. "jiminny.google_text_user'):SexpectedAlias = config( key: "jiminny,deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all'SexpectedHost = config( key: "jiminny.google-text_host'):Log:: info( message: "[TextRelayService) Starting sync', 0"nazloox > Swarloox'expected alias' =› SexpectedAlias.PXOPCIPONOSE L SOXOPCKPCHOST1):seruces ensosreservetalookWed 27 May 15:42:53custom.losettingsMarketplaceInstaliec2826-85-27 12:36:032024-05.27 12-3K-AR12826-85-27 12:36:034820-05-4450.05%12826-85-27 12:36:05112826-85-27 12:36:061820-85-4DORDO820-8594WD0100%8ZO-0504WDOH0812826-85-27 12:36:0917826-85-242736:8912826-85-27 12:36:0912826-85-272:3678902826-85-27 12-36-1112826-85-272336452826-85-2723364502826-85-2723304502826-85-27233642›Apocarance & Bchavio.KeymapEdrtonVoins› Version ControlDirectorie:Build, Execution. Deolovmen.Search Results (3)sor by: kelevanceIaeolocJetBrains s.r.o. Plugin homepageEnabiememoryBeforeComnandInMb":60.0,"memoryPeakBeforeConnandInMb" :1ed1bc6", "trace_id":96d8832a-1985-4983-beSc-e9485c095aef"}CommandInMb":68.0.*nenoryAfterComsandInMB":62.8."menoryPeake."memoryBeforeCommandInMb":69.0.*memoryPeakBeforeConmandInMbOverviewAdditional Intoeeihohoo.oadoraroorino nhoroc.orarnoryredfabe28496d8"}DPY84Yo08."memoryßeforeComnandinMb":69.0. *memonyPeakBeforeConnandTnMbnolousd mewor> ToolsBackup and SyncAdvanced SettnasInteractive viewer for '.log' files.reoa ooHosroraruoareorinohhoroyonneaoryredloryßeforeCommandinMb*:69.8.*nenoryPeakBeforeConnandinMb":99.Eestureso4arTrace10:[CREDIT_CARD]-9868-8008da25y/c8a"e-643d-fe17976647af° "trace_1d".*13844bdf-1d76-4e15-9868-ebb• Code hiahliahting based of log level: error, warn, into, etc. mandinHb" :60.8,"nenoryAfterconmandinH3":62.8, nenorypeakвefolond"."e8yci:+-cd93-4030-9[PHONE]878Traceom"dFolding or uninteresting events87Fc18+-c093-4030-9054-267-3384948Trace10110758685-88comendiinto":o8,8,menonytertos-andiint8":o.8."nenory?egke"tema tonloourocodthcmtoo @wentrGo to next errosaction/Shite 5ANemancTnt,"oi NCRAROny ANoSSAOCln.RiyR"SASONyPAskR811/12, "pid":42218} 1 correlation_1d":79fca9e9-5a21-452c-9cyyc-oeiioheininoei Coneh nneloseRocotnoronhIntenton to hchlcht dictance between evente (marketime te tedAdvanced etor strioe heat man• Custom log format more info: [URL_WITH_CREDENTIALS] "trace_1d":"84bc4955-185c-409f-a849-1469983354dc")"correlation_id": 79fca9e9-5a21-452c-9c88-6c8b158a9e8f","tra.Ehoth CAndate" BoRsed APISRIhAO RCAChOOrOARLOS YhLOORKKS(2826-85-27 12:36:132824-80.27 12.24-12requests":1, "total_records_fetched":0,"total elapsed secondwdunstionrel.co7 101 Jecannolation 444.890605000.6021-/52(2826-85-27 12:36:13onplered curacionis .040.0 Usage:24208010 F88l U5808.12824-86.27 12-24:42105011712, "pid":42210} {"correlation id":*4feS3c8c-5986-4a26-83(2826-85-27 12:36:13)| Local WARNING: |HubSpot) Account not connected for user "usenid*: 2ac8447f-3c8с-4ce0-baeb-063ddb76fa9b","account"EnulU: ("correlation id*:*4fe53c8c-5986-4a26-8349-c9f3ef6c8ec3*,"trace 112854.06.27 12.24-421 oonl TSA-[CrnOunerResolver) Integration owner is not connected, attempting team members {*crn provider": "hubspot" "crn_owner":130, "team id":42} {"correlation id":*4fe53c8c-5986-4a26-8(2826-85-27 12:36:131 1ocal,INF0:IConPumenResol wenl No tean membens found with actrive con connectiion "can onoviden"-"hubspot" "team sid"-40) f"concelation id"-"4fe53080@5986-4a26-8369-99f3ef6eßee3" "trace idraenkrego? 12.2ke42l oonl TusneIConOumenResolwenl No tean menber found with actrve con connectsion f"con nnoviden"-"hubspot" "team id".LP) "concelation.d"•"4fe53080-5986-4a26-8369-0963ef6eßec3" "toace id"(2826-85-27 12:36:131 1ocal, INFOfSyncHubspot@hiectsSyne_finished_(*team"-"b2d49a54-0645-4637-a7ap«a860fce6eße6* Monoyiden"-"hubspot" "status"-"disconnected" "ducatsion ns":23,62,"usane":22934488"ceal usaofSyncHubspot@biectsStantino_sync_("team"-*b26115eb-93ce-401b-929c-1737570f86ba* Musane":24195248, "neal usage":65011712,"01d"-40210) (concelation0*:3483930b-4961-4800-98camnit xmEoautheorivate kel(2826-85-27 12:36:131 10ca1, WARNTNG: [HubSpotil Account not connected forLEU:T:TMES BETST:TN10N 5ST-MLT:YE:D HI Y CUTIVE: УE:-2У14-51:548557-200-46 З:ТА ФН ВТ АТАТАМАВТИОТОВ В БОТ ЕПТННТИЧИНЕ ВТ•МБНОТИЕТТОТЛ-СОТОБЕВРОНОМАТЬessaoehsoransosoetsoresenressaoeosei(2826-85-27 12:36:131 1oca1,TNF0:Com@umenResolvenlTntennatzion_onmenis.not_connected.attenotsinoteam.membens_con.onoy/den"-"hubspot" "con onmen":109, "team 31d8:29) *concelatsion10*-*348303db-4a61-48ce-9)(2826-85-27 12:36:131 10091, TNE0nenbers found with active con connectiion ("eon prowiden":"hubspot" "team ig":29} ("concelatiion 1g"."34830300-4361-48c0-9866-8161516e75e2" "trace 3d2826-85-24 23364591 10c910E050on@nmenResolwenl No.tean.nembenfoundwithactsive.com_connectaion*con.nnoy/den"Athubspot" "teams1d":29) concelatsion10"•*[CREDIT_CARD]-9806-8161516075e2" "toace 1d"foreachSnessanelsscony as Shistontes)Snessages = Shistonies-snessagesAdded 22 (1:(2826-85-27 12-36-131 10c91, TNE0,12826-85-27 12336140c9100E05—326-85-21 12:36:42oc910a0n12826-85-24 1213611400011050Jininny\Console\Comnands\Connand::run Memory usage before starting command {"connand":"activity:notify-not-logged", "memoryBeforeComnandInMb* :60.0, "menoryPeakBeforeConnandInMbhẢẢẢẢẢẢ(SyncHubspotObfectel Stantzing sync {"tean"."c6b946b8-b48d-4832-368c-357469651888- "usaoe":24214824 "neat usage":65911712 "oid":42218} (*concelation $a".-468d054b-0205-4308-862826-85-24 12:36:4 Noc0,WAONINGE12826-85-24 12:3611406010505[CrnOunerResolver] Integration owner is not connected, attenpting team members {"crn_provider"; "hubspot", "crn_ouner":256, "team_id":49} {"correlation_id":*468dca4b-82d5-43c8-8sthis-siesartunrentanwinonnentSsenwice.Smilbox.Sescaocid.SexocctedAsns.Sexoectectoso12826-85-24 17:361140601050512826-85-27 17:3614110601N505mambanafound.withnetive.com commeationMeounnoyidns"-"hubenor" "Taam0".49СоаАОn5И".4680014608205-230808400010618557628 ToAeTfound with active cra connection {"cra_provider": "hubspot" "team_id":49} {"correlation_id":"468dca4b-82dS-43c8-84dc-ac61ffSS1b40*, "trace_id"Denhoeooet iklocnMstkmenkoeooet .htllosmsCnalnvortout Tovtoolaueerhorolt cotaer oest nnauidon Cnoccanoldtenetmenkoetrer icketl loanlmshe[SyncHubspotübiects Sync finished "team":"c6b9d6b8-b48d-4832-a68c-a57d68651888* provider":"hubspot" "status":"disconnected", "duration-ns":49.63, "usage":24238936,"real usacJiminny\Console|Comnands\Connand::run Memory usage before starting command {"connand": "mailbox:sync", "menoryBeforeCommandInMb":60.0, *nenoryPeakBeforeComnandInMb*:99.883} {"cо)Mnsn Cahsdmla ChotNhnhay SundMsmilSchadnalSTNTGUSATohoxGwoc/whoct"-ldoakorhann_=towentele0lEecaccotation_ian."auualko-a/kaktasHhons-9009411a64a6ashoncctae.noth0hdo2ednht.abbzbaae0sh09d98fc1...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78544
|
2757
|
15
|
2026-05-27T12:42:54.212233+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885774212_m1.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"PHP","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Appearance & Behavior","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keymap","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Editor","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Plugins","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Version Control","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build, Execution, Deployment","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Languages & Frameworks","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tools","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Backup and Sync","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Advanced Settings","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXTextField","text":"Search","depth":1,"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Associate File Types with PhpStorm…","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.18402778,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".dockerignore (DockerIgnore)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore (GitIgnore)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".ignore (IgnoreLang)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Apache config","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Archive","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AspectJ (syntax highlighting only)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Blade","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BladeHTML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C#","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C/C++","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cascading style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CassandraQL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cookie storage file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV/TSV data","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cucumber scenario","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"}]...
|
5164948829622124137
|
-7830856445824568196
|
click
|
accessibility
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario...
|
78543
|
NULL
|
NULL
|
NULL
|
|
78543
|
2757
|
14
|
2026-05-27T12:42:51.660677+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885771660_m1.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
Intentions
Language Injections
Natural Languages
Reader Mode
TextMate Bundles
TODO
ideo
Suggested
Kubernetes
Cloud
Install
Enabled
JetBrains
Staff Picks
Show all
Laravel Idea
Installed
Enabled
2.9M
4.71
13.1.2.261
Laravel Idea
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
Symfony Plugin
Install
Enabled
8.4M
4.64
Daniel Espendiller
PHP Annotations
Installed
Enabled
5.7M
4.80
12.1.0
Daniel Espendiller
IdeaVim
Install...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"PHP","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Appearance & Behavior","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keymap","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Editor","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Plugins","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Version Control","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build, Execution, Deployment","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Languages & Frameworks","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tools","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Backup and Sync","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Advanced Settings","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXTextField","text":"Search","depth":1,"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Associate File Types with PhpStorm…","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.18402778,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".dockerignore (DockerIgnore)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore (GitIgnore)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".ignore (IgnoreLang)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Apache config","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Archive","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AspectJ (syntax highlighting only)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Blade","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BladeHTML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C#","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C/C++","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cascading style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CassandraQL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cookie storage file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV/TSV data","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cucumber scenario","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Diagram","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Doctrine query language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"exclude (GitExclude)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File containing settings for editor","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File type auto-detected by file content","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Files opened in associated applications","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Flow JS","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub actions expression language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitLab CI Expression language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GNU Makefile","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Haskell","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HiveQL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTTP requests","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IDL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Image","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"INI config","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaFX","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript testing snapshot (Jest)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JIRA query","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSHint configuration","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON lines","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON5","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSP (syntax highlighting only)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSX","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Less style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Markdown","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Patch","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Perl","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHP","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHPT","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PostCSS style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Redis","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Regular expression","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RELAX NG compact syntax","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sass style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Scalable Vector Graphics","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SCSS style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Shell script","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Smarty","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SmartyConfig","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SonarQube for IDE property files","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SourceMap","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Spell checker dictionary","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SQL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Static analysis results interchange format","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tabular data file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Text","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Twig","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript config","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript JSX","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Vue template","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XHTML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML Document Type Definition","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath2","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"YAML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":3,"bounds":{"left":0.0,"top":0.0,"width":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":"*.dockerignore","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.3298611,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Add HashBang Pattern","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.48958334,"height":0.037777778},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"General","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.034722224,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Code Editing","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.05625,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Font","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.020833334,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Color Scheme","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.06111111,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Code Style","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.047916666,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Inspections","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.050694443,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File and Code Templates","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.10763889,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File Encodings","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.063194446,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Live Templates","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.06666667,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File Types","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.045138888,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Copyright","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.04375,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Inlay Hints","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.045833334,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Duplicates","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.046527777,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Emmet","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.03125,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Intentions","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.04375,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Language Injections","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.08680555,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Natural Languages","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.08194444,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Reader Mode","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.058333334,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"TextMate Bundles","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.079166666,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"TODO","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.027083334,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"ideo","depth":1,"on_screen":true,"value":"ideo","role_description":"text field","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Suggested","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.045833334,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kubernetes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.050694443,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Cloud","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.031944446,"height":0.017777778},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"JetBrains","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.033333335,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Staff Picks","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.045833334,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Show all","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03888889,"height":0.018888889},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Laravel Idea","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05277778,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.028888889},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2.9M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.027777778,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.71","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.024305556,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"13.1.2.261","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.035416666,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Laravel Idea","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.04375,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains AI Assistant","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.09583333,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"151.9M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.034722224,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2.15","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.024305556,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Symfony Plugin","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.068055555,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8.4M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.028472222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.64","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Daniel Espendiller","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.06388889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHP Annotations","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.07361111,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.028888889},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5.7M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.027777778,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.80","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"12.1.0","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.020833334,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Daniel Espendiller","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.06388889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IdeaVim","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.035416666,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-1601849233504684281
|
-5548252044401020770
|
typing_pause
|
accessibility
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
Intentions
Language Injections
Natural Languages
Reader Mode
TextMate Bundles
TODO
ideo
Suggested
Kubernetes
Cloud
Install
Enabled
JetBrains
Staff Picks
Show all
Laravel Idea
Installed
Enabled
2.9M
4.71
13.1.2.261
Laravel Idea
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
Symfony Plugin
Install
Enabled
8.4M
4.64
Daniel Espendiller
PHP Annotations
Installed
Enabled
5.7M
4.80
12.1.0
Daniel Espendiller
IdeaVim
Install...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78542
|
2758
|
17
|
2026-05-27T12:42:51.258579+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885771258_m2.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
Intentions
Language Injections
Natural Languages
Reader Mode
TextMate Bundles
TODO
ideo
Suggested
Kubernetes
Cloud
Install
Enabled
JetBrains
Staff Picks
Show all
Laravel Idea
Installed
Enabled
2.9M
4.71
13.1.2.261
Laravel Idea
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
Symfony Plugin
Install
Enabled
8.4M...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"PHP","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Appearance & Behavior","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keymap","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Editor","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Plugins","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Version Control","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build, Execution, Deployment","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Languages & Frameworks","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tools","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Backup and Sync","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Advanced Settings","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXTextField","text":"Search","depth":1,"bounds":{"left":0.50166225,"top":0.04868316,"width":0.077792555,"height":0.027134877},"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Associate File Types with PhpStorm…","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.08809841,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".dockerignore (DockerIgnore)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env file","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore (GitIgnore)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".ignore (IgnoreLang)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Apache config","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Archive","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AspectJ (syntax highlighting only)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Blade","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BladeHTML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C#","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C/C++","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cascading style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CassandraQL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cookie storage file","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV/TSV data","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cucumber scenario","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Diagram","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Doctrine query language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"exclude (GitExclude)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File containing settings for editor","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File type auto-detected by file content","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Files opened in associated applications","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Flow JS","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub actions expression language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitLab CI Expression language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GNU Makefile","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Haskell","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HiveQL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTTP requests","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IDL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Image","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"INI config","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaFX","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript testing snapshot (Jest)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JIRA query","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSHint configuration","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON lines","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON5","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSP (syntax highlighting only)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSX","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Less style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Markdown","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Patch","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Perl","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHP","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHPT","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PostCSS style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Redis","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Regular expression","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RELAX NG compact syntax","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sass style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Scalable Vector Graphics","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SCSS style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Shell script","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Smarty","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SmartyConfig","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SonarQube for IDE property files","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SourceMap","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Spell checker dictionary","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SQL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Static analysis results interchange format","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tabular data file","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Text","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Twig","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript config","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript JSX","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Vue template","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XHTML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML Document Type Definition","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath2","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"YAML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":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":"*.dockerignore","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.15791224,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Add HashBang Pattern","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.234375,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"General","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.01662234,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Code Editing","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.026928192,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Font","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.009973404,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Color Scheme","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.02925532,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Code Style","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.022938829,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Inspections","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.024268618,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File and Code Templates","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.051529255,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File Encodings","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.03025266,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Live Templates","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.031914894,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File Types","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.021609042,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Copyright","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.020944148,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Inlay Hints","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.021941489,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Duplicates","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.022273935,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Emmet","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.014960106,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Intentions","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.020944148,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Language Injections","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.04155585,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Natural Languages","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.039228722,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Reader Mode","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.027925532,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"TextMate Bundles","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.037898935,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"TODO","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.012965426,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"ideo","depth":1,"bounds":{"left":0.58144945,"top":0.07661612,"width":0.1100399,"height":0.027134877},"on_screen":true,"value":"ideo","role_description":"text field","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Suggested","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.021941489,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kubernetes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.024268618,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Cloud","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.015292553,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"JetBrains","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.015957447,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Staff Picks","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.021941489,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Show all","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.01861702,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Laravel Idea","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025265958,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011968086,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2.9M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.013297873,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.71","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011635638,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"13.1.2.261","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.016954787,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Laravel Idea","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.020944148,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains AI Assistant","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.045877658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"151.9M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.01662234,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2.15","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011635638,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025598405,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Symfony Plugin","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.032579787,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8.4M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.013630319,"height":0.0},"on_screen":false,"role_description":"text"}]...
|
2492973718085641687
|
-4953776343832301410
|
typing_pause
|
accessibility
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
Intentions
Language Injections
Natural Languages
Reader Mode
TextMate Bundles
TODO
ideo
Suggested
Kubernetes
Cloud
Install
Enabled
JetBrains
Staff Picks
Show all
Laravel Idea
Installed
Enabled
2.9M
4.71
13.1.2.261
Laravel Idea
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
Symfony Plugin
Install
Enabled
8.4M...
|
78540
|
NULL
|
NULL
|
NULL
|
|
78541
|
2757
|
13
|
2026-05-27T12:42:50.653228+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885770653_m1.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
Intentions
Language Injections
Natural Languages
Reader Mode
TextMate Bundles
TODO
ide
Suggested
Kubernetes
Cloud
Install...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"PHP","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Appearance & Behavior","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keymap","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Editor","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Plugins","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Version Control","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build, Execution, Deployment","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Languages & Frameworks","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tools","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Backup and Sync","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Advanced Settings","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXTextField","text":"Search","depth":1,"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Associate File Types with PhpStorm…","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.18402778,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".dockerignore (DockerIgnore)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore (GitIgnore)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".ignore (IgnoreLang)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Apache config","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Archive","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AspectJ (syntax highlighting only)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Blade","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BladeHTML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C#","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C/C++","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cascading style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CassandraQL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cookie storage file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV/TSV data","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cucumber scenario","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Diagram","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Doctrine query language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"exclude (GitExclude)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File containing settings for editor","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File type auto-detected by file content","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Files opened in associated applications","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Flow JS","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub actions expression language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitLab CI Expression language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GNU Makefile","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Haskell","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HiveQL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTTP requests","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IDL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Image","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"INI config","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaFX","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript testing snapshot (Jest)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JIRA query","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSHint configuration","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON lines","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON5","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSP (syntax highlighting only)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSX","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Less style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Markdown","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Patch","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Perl","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHP","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHPT","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PostCSS style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Redis","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Regular expression","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RELAX NG compact syntax","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sass style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Scalable Vector Graphics","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SCSS style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Shell script","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Smarty","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SmartyConfig","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SonarQube for IDE property files","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SourceMap","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Spell checker dictionary","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SQL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Static analysis results interchange format","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tabular data file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Text","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Twig","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript config","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript JSX","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Vue template","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XHTML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML Document Type Definition","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath2","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"YAML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":3,"bounds":{"left":0.0,"top":0.0,"width":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":"*.dockerignore","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.3298611,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Add HashBang Pattern","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.48958334,"height":0.037777778},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"General","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.034722224,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Code Editing","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.05625,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Font","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.020833334,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Color Scheme","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.06111111,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Code Style","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.047916666,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Inspections","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.050694443,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File and Code Templates","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.10763889,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File Encodings","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.063194446,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Live Templates","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.06666667,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File Types","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.045138888,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Copyright","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.04375,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Inlay Hints","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.045833334,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Duplicates","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.046527777,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Emmet","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.03125,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Intentions","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.04375,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Language Injections","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.08680555,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Natural Languages","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.08194444,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Reader Mode","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.058333334,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"TextMate Bundles","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.079166666,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"TODO","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.027083334,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"ide","depth":1,"on_screen":true,"value":"ide","role_description":"text field","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Suggested","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.045833334,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kubernetes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.050694443,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Cloud","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.031944446,"height":0.017777778},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-1677189816751350774
|
-9007015995849281378
|
typing_pause
|
accessibility
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
Intentions
Language Injections
Natural Languages
Reader Mode
TextMate Bundles
TODO
ide
Suggested
Kubernetes
Cloud
Install...
|
78538
|
NULL
|
NULL
|
NULL
|
|
78540
|
2758
|
16
|
2026-05-27T12:42:50.551482+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885770551_m2.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
Intentions
Language Injections
Natural Languages
Reader Mode
TextMate Bundles
TODO
ide...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"PHP","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Appearance & Behavior","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keymap","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Editor","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Plugins","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Version Control","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build, Execution, Deployment","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Languages & Frameworks","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tools","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Backup and Sync","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Advanced Settings","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXTextField","text":"Search","depth":1,"bounds":{"left":0.50166225,"top":0.04868316,"width":0.077792555,"height":0.027134877},"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Associate File Types with PhpStorm…","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.08809841,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".dockerignore (DockerIgnore)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env file","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore (GitIgnore)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".ignore (IgnoreLang)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Apache config","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Archive","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AspectJ (syntax highlighting only)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Blade","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BladeHTML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C#","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C/C++","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cascading style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CassandraQL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cookie storage file","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV/TSV data","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cucumber scenario","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Diagram","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Doctrine query language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"exclude (GitExclude)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File containing settings for editor","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File type auto-detected by file content","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Files opened in associated applications","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Flow JS","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub actions expression language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitLab CI Expression language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GNU Makefile","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Haskell","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HiveQL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTTP requests","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IDL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Image","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"INI config","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaFX","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript testing snapshot (Jest)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JIRA query","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSHint configuration","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON lines","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON5","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSP (syntax highlighting only)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSX","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Less style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Markdown","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Patch","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Perl","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHP","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHPT","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PostCSS style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Redis","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Regular expression","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RELAX NG compact syntax","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sass style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Scalable Vector Graphics","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SCSS style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Shell script","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Smarty","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SmartyConfig","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SonarQube for IDE property files","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SourceMap","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Spell checker dictionary","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SQL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Static analysis results interchange format","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tabular data file","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Text","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Twig","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript config","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript JSX","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Vue template","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XHTML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML Document Type Definition","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath2","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"YAML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":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":"*.dockerignore","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.15791224,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Add HashBang Pattern","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.234375,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"General","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.01662234,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Code Editing","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.026928192,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Font","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.009973404,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Color Scheme","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.02925532,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Code Style","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.022938829,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Inspections","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.024268618,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File and Code Templates","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.051529255,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File Encodings","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.03025266,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Live Templates","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.031914894,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File Types","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.021609042,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Copyright","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.020944148,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Inlay Hints","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.021941489,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Duplicates","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.022273935,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Emmet","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.014960106,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Intentions","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.020944148,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Language Injections","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.04155585,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Natural Languages","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.039228722,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Reader Mode","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.027925532,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"TextMate Bundles","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.037898935,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"TODO","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.012965426,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"ide","depth":1,"bounds":{"left":0.58144945,"top":0.07661612,"width":0.1100399,"height":0.027134877},"on_screen":true,"value":"ide","role_description":"text field","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false}]...
|
9030382091622097827
|
-9007016013029150562
|
typing_pause
|
accessibility
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
Intentions
Language Injections
Natural Languages
Reader Mode
TextMate Bundles
TODO
ide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78539
|
2758
|
15
|
2026-05-27T12:42:49.556083+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885769556_m2.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
Intentions
Language Injections
Natural Languages
Reader Mode
TextMate Bundles
TODO
Search plugins
Suggested
Kubernetes
Cloud
Install
Enabled
JetBrains
Staff Picks
Show all
Laravel Idea
Installed
Enabled
2.9M
4.71
13.1.2.261
Laravel Idea
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
Symfony Plugin
Install
Enabled
8.4M
4.64
Daniel Espendiller
PHP Annotations
Installed
Enabled
5.7M
4.80
12.1.0
Daniel Espendiller
IdeaVim
Install...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"PHP","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Appearance & Behavior","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keymap","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Editor","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Plugins","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Version Control","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build, Execution, Deployment","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Languages & Frameworks","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tools","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Backup and Sync","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Advanced Settings","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXTextField","text":"Search","depth":1,"bounds":{"left":0.50166225,"top":0.04868316,"width":0.077792555,"height":0.027134877},"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Associate File Types with PhpStorm…","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.08809841,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".dockerignore (DockerIgnore)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env file","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore (GitIgnore)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".ignore (IgnoreLang)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Apache config","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Archive","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AspectJ (syntax highlighting only)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Blade","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BladeHTML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C#","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C/C++","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cascading style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CassandraQL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cookie storage file","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV/TSV data","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cucumber scenario","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Diagram","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Doctrine query language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"exclude (GitExclude)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File containing settings for editor","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File type auto-detected by file content","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Files opened in associated applications","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Flow JS","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub actions expression language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitLab CI Expression language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GNU Makefile","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Haskell","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HiveQL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTTP requests","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IDL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Image","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"INI config","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaFX","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript testing snapshot (Jest)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JIRA query","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSHint configuration","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON lines","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON5","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSP (syntax highlighting only)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSX","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Less style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Markdown","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Patch","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Perl","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHP","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHPT","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PostCSS style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Redis","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Regular expression","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RELAX NG compact syntax","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sass style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Scalable Vector Graphics","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SCSS style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Shell script","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Smarty","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SmartyConfig","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SonarQube for IDE property files","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SourceMap","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Spell checker dictionary","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SQL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Static analysis results interchange format","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tabular data file","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Text","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Twig","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript config","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript JSX","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Vue template","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XHTML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML Document Type Definition","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath2","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"YAML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":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":"*.dockerignore","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.15791224,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Add HashBang Pattern","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.234375,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"General","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.01662234,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Code Editing","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.026928192,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Font","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.009973404,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Color Scheme","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.02925532,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Code Style","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.022938829,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Inspections","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.024268618,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File and Code Templates","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.051529255,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File Encodings","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.03025266,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Live Templates","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.031914894,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File Types","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.021609042,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Copyright","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.020944148,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Inlay Hints","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.021941489,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Duplicates","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.022273935,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Emmet","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.014960106,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Intentions","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.020944148,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Language Injections","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.04155585,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Natural Languages","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.039228722,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Reader Mode","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.027925532,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"TextMate Bundles","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.037898935,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"TODO","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.012965426,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search plugins","depth":1,"bounds":{"left":0.58144945,"top":0.07661612,"width":0.1100399,"height":0.027134877},"on_screen":true,"help_text":"Type / to see options","role_description":"text field","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Suggested","depth":4,"bounds":{"left":0.58477396,"top":0.10694334,"width":0.021941489,"height":0.013567438},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Kubernetes","depth":4,"bounds":{"left":0.60139626,"top":0.13328013,"width":0.024268618,"height":0.013567438},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Cloud","depth":4,"bounds":{"left":0.62832445,"top":0.13407822,"width":0.015292553,"height":0.012769354},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.66223407,"top":0.12609737,"width":0.025930852,"height":0.027134877},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"JetBrains","depth":4,"bounds":{"left":0.60139626,"top":0.15083799,"width":0.015957447,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Staff Picks","depth":4,"bounds":{"left":0.58477396,"top":0.19313647,"width":0.021941489,"height":0.013567438},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Show all","depth":4,"bounds":{"left":0.66954786,"top":0.19313647,"width":0.01861702,"height":0.013567438},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Laravel Idea","depth":4,"bounds":{"left":0.60139626,"top":0.21947326,"width":0.025265958,"height":0.013567438},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.6761968,"top":0.21707901,"width":0.011968086,"height":0.0207502},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2.9M","depth":4,"bounds":{"left":0.60139626,"top":0.23703113,"width":0.013297873,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4.71","depth":4,"bounds":{"left":0.61702126,"top":0.23703113,"width":0.011635638,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"13.1.2.261","depth":4,"bounds":{"left":0.63098407,"top":0.23703113,"width":0.016954787,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Laravel Idea","depth":4,"bounds":{"left":0.65026593,"top":0.23703113,"width":0.020944148,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains AI Assistant","depth":4,"bounds":{"left":0.60139626,"top":0.27134877,"width":0.045877658,"height":0.013567438},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.66223407,"top":0.264166,"width":0.025930852,"height":0.027134877},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"151.9M","depth":4,"bounds":{"left":0.60139626,"top":0.28890663,"width":0.01662234,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2.15","depth":4,"bounds":{"left":0.6203458,"top":0.28890663,"width":0.011635638,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.6343085,"top":0.28890663,"width":0.025598405,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Symfony Plugin","depth":4,"bounds":{"left":0.60139626,"top":0.32960895,"width":0.032579787,"height":0.013567438},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.66223407,"top":0.32242617,"width":0.025930852,"height":0.027134877},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8.4M","depth":4,"bounds":{"left":0.60139626,"top":0.3471668,"width":0.013630319,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4.64","depth":4,"bounds":{"left":0.61735374,"top":0.3471668,"width":0.012632979,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Daniel Espendiller","depth":4,"bounds":{"left":0.63231385,"top":0.3471668,"width":0.030585106,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"PHP Annotations","depth":4,"bounds":{"left":0.60139626,"top":0.38786912,"width":0.03523936,"height":0.013567438},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.6761968,"top":0.38547486,"width":0.011968086,"height":0.0207502},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5.7M","depth":4,"bounds":{"left":0.60139626,"top":0.40542698,"width":0.013297873,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4.80","depth":4,"bounds":{"left":0.61702126,"top":0.40542698,"width":0.012632979,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"12.1.0","depth":4,"bounds":{"left":0.6319814,"top":0.40542698,"width":0.009973404,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Daniel Espendiller","depth":4,"bounds":{"left":0.6442819,"top":0.40542698,"width":0.030585106,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"IdeaVim","depth":4,"bounds":{"left":0.60139626,"top":0.43974462,"width":0.016954787,"height":0.013567438},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.66223407,"top":0.43256184,"width":0.025930852,"height":0.027134877},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-5948787001219173715
|
-5548251494645206882
|
visual_change
|
accessibility
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
Intentions
Language Injections
Natural Languages
Reader Mode
TextMate Bundles
TODO
Search plugins
Suggested
Kubernetes
Cloud
Install
Enabled
JetBrains
Staff Picks
Show all
Laravel Idea
Installed
Enabled
2.9M
4.71
13.1.2.261
Laravel Idea
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
Symfony Plugin
Install
Enabled
8.4M
4.64
Daniel Espendiller
PHP Annotations
Installed
Enabled
5.7M
4.80
12.1.0
Daniel Espendiller
IdeaVim
Install...
|
78537
|
NULL
|
NULL
|
NULL
|
|
78538
|
2757
|
12
|
2026-05-27T12:42:46.897247+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885766897_m1.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
Intentions
Language Injections
Natural Languages
Reader Mode
TextMate Bundles
TODO
Search plugins
Plugins
Revert changes
Manage Repositories, Configure Proxy or Install Plugin from Disk
Back
Forward
Help
Cancel
Apply
OK
Settings...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"PHP","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Appearance & Behavior","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keymap","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Editor","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Plugins","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Version Control","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build, Execution, Deployment","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Languages & Frameworks","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tools","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Backup and Sync","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Advanced Settings","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXTextField","text":"Search","depth":1,"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Associate File Types with PhpStorm…","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.18402778,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".dockerignore (DockerIgnore)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore (GitIgnore)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".ignore (IgnoreLang)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Apache config","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Archive","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AspectJ (syntax highlighting only)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Blade","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BladeHTML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C#","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C/C++","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cascading style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CassandraQL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cookie storage file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV/TSV data","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cucumber scenario","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Diagram","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Doctrine query language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"exclude (GitExclude)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File containing settings for editor","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File type auto-detected by file content","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Files opened in associated applications","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Flow JS","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub actions expression language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitLab CI Expression language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GNU Makefile","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Haskell","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HiveQL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTTP requests","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IDL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Image","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"INI config","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaFX","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript testing snapshot (Jest)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JIRA query","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSHint configuration","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON lines","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON5","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSP (syntax highlighting only)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSX","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Less style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Markdown","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Patch","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Perl","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHP","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHPT","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PostCSS style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Redis","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Regular expression","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RELAX NG compact syntax","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sass style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Scalable Vector Graphics","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SCSS style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Shell script","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Smarty","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SmartyConfig","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SonarQube for IDE property files","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SourceMap","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Spell checker dictionary","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SQL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Static analysis results interchange format","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tabular data file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Text","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Twig","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript config","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript JSX","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Vue template","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XHTML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML Document Type Definition","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath2","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"YAML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":3,"bounds":{"left":0.0,"top":0.0,"width":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":"*.dockerignore","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.3298611,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Add HashBang Pattern","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.48958334,"height":0.037777778},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"General","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.034722224,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Code Editing","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.05625,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Font","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.020833334,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Color Scheme","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.06111111,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Code Style","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.047916666,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Inspections","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.050694443,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File and Code Templates","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.10763889,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File Encodings","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.063194446,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Live Templates","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.06666667,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File Types","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.045138888,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Copyright","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.04375,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Inlay Hints","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.045833334,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Duplicates","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.046527777,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Emmet","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.03125,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Intentions","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.04375,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Language Injections","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.08680555,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Natural Languages","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.08194444,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Reader Mode","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.058333334,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"TextMate Bundles","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.079166666,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"TODO","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.027083334,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search plugins","depth":1,"on_screen":true,"help_text":"Type / to see options","role_description":"text field","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Plugins","depth":1,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Revert changes","depth":1,"on_screen":false,"help_text":"Revert all changes on this page to the previously saved state","role_description":"link","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Manage Repositories, Configure Proxy or Install Plugin from Disk","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Back","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward","depth":2,"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Help","depth":1,"on_screen":true,"help_text":"Show help contents","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel","depth":1,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Apply","depth":1,"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"OK","depth":1,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":1,"on_screen":true,"role_description":"text"}]...
|
-5910720065514848769
|
-6124712234300706402
|
click
|
accessibility
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
Intentions
Language Injections
Natural Languages
Reader Mode
TextMate Bundles
TODO
Search plugins
Plugins
Revert changes
Manage Repositories, Configure Proxy or Install Plugin from Disk
Back
Forward
Help
Cancel
Apply
OK
Settings...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78537
|
2758
|
14
|
2026-05-27T12:42:46.692652+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885766692_m2.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"PHP","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Appearance & Behavior","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keymap","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Editor","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Plugins","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Version Control","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build, Execution, Deployment","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Languages & Frameworks","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tools","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Backup and Sync","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Advanced Settings","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXTextField","text":"Search","depth":1,"bounds":{"left":0.50166225,"top":0.04868316,"width":0.077792555,"height":0.027134877},"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Associate File Types with PhpStorm…","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.08809841,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".dockerignore (DockerIgnore)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env file","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore (GitIgnore)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".ignore (IgnoreLang)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Apache config","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Archive","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AspectJ (syntax highlighting only)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Blade","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BladeHTML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C#","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C/C++","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cascading style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CassandraQL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cookie storage file","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV/TSV data","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cucumber scenario","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Diagram","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Doctrine query language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"exclude (GitExclude)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File containing settings for editor","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File type auto-detected by file content","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Files opened in associated applications","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Flow JS","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub actions expression language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitLab CI Expression language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GNU Makefile","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Haskell","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HiveQL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTTP requests","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IDL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Image","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"INI config","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaFX","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript testing snapshot (Jest)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JIRA query","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSHint configuration","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON lines","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON5","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSP (syntax highlighting only)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSX","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Less style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Markdown","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Patch","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"}]...
|
-8671631359779744079
|
-5744703431874153028
|
click
|
accessibility
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78536
|
2757
|
11
|
2026-05-27T12:42:45.848242+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885765848_m1.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Plugins
Appearance & Behavior
Keymap
Editor
Pl Plugins
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Plugins
Plugins
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
Intentions
Language Injections
Natural Languages...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Plugins","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Appearance & Behavior","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keymap","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Editor","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Plugins","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Version Control","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build, Execution, Deployment","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Languages & Frameworks","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tools","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Plugins","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Plugins","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXTextField","text":"Search","depth":1,"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Associate File Types with PhpStorm…","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.18402778,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".dockerignore (DockerIgnore)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore (GitIgnore)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".ignore (IgnoreLang)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Apache config","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Archive","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AspectJ (syntax highlighting only)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Blade","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BladeHTML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C#","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C/C++","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cascading style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CassandraQL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cookie storage file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV/TSV data","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cucumber scenario","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Diagram","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Doctrine query language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"exclude (GitExclude)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File containing settings for editor","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File type auto-detected by file content","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Files opened in associated applications","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Flow JS","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub actions expression language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitLab CI Expression language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GNU Makefile","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Haskell","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HiveQL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTTP requests","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IDL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Image","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"INI config","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaFX","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript testing snapshot (Jest)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JIRA query","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSHint configuration","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON lines","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON5","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSP (syntax highlighting only)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSX","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Less style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Markdown","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Patch","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Perl","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHP","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHPT","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PostCSS style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Redis","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Regular expression","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RELAX NG compact syntax","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sass style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Scalable Vector Graphics","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SCSS style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Shell script","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Smarty","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SmartyConfig","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SonarQube for IDE property files","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SourceMap","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Spell checker dictionary","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SQL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Static analysis results interchange format","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tabular data file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Text","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Twig","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript config","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript JSX","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Vue template","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XHTML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML Document Type Definition","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath2","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"YAML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":3,"bounds":{"left":0.0,"top":0.0,"width":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":"*.dockerignore","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.3298611,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Add HashBang Pattern","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.48958334,"height":0.037777778},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"General","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.034722224,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Code Editing","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.05625,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Font","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.020833334,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Color Scheme","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.06111111,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Code Style","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.047916666,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Inspections","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.050694443,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File and Code Templates","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.10763889,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File Encodings","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.063194446,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Live Templates","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.06666667,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File Types","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.045138888,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Copyright","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.04375,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Inlay Hints","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.045833334,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Duplicates","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.046527777,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Emmet","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.03125,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Intentions","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.04375,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Language Injections","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.08680555,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Natural Languages","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.08194444,"height":0.018888889},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-2735347573411984138
|
-8574670431621189218
|
click
|
accessibility
|
NULL
|
Plugins
Appearance & Behavior
Keymap
Editor
Pl Plugins
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Plugins
Plugins
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
Intentions
Language Injections
Natural Languages...
|
78534
|
NULL
|
NULL
|
NULL
|
|
78535
|
2758
|
13
|
2026-05-27T12:42:45.440109+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885765440_m2.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"PHP","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Appearance & Behavior","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keymap","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Editor","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Plugins","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Version Control","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build, Execution, Deployment","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Languages & Frameworks","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tools","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Backup and Sync","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Advanced Settings","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXTextField","text":"Search","depth":1,"bounds":{"left":0.50166225,"top":0.04868316,"width":0.077792555,"height":0.027134877},"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Associate File Types with PhpStorm…","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.08809841,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".dockerignore (DockerIgnore)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env file","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore (GitIgnore)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".ignore (IgnoreLang)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Apache config","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Archive","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AspectJ (syntax highlighting only)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Blade","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BladeHTML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C#","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C/C++","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cascading style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CassandraQL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cookie storage file","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV/TSV data","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cucumber scenario","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Diagram","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Doctrine query language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"exclude (GitExclude)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File containing settings for editor","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File type auto-detected by file content","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Files opened in associated applications","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Flow JS","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub actions expression language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitLab CI Expression language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GNU Makefile","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Haskell","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HiveQL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTTP requests","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IDL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Image","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"INI config","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaFX","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript testing snapshot (Jest)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JIRA query","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSHint configuration","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON lines","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON5","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSP (syntax highlighting only)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSX","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Less style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Markdown","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Patch","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Perl","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHP","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHPT","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PostCSS style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Redis","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Regular expression","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RELAX NG compact syntax","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sass style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Scalable Vector Graphics","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SCSS style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Shell script","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Smarty","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SmartyConfig","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SonarQube for IDE property files","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SourceMap","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Spell checker dictionary","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SQL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Static analysis results interchange format","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tabular data file","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Text","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Twig","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript config","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript JSX","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Vue template","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XHTML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML Document Type Definition","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath2","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"YAML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":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":"*.dockerignore","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.15791224,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Add HashBang Pattern","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.234375,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"General","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.01662234,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Code Editing","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.026928192,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Font","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.009973404,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Color Scheme","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.02925532,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Code Style","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.022938829,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Inspections","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.024268618,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File and Code Templates","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.051529255,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"File Encodings","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.03025266,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Live Templates","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.031914894,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
6973023484516797471
|
-9133099201819020898
|
click
|
accessibility
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Personalize source code appearance by changing fonts, highlighting styles, indents, etc. Customize the Editor from line numbers, caret placement and tabs to source code inspections, setting up templates and file encodings.
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates...
|
78533
|
NULL
|
NULL
|
NULL
|
|
78534
|
2757
|
10
|
2026-05-27T12:42:44.806622+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885764806_m1.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"PHP","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Appearance & Behavior","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keymap","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Editor","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Plugins","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Version Control","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build, Execution, Deployment","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Languages & Frameworks","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tools","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Backup and Sync","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Advanced Settings","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.13958333,"height":0.023333333},"on_screen":false,"role_description":"text"},{"role":"AXTextField","text":"Search","depth":1,"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Associate File Types with PhpStorm…","depth":2,"bounds":{"left":0.0,"top":0.0,"width":0.18402778,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Remove","depth":3,"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":"Edit","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".dockerignore (DockerIgnore)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore (GitIgnore)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".ignore (IgnoreLang)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Apache config","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Archive","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AspectJ (syntax highlighting only)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Blade","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BladeHTML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C#","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C/C++","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cascading style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CassandraQL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cookie storage file","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV/TSV data","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cucumber scenario","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Diagram","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Doctrine query language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"exclude (GitExclude)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File containing settings for editor","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File type auto-detected by file content","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Files opened in associated applications","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Flow JS","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub actions expression language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitLab CI Expression language","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GNU Makefile","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Haskell","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HiveQL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTML","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTTP requests","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IDL","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Image","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"INI config","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaFX","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript testing snapshot (Jest)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JIRA query","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSHint configuration","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON lines","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON5","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSP (syntax highlighting only)","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSX","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Less style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Markdown","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Patch","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Perl","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHP","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHPT","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PostCSS style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Redis","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Regular expression","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RELAX NG compact syntax","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sass style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Scalable Vector Graphics","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SCSS style sheet","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Shell script","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Smarty","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SmartyConfig","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SonarQube for IDE property files","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.20208333,"height":0.024444444},"on_screen":false,"role_description":"text"}]...
|
-8865947736472133854
|
-5744703569313107556
|
click
|
accessibility
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Plugin PHP
Appearance & Behavior
Keymap
Editor
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78533
|
2758
|
12
|
2026-05-27T12:42:44.706280+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885764706_m2.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Genera PHP
Appearance & Behavior
Keymap
Editor
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
Intentions
Language Injections
Natural Languages
Reader Mode
TextMate Bundles
TODO
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"PHP","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Appearance & Behavior","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keymap","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Editor","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"General","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Code Editing","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Font","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Color Scheme","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Code Style","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Inspections","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File and Code Templates","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File Encodings","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Live Templates","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File Types","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Copyright","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Inlay Hints","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Duplicates","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Emmet","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Intentions","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Language Injections","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Natural Languages","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Reader Mode","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TextMate Bundles","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TODO","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Plugins","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Version Control","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build, Execution, Deployment","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Languages & Frameworks","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tools","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Backup and Sync","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Advanced Settings","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.066821806,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXTextField","text":"Search","depth":1,"bounds":{"left":0.50166225,"top":0.04868316,"width":0.077792555,"height":0.027134877},"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Associate File Types with PhpStorm…","depth":2,"bounds":{"left":0.5894282,"top":0.5067837,"width":0.08809841,"height":0.027134877},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.58976066,"top":0.11412609,"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":"Remove","depth":3,"bounds":{"left":0.5984042,"top":0.11412609,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":3,"bounds":{"left":0.60704786,"top":0.11412609,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".dockerignore (DockerIgnore)","depth":5,"bounds":{"left":0.58976066,"top":0.13407822,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env file","depth":5,"bounds":{"left":0.58976066,"top":0.15163608,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore (GitIgnore)","depth":5,"bounds":{"left":0.58976066,"top":0.16919394,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".ignore (IgnoreLang)","depth":5,"bounds":{"left":0.58976066,"top":0.1867518,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Apache config","depth":5,"bounds":{"left":0.58976066,"top":0.20430966,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Archive","depth":5,"bounds":{"left":0.58976066,"top":0.22186752,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"AspectJ (syntax highlighting only)","depth":5,"bounds":{"left":0.58976066,"top":0.23942538,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Blade","depth":5,"bounds":{"left":0.58976066,"top":0.25698325,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"BladeHTML","depth":5,"bounds":{"left":0.58976066,"top":0.2745411,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"C#","depth":5,"bounds":{"left":0.58976066,"top":0.29209897,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"C/C++","depth":5,"bounds":{"left":0.58976066,"top":0.30965683,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Cascading style sheet","depth":5,"bounds":{"left":0.58976066,"top":0.3272147,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"CassandraQL","depth":5,"bounds":{"left":0.58976066,"top":0.34477255,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Cookie storage file","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV/TSV data","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cucumber scenario","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Diagram","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Doctrine query language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"exclude (GitExclude)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File containing settings for editor","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File type auto-detected by file content","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Files opened in associated applications","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Flow JS","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub actions expression language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitLab CI Expression language","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GNU Makefile","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Haskell","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HiveQL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTML","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTTP requests","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IDL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Image","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"INI config","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaFX","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript testing snapshot (Jest)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JIRA query","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSHint configuration","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON lines","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON5","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSP (syntax highlighting only)","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSX","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Less style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Markdown","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Patch","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Perl","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHP","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHPT","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PostCSS style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Redis","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Regular expression","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RELAX NG compact syntax","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sass style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Scalable Vector Graphics","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SCSS style sheet","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Shell script","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Smarty","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SmartyConfig","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SonarQube for IDE property files","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SourceMap","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Spell checker dictionary","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SQL","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Static analysis results interchange format","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.09674202,"height":0.0},"on_screen":false,"role_description":"text"}]...
|
4308488775353034683
|
-6682032842535571300
|
click
|
accessibility
|
NULL
|
PHP
Appearance & Behavior
Keymap
Editor
Genera PHP
Appearance & Behavior
Keymap
Editor
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
Intentions
Language Injections
Natural Languages
Reader Mode
TextMate Bundles
TODO
Plugins
Version Control
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
Advanced Settings
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78532
|
2758
|
11
|
2026-05-27T12:42:43.438483+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885763438_m2.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PHP
Appearance & Behavior
Keymap
General
Gener PHP
Appearance & Behavior
Keymap
General
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
General
Language Injections
Natural Languages
Reader Mode
TextMate Bundles
TODO
Plugins
General
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
General
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Editor
File Types
Revert changes
Back
Forward
Help
Cancel
Apply
OK
Settings...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"PHP","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Appearance & Behavior","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keymap","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"General","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"General","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Code Editing","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Font","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Color Scheme","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Code Style","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Inspections","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File and Code Templates","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File Encodings","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Live Templates","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"File Types","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Copyright","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Inlay Hints","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Duplicates","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Emmet","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"General","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Language Injections","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Natural Languages","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Reader Mode","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TextMate Bundles","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TODO","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Plugins","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"General","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build, Execution, Deployment","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Languages & Frameworks","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tools","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Backup and Sync","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"General","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.061502658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXTextField","text":"Search","depth":1,"bounds":{"left":0.50166225,"top":0.04868316,"width":0.077792555,"height":0.027134877},"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Associate File Types with PhpStorm…","depth":2,"bounds":{"left":0.5894282,"top":0.5067837,"width":0.08809841,"height":0.027134877},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.58976066,"top":0.11412609,"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":"Remove","depth":3,"bounds":{"left":0.5984042,"top":0.11412609,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":3,"bounds":{"left":0.60704786,"top":0.11412609,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".dockerignore (DockerIgnore)","depth":5,"bounds":{"left":0.58976066,"top":0.13407822,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env file","depth":5,"bounds":{"left":0.58976066,"top":0.15163608,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore (GitIgnore)","depth":5,"bounds":{"left":0.58976066,"top":0.16919394,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".ignore (IgnoreLang)","depth":5,"bounds":{"left":0.58976066,"top":0.1867518,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Apache config","depth":5,"bounds":{"left":0.58976066,"top":0.20430966,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Archive","depth":5,"bounds":{"left":0.58976066,"top":0.22186752,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"AspectJ (syntax highlighting only)","depth":5,"bounds":{"left":0.58976066,"top":0.23942538,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Blade","depth":5,"bounds":{"left":0.58976066,"top":0.25698325,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"BladeHTML","depth":5,"bounds":{"left":0.58976066,"top":0.2745411,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"C#","depth":5,"bounds":{"left":0.58976066,"top":0.29209897,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"C/C++","depth":5,"bounds":{"left":0.58976066,"top":0.30965683,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Cascading style sheet","depth":5,"bounds":{"left":0.58976066,"top":0.3272147,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"CassandraQL","depth":5,"bounds":{"left":0.58976066,"top":0.34477255,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Cookie storage file","depth":5,"bounds":{"left":0.58976066,"top":0.3623304,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"CSV/TSV data","depth":5,"bounds":{"left":0.58976066,"top":0.37988827,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Cucumber scenario","depth":5,"bounds":{"left":0.58976066,"top":0.39744613,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Diagram","depth":5,"bounds":{"left":0.58976066,"top":0.415004,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":5,"bounds":{"left":0.58976066,"top":0.43256184,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Doctrine query language","depth":5,"bounds":{"left":0.58976066,"top":0.4501197,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"exclude (GitExclude)","depth":5,"bounds":{"left":0.58976066,"top":0.46767756,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"File containing settings for editor","depth":5,"bounds":{"left":0.58976066,"top":0.48523542,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"File type auto-detected by file content","depth":5,"bounds":{"left":0.58976066,"top":0.5027933,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Files opened in associated applications","depth":5,"bounds":{"left":0.58976066,"top":0.5203512,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Flow JS","depth":5,"bounds":{"left":0.58976066,"top":0.53790903,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"GitHub actions expression language","depth":5,"bounds":{"left":0.58976066,"top":0.5554669,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"GitLab CI Expression language","depth":5,"bounds":{"left":0.58976066,"top":0.57302475,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"GNU Makefile","depth":5,"bounds":{"left":0.58976066,"top":0.5905826,"width":0.09674202,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Haskell","depth":5,"bounds":{"left":0.58976066,"top":0.60814047,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HiveQL","depth":5,"bounds":{"left":0.58976066,"top":0.6256983,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTML","depth":5,"bounds":{"left":0.58976066,"top":0.6432562,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HTTP requests","depth":5,"bounds":{"left":0.58976066,"top":0.66081405,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IDL","depth":5,"bounds":{"left":0.58976066,"top":0.6783719,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Image","depth":5,"bounds":{"left":0.58976066,"top":0.69592977,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"INI config","depth":5,"bounds":{"left":0.58976066,"top":0.7134876,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaFX","depth":5,"bounds":{"left":0.58976066,"top":0.7310455,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript","depth":5,"bounds":{"left":0.58976066,"top":0.74860334,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JavaScript testing snapshot (Jest)","depth":5,"bounds":{"left":0.58976066,"top":0.7661612,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JIRA query","depth":5,"bounds":{"left":0.58976066,"top":0.78371906,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSHint configuration","depth":5,"bounds":{"left":0.58976066,"top":0.8012769,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON","depth":5,"bounds":{"left":0.58976066,"top":0.8188348,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON lines","depth":5,"bounds":{"left":0.58976066,"top":0.83639264,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSON5","depth":5,"bounds":{"left":0.58976066,"top":0.8539505,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSP (syntax highlighting only)","depth":5,"bounds":{"left":0.58976066,"top":0.87150836,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JSX","depth":5,"bounds":{"left":0.58976066,"top":0.8890662,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Less style sheet","depth":5,"bounds":{"left":0.58976066,"top":0.9066241,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Markdown","depth":5,"bounds":{"left":0.58976066,"top":0.92418194,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Patch","depth":5,"bounds":{"left":0.58976066,"top":0.9417398,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Perl","depth":5,"bounds":{"left":0.58976066,"top":0.95929766,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHP","depth":5,"bounds":{"left":0.58976066,"top":0.9768556,"width":0.09674202,"height":0.017557861},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHPT","depth":5,"bounds":{"left":0.58976066,"top":0.99441344,"width":0.09674202,"height":0.0055865645},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PostCSS style sheet","depth":5,"bounds":{"left":0.58976066,"top":1.0,"width":0.09674202,"height":-0.011971235},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Redis","depth":5,"bounds":{"left":0.58976066,"top":1.0,"width":0.09674202,"height":-0.029529095},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Regular expression","depth":5,"bounds":{"left":0.58976066,"top":1.0,"width":0.09674202,"height":-0.047086954},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RELAX NG compact syntax","depth":5,"bounds":{"left":0.58976066,"top":1.0,"width":0.09674202,"height":-0.06464481},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sass style sheet","depth":5,"bounds":{"left":0.58976066,"top":1.0,"width":0.09674202,"height":-0.08220267},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Scalable Vector Graphics","depth":5,"bounds":{"left":0.58976066,"top":1.0,"width":0.09674202,"height":-0.09976053},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SCSS style sheet","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Shell script","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Smarty","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SmartyConfig","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SonarQube for IDE property files","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SourceMap","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Spell checker dictionary","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SQL","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Static analysis results interchange format","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tabular data file","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Text","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Twig","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript config","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TypeScript JSX","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Vue template","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XHTML","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XML Document Type Definition","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"XPath2","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"YAML","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Add","depth":3,"bounds":{"left":0.66023934,"top":0.13647246,"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":"Remove","depth":3,"bounds":{"left":0.66888297,"top":0.13647246,"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":"Edit","depth":3,"bounds":{"left":0.6775266,"top":0.13647246,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"*.dockerignore","depth":5,"bounds":{"left":0.66023934,"top":0.15642458,"width":0.15791224,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Add HashBang Pattern","depth":3,"bounds":{"left":0.66023934,"top":0.3200319,"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":"Remove","depth":3,"bounds":{"left":0.66888297,"top":0.3200319,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":3,"bounds":{"left":0.6775266,"top":0.3200319,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor","depth":1,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"File Types","depth":1,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Revert changes","depth":1,"on_screen":false,"help_text":"Revert all changes on this page to the previously saved state","role_description":"link","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Back","depth":2,"bounds":{"left":0.8078458,"top":0.051077414,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward","depth":2,"bounds":{"left":0.81648934,"top":0.051077414,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Help","depth":1,"bounds":{"left":0.50398934,"top":0.55786115,"width":0.00930851,"height":0.027134877},"on_screen":true,"help_text":"Show help contents","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel","depth":1,"bounds":{"left":0.7406915,"top":0.55786115,"width":0.025930852,"height":0.027134877},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Apply","depth":1,"bounds":{"left":0.76861703,"top":0.55786115,"width":0.025930852,"height":0.027134877},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"OK","depth":1,"bounds":{"left":0.7965425,"top":0.55786115,"width":0.025930852,"height":0.027134877},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":1,"bounds":{"left":0.65325797,"top":0.023942538,"width":0.019614361,"height":0.012769354},"on_screen":true,"role_description":"text"}]...
|
3934730272466670482
|
-6754230751308517218
|
visual_change
|
accessibility
|
NULL
|
PHP
Appearance & Behavior
Keymap
General
Gener PHP
Appearance & Behavior
Keymap
General
General
Code Editing
Font
Color Scheme
Code Style
Inspections
File and Code Templates
File Encodings
Live Templates
File Types
Copyright
Inlay Hints
Duplicates
Emmet
General
Language Injections
Natural Languages
Reader Mode
TextMate Bundles
TODO
Plugins
General
Directories
Build, Execution, Deployment
Languages & Frameworks
Tools
Backup and Sync
General
Search
Associate File Types with PhpStorm…
Add
Remove
Edit
.dockerignore (DockerIgnore)
.env file
.gitignore (GitIgnore)
.ignore (IgnoreLang)
Apache config
Archive
AspectJ (syntax highlighting only)
Blade
BladeHTML
C#
C/C++
Cascading style sheet
CassandraQL
Cookie storage file
CSV/TSV data
Cucumber scenario
Diagram
Dockerfile
Doctrine query language
exclude (GitExclude)
File containing settings for editor
File type auto-detected by file content
Files opened in associated applications
Flow JS
GitHub actions expression language
GitLab CI Expression language
GNU Makefile
Haskell
HiveQL
HTML
HTTP requests
IDL
Image
INI config
JavaFX
JavaScript
JavaScript testing snapshot (Jest)
JIRA query
JSHint configuration
JSON
JSON lines
JSON5
JSP (syntax highlighting only)
JSX
Less style sheet
Markdown
Patch
Perl
PHP
PHPT
PostCSS style sheet
Redis
Regular expression
RELAX NG compact syntax
Sass style sheet
Scalable Vector Graphics
SCSS style sheet
Shell script
Smarty
SmartyConfig
SonarQube for IDE property files
SourceMap
Spell checker dictionary
SQL
Static analysis results interchange format
Tabular data file
Text
Twig
TypeScript
TypeScript config
TypeScript JSX
Vue template
XHTML
XML
XML Document Type Definition
XPath
XPath2
YAML
Add
Remove
Edit
*.dockerignore
Add HashBang Pattern
Remove
Edit
Editor
File Types
Revert changes
Back
Forward
Help
Cancel
Apply
OK
Settings...
|
78531
|
NULL
|
NULL
|
NULL
|
|
78531
|
2758
|
10
|
2026-05-27T12:42:40.305644+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885760305_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:36:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0eb801fb-3093-4017-962c-06d801a10a73","trace_id":"99fe297b-7155-47d5-a6a7-d2ea18672b35"}
[2026-05-27 12:36:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0eb801fb-3093-4017-962c-06d801a10a73","trace_id":"99fe297b-7155-47d5-a6a7-d2ea18672b35"}
[2026-05-27 12:36:06] local.NOTICE: Monitoring start {"correlation_id":"355a8191-fdda-4e9f-b2d4-5e002515214e","trace_id":"6743c452-a029-45bd-8e47-cfabe28496d8"}
[2026-05-27 12:36:06] local.NOTICE: Monitoring end {"correlation_id":"355a8191-fdda-4e9f-b2d4-5e002515214e","trace_id":"6743c452-a029-45bd-8e47-cfabe28496d8"}
[2026-05-27 12:36:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a","trace_id":"ac1217d6-5e5d-4466-9b47-8946880ebb0b"}
[2026-05-27 12:36:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a","trace_id":"ac1217d6-5e5d-4466-9b47-8946880ebb0b"}
[2026-05-27 12:36:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"90f00b85-f027-43e2-b9e0-946861cdfb51","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"90f00b85-f027-43e2-b9e0-946861cdfb51","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24180576,"real_usage":65011712,"pid":42210} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.58,"average_seconds_per_request":0.58} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":593.42} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":646.6,"usage":24268616,"real_usage":65011712,"pid":42210} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24246528,"real_usage":65011712,"pid":42210} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":23.62,"usage":24234488,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24195248,"real_usage":65011712,"pid":42210} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":109,"team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","provider":"hubspot","status":"disconnected","duration_ms":10.72,"usage":24257312,"real_usage":65011712,"pid":42210,"reason":"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"200ac210-21c8-4677-b562-a0dd4a8bb7aa","trace_id":"8b995657-ab68-439c-86b1-ba462fca3f4d"}
[2026-05-27 12:36:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"200ac210-21c8-4677-b562-a0dd4a8bb7aa","trace_id":"8b995657-ab68-439c-86b1-ba462fca3f4d"}
[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","usage":24214824,"real_usage":65011712,"pid":42210} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"71e3aac5-fb66-47c5-a236-2d051ae3e319","account":null} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":256,"team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","provider":"hubspot","status":"disconnected","duration_ms":49.63,"usage":24230936,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {"inbox_id":59} {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":59} {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {"inbox_id":212} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.WARNING: [Salesforce] Account not connected for user {"userId":"641f1acb-16b8-42d1-8726-df52979dad0e","account":{"Jiminny\\Models\\SocialAccount":{"id":1500,"sociable_id":143,"provider_user_id":"0052g000003frelAAA","expires":null,"refresh_token_expires":null,"provider":"salesforce","state":"full-refresh","auth_scope":"refresh_token web api","retry_after":null,"created_at":"2026-02-06 08:39:03","updated_at":"2026-05-14 09:46:30"}}} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.ERROR: Failed to set service context for google: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":212} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":56,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":168.0,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.88} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:37:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"1d77aff1-8cd7-4126-b383-a9d6f1036b9b","trace_id":"3e459ee7-82d6-4cff-bf3c-725c78c51fe4"}
[2026-05-27 12:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"1d77aff1-8cd7-4126-b383-a9d6f1036b9b","trace_id":"3e459ee7-82d6-4cff-bf3c-725c78c51fe4"}
[2026-05-27 12:37:07] local.NOTICE: Monitoring start {"correlation_id":"6f19b4b6-bdc4-4373-bb83-8026c5ca9541","trace_id":"ce167b98-a0e2-4042-81df-c199e63a7178"}
[2026-05-27 12:37:07] local.NOTICE: Monitoring end {"correlation_id":"6f19b4b6-bdc4-4373-bb83-8026c5ca9541","trace_id":"ce167b98-a0e2-4042-81df-c199e63a7178"}
[2026-05-27 12:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"b1f5b0ea-8979-458f-85fa-9ec8f107f890","trace_id":"3d6c9714-44f6-4182-9ef6-20b0b591ec16"}
[2026-05-27 12:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"b1f5b0ea-8979-458f-85fa-9ec8f107f890","trace_id":"3d6c9714-44f6-4182-9ef6-20b0b591ec16"}
[2026-05-27 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:13] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 1 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"1d77b07e-080e-4829-a50a-4201e4336a52","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"35d4b43f-f881-48b1-b35d-a7a6279d383e","trace_id":"5b39768e-c490-40c1-a320-7d6c0f731049"}
[2026-05-27 12:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"35d4b43f-f881-48b1-b35d-a7a6279d383e","trace_id":"5b39768e-c490-40c1-a320-7d6c0f731049"}
[2026-05-27 12:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"05985339-0f15-4991-8d86-a314a08b894e","trace_id":"e687a910-c51a-4aac-af86-d647fc6f304a"}
[2026-05-27 12:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"05985339-0f15-4991-8d86-a314a08b894e","trace_id":"e687a910-c51a-4aac-af86-d647fc6f304a"}
[2026-05-27 12:38:06] local.NOTICE: Monitoring start {"correlation_id":"33239855-c5df-4bb0-a469-b1654a53d484","trace_id":"81e70b33-817a-41de-a80a-41bc709c8731"}
[2026-05-27 12:38:06] local.NOTICE: Monitoring end {"correlation_id":"33239855-c5df-4bb0-a469-b1654a53d484","trace_id":"81e70b33-817a-41de-a80a-41bc709c8731"}
[2026-05-27 12:38:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"ceda4686-61f9-4efd-9dac-425274190b6c","trace_id":"2a7a6c33-b0c4-4299-8fa7-31759e937e7d"}
[2026-05-27 12:38:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"ceda4686-61f9-4efd-9dac-425274190b6c","trace_id":"2a7a6c33-b0c4-4299-8fa7-31759e937e7d"}
[2026-05-27 12:38:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"764a1ac9-502b-4a6d-ae0b-3820cc718427","trace_id":"f7829e9d-3a75-4e13-867d-1160e876cf07"}
[2026-05-27 12:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"764a1ac9-502b-4a6d-ae0b-3820cc718427","trace_id":"f7829e9d-3a75-4e13-867d-1160e876cf07"}
[2026-05-27 12:39:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"23f10df5-34f4-4e04-85f1-e82db52af5e6","trace_id":"db62bd45-dd20-422c-82cb-7acb7ddb2e06"}
[2026-05-27 12:39:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"23f10df5-34f4-4e04-85f1-e82db52af5e6","trace_id":"db62bd45-dd20-422c-82cb-7acb7ddb2e06"}
[2026-05-27 12:39:06] local.NOTICE: Monitoring start {"correlation_id":"2acea05b-8214-439e-a744-d02f85685068","trace_id":"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd"}
[2026-05-27 12:39:06] local.NOTICE: Monitoring end {"correlation_id":"2acea05b-8214-439e-a744-d02f85685068","trace_id":"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd"}
[2026-05-27 12:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"707d1d04-2d6f-4db8-89b4-e16fe9a83709","trace_id":"6f7049ea-fa50-46e2-8bf5-ed0e5effce45"}
[2026-05-27 12:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"707d1d04-2d6f-4db8-89b4-e16fe9a83709","trace_id":"6f7049ea-fa50-46e2-8bf5-ed0e5effce45"}
[2026-05-27 12:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:12] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:14] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"6ec39f30-28b3-4cc9-8c60-5bc8d0b55e63","trace_id":"e3428bc3-d52e-4a94-8d33-5c246d0bafd6"}
[2026-05-27 12:40:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"28d27090-0dec-46a4-8a79-2c6db1e89d26","trace_id":"6f6d7e96-ec35-4946-ac91-6496125a5291"}
[2026-05-27 12:40:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"28d27090-0dec-46a4-8a79-2c6db1e89d26","trace_id":"6f6d7e96-ec35-4946-ac91-6496125a5291"}
[2026-05-27 12:40:06] local.NOTICE: Monitoring start {"correlation_id":"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d","trace_id":"e8335595-dc87-48b1-a209-abbbe3e404fd"}
[2026-05-27 12:40:06] local.NOTICE: Monitoring end {"correlation_id":"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d","trace_id":"e8335595-dc87-48b1-a209-abbbe3e404fd"}
[2026-05-27 12:40:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0ded3374-9752-49d6-9446-af7f83b45a71","trace_id":"1a8bb850-013c-4a60-a56f-ffda95442111"}
[2026-05-27 12:40:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0ded3374-9752-49d6-9446-af7f83b45a71","trace_id":"1a8bb850-013c-4a60-a56f-ffda95442111"}
[2026-05-27 12:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"ba37789e-2370-41a3-8f54-16bcd1db3b8f","trace_id":"aa2efe6d-9fe6-460b-85ae-1d267b9579ca"}
[2026-05-27 12:40:11] local...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.43450797,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-27 12:36:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0eb801fb-3093-4017-962c-06d801a10a73\",\"trace_id\":\"99fe297b-7155-47d5-a6a7-d2ea18672b35\"}\n[2026-05-27 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0eb801fb-3093-4017-962c-06d801a10a73\",\"trace_id\":\"99fe297b-7155-47d5-a6a7-d2ea18672b35\"}\n[2026-05-27 12:36:06] local.NOTICE: Monitoring start {\"correlation_id\":\"355a8191-fdda-4e9f-b2d4-5e002515214e\",\"trace_id\":\"6743c452-a029-45bd-8e47-cfabe28496d8\"}\n[2026-05-27 12:36:06] local.NOTICE: Monitoring end {\"correlation_id\":\"355a8191-fdda-4e9f-b2d4-5e002515214e\",\"trace_id\":\"6743c452-a029-45bd-8e47-cfabe28496d8\"}\n[2026-05-27 12:36:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a\",\"trace_id\":\"ac1217d6-5e5d-4466-9b47-8946880ebb0b\"}\n[2026-05-27 12:36:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a\",\"trace_id\":\"ac1217d6-5e5d-4466-9b47-8946880ebb0b\"}\n[2026-05-27 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"90f00b85-f027-43e2-b9e0-946861cdfb51\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"90f00b85-f027-43e2-b9e0-946861cdfb51\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24180576,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.58,\"average_seconds_per_request\":0.58} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":593.42} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":646.6,\"usage\":24268616,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24246528,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":23.62,\"usage\":24234488,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24195248,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":10.72,\"usage\":24257312,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"200ac210-21c8-4677-b562-a0dd4a8bb7aa\",\"trace_id\":\"8b995657-ab68-439c-86b1-ba462fca3f4d\"}\n[2026-05-27 12:36:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"200ac210-21c8-4677-b562-a0dd4a8bb7aa\",\"trace_id\":\"8b995657-ab68-439c-86b1-ba462fca3f4d\"}\n[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24214824,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":49.63,\"usage\":24230936,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"641f1acb-16b8-42d1-8726-df52979dad0e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1500,\"sociable_id\":143,\"provider_user_id\":\"0052g000003frelAAA\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2026-02-06 08:39:03\",\"updated_at\":\"2026-05-14 09:46:30\"}}} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.ERROR: Failed to set service context for google: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":168.0,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:37:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"1d77aff1-8cd7-4126-b383-a9d6f1036b9b\",\"trace_id\":\"3e459ee7-82d6-4cff-bf3c-725c78c51fe4\"}\n[2026-05-27 12:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"1d77aff1-8cd7-4126-b383-a9d6f1036b9b\",\"trace_id\":\"3e459ee7-82d6-4cff-bf3c-725c78c51fe4\"}\n[2026-05-27 12:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"6f19b4b6-bdc4-4373-bb83-8026c5ca9541\",\"trace_id\":\"ce167b98-a0e2-4042-81df-c199e63a7178\"}\n[2026-05-27 12:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"6f19b4b6-bdc4-4373-bb83-8026c5ca9541\",\"trace_id\":\"ce167b98-a0e2-4042-81df-c199e63a7178\"}\n[2026-05-27 12:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b1f5b0ea-8979-458f-85fa-9ec8f107f890\",\"trace_id\":\"3d6c9714-44f6-4182-9ef6-20b0b591ec16\"}\n[2026-05-27 12:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b1f5b0ea-8979-458f-85fa-9ec8f107f890\",\"trace_id\":\"3d6c9714-44f6-4182-9ef6-20b0b591ec16\"}\n[2026-05-27 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:13] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"1d77b07e-080e-4829-a50a-4201e4336a52\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"35d4b43f-f881-48b1-b35d-a7a6279d383e\",\"trace_id\":\"5b39768e-c490-40c1-a320-7d6c0f731049\"}\n[2026-05-27 12:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"35d4b43f-f881-48b1-b35d-a7a6279d383e\",\"trace_id\":\"5b39768e-c490-40c1-a320-7d6c0f731049\"}\n[2026-05-27 12:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"05985339-0f15-4991-8d86-a314a08b894e\",\"trace_id\":\"e687a910-c51a-4aac-af86-d647fc6f304a\"}\n[2026-05-27 12:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"05985339-0f15-4991-8d86-a314a08b894e\",\"trace_id\":\"e687a910-c51a-4aac-af86-d647fc6f304a\"}\n[2026-05-27 12:38:06] local.NOTICE: Monitoring start {\"correlation_id\":\"33239855-c5df-4bb0-a469-b1654a53d484\",\"trace_id\":\"81e70b33-817a-41de-a80a-41bc709c8731\"}\n[2026-05-27 12:38:06] local.NOTICE: Monitoring end {\"correlation_id\":\"33239855-c5df-4bb0-a469-b1654a53d484\",\"trace_id\":\"81e70b33-817a-41de-a80a-41bc709c8731\"}\n[2026-05-27 12:38:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ceda4686-61f9-4efd-9dac-425274190b6c\",\"trace_id\":\"2a7a6c33-b0c4-4299-8fa7-31759e937e7d\"}\n[2026-05-27 12:38:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ceda4686-61f9-4efd-9dac-425274190b6c\",\"trace_id\":\"2a7a6c33-b0c4-4299-8fa7-31759e937e7d\"}\n[2026-05-27 12:38:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"764a1ac9-502b-4a6d-ae0b-3820cc718427\",\"trace_id\":\"f7829e9d-3a75-4e13-867d-1160e876cf07\"}\n[2026-05-27 12:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"764a1ac9-502b-4a6d-ae0b-3820cc718427\",\"trace_id\":\"f7829e9d-3a75-4e13-867d-1160e876cf07\"}\n[2026-05-27 12:39:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"23f10df5-34f4-4e04-85f1-e82db52af5e6\",\"trace_id\":\"db62bd45-dd20-422c-82cb-7acb7ddb2e06\"}\n[2026-05-27 12:39:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"23f10df5-34f4-4e04-85f1-e82db52af5e6\",\"trace_id\":\"db62bd45-dd20-422c-82cb-7acb7ddb2e06\"}\n[2026-05-27 12:39:06] local.NOTICE: Monitoring start {\"correlation_id\":\"2acea05b-8214-439e-a744-d02f85685068\",\"trace_id\":\"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd\"}\n[2026-05-27 12:39:06] local.NOTICE: Monitoring end {\"correlation_id\":\"2acea05b-8214-439e-a744-d02f85685068\",\"trace_id\":\"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd\"}\n[2026-05-27 12:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"707d1d04-2d6f-4db8-89b4-e16fe9a83709\",\"trace_id\":\"6f7049ea-fa50-46e2-8bf5-ed0e5effce45\"}\n[2026-05-27 12:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"707d1d04-2d6f-4db8-89b4-e16fe9a83709\",\"trace_id\":\"6f7049ea-fa50-46e2-8bf5-ed0e5effce45\"}\n[2026-05-27 12:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:12] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:14] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"6ec39f30-28b3-4cc9-8c60-5bc8d0b55e63\",\"trace_id\":\"e3428bc3-d52e-4a94-8d33-5c246d0bafd6\"}\n[2026-05-27 12:40:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"28d27090-0dec-46a4-8a79-2c6db1e89d26\",\"trace_id\":\"6f6d7e96-ec35-4946-ac91-6496125a5291\"}\n[2026-05-27 12:40:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"28d27090-0dec-46a4-8a79-2c6db1e89d26\",\"trace_id\":\"6f6d7e96-ec35-4946-ac91-6496125a5291\"}\n[2026-05-27 12:40:06] local.NOTICE: Monitoring start {\"correlation_id\":\"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d\",\"trace_id\":\"e8335595-dc87-48b1-a209-abbbe3e404fd\"}\n[2026-05-27 12:40:06] local.NOTICE: Monitoring end {\"correlation_id\":\"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d\",\"trace_id\":\"e8335595-dc87-48b1-a209-abbbe3e404fd\"}\n[2026-05-27 12:40:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0ded3374-9752-49d6-9446-af7f83b45a71\",\"trace_id\":\"1a8bb850-013c-4a60-a56f-ffda95442111\"}\n[2026-05-27 12:40:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0ded3374-9752-49d6-9446-af7f83b45a71\",\"trace_id\":\"1a8bb850-013c-4a60-a56f-ffda95442111\"}\n[2026-05-27 12:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ba37789e-2370-41a3-8f54-16bcd1db3b8f\",\"trace_id\":\"aa2efe6d-9fe6-460b-85ae-1d267b9579ca\"}\n[2026-05-27 12:40:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ba37789e-2370-41a3-8f54-16bcd1db3b8f\",\"trace_id\":\"aa2efe6d-9fe6-460b-85ae-1d267b9579ca\"}\n[2026-05-27 12:40:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:15] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:30:00, 2026-05-27 12:35:00] {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:35:00] {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:35\",\"to\":\"12:40\"} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:30\",\"to\":\"02:35\"} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:19] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"29fe7a5d-04c0-4618-a38c-acdcf1323d4b\",\"trace_id\":\"a7680682-ab33-409d-adc8-06401aaa9f32\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b4c3a371-38b2-4623-ae4e-414913d723b0\",\"trace_id\":\"dfe78599-b05f-4de0-a1a3-5ecea08f7962\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b4c3a371-38b2-4623-ae4e-414913d723b0\",\"trace_id\":\"dfe78599-b05f-4de0-a1a3-5ecea08f7962\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:42:22.914391Z\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"29fe7a5d-04c0-4618-a38c-acdcf1323d4b\",\"trace_id\":\"a7680682-ab33-409d-adc8-06401aaa9f32\"}\n[2026-05-27 12:40:23] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c258ac08-319e-4931-ab30-0c8d942335e6\",\"trace_id\":\"d2c818ab-1e72-469f-a915-96b2fa2c0beb\"}\n[2026-05-27 12:40:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c258ac08-319e-4931-ab30-0c8d942335e6\",\"trace_id\":\"d2c818ab-1e72-469f-a915-96b2fa2c0beb\"}\n[2026-05-27 12:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"20f61214-d28a-40da-a9dc-b74548047166\",\"trace_id\":\"6f549906-eaf0-40f9-a343-0eb858739e06\"}\n[2026-05-27 12:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"20f61214-d28a-40da-a9dc-b74548047166\",\"trace_id\":\"6f549906-eaf0-40f9-a343-0eb858739e06\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7c19c38c-69bf-4f5a-8626-a2a5c10224b0\",\"trace_id\":\"abde10f3-04bc-4081-9793-cc7eb58acce5\"}\n[2026-05-27 12:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7c19c38c-69bf-4f5a-8626-a2a5c10224b0\",\"trace_id\":\"abde10f3-04bc-4081-9793-cc7eb58acce5\"}\n[2026-05-27 12:41:06] local.NOTICE: Monitoring start {\"correlation_id\":\"a623051b-9914-4f21-8a54-5e09559d4b76\",\"trace_id\":\"3634f950-eda4-46a6-ab50-4d7462e2d042\"}\n[2026-05-27 12:41:06] local.NOTICE: Monitoring end {\"correlation_id\":\"a623051b-9914-4f21-8a54-5e09559d4b76\",\"trace_id\":\"3634f950-eda4-46a6-ab50-4d7462e2d042\"}\n[2026-05-27 12:41:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7b61940d-288f-4bd2-a9ac-ae496eebbdb2\",\"trace_id\":\"6d624f5a-a411-404e-8856-1ea7aa57cfac\"}\n[2026-05-27 12:41:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7b61940d-288f-4bd2-a9ac-ae496eebbdb2\",\"trace_id\":\"6d624f5a-a411-404e-8856-1ea7aa57cfac\"}\n[2026-05-27 12:41:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f2594895-b121-404b-b64d-a048786e75d1\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f2594895-b121-404b-b64d-a048786e75d1\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24192296,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.25,\"average_seconds_per_request\":0.25} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":250.95} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":292.67,\"usage\":24279960,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24257872,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":12.97,\"usage\":24245832,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24206592,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":5.88,\"usage\":24268656,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24226168,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":5.03,\"usage\":24242280,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:18] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:18] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":186.9,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:42:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d4d40e6a-e1fe-4e18-a293-b52558c1e370\",\"trace_id\":\"e972e469-8bf6-45bd-870b-6b39c0008b34\"}\n[2026-05-27 12:42:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d4d40e6a-e1fe-4e18-a293-b52558c1e370\",\"trace_id\":\"e972e469-8bf6-45bd-870b-6b39c0008b34\"}\n[2026-05-27 12:42:05] local.NOTICE: Monitoring start {\"correlation_id\":\"4c9b92e1-47d8-4b8f-b86e-b5213797cb2c\",\"trace_id\":\"23a7e5f2-50b0-462c-a82a-65e27b13aef7\"}\n[2026-05-27 12:42:05] local.NOTICE: Monitoring end {\"correlation_id\":\"4c9b92e1-47d8-4b8f-b86e-b5213797cb2c\",\"trace_id\":\"23a7e5f2-50b0-462c-a82a-65e27b13aef7\"}\n[2026-05-27 12:42:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"2d65c81f-88d4-466c-8232-5098e37419ef\",\"trace_id\":\"3316064e-43f1-40da-a0f5-8ca85ea9d52e\"}\n[2026-05-27 12:42:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"2d65c81f-88d4-466c-8232-5098e37419ef\",\"trace_id\":\"3316064e-43f1-40da-a0f5-8ca85ea9d52e\"}\n[2026-05-27 12:42:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"700bc42c-b0c5-4576-986e-207819576a74\",\"trace_id\":\"a70d145a-d23d-41ff-a0f2-bfc66daa64fc\"}\n[2026-05-27 12:42:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"700bc42c-b0c5-4576-986e-207819576a74\",\"trace_id\":\"a70d145a-d23d-41ff-a0f2-bfc66daa64fc\"}\n[2026-05-27 12:42:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"700bc42c-b0c5-4576-986e-207819576a74\",\"trace_id\":\"a70d145a-d23d-41ff-a0f2-bfc66daa64fc\"}\n[2026-05-27 12:42:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"700bc42c-b0c5-4576-986e-207819576a74\",\"trace_id\":\"a70d145a-d23d-41ff-a0f2-bfc66daa64fc\"}\n[2026-05-27 12:42:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b7ebdd7b-f454-4310-8d2e-190804c6d0f1\",\"trace_id\":\"ec595c19-7096-463d-877a-10e875528bea\"}\n[2026-05-27 12:42:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:40:00, 2026-05-27 12:42:00] {\"correlation_id\":\"b7ebdd7b-f454-4310-8d2e-190804c6d0f1\",\"trace_id\":\"ec595c19-7096-463d-877a-10e875528bea\"}\n[2026-05-27 12:42:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:40:00, 2026-05-27 12:42:00] {\"correlation_id\":\"b7ebdd7b-f454-4310-8d2e-190804c6d0f1\",\"trace_id\":\"ec595c19-7096-463d-877a-10e875528bea\"}\n[2026-05-27 12:42:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b7ebdd7b-f454-4310-8d2e-190804c6d0f1\",\"trace_id\":\"ec595c19-7096-463d-877a-10e875528bea\"}\n[2026-05-27 12:42:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ee426296-e02a-451b-b686-1344c3989dee\",\"trace_id\":\"aa1a5500-0768-47d6-942e-d631962efb48\"}\n[2026-05-27 12:42:14] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"ee426296-e02a-451b-b686-1344c3989dee\",\"trace_id\":\"aa1a5500-0768-47d6-942e-d631962efb48\"}\n[2026-05-27 12:42:14] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"ee426296-e02a-451b-b686-1344c3989dee\",\"trace_id\":\"aa1a5500-0768-47d6-942e-d631962efb48\"}\n[2026-05-27 12:42:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ee426296-e02a-451b-b686-1344c3989dee\",\"trace_id\":\"aa1a5500-0768-47d6-942e-d631962efb48\"}\n[2026-05-27 12:42:17] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"08766bc3-7565-414c-a117-fd51750d96e2\",\"trace_id\":\"aa1a5500-0768-47d6-942e-d631962efb48\"}","depth":4,"bounds":{"left":0.4418218,"top":0.0726257,"width":0.5581782,"height":0.9273743},"on_screen":true,"value":"[2026-05-27 12:36:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0eb801fb-3093-4017-962c-06d801a10a73\",\"trace_id\":\"99fe297b-7155-47d5-a6a7-d2ea18672b35\"}\n[2026-05-27 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0eb801fb-3093-4017-962c-06d801a10a73\",\"trace_id\":\"99fe297b-7155-47d5-a6a7-d2ea18672b35\"}\n[2026-05-27 12:36:06] local.NOTICE: Monitoring start {\"correlation_id\":\"355a8191-fdda-4e9f-b2d4-5e002515214e\",\"trace_id\":\"6743c452-a029-45bd-8e47-cfabe28496d8\"}\n[2026-05-27 12:36:06] local.NOTICE: Monitoring end {\"correlation_id\":\"355a8191-fdda-4e9f-b2d4-5e002515214e\",\"trace_id\":\"6743c452-a029-45bd-8e47-cfabe28496d8\"}\n[2026-05-27 12:36:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a\",\"trace_id\":\"ac1217d6-5e5d-4466-9b47-8946880ebb0b\"}\n[2026-05-27 12:36:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a\",\"trace_id\":\"ac1217d6-5e5d-4466-9b47-8946880ebb0b\"}\n[2026-05-27 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"90f00b85-f027-43e2-b9e0-946861cdfb51\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"90f00b85-f027-43e2-b9e0-946861cdfb51\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24180576,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.58,\"average_seconds_per_request\":0.58} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":593.42} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":646.6,\"usage\":24268616,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24246528,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":23.62,\"usage\":24234488,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24195248,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":10.72,\"usage\":24257312,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"200ac210-21c8-4677-b562-a0dd4a8bb7aa\",\"trace_id\":\"8b995657-ab68-439c-86b1-ba462fca3f4d\"}\n[2026-05-27 12:36:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"200ac210-21c8-4677-b562-a0dd4a8bb7aa\",\"trace_id\":\"8b995657-ab68-439c-86b1-ba462fca3f4d\"}\n[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24214824,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":49.63,\"usage\":24230936,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"641f1acb-16b8-42d1-8726-df52979dad0e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1500,\"sociable_id\":143,\"provider_user_id\":\"0052g000003frelAAA\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2026-02-06 08:39:03\",\"updated_at\":\"2026-05-14 09:46:30\"}}} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.ERROR: Failed to set service context for google: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":168.0,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:37:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"1d77aff1-8cd7-4126-b383-a9d6f1036b9b\",\"trace_id\":\"3e459ee7-82d6-4cff-bf3c-725c78c51fe4\"}\n[2026-05-27 12:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"1d77aff1-8cd7-4126-b383-a9d6f1036b9b\",\"trace_id\":\"3e459ee7-82d6-4cff-bf3c-725c78c51fe4\"}\n[2026-05-27 12:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"6f19b4b6-bdc4-4373-bb83-8026c5ca9541\",\"trace_id\":\"ce167b98-a0e2-4042-81df-c199e63a7178\"}\n[2026-05-27 12:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"6f19b4b6-bdc4-4373-bb83-8026c5ca9541\",\"trace_id\":\"ce167b98-a0e2-4042-81df-c199e63a7178\"}\n[2026-05-27 12:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b1f5b0ea-8979-458f-85fa-9ec8f107f890\",\"trace_id\":\"3d6c9714-44f6-4182-9ef6-20b0b591ec16\"}\n[2026-05-27 12:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b1f5b0ea-8979-458f-85fa-9ec8f107f890\",\"trace_id\":\"3d6c9714-44f6-4182-9ef6-20b0b591ec16\"}\n[2026-05-27 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:13] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"1d77b07e-080e-4829-a50a-4201e4336a52\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"35d4b43f-f881-48b1-b35d-a7a6279d383e\",\"trace_id\":\"5b39768e-c490-40c1-a320-7d6c0f731049\"}\n[2026-05-27 12:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"35d4b43f-f881-48b1-b35d-a7a6279d383e\",\"trace_id\":\"5b39768e-c490-40c1-a320-7d6c0f731049\"}\n[2026-05-27 12:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"05985339-0f15-4991-8d86-a314a08b894e\",\"trace_id\":\"e687a910-c51a-4aac-af86-d647fc6f304a\"}\n[2026-05-27 12:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"05985339-0f15-4991-8d86-a314a08b894e\",\"trace_id\":\"e687a910-c51a-4aac-af86-d647fc6f304a\"}\n[2026-05-27 12:38:06] local.NOTICE: Monitoring start {\"correlation_id\":\"33239855-c5df-4bb0-a469-b1654a53d484\",\"trace_id\":\"81e70b33-817a-41de-a80a-41bc709c8731\"}\n[2026-05-27 12:38:06] local.NOTICE: Monitoring end {\"correlation_id\":\"33239855-c5df-4bb0-a469-b1654a53d484\",\"trace_id\":\"81e70b33-817a-41de-a80a-41bc709c8731\"}\n[2026-05-27 12:38:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ceda4686-61f9-4efd-9dac-425274190b6c\",\"trace_id\":\"2a7a6c33-b0c4-4299-8fa7-31759e937e7d\"}\n[2026-05-27 12:38:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ceda4686-61f9-4efd-9dac-425274190b6c\",\"trace_id\":\"2a7a6c33-b0c4-4299-8fa7-31759e937e7d\"}\n[2026-05-27 12:38:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"764a1ac9-502b-4a6d-ae0b-3820cc718427\",\"trace_id\":\"f7829e9d-3a75-4e13-867d-1160e876cf07\"}\n[2026-05-27 12:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"764a1ac9-502b-4a6d-ae0b-3820cc718427\",\"trace_id\":\"f7829e9d-3a75-4e13-867d-1160e876cf07\"}\n[2026-05-27 12:39:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"23f10df5-34f4-4e04-85f1-e82db52af5e6\",\"trace_id\":\"db62bd45-dd20-422c-82cb-7acb7ddb2e06\"}\n[2026-05-27 12:39:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"23f10df5-34f4-4e04-85f1-e82db52af5e6\",\"trace_id\":\"db62bd45-dd20-422c-82cb-7acb7ddb2e06\"}\n[2026-05-27 12:39:06] local.NOTICE: Monitoring start {\"correlation_id\":\"2acea05b-8214-439e-a744-d02f85685068\",\"trace_id\":\"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd\"}\n[2026-05-27 12:39:06] local.NOTICE: Monitoring end {\"correlation_id\":\"2acea05b-8214-439e-a744-d02f85685068\",\"trace_id\":\"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd\"}\n[2026-05-27 12:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"707d1d04-2d6f-4db8-89b4-e16fe9a83709\",\"trace_id\":\"6f7049ea-fa50-46e2-8bf5-ed0e5effce45\"}\n[2026-05-27 12:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"707d1d04-2d6f-4db8-89b4-e16fe9a83709\",\"trace_id\":\"6f7049ea-fa50-46e2-8bf5-ed0e5effce45\"}\n[2026-05-27 12:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:12] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:14] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"6ec39f30-28b3-4cc9-8c60-5bc8d0b55e63\",\"trace_id\":\"e3428bc3-d52e-4a94-8d33-5c246d0bafd6\"}\n[2026-05-27 12:40:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"28d27090-0dec-46a4-8a79-2c6db1e89d26\",\"trace_id\":\"6f6d7e96-ec35-4946-ac91-6496125a5291\"}\n[2026-05-27 12:40:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"28d27090-0dec-46a4-8a79-2c6db1e89d26\",\"trace_id\":\"6f6d7e96-ec35-4946-ac91-6496125a5291\"}\n[2026-05-27 12:40:06] local.NOTICE: Monitoring start {\"correlation_id\":\"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d\",\"trace_id\":\"e8335595-dc87-48b1-a209-abbbe3e404fd\"}\n[2026-05-27 12:40:06] local.NOTICE: Monitoring end {\"correlation_id\":\"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d\",\"trace_id\":\"e8335595-dc87-48b1-a209-abbbe3e404fd\"}\n[2026-05-27 12:40:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0ded3374-9752-49d6-9446-af7f83b45a71\",\"trace_id\":\"1a8bb850-013c-4a60-a56f-ffda95442111\"}\n[2026-05-27 12:40:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0ded3374-9752-49d6-9446-af7f83b45a71\",\"trace_id\":\"1a8bb850-013c-4a60-a56f-ffda95442111\"}\n[2026-05-27 12:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ba37789e-2370-41a3-8f54-16bcd1db3b8f\",\"trace_id\":\"aa2efe6d-9fe6-460b-85ae-1d267b9579ca\"}\n[2026-05-27 12:40:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ba37789e-2370-41a3-8f54-16bcd1db3b8f\",\"trace_id\":\"aa2efe6d-9fe6-460b-85ae-1d267b9579ca\"}\n[2026-05-27 12:40:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:15] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:30:00, 2026-05-27 12:35:00] {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:35:00] {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:35\",\"to\":\"12:40\"} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:30\",\"to\":\"02:35\"} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:19] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"29fe7a5d-04c0-4618-a38c-acdcf1323d4b\",\"trace_id\":\"a7680682-ab33-409d-adc8-06401aaa9f32\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b4c3a371-38b2-4623-ae4e-414913d723b0\",\"trace_id\":\"dfe78599-b05f-4de0-a1a3-5ecea08f7962\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b4c3a371-38b2-4623-ae4e-414913d723b0\",\"trace_id\":\"dfe78599-b05f-4de0-a1a3-5ecea08f7962\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:42:22.914391Z\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"29fe7a5d-04c0-4618-a38c-acdcf1323d4b\",\"trace_id\":\"a7680682-ab33-409d-adc8-06401aaa9f32\"}\n[2026-05-27 12:40:23] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c258ac08-319e-4931-ab30-0c8d942335e6\",\"trace_id\":\"d2c818ab-1e72-469f-a915-96b2fa2c0beb\"}\n[2026-05-27 12:40:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c258ac08-319e-4931-ab30-0c8d942335e6\",\"trace_id\":\"d2c818ab-1e72-469f-a915-96b2fa2c0beb\"}\n[2026-05-27 12:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"20f61214-d28a-40da-a9dc-b74548047166\",\"trace_id\":\"6f549906-eaf0-40f9-a343-0eb858739e06\"}\n[2026-05-27 12:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"20f61214-d28a-40da-a9dc-b74548047166\",\"trace_id\":\"6f549906-eaf0-40f9-a343-0eb858739e06\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7c19c38c-69bf-4f5a-8626-a2a5c10224b0\",\"trace_id\":\"abde10f3-04bc-4081-9793-cc7eb58acce5\"}\n[2026-05-27 12:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7c19c38c-69bf-4f5a-8626-a2a5c10224b0\",\"trace_id\":\"abde10f3-04bc-4081-9793-cc7eb58acce5\"}\n[2026-05-27 12:41:06] local.NOTICE: Monitoring start {\"correlation_id\":\"a623051b-9914-4f21-8a54-5e09559d4b76\",\"trace_id\":\"3634f950-eda4-46a6-ab50-4d7462e2d042\"}\n[2026-05-27 12:41:06] local.NOTICE: Monitoring end {\"correlation_id\":\"a623051b-9914-4f21-8a54-5e09559d4b76\",\"trace_id\":\"3634f950-eda4-46a6-ab50-4d7462e2d042\"}\n[2026-05-27 12:41:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7b61940d-288f-4bd2-a9ac-ae496eebbdb2\",\"trace_id\":\"6d624f5a-a411-404e-8856-1ea7aa57cfac\"}\n[2026-05-27 12:41:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7b61940d-288f-4bd2-a9ac-ae496eebbdb2\",\"trace_id\":\"6d624f5a-a411-404e-8856-1ea7aa57cfac\"}\n[2026-05-27 12:41:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f2594895-b121-404b-b64d-a048786e75d1\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f2594895-b121-404b-b64d-a048786e75d1\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24192296,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.25,\"average_seconds_per_request\":0.25} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":250.95} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":292.67,\"usage\":24279960,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24257872,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":12.97,\"usage\":24245832,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24206592,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":5.88,\"usage\":24268656,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24226168,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":5.03,\"usage\":24242280,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:18] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:18] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":186.9,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:42:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d4d40e6a-e1fe-4e18-a293-b52558c1e370\",\"trace_id\":\"e972e469-8bf6-45bd-870b-6b39c0008b34\"}\n[2026-05-27 12:42:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d4d40e6a-e1fe-4e18-a293-b52558c1e370\",\"trace_id\":\"e972e469-8bf6-45bd-870b-6b39c0008b34\"}\n[2026-05-27 12:42:05] local.NOTICE: Monitoring start {\"correlation_id\":\"4c9b92e1-47d8-4b8f-b86e-b5213797cb2c\",\"trace_id\":\"23a7e5f2-50b0-462c-a82a-65e27b13aef7\"}\n[2026-05-27 12:42:05] local.NOTICE: Monitoring end {\"correlation_id\":\"4c9b92e1-47d8-4b8f-b86e-b5213797cb2c\",\"trace_id\":\"23a7e5f2-50b0-462c-a82a-65e27b13aef7\"}\n[2026-05-27 12:42:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"2d65c81f-88d4-466c-8232-5098e37419ef\",\"trace_id\":\"3316064e-43f1-40da-a0f5-8ca85ea9d52e\"}\n[2026-05-27 12:42:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"2d65c81f-88d4-466c-8232-5098e37419ef\",\"trace_id\":\"3316064e-43f1-40da-a0f5-8ca85ea9d52e\"}\n[2026-05-27 12:42:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"700bc42c-b0c5-4576-986e-207819576a74\",\"trace_id\":\"a70d145a-d23d-41ff-a0f2-bfc66daa64fc\"}\n[2026-05-27 12:42:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"700bc42c-b0c5-4576-986e-207819576a74\",\"trace_id\":\"a70d145a-d23d-41ff-a0f2-bfc66daa64fc\"}\n[2026-05-27 12:42:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"700bc42c-b0c5-4576-986e-207819576a74\",\"trace_id\":\"a70d145a-d23d-41ff-a0f2-bfc66daa64fc\"}\n[2026-05-27 12:42:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"700bc42c-b0c5-4576-986e-207819576a74\",\"trace_id\":\"a70d145a-d23d-41ff-a0f2-bfc66daa64fc\"}\n[2026-05-27 12:42:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b7ebdd7b-f454-4310-8d2e-190804c6d0f1\",\"trace_id\":\"ec595c19-7096-463d-877a-10e875528bea\"}\n[2026-05-27 12:42:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:40:00, 2026-05-27 12:42:00] {\"correlation_id\":\"b7ebdd7b-f454-4310-8d2e-190804c6d0f1\",\"trace_id\":\"ec595c19-7096-463d-877a-10e875528bea\"}\n[2026-05-27 12:42:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:40:00, 2026-05-27 12:42:00] {\"correlation_id\":\"b7ebdd7b-f454-4310-8d2e-190804c6d0f1\",\"trace_id\":\"ec595c19-7096-463d-877a-10e875528bea\"}\n[2026-05-27 12:42:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b7ebdd7b-f454-4310-8d2e-190804c6d0f1\",\"trace_id\":\"ec595c19-7096-463d-877a-10e875528bea\"}\n[2026-05-27 12:42:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ee426296-e02a-451b-b686-1344c3989dee\",\"trace_id\":\"aa1a5500-0768-47d6-942e-d631962efb48\"}\n[2026-05-27 12:42:14] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"ee426296-e02a-451b-b686-1344c3989dee\",\"trace_id\":\"aa1a5500-0768-47d6-942e-d631962efb48\"}\n[2026-05-27 12:42:14] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"ee426296-e02a-451b-b686-1344c3989dee\",\"trace_id\":\"aa1a5500-0768-47d6-942e-d631962efb48\"}\n[2026-05-27 12:42:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ee426296-e02a-451b-b686-1344c3989dee\",\"trace_id\":\"aa1a5500-0768-47d6-942e-d631962efb48\"}\n[2026-05-27 12:42:17] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"08766bc3-7565-414c-a117-fd51750d96e2\",\"trace_id\":\"aa1a5500-0768-47d6-942e-d631962efb48\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-6554368415800612273
|
-2500219111388701443
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:36:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0eb801fb-3093-4017-962c-06d801a10a73","trace_id":"99fe297b-7155-47d5-a6a7-d2ea18672b35"}
[2026-05-27 12:36:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0eb801fb-3093-4017-962c-06d801a10a73","trace_id":"99fe297b-7155-47d5-a6a7-d2ea18672b35"}
[2026-05-27 12:36:06] local.NOTICE: Monitoring start {"correlation_id":"355a8191-fdda-4e9f-b2d4-5e002515214e","trace_id":"6743c452-a029-45bd-8e47-cfabe28496d8"}
[2026-05-27 12:36:06] local.NOTICE: Monitoring end {"correlation_id":"355a8191-fdda-4e9f-b2d4-5e002515214e","trace_id":"6743c452-a029-45bd-8e47-cfabe28496d8"}
[2026-05-27 12:36:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a","trace_id":"ac1217d6-5e5d-4466-9b47-8946880ebb0b"}
[2026-05-27 12:36:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a","trace_id":"ac1217d6-5e5d-4466-9b47-8946880ebb0b"}
[2026-05-27 12:36:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"90f00b85-f027-43e2-b9e0-946861cdfb51","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"90f00b85-f027-43e2-b9e0-946861cdfb51","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24180576,"real_usage":65011712,"pid":42210} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.58,"average_seconds_per_request":0.58} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":593.42} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":646.6,"usage":24268616,"real_usage":65011712,"pid":42210} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24246528,"real_usage":65011712,"pid":42210} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":23.62,"usage":24234488,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24195248,"real_usage":65011712,"pid":42210} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":109,"team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","provider":"hubspot","status":"disconnected","duration_ms":10.72,"usage":24257312,"real_usage":65011712,"pid":42210,"reason":"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"200ac210-21c8-4677-b562-a0dd4a8bb7aa","trace_id":"8b995657-ab68-439c-86b1-ba462fca3f4d"}
[2026-05-27 12:36:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"200ac210-21c8-4677-b562-a0dd4a8bb7aa","trace_id":"8b995657-ab68-439c-86b1-ba462fca3f4d"}
[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","usage":24214824,"real_usage":65011712,"pid":42210} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"71e3aac5-fb66-47c5-a236-2d051ae3e319","account":null} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":256,"team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","provider":"hubspot","status":"disconnected","duration_ms":49.63,"usage":24230936,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {"inbox_id":59} {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":59} {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {"inbox_id":212} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.WARNING: [Salesforce] Account not connected for user {"userId":"641f1acb-16b8-42d1-8726-df52979dad0e","account":{"Jiminny\\Models\\SocialAccount":{"id":1500,"sociable_id":143,"provider_user_id":"0052g000003frelAAA","expires":null,"refresh_token_expires":null,"provider":"salesforce","state":"full-refresh","auth_scope":"refresh_token web api","retry_after":null,"created_at":"2026-02-06 08:39:03","updated_at":"2026-05-14 09:46:30"}}} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.ERROR: Failed to set service context for google: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":212} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":56,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":168.0,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.88} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:37:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"1d77aff1-8cd7-4126-b383-a9d6f1036b9b","trace_id":"3e459ee7-82d6-4cff-bf3c-725c78c51fe4"}
[2026-05-27 12:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"1d77aff1-8cd7-4126-b383-a9d6f1036b9b","trace_id":"3e459ee7-82d6-4cff-bf3c-725c78c51fe4"}
[2026-05-27 12:37:07] local.NOTICE: Monitoring start {"correlation_id":"6f19b4b6-bdc4-4373-bb83-8026c5ca9541","trace_id":"ce167b98-a0e2-4042-81df-c199e63a7178"}
[2026-05-27 12:37:07] local.NOTICE: Monitoring end {"correlation_id":"6f19b4b6-bdc4-4373-bb83-8026c5ca9541","trace_id":"ce167b98-a0e2-4042-81df-c199e63a7178"}
[2026-05-27 12:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"b1f5b0ea-8979-458f-85fa-9ec8f107f890","trace_id":"3d6c9714-44f6-4182-9ef6-20b0b591ec16"}
[2026-05-27 12:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"b1f5b0ea-8979-458f-85fa-9ec8f107f890","trace_id":"3d6c9714-44f6-4182-9ef6-20b0b591ec16"}
[2026-05-27 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:13] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 1 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"1d77b07e-080e-4829-a50a-4201e4336a52","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"35d4b43f-f881-48b1-b35d-a7a6279d383e","trace_id":"5b39768e-c490-40c1-a320-7d6c0f731049"}
[2026-05-27 12:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"35d4b43f-f881-48b1-b35d-a7a6279d383e","trace_id":"5b39768e-c490-40c1-a320-7d6c0f731049"}
[2026-05-27 12:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"05985339-0f15-4991-8d86-a314a08b894e","trace_id":"e687a910-c51a-4aac-af86-d647fc6f304a"}
[2026-05-27 12:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"05985339-0f15-4991-8d86-a314a08b894e","trace_id":"e687a910-c51a-4aac-af86-d647fc6f304a"}
[2026-05-27 12:38:06] local.NOTICE: Monitoring start {"correlation_id":"33239855-c5df-4bb0-a469-b1654a53d484","trace_id":"81e70b33-817a-41de-a80a-41bc709c8731"}
[2026-05-27 12:38:06] local.NOTICE: Monitoring end {"correlation_id":"33239855-c5df-4bb0-a469-b1654a53d484","trace_id":"81e70b33-817a-41de-a80a-41bc709c8731"}
[2026-05-27 12:38:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"ceda4686-61f9-4efd-9dac-425274190b6c","trace_id":"2a7a6c33-b0c4-4299-8fa7-31759e937e7d"}
[2026-05-27 12:38:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"ceda4686-61f9-4efd-9dac-425274190b6c","trace_id":"2a7a6c33-b0c4-4299-8fa7-31759e937e7d"}
[2026-05-27 12:38:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"764a1ac9-502b-4a6d-ae0b-3820cc718427","trace_id":"f7829e9d-3a75-4e13-867d-1160e876cf07"}
[2026-05-27 12:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"764a1ac9-502b-4a6d-ae0b-3820cc718427","trace_id":"f7829e9d-3a75-4e13-867d-1160e876cf07"}
[2026-05-27 12:39:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"23f10df5-34f4-4e04-85f1-e82db52af5e6","trace_id":"db62bd45-dd20-422c-82cb-7acb7ddb2e06"}
[2026-05-27 12:39:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"23f10df5-34f4-4e04-85f1-e82db52af5e6","trace_id":"db62bd45-dd20-422c-82cb-7acb7ddb2e06"}
[2026-05-27 12:39:06] local.NOTICE: Monitoring start {"correlation_id":"2acea05b-8214-439e-a744-d02f85685068","trace_id":"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd"}
[2026-05-27 12:39:06] local.NOTICE: Monitoring end {"correlation_id":"2acea05b-8214-439e-a744-d02f85685068","trace_id":"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd"}
[2026-05-27 12:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"707d1d04-2d6f-4db8-89b4-e16fe9a83709","trace_id":"6f7049ea-fa50-46e2-8bf5-ed0e5effce45"}
[2026-05-27 12:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"707d1d04-2d6f-4db8-89b4-e16fe9a83709","trace_id":"6f7049ea-fa50-46e2-8bf5-ed0e5effce45"}
[2026-05-27 12:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:12] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:14] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"6ec39f30-28b3-4cc9-8c60-5bc8d0b55e63","trace_id":"e3428bc3-d52e-4a94-8d33-5c246d0bafd6"}
[2026-05-27 12:40:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"28d27090-0dec-46a4-8a79-2c6db1e89d26","trace_id":"6f6d7e96-ec35-4946-ac91-6496125a5291"}
[2026-05-27 12:40:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"28d27090-0dec-46a4-8a79-2c6db1e89d26","trace_id":"6f6d7e96-ec35-4946-ac91-6496125a5291"}
[2026-05-27 12:40:06] local.NOTICE: Monitoring start {"correlation_id":"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d","trace_id":"e8335595-dc87-48b1-a209-abbbe3e404fd"}
[2026-05-27 12:40:06] local.NOTICE: Monitoring end {"correlation_id":"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d","trace_id":"e8335595-dc87-48b1-a209-abbbe3e404fd"}
[2026-05-27 12:40:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0ded3374-9752-49d6-9446-af7f83b45a71","trace_id":"1a8bb850-013c-4a60-a56f-ffda95442111"}
[2026-05-27 12:40:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0ded3374-9752-49d6-9446-af7f83b45a71","trace_id":"1a8bb850-013c-4a60-a56f-ffda95442111"}
[2026-05-27 12:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"ba37789e-2370-41a3-8f54-16bcd1db3b8f","trace_id":"aa2efe6d-9fe6-460b-85ae-1d267b9579ca"}
[2026-05-27 12:40:11] local...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78524
|
2758
|
7
|
2026-05-27T12:42:12.725873+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885732725_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:36:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0eb801fb-3093-4017-962c-06d801a10a73","trace_id":"99fe297b-7155-47d5-a6a7-d2ea18672b35"}
[2026-05-27 12:36:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0eb801fb-3093-4017-962c-06d801a10a73","trace_id":"99fe297b-7155-47d5-a6a7-d2ea18672b35"}
[2026-05-27 12:36:06] local.NOTICE: Monitoring start {"correlation_id":"355a8191-fdda-4e9f-b2d4-5e002515214e","trace_id":"6743c452-a029-45bd-8e47-cfabe28496d8"}
[2026-05-27 12:36:06] local.NOTICE: Monitoring end {"correlation_id":"355a8191-fdda-4e9f-b2d4-5e002515214e","trace_id":"6743c452-a029-45bd-8e47-cfabe28496d8"}
[2026-05-27 12:36:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a","trace_id":"ac1217d6-5e5d-4466-9b47-8946880ebb0b"}
[2026-05-27 12:36:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a","trace_id":"ac1217d6-5e5d-4466-9b47-8946880ebb0b"}
[2026-05-27 12:36:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"90f00b85-f027-43e2-b9e0-946861cdfb51","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"90f00b85-f027-43e2-b9e0-946861cdfb51","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24180576,"real_usage":65011712,"pid":42210} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.58,"average_seconds_per_request":0.58} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":593.42} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":646.6,"usage":24268616,"real_usage":65011712,"pid":42210} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24246528,"real_usage":65011712,"pid":42210} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":23.62,"usage":24234488,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24195248,"real_usage":65011712,"pid":42210} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":109,"team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","provider":"hubspot","status":"disconnected","duration_ms":10.72,"usage":24257312,"real_usage":65011712,"pid":42210,"reason":"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"200ac210-21c8-4677-b562-a0dd4a8bb7aa","trace_id":"8b995657-ab68-439c-86b1-ba462fca3f4d"}
[2026-05-27 12:36:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"200ac210-21c8-4677-b562-a0dd4a8bb7aa","trace_id":"8b995657-ab68-439c-86b1-ba462fca3f4d"}
[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","usage":24214824,"real_usage":65011712,"pid":42210} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"71e3aac5-fb66-47c5-a236-2d051ae3e319","account":null} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":256,"team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","provider":"hubspot","status":"disconnected","duration_ms":49.63,"usage":24230936,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {"inbox_id":59} {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":59} {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {"inbox_id":212} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.WARNING: [Salesforce] Account not connected for user {"userId":"641f1acb-16b8-42d1-8726-df52979dad0e","account":{"Jiminny\\Models\\SocialAccount":{"id":1500,"sociable_id":143,"provider_user_id":"0052g000003frelAAA","expires":null,"refresh_token_expires":null,"provider":"salesforce","state":"full-refresh","auth_scope":"refresh_token web api","retry_after":null,"created_at":"2026-02-06 08:39:03","updated_at":"2026-05-14 09:46:30"}}} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.ERROR: Failed to set service context for google: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":212} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":56,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":168.0,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.88} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:37:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"1d77aff1-8cd7-4126-b383-a9d6f1036b9b","trace_id":"3e459ee7-82d6-4cff-bf3c-725c78c51fe4"}
[2026-05-27 12:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"1d77aff1-8cd7-4126-b383-a9d6f1036b9b","trace_id":"3e459ee7-82d6-4cff-bf3c-725c78c51fe4"}
[2026-05-27 12:37:07] local.NOTICE: Monitoring start {"correlation_id":"6f19b4b6-bdc4-4373-bb83-8026c5ca9541","trace_id":"ce167b98-a0e2-4042-81df-c199e63a7178"}
[2026-05-27 12:37:07] local.NOTICE: Monitoring end {"correlation_id":"6f19b4b6-bdc4-4373-bb83-8026c5ca9541","trace_id":"ce167b98-a0e2-4042-81df-c199e63a7178"}
[2026-05-27 12:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"b1f5b0ea-8979-458f-85fa-9ec8f107f890","trace_id":"3d6c9714-44f6-4182-9ef6-20b0b591ec16"}
[2026-05-27 12:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"b1f5b0ea-8979-458f-85fa-9ec8f107f890","trace_id":"3d6c9714-44f6-4182-9ef6-20b0b591ec16"}
[2026-05-27 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:13] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 1 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"1d77b07e-080e-4829-a50a-4201e4336a52","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"35d4b43f-f881-48b1-b35d-a7a6279d383e","trace_id":"5b39768e-c490-40c1-a320-7d6c0f731049"}
[2026-05-27 12:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"35d4b43f-f881-48b1-b35d-a7a6279d383e","trace_id":"5b39768e-c490-40c1-a320-7d6c0f731049"}
[2026-05-27 12:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"05985339-0f15-4991-8d86-a314a08b894e","trace_id":"e687a910-c51a-4aac-af86-d647fc6f304a"}
[2026-05-27 12:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"05985339-0f15-4991-8d86-a314a08b894e","trace_id":"e687a910-c51a-4aac-af86-d647fc6f304a"}
[2026-05-27 12:38:06] local.NOTICE: Monitoring start {"correlation_id":"33239855-c5df-4bb0-a469-b1654a53d484","trace_id":"81e70b33-817a-41de-a80a-41bc709c8731"}
[2026-05-27 12:38:06] local.NOTICE: Monitoring end {"correlation_id":"33239855-c5df-4bb0-a469-b1654a53d484","trace_id":"81e70b33-817a-41de-a80a-41bc709c8731"}
[2026-05-27 12:38:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"ceda4686-61f9-4efd-9dac-425274190b6c","trace_id":"2a7a6c33-b0c4-4299-8fa7-31759e937e7d"}
[2026-05-27 12:38:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"ceda4686-61f9-4efd-9dac-425274190b6c","trace_id":"2a7a6c33-b0c4-4299-8fa7-31759e937e7d"}
[2026-05-27 12:38:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"764a1ac9-502b-4a6d-ae0b-3820cc718427","trace_id":"f7829e9d-3a75-4e13-867d-1160e876cf07"}
[2026-05-27 12:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"764a1ac9-502b-4a6d-ae0b-3820cc718427","trace_id":"f7829e9d-3a75-4e13-867d-1160e876cf07"}
[2026-05-27 12:39:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"23f10df5-34f4-4e04-85f1-e82db52af5e6","trace_id":"db62bd45-dd20-422c-82cb-7acb7ddb2e06"}
[2026-05-27 12:39:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"23f10df5-34f4-4e04-85f1-e82db52af5e6","trace_id":"db62bd45-dd20-422c-82cb-7acb7ddb2e06"}
[2026-05-27 12:39:06] local.NOTICE: Monitoring start {"correlation_id":"2acea05b-8214-439e-a744-d02f85685068","trace_id":"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd"}
[2026-05-27 12:39:06] local.NOTICE: Monitoring end {"correlation_id":"2acea05b-8214-439e-a744-d02f85685068","trace_id":"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd"}
[2026-05-27 12:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"707d1d04-2d6f-4db8-89b4-e16fe9a83709","trace_id":"6f7049ea-fa50-46e2-8bf5-ed0e5effce45"}
[2026-05-27 12:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"707d1d04-2d6f-4db8-89b4-e16fe9a83709","trace_id":"6f7049ea-fa50-46e2-8bf5-ed0e5effce45"}
[2026-05-27 12:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:12] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:14] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"6ec39f30-28b3-4cc9-8c60-5bc8d0b55e63","trace_id":"e3428bc3-d52e-4a94-8d33-5c246d0bafd6"}
[2026-05-27 12:40:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"28d27090-0dec-46a4-8a79-2c6db1e89d26","trace_id":"6f6d7e96-ec35-4946-ac91-6496125a5291"}
[2026-05-27 12:40:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"28d27090-0dec-46a4-8a79-2c6db1e89d26","trace_id":"6f6d7e96-ec35-4946-ac91-6496125a5291"}
[2026-05-27 12:40:06] local.NOTICE: Monitoring start {"correlation_id":"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d","trace_id":"e8335595-dc87-48b1-a209-abbbe3e404fd"}
[2026-05-27 12:40:06] local.NOTICE: Monitoring end {"correlation_id":"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d","trace_id":"e8335595-dc87-48b1-a209-abbbe3e404fd"}
[2026-05-27 12:40:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0ded3374-9752-49d6-9446-af7f83b45a71","trace_id":"1a8bb850-013c-4a60-a56f-ffda95442111"}
[2026-05-27 12:40:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0ded3374-9752-49d6-9446-af7f83b45a71","trace_id":"1a8bb850-013c-4a60-a56f-ffda95442111"}
[2026-05-27 12:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"ba37789e-2370-41a3-8f54-16bcd1db3b8f","trace_id":"aa2efe6d-9fe6-460b-85ae-1d267b9579ca"}
[2026-05-27 12:40:11] local...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.43450797,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-27 12:36:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0eb801fb-3093-4017-962c-06d801a10a73\",\"trace_id\":\"99fe297b-7155-47d5-a6a7-d2ea18672b35\"}\n[2026-05-27 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0eb801fb-3093-4017-962c-06d801a10a73\",\"trace_id\":\"99fe297b-7155-47d5-a6a7-d2ea18672b35\"}\n[2026-05-27 12:36:06] local.NOTICE: Monitoring start {\"correlation_id\":\"355a8191-fdda-4e9f-b2d4-5e002515214e\",\"trace_id\":\"6743c452-a029-45bd-8e47-cfabe28496d8\"}\n[2026-05-27 12:36:06] local.NOTICE: Monitoring end {\"correlation_id\":\"355a8191-fdda-4e9f-b2d4-5e002515214e\",\"trace_id\":\"6743c452-a029-45bd-8e47-cfabe28496d8\"}\n[2026-05-27 12:36:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a\",\"trace_id\":\"ac1217d6-5e5d-4466-9b47-8946880ebb0b\"}\n[2026-05-27 12:36:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a\",\"trace_id\":\"ac1217d6-5e5d-4466-9b47-8946880ebb0b\"}\n[2026-05-27 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"90f00b85-f027-43e2-b9e0-946861cdfb51\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"90f00b85-f027-43e2-b9e0-946861cdfb51\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24180576,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.58,\"average_seconds_per_request\":0.58} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":593.42} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":646.6,\"usage\":24268616,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24246528,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":23.62,\"usage\":24234488,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24195248,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":10.72,\"usage\":24257312,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"200ac210-21c8-4677-b562-a0dd4a8bb7aa\",\"trace_id\":\"8b995657-ab68-439c-86b1-ba462fca3f4d\"}\n[2026-05-27 12:36:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"200ac210-21c8-4677-b562-a0dd4a8bb7aa\",\"trace_id\":\"8b995657-ab68-439c-86b1-ba462fca3f4d\"}\n[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24214824,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":49.63,\"usage\":24230936,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"641f1acb-16b8-42d1-8726-df52979dad0e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1500,\"sociable_id\":143,\"provider_user_id\":\"0052g000003frelAAA\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2026-02-06 08:39:03\",\"updated_at\":\"2026-05-14 09:46:30\"}}} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.ERROR: Failed to set service context for google: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":168.0,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:37:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"1d77aff1-8cd7-4126-b383-a9d6f1036b9b\",\"trace_id\":\"3e459ee7-82d6-4cff-bf3c-725c78c51fe4\"}\n[2026-05-27 12:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"1d77aff1-8cd7-4126-b383-a9d6f1036b9b\",\"trace_id\":\"3e459ee7-82d6-4cff-bf3c-725c78c51fe4\"}\n[2026-05-27 12:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"6f19b4b6-bdc4-4373-bb83-8026c5ca9541\",\"trace_id\":\"ce167b98-a0e2-4042-81df-c199e63a7178\"}\n[2026-05-27 12:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"6f19b4b6-bdc4-4373-bb83-8026c5ca9541\",\"trace_id\":\"ce167b98-a0e2-4042-81df-c199e63a7178\"}\n[2026-05-27 12:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b1f5b0ea-8979-458f-85fa-9ec8f107f890\",\"trace_id\":\"3d6c9714-44f6-4182-9ef6-20b0b591ec16\"}\n[2026-05-27 12:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b1f5b0ea-8979-458f-85fa-9ec8f107f890\",\"trace_id\":\"3d6c9714-44f6-4182-9ef6-20b0b591ec16\"}\n[2026-05-27 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:13] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"1d77b07e-080e-4829-a50a-4201e4336a52\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"35d4b43f-f881-48b1-b35d-a7a6279d383e\",\"trace_id\":\"5b39768e-c490-40c1-a320-7d6c0f731049\"}\n[2026-05-27 12:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"35d4b43f-f881-48b1-b35d-a7a6279d383e\",\"trace_id\":\"5b39768e-c490-40c1-a320-7d6c0f731049\"}\n[2026-05-27 12:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"05985339-0f15-4991-8d86-a314a08b894e\",\"trace_id\":\"e687a910-c51a-4aac-af86-d647fc6f304a\"}\n[2026-05-27 12:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"05985339-0f15-4991-8d86-a314a08b894e\",\"trace_id\":\"e687a910-c51a-4aac-af86-d647fc6f304a\"}\n[2026-05-27 12:38:06] local.NOTICE: Monitoring start {\"correlation_id\":\"33239855-c5df-4bb0-a469-b1654a53d484\",\"trace_id\":\"81e70b33-817a-41de-a80a-41bc709c8731\"}\n[2026-05-27 12:38:06] local.NOTICE: Monitoring end {\"correlation_id\":\"33239855-c5df-4bb0-a469-b1654a53d484\",\"trace_id\":\"81e70b33-817a-41de-a80a-41bc709c8731\"}\n[2026-05-27 12:38:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ceda4686-61f9-4efd-9dac-425274190b6c\",\"trace_id\":\"2a7a6c33-b0c4-4299-8fa7-31759e937e7d\"}\n[2026-05-27 12:38:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ceda4686-61f9-4efd-9dac-425274190b6c\",\"trace_id\":\"2a7a6c33-b0c4-4299-8fa7-31759e937e7d\"}\n[2026-05-27 12:38:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"764a1ac9-502b-4a6d-ae0b-3820cc718427\",\"trace_id\":\"f7829e9d-3a75-4e13-867d-1160e876cf07\"}\n[2026-05-27 12:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"764a1ac9-502b-4a6d-ae0b-3820cc718427\",\"trace_id\":\"f7829e9d-3a75-4e13-867d-1160e876cf07\"}\n[2026-05-27 12:39:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"23f10df5-34f4-4e04-85f1-e82db52af5e6\",\"trace_id\":\"db62bd45-dd20-422c-82cb-7acb7ddb2e06\"}\n[2026-05-27 12:39:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"23f10df5-34f4-4e04-85f1-e82db52af5e6\",\"trace_id\":\"db62bd45-dd20-422c-82cb-7acb7ddb2e06\"}\n[2026-05-27 12:39:06] local.NOTICE: Monitoring start {\"correlation_id\":\"2acea05b-8214-439e-a744-d02f85685068\",\"trace_id\":\"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd\"}\n[2026-05-27 12:39:06] local.NOTICE: Monitoring end {\"correlation_id\":\"2acea05b-8214-439e-a744-d02f85685068\",\"trace_id\":\"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd\"}\n[2026-05-27 12:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"707d1d04-2d6f-4db8-89b4-e16fe9a83709\",\"trace_id\":\"6f7049ea-fa50-46e2-8bf5-ed0e5effce45\"}\n[2026-05-27 12:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"707d1d04-2d6f-4db8-89b4-e16fe9a83709\",\"trace_id\":\"6f7049ea-fa50-46e2-8bf5-ed0e5effce45\"}\n[2026-05-27 12:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:12] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:14] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"6ec39f30-28b3-4cc9-8c60-5bc8d0b55e63\",\"trace_id\":\"e3428bc3-d52e-4a94-8d33-5c246d0bafd6\"}\n[2026-05-27 12:40:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"28d27090-0dec-46a4-8a79-2c6db1e89d26\",\"trace_id\":\"6f6d7e96-ec35-4946-ac91-6496125a5291\"}\n[2026-05-27 12:40:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"28d27090-0dec-46a4-8a79-2c6db1e89d26\",\"trace_id\":\"6f6d7e96-ec35-4946-ac91-6496125a5291\"}\n[2026-05-27 12:40:06] local.NOTICE: Monitoring start {\"correlation_id\":\"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d\",\"trace_id\":\"e8335595-dc87-48b1-a209-abbbe3e404fd\"}\n[2026-05-27 12:40:06] local.NOTICE: Monitoring end {\"correlation_id\":\"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d\",\"trace_id\":\"e8335595-dc87-48b1-a209-abbbe3e404fd\"}\n[2026-05-27 12:40:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0ded3374-9752-49d6-9446-af7f83b45a71\",\"trace_id\":\"1a8bb850-013c-4a60-a56f-ffda95442111\"}\n[2026-05-27 12:40:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0ded3374-9752-49d6-9446-af7f83b45a71\",\"trace_id\":\"1a8bb850-013c-4a60-a56f-ffda95442111\"}\n[2026-05-27 12:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ba37789e-2370-41a3-8f54-16bcd1db3b8f\",\"trace_id\":\"aa2efe6d-9fe6-460b-85ae-1d267b9579ca\"}\n[2026-05-27 12:40:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ba37789e-2370-41a3-8f54-16bcd1db3b8f\",\"trace_id\":\"aa2efe6d-9fe6-460b-85ae-1d267b9579ca\"}\n[2026-05-27 12:40:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:15] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:30:00, 2026-05-27 12:35:00] {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:35:00] {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:35\",\"to\":\"12:40\"} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:30\",\"to\":\"02:35\"} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:19] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"29fe7a5d-04c0-4618-a38c-acdcf1323d4b\",\"trace_id\":\"a7680682-ab33-409d-adc8-06401aaa9f32\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b4c3a371-38b2-4623-ae4e-414913d723b0\",\"trace_id\":\"dfe78599-b05f-4de0-a1a3-5ecea08f7962\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b4c3a371-38b2-4623-ae4e-414913d723b0\",\"trace_id\":\"dfe78599-b05f-4de0-a1a3-5ecea08f7962\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:42:22.914391Z\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"29fe7a5d-04c0-4618-a38c-acdcf1323d4b\",\"trace_id\":\"a7680682-ab33-409d-adc8-06401aaa9f32\"}\n[2026-05-27 12:40:23] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c258ac08-319e-4931-ab30-0c8d942335e6\",\"trace_id\":\"d2c818ab-1e72-469f-a915-96b2fa2c0beb\"}\n[2026-05-27 12:40:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c258ac08-319e-4931-ab30-0c8d942335e6\",\"trace_id\":\"d2c818ab-1e72-469f-a915-96b2fa2c0beb\"}\n[2026-05-27 12:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"20f61214-d28a-40da-a9dc-b74548047166\",\"trace_id\":\"6f549906-eaf0-40f9-a343-0eb858739e06\"}\n[2026-05-27 12:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"20f61214-d28a-40da-a9dc-b74548047166\",\"trace_id\":\"6f549906-eaf0-40f9-a343-0eb858739e06\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7c19c38c-69bf-4f5a-8626-a2a5c10224b0\",\"trace_id\":\"abde10f3-04bc-4081-9793-cc7eb58acce5\"}\n[2026-05-27 12:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7c19c38c-69bf-4f5a-8626-a2a5c10224b0\",\"trace_id\":\"abde10f3-04bc-4081-9793-cc7eb58acce5\"}\n[2026-05-27 12:41:06] local.NOTICE: Monitoring start {\"correlation_id\":\"a623051b-9914-4f21-8a54-5e09559d4b76\",\"trace_id\":\"3634f950-eda4-46a6-ab50-4d7462e2d042\"}\n[2026-05-27 12:41:06] local.NOTICE: Monitoring end {\"correlation_id\":\"a623051b-9914-4f21-8a54-5e09559d4b76\",\"trace_id\":\"3634f950-eda4-46a6-ab50-4d7462e2d042\"}\n[2026-05-27 12:41:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7b61940d-288f-4bd2-a9ac-ae496eebbdb2\",\"trace_id\":\"6d624f5a-a411-404e-8856-1ea7aa57cfac\"}\n[2026-05-27 12:41:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7b61940d-288f-4bd2-a9ac-ae496eebbdb2\",\"trace_id\":\"6d624f5a-a411-404e-8856-1ea7aa57cfac\"}\n[2026-05-27 12:41:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f2594895-b121-404b-b64d-a048786e75d1\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f2594895-b121-404b-b64d-a048786e75d1\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24192296,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.25,\"average_seconds_per_request\":0.25} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":250.95} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":292.67,\"usage\":24279960,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24257872,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":12.97,\"usage\":24245832,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24206592,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":5.88,\"usage\":24268656,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24226168,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":5.03,\"usage\":24242280,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:18] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:18] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":186.9,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:42:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d4d40e6a-e1fe-4e18-a293-b52558c1e370\",\"trace_id\":\"e972e469-8bf6-45bd-870b-6b39c0008b34\"}\n[2026-05-27 12:42:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d4d40e6a-e1fe-4e18-a293-b52558c1e370\",\"trace_id\":\"e972e469-8bf6-45bd-870b-6b39c0008b34\"}\n[2026-05-27 12:42:05] local.NOTICE: Monitoring start {\"correlation_id\":\"4c9b92e1-47d8-4b8f-b86e-b5213797cb2c\",\"trace_id\":\"23a7e5f2-50b0-462c-a82a-65e27b13aef7\"}\n[2026-05-27 12:42:05] local.NOTICE: Monitoring end {\"correlation_id\":\"4c9b92e1-47d8-4b8f-b86e-b5213797cb2c\",\"trace_id\":\"23a7e5f2-50b0-462c-a82a-65e27b13aef7\"}\n[2026-05-27 12:42:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"2d65c81f-88d4-466c-8232-5098e37419ef\",\"trace_id\":\"3316064e-43f1-40da-a0f5-8ca85ea9d52e\"}\n[2026-05-27 12:42:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"2d65c81f-88d4-466c-8232-5098e37419ef\",\"trace_id\":\"3316064e-43f1-40da-a0f5-8ca85ea9d52e\"}\n[2026-05-27 12:42:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"700bc42c-b0c5-4576-986e-207819576a74\",\"trace_id\":\"a70d145a-d23d-41ff-a0f2-bfc66daa64fc\"}\n[2026-05-27 12:42:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"700bc42c-b0c5-4576-986e-207819576a74\",\"trace_id\":\"a70d145a-d23d-41ff-a0f2-bfc66daa64fc\"}\n[2026-05-27 12:42:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"700bc42c-b0c5-4576-986e-207819576a74\",\"trace_id\":\"a70d145a-d23d-41ff-a0f2-bfc66daa64fc\"}\n[2026-05-27 12:42:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"700bc42c-b0c5-4576-986e-207819576a74\",\"trace_id\":\"a70d145a-d23d-41ff-a0f2-bfc66daa64fc\"}","depth":4,"bounds":{"left":0.4418218,"top":0.0726257,"width":0.5581782,"height":0.9273743},"on_screen":true,"value":"[2026-05-27 12:36:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0eb801fb-3093-4017-962c-06d801a10a73\",\"trace_id\":\"99fe297b-7155-47d5-a6a7-d2ea18672b35\"}\n[2026-05-27 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0eb801fb-3093-4017-962c-06d801a10a73\",\"trace_id\":\"99fe297b-7155-47d5-a6a7-d2ea18672b35\"}\n[2026-05-27 12:36:06] local.NOTICE: Monitoring start {\"correlation_id\":\"355a8191-fdda-4e9f-b2d4-5e002515214e\",\"trace_id\":\"6743c452-a029-45bd-8e47-cfabe28496d8\"}\n[2026-05-27 12:36:06] local.NOTICE: Monitoring end {\"correlation_id\":\"355a8191-fdda-4e9f-b2d4-5e002515214e\",\"trace_id\":\"6743c452-a029-45bd-8e47-cfabe28496d8\"}\n[2026-05-27 12:36:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a\",\"trace_id\":\"ac1217d6-5e5d-4466-9b47-8946880ebb0b\"}\n[2026-05-27 12:36:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a\",\"trace_id\":\"ac1217d6-5e5d-4466-9b47-8946880ebb0b\"}\n[2026-05-27 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"90f00b85-f027-43e2-b9e0-946861cdfb51\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"90f00b85-f027-43e2-b9e0-946861cdfb51\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24180576,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.58,\"average_seconds_per_request\":0.58} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":593.42} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":646.6,\"usage\":24268616,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24246528,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":23.62,\"usage\":24234488,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24195248,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":10.72,\"usage\":24257312,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"200ac210-21c8-4677-b562-a0dd4a8bb7aa\",\"trace_id\":\"8b995657-ab68-439c-86b1-ba462fca3f4d\"}\n[2026-05-27 12:36:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"200ac210-21c8-4677-b562-a0dd4a8bb7aa\",\"trace_id\":\"8b995657-ab68-439c-86b1-ba462fca3f4d\"}\n[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24214824,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":49.63,\"usage\":24230936,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"641f1acb-16b8-42d1-8726-df52979dad0e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1500,\"sociable_id\":143,\"provider_user_id\":\"0052g000003frelAAA\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2026-02-06 08:39:03\",\"updated_at\":\"2026-05-14 09:46:30\"}}} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.ERROR: Failed to set service context for google: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":168.0,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:37:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"1d77aff1-8cd7-4126-b383-a9d6f1036b9b\",\"trace_id\":\"3e459ee7-82d6-4cff-bf3c-725c78c51fe4\"}\n[2026-05-27 12:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"1d77aff1-8cd7-4126-b383-a9d6f1036b9b\",\"trace_id\":\"3e459ee7-82d6-4cff-bf3c-725c78c51fe4\"}\n[2026-05-27 12:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"6f19b4b6-bdc4-4373-bb83-8026c5ca9541\",\"trace_id\":\"ce167b98-a0e2-4042-81df-c199e63a7178\"}\n[2026-05-27 12:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"6f19b4b6-bdc4-4373-bb83-8026c5ca9541\",\"trace_id\":\"ce167b98-a0e2-4042-81df-c199e63a7178\"}\n[2026-05-27 12:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b1f5b0ea-8979-458f-85fa-9ec8f107f890\",\"trace_id\":\"3d6c9714-44f6-4182-9ef6-20b0b591ec16\"}\n[2026-05-27 12:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b1f5b0ea-8979-458f-85fa-9ec8f107f890\",\"trace_id\":\"3d6c9714-44f6-4182-9ef6-20b0b591ec16\"}\n[2026-05-27 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:13] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"1d77b07e-080e-4829-a50a-4201e4336a52\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"35d4b43f-f881-48b1-b35d-a7a6279d383e\",\"trace_id\":\"5b39768e-c490-40c1-a320-7d6c0f731049\"}\n[2026-05-27 12:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"35d4b43f-f881-48b1-b35d-a7a6279d383e\",\"trace_id\":\"5b39768e-c490-40c1-a320-7d6c0f731049\"}\n[2026-05-27 12:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"05985339-0f15-4991-8d86-a314a08b894e\",\"trace_id\":\"e687a910-c51a-4aac-af86-d647fc6f304a\"}\n[2026-05-27 12:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"05985339-0f15-4991-8d86-a314a08b894e\",\"trace_id\":\"e687a910-c51a-4aac-af86-d647fc6f304a\"}\n[2026-05-27 12:38:06] local.NOTICE: Monitoring start {\"correlation_id\":\"33239855-c5df-4bb0-a469-b1654a53d484\",\"trace_id\":\"81e70b33-817a-41de-a80a-41bc709c8731\"}\n[2026-05-27 12:38:06] local.NOTICE: Monitoring end {\"correlation_id\":\"33239855-c5df-4bb0-a469-b1654a53d484\",\"trace_id\":\"81e70b33-817a-41de-a80a-41bc709c8731\"}\n[2026-05-27 12:38:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ceda4686-61f9-4efd-9dac-425274190b6c\",\"trace_id\":\"2a7a6c33-b0c4-4299-8fa7-31759e937e7d\"}\n[2026-05-27 12:38:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ceda4686-61f9-4efd-9dac-425274190b6c\",\"trace_id\":\"2a7a6c33-b0c4-4299-8fa7-31759e937e7d\"}\n[2026-05-27 12:38:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"764a1ac9-502b-4a6d-ae0b-3820cc718427\",\"trace_id\":\"f7829e9d-3a75-4e13-867d-1160e876cf07\"}\n[2026-05-27 12:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"764a1ac9-502b-4a6d-ae0b-3820cc718427\",\"trace_id\":\"f7829e9d-3a75-4e13-867d-1160e876cf07\"}\n[2026-05-27 12:39:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"23f10df5-34f4-4e04-85f1-e82db52af5e6\",\"trace_id\":\"db62bd45-dd20-422c-82cb-7acb7ddb2e06\"}\n[2026-05-27 12:39:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"23f10df5-34f4-4e04-85f1-e82db52af5e6\",\"trace_id\":\"db62bd45-dd20-422c-82cb-7acb7ddb2e06\"}\n[2026-05-27 12:39:06] local.NOTICE: Monitoring start {\"correlation_id\":\"2acea05b-8214-439e-a744-d02f85685068\",\"trace_id\":\"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd\"}\n[2026-05-27 12:39:06] local.NOTICE: Monitoring end {\"correlation_id\":\"2acea05b-8214-439e-a744-d02f85685068\",\"trace_id\":\"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd\"}\n[2026-05-27 12:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"707d1d04-2d6f-4db8-89b4-e16fe9a83709\",\"trace_id\":\"6f7049ea-fa50-46e2-8bf5-ed0e5effce45\"}\n[2026-05-27 12:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"707d1d04-2d6f-4db8-89b4-e16fe9a83709\",\"trace_id\":\"6f7049ea-fa50-46e2-8bf5-ed0e5effce45\"}\n[2026-05-27 12:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:12] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:14] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"6ec39f30-28b3-4cc9-8c60-5bc8d0b55e63\",\"trace_id\":\"e3428bc3-d52e-4a94-8d33-5c246d0bafd6\"}\n[2026-05-27 12:40:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"28d27090-0dec-46a4-8a79-2c6db1e89d26\",\"trace_id\":\"6f6d7e96-ec35-4946-ac91-6496125a5291\"}\n[2026-05-27 12:40:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"28d27090-0dec-46a4-8a79-2c6db1e89d26\",\"trace_id\":\"6f6d7e96-ec35-4946-ac91-6496125a5291\"}\n[2026-05-27 12:40:06] local.NOTICE: Monitoring start {\"correlation_id\":\"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d\",\"trace_id\":\"e8335595-dc87-48b1-a209-abbbe3e404fd\"}\n[2026-05-27 12:40:06] local.NOTICE: Monitoring end {\"correlation_id\":\"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d\",\"trace_id\":\"e8335595-dc87-48b1-a209-abbbe3e404fd\"}\n[2026-05-27 12:40:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0ded3374-9752-49d6-9446-af7f83b45a71\",\"trace_id\":\"1a8bb850-013c-4a60-a56f-ffda95442111\"}\n[2026-05-27 12:40:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0ded3374-9752-49d6-9446-af7f83b45a71\",\"trace_id\":\"1a8bb850-013c-4a60-a56f-ffda95442111\"}\n[2026-05-27 12:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ba37789e-2370-41a3-8f54-16bcd1db3b8f\",\"trace_id\":\"aa2efe6d-9fe6-460b-85ae-1d267b9579ca\"}\n[2026-05-27 12:40:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ba37789e-2370-41a3-8f54-16bcd1db3b8f\",\"trace_id\":\"aa2efe6d-9fe6-460b-85ae-1d267b9579ca\"}\n[2026-05-27 12:40:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:15] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:30:00, 2026-05-27 12:35:00] {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:35:00] {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:35\",\"to\":\"12:40\"} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:30\",\"to\":\"02:35\"} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:19] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"29fe7a5d-04c0-4618-a38c-acdcf1323d4b\",\"trace_id\":\"a7680682-ab33-409d-adc8-06401aaa9f32\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b4c3a371-38b2-4623-ae4e-414913d723b0\",\"trace_id\":\"dfe78599-b05f-4de0-a1a3-5ecea08f7962\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b4c3a371-38b2-4623-ae4e-414913d723b0\",\"trace_id\":\"dfe78599-b05f-4de0-a1a3-5ecea08f7962\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:42:22.914391Z\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"29fe7a5d-04c0-4618-a38c-acdcf1323d4b\",\"trace_id\":\"a7680682-ab33-409d-adc8-06401aaa9f32\"}\n[2026-05-27 12:40:23] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c258ac08-319e-4931-ab30-0c8d942335e6\",\"trace_id\":\"d2c818ab-1e72-469f-a915-96b2fa2c0beb\"}\n[2026-05-27 12:40:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c258ac08-319e-4931-ab30-0c8d942335e6\",\"trace_id\":\"d2c818ab-1e72-469f-a915-96b2fa2c0beb\"}\n[2026-05-27 12:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"20f61214-d28a-40da-a9dc-b74548047166\",\"trace_id\":\"6f549906-eaf0-40f9-a343-0eb858739e06\"}\n[2026-05-27 12:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"20f61214-d28a-40da-a9dc-b74548047166\",\"trace_id\":\"6f549906-eaf0-40f9-a343-0eb858739e06\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7c19c38c-69bf-4f5a-8626-a2a5c10224b0\",\"trace_id\":\"abde10f3-04bc-4081-9793-cc7eb58acce5\"}\n[2026-05-27 12:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7c19c38c-69bf-4f5a-8626-a2a5c10224b0\",\"trace_id\":\"abde10f3-04bc-4081-9793-cc7eb58acce5\"}\n[2026-05-27 12:41:06] local.NOTICE: Monitoring start {\"correlation_id\":\"a623051b-9914-4f21-8a54-5e09559d4b76\",\"trace_id\":\"3634f950-eda4-46a6-ab50-4d7462e2d042\"}\n[2026-05-27 12:41:06] local.NOTICE: Monitoring end {\"correlation_id\":\"a623051b-9914-4f21-8a54-5e09559d4b76\",\"trace_id\":\"3634f950-eda4-46a6-ab50-4d7462e2d042\"}\n[2026-05-27 12:41:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7b61940d-288f-4bd2-a9ac-ae496eebbdb2\",\"trace_id\":\"6d624f5a-a411-404e-8856-1ea7aa57cfac\"}\n[2026-05-27 12:41:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7b61940d-288f-4bd2-a9ac-ae496eebbdb2\",\"trace_id\":\"6d624f5a-a411-404e-8856-1ea7aa57cfac\"}\n[2026-05-27 12:41:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f2594895-b121-404b-b64d-a048786e75d1\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f2594895-b121-404b-b64d-a048786e75d1\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24192296,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.25,\"average_seconds_per_request\":0.25} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":250.95} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":292.67,\"usage\":24279960,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24257872,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":12.97,\"usage\":24245832,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24206592,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":5.88,\"usage\":24268656,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24226168,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":5.03,\"usage\":24242280,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:18] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:18] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":186.9,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:42:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d4d40e6a-e1fe-4e18-a293-b52558c1e370\",\"trace_id\":\"e972e469-8bf6-45bd-870b-6b39c0008b34\"}\n[2026-05-27 12:42:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d4d40e6a-e1fe-4e18-a293-b52558c1e370\",\"trace_id\":\"e972e469-8bf6-45bd-870b-6b39c0008b34\"}\n[2026-05-27 12:42:05] local.NOTICE: Monitoring start {\"correlation_id\":\"4c9b92e1-47d8-4b8f-b86e-b5213797cb2c\",\"trace_id\":\"23a7e5f2-50b0-462c-a82a-65e27b13aef7\"}\n[2026-05-27 12:42:05] local.NOTICE: Monitoring end {\"correlation_id\":\"4c9b92e1-47d8-4b8f-b86e-b5213797cb2c\",\"trace_id\":\"23a7e5f2-50b0-462c-a82a-65e27b13aef7\"}\n[2026-05-27 12:42:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"2d65c81f-88d4-466c-8232-5098e37419ef\",\"trace_id\":\"3316064e-43f1-40da-a0f5-8ca85ea9d52e\"}\n[2026-05-27 12:42:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"2d65c81f-88d4-466c-8232-5098e37419ef\",\"trace_id\":\"3316064e-43f1-40da-a0f5-8ca85ea9d52e\"}\n[2026-05-27 12:42:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"700bc42c-b0c5-4576-986e-207819576a74\",\"trace_id\":\"a70d145a-d23d-41ff-a0f2-bfc66daa64fc\"}\n[2026-05-27 12:42:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"700bc42c-b0c5-4576-986e-207819576a74\",\"trace_id\":\"a70d145a-d23d-41ff-a0f2-bfc66daa64fc\"}\n[2026-05-27 12:42:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"700bc42c-b0c5-4576-986e-207819576a74\",\"trace_id\":\"a70d145a-d23d-41ff-a0f2-bfc66daa64fc\"}\n[2026-05-27 12:42:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"700bc42c-b0c5-4576-986e-207819576a74\",\"trace_id\":\"a70d145a-d23d-41ff-a0f2-bfc66daa64fc\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-6554368415800612273
|
-2500219111388701443
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:36:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0eb801fb-3093-4017-962c-06d801a10a73","trace_id":"99fe297b-7155-47d5-a6a7-d2ea18672b35"}
[2026-05-27 12:36:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0eb801fb-3093-4017-962c-06d801a10a73","trace_id":"99fe297b-7155-47d5-a6a7-d2ea18672b35"}
[2026-05-27 12:36:06] local.NOTICE: Monitoring start {"correlation_id":"355a8191-fdda-4e9f-b2d4-5e002515214e","trace_id":"6743c452-a029-45bd-8e47-cfabe28496d8"}
[2026-05-27 12:36:06] local.NOTICE: Monitoring end {"correlation_id":"355a8191-fdda-4e9f-b2d4-5e002515214e","trace_id":"6743c452-a029-45bd-8e47-cfabe28496d8"}
[2026-05-27 12:36:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a","trace_id":"ac1217d6-5e5d-4466-9b47-8946880ebb0b"}
[2026-05-27 12:36:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a","trace_id":"ac1217d6-5e5d-4466-9b47-8946880ebb0b"}
[2026-05-27 12:36:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"90f00b85-f027-43e2-b9e0-946861cdfb51","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"90f00b85-f027-43e2-b9e0-946861cdfb51","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24180576,"real_usage":65011712,"pid":42210} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.58,"average_seconds_per_request":0.58} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":593.42} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":646.6,"usage":24268616,"real_usage":65011712,"pid":42210} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24246528,"real_usage":65011712,"pid":42210} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":23.62,"usage":24234488,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24195248,"real_usage":65011712,"pid":42210} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":109,"team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","provider":"hubspot","status":"disconnected","duration_ms":10.72,"usage":24257312,"real_usage":65011712,"pid":42210,"reason":"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"200ac210-21c8-4677-b562-a0dd4a8bb7aa","trace_id":"8b995657-ab68-439c-86b1-ba462fca3f4d"}
[2026-05-27 12:36:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"200ac210-21c8-4677-b562-a0dd4a8bb7aa","trace_id":"8b995657-ab68-439c-86b1-ba462fca3f4d"}
[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","usage":24214824,"real_usage":65011712,"pid":42210} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"71e3aac5-fb66-47c5-a236-2d051ae3e319","account":null} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":256,"team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","provider":"hubspot","status":"disconnected","duration_ms":49.63,"usage":24230936,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {"inbox_id":59} {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":59} {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {"inbox_id":212} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.WARNING: [Salesforce] Account not connected for user {"userId":"641f1acb-16b8-42d1-8726-df52979dad0e","account":{"Jiminny\\Models\\SocialAccount":{"id":1500,"sociable_id":143,"provider_user_id":"0052g000003frelAAA","expires":null,"refresh_token_expires":null,"provider":"salesforce","state":"full-refresh","auth_scope":"refresh_token web api","retry_after":null,"created_at":"2026-02-06 08:39:03","updated_at":"2026-05-14 09:46:30"}}} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.ERROR: Failed to set service context for google: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":212} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":56,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":168.0,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.88} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:37:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"1d77aff1-8cd7-4126-b383-a9d6f1036b9b","trace_id":"3e459ee7-82d6-4cff-bf3c-725c78c51fe4"}
[2026-05-27 12:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"1d77aff1-8cd7-4126-b383-a9d6f1036b9b","trace_id":"3e459ee7-82d6-4cff-bf3c-725c78c51fe4"}
[2026-05-27 12:37:07] local.NOTICE: Monitoring start {"correlation_id":"6f19b4b6-bdc4-4373-bb83-8026c5ca9541","trace_id":"ce167b98-a0e2-4042-81df-c199e63a7178"}
[2026-05-27 12:37:07] local.NOTICE: Monitoring end {"correlation_id":"6f19b4b6-bdc4-4373-bb83-8026c5ca9541","trace_id":"ce167b98-a0e2-4042-81df-c199e63a7178"}
[2026-05-27 12:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"b1f5b0ea-8979-458f-85fa-9ec8f107f890","trace_id":"3d6c9714-44f6-4182-9ef6-20b0b591ec16"}
[2026-05-27 12:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"b1f5b0ea-8979-458f-85fa-9ec8f107f890","trace_id":"3d6c9714-44f6-4182-9ef6-20b0b591ec16"}
[2026-05-27 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:13] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 1 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"1d77b07e-080e-4829-a50a-4201e4336a52","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"35d4b43f-f881-48b1-b35d-a7a6279d383e","trace_id":"5b39768e-c490-40c1-a320-7d6c0f731049"}
[2026-05-27 12:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"35d4b43f-f881-48b1-b35d-a7a6279d383e","trace_id":"5b39768e-c490-40c1-a320-7d6c0f731049"}
[2026-05-27 12:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"05985339-0f15-4991-8d86-a314a08b894e","trace_id":"e687a910-c51a-4aac-af86-d647fc6f304a"}
[2026-05-27 12:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"05985339-0f15-4991-8d86-a314a08b894e","trace_id":"e687a910-c51a-4aac-af86-d647fc6f304a"}
[2026-05-27 12:38:06] local.NOTICE: Monitoring start {"correlation_id":"33239855-c5df-4bb0-a469-b1654a53d484","trace_id":"81e70b33-817a-41de-a80a-41bc709c8731"}
[2026-05-27 12:38:06] local.NOTICE: Monitoring end {"correlation_id":"33239855-c5df-4bb0-a469-b1654a53d484","trace_id":"81e70b33-817a-41de-a80a-41bc709c8731"}
[2026-05-27 12:38:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"ceda4686-61f9-4efd-9dac-425274190b6c","trace_id":"2a7a6c33-b0c4-4299-8fa7-31759e937e7d"}
[2026-05-27 12:38:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"ceda4686-61f9-4efd-9dac-425274190b6c","trace_id":"2a7a6c33-b0c4-4299-8fa7-31759e937e7d"}
[2026-05-27 12:38:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"764a1ac9-502b-4a6d-ae0b-3820cc718427","trace_id":"f7829e9d-3a75-4e13-867d-1160e876cf07"}
[2026-05-27 12:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"764a1ac9-502b-4a6d-ae0b-3820cc718427","trace_id":"f7829e9d-3a75-4e13-867d-1160e876cf07"}
[2026-05-27 12:39:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"23f10df5-34f4-4e04-85f1-e82db52af5e6","trace_id":"db62bd45-dd20-422c-82cb-7acb7ddb2e06"}
[2026-05-27 12:39:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"23f10df5-34f4-4e04-85f1-e82db52af5e6","trace_id":"db62bd45-dd20-422c-82cb-7acb7ddb2e06"}
[2026-05-27 12:39:06] local.NOTICE: Monitoring start {"correlation_id":"2acea05b-8214-439e-a744-d02f85685068","trace_id":"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd"}
[2026-05-27 12:39:06] local.NOTICE: Monitoring end {"correlation_id":"2acea05b-8214-439e-a744-d02f85685068","trace_id":"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd"}
[2026-05-27 12:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"707d1d04-2d6f-4db8-89b4-e16fe9a83709","trace_id":"6f7049ea-fa50-46e2-8bf5-ed0e5effce45"}
[2026-05-27 12:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"707d1d04-2d6f-4db8-89b4-e16fe9a83709","trace_id":"6f7049ea-fa50-46e2-8bf5-ed0e5effce45"}
[2026-05-27 12:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:12] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:14] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"6ec39f30-28b3-4cc9-8c60-5bc8d0b55e63","trace_id":"e3428bc3-d52e-4a94-8d33-5c246d0bafd6"}
[2026-05-27 12:40:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"28d27090-0dec-46a4-8a79-2c6db1e89d26","trace_id":"6f6d7e96-ec35-4946-ac91-6496125a5291"}
[2026-05-27 12:40:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"28d27090-0dec-46a4-8a79-2c6db1e89d26","trace_id":"6f6d7e96-ec35-4946-ac91-6496125a5291"}
[2026-05-27 12:40:06] local.NOTICE: Monitoring start {"correlation_id":"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d","trace_id":"e8335595-dc87-48b1-a209-abbbe3e404fd"}
[2026-05-27 12:40:06] local.NOTICE: Monitoring end {"correlation_id":"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d","trace_id":"e8335595-dc87-48b1-a209-abbbe3e404fd"}
[2026-05-27 12:40:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0ded3374-9752-49d6-9446-af7f83b45a71","trace_id":"1a8bb850-013c-4a60-a56f-ffda95442111"}
[2026-05-27 12:40:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0ded3374-9752-49d6-9446-af7f83b45a71","trace_id":"1a8bb850-013c-4a60-a56f-ffda95442111"}
[2026-05-27 12:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"ba37789e-2370-41a3-8f54-16bcd1db3b8f","trace_id":"aa2efe6d-9fe6-460b-85ae-1d267b9579ca"}
[2026-05-27 12:40:11] local...
|
78523
|
NULL
|
NULL
|
NULL
|
|
78523
|
2758
|
6
|
2026-05-27T12:42:10.437012+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885730437_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
NotcarotmeViewWindowHelpPwovscors$2 JY-20915-fix-m NotcarotmeViewWindowHelpPwovscors$2 JY-20915-fix-mlTextRelayService.php X20 Moy 207230t720353TODO"Up tracking loas"Fovicon Si create tickerwer.wnoresoonse olctoetekeo. eeonsnotrollureDON:esting5. Galya report enable for all clientEDFOMKMKHscisdeRetinementsp-d201557137894bbebe44beba8600c45t300%L2•Wed 27 May 15:42:10gTextRelayService Test.phpphpjminny.php=.emA1A10 .= custom.log X = laravel.log XSF ([EMAIL] jiminny(localhost& console (PROD)s consoe leu."Value"Оnestonp: 41/0200404545 2040-05-00 00147524ounceKhu"updatedByUserId": 71523846.Contolc STAGING"tinestanp": 1778230152543, # 2826-85-88 88:49:1:sourceld"."user1d:7574840ntion/run | -H "Authorization: Bearer sp.no console nbophe customer_api.phpMoamsioo0o.oneMo haalth oboMaweb cnopp weonook.one> scriptevl storage> O apo>& debugbar> &a frameworkviloasoitionore0 audio wav= custom ogE hubspot-lournal-polllloc=aravelcamnit xmGOEGEAGEESSathe pathetexterelay. 1sonAPPLICATION_CREDENTIALS= • Scredentials):eince thenher suosjiminny-google_text_user'):key: 'jiminny-deploy_region') === 'eu" ? 'catch-all-eu' : 'catch-all'ey: "jiminny-google-text_ host'):RelayService) Starting sync', "mailbox' => Smailbox,'expected alias' => SexpectedAliasPXDPCIPO NOSTL SOXOPCKPCHOST1):seruces ensosreservetalookessaoehsoransosoetsoresenressaoeoseiforeachSnessanelsscony as Shistontes)Snessages = Shistonies-snessagesAdded 22 11:foreach snessages as Smessage)if (l Sthis->isForCurrentenvironment(Sservice, Snailbox, Snessageld, SexpectedALias, SexpectedHost)) 1-contoinue:Cnalnvortoyt= Toytoolsueerhonalt cotmer onst mnaunidon Csoceanoldirseinettusetmestanoaspens, stencet inestano" true.nane": "dealstage","tinestanp": 1773385812311, = 2826-83-12 88:56:52PeouncaWa".requestId": "019ce143-5502-7857-86c1-e4699e3d74Sd*,UNUUUNNNS...
|
NULL
|
-5216568239572785491
|
NULL
|
click
|
ocr
|
NULL
|
NotcarotmeViewWindowHelpPwovscors$2 JY-20915-fix-m NotcarotmeViewWindowHelpPwovscors$2 JY-20915-fix-mlTextRelayService.php X20 Moy 207230t720353TODO"Up tracking loas"Fovicon Si create tickerwer.wnoresoonse olctoetekeo. eeonsnotrollureDON:esting5. Galya report enable for all clientEDFOMKMKHscisdeRetinementsp-d201557137894bbebe44beba8600c45t300%L2•Wed 27 May 15:42:10gTextRelayService Test.phpphpjminny.php=.emA1A10 .= custom.log X = laravel.log XSF ([EMAIL] jiminny(localhost& console (PROD)s consoe leu."Value"Оnestonp: 41/0200404545 2040-05-00 00147524ounceKhu"updatedByUserId": 71523846.Contolc STAGING"tinestanp": 1778230152543, # 2826-85-88 88:49:1:sourceld"."user1d:7574840ntion/run | -H "Authorization: Bearer sp.no console nbophe customer_api.phpMoamsioo0o.oneMo haalth oboMaweb cnopp weonook.one> scriptevl storage> O apo>& debugbar> &a frameworkviloasoitionore0 audio wav= custom ogE hubspot-lournal-polllloc=aravelcamnit xmGOEGEAGEESSathe pathetexterelay. 1sonAPPLICATION_CREDENTIALS= • Scredentials):eince thenher suosjiminny-google_text_user'):key: 'jiminny-deploy_region') === 'eu" ? 'catch-all-eu' : 'catch-all'ey: "jiminny-google-text_ host'):RelayService) Starting sync', "mailbox' => Smailbox,'expected alias' => SexpectedAliasPXDPCIPO NOSTL SOXOPCKPCHOST1):seruces ensosreservetalookessaoehsoransosoetsoresenressaoeoseiforeachSnessanelsscony as Shistontes)Snessages = Shistonies-snessagesAdded 22 11:foreach snessages as Smessage)if (l Sthis->isForCurrentenvironment(Sservice, Snailbox, Snessageld, SexpectedALias, SexpectedHost)) 1-contoinue:Cnalnvortoyt= Toytoolsueerhonalt cotmer onst mnaunidon Csoceanoldirseinettusetmestanoaspens, stencet inestano" true.nane": "dealstage","tinestanp": 1773385812311, = 2826-83-12 88:56:52PeouncaWa".requestId": "019ce143-5502-7857-86c1-e4699e3d74Sd*,UNUUUNNNS...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78522
|
2757
|
5
|
2026-05-27T12:42:10.543065+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885730543_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:36:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0eb801fb-3093-4017-962c-06d801a10a73","trace_id":"99fe297b-7155-47d5-a6a7-d2ea18672b35"}
[2026-05-27 12:36:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0eb801fb-3093-4017-962c-06d801a10a73","trace_id":"99fe297b-7155-47d5-a6a7-d2ea18672b35"}
[2026-05-27 12:36:06] local.NOTICE: Monitoring start {"correlation_id":"355a8191-fdda-4e9f-b2d4-5e002515214e","trace_id":"6743c452-a029-45bd-8e47-cfabe28496d8"}
[2026-05-27 12:36:06] local.NOTICE: Monitoring end {"correlation_id":"355a8191-fdda-4e9f-b2d4-5e002515214e","trace_id":"6743c452-a029-45bd-8e47-cfabe28496d8"}
[2026-05-27 12:36:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a","trace_id":"ac1217d6-5e5d-4466-9b47-8946880ebb0b"}
[2026-05-27 12:36:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a","trace_id":"ac1217d6-5e5d-4466-9b47-8946880ebb0b"}
[2026-05-27 12:36:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"90f00b85-f027-43e2-b9e0-946861cdfb51","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"90f00b85-f027-43e2-b9e0-946861cdfb51","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24180576,"real_usage":65011712,"pid":42210} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.58,"average_seconds_per_request":0.58} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":593.42} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":646.6,"usage":24268616,"real_usage":65011712,"pid":42210} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24246528,"real_usage":65011712,"pid":42210} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":23.62,"usage":24234488,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24195248,"real_usage":65011712,"pid":42210} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":109,"team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","provider":"hubspot","status":"disconnected","duration_ms":10.72,"usage":24257312,"real_usage":65011712,"pid":42210,"reason":"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"200ac210-21c8-4677-b562-a0dd4a8bb7aa","trace_id":"8b995657-ab68-439c-86b1-ba462fca3f4d"}
[2026-05-27 12:36:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"200ac210-21c8-4677-b562-a0dd4a8bb7aa","trace_id":"8b995657-ab68-439c-86b1-ba462fca3f4d"}
[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","usage":24214824,"real_usage":65011712,"pid":42210} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"71e3aac5-fb66-47c5-a236-2d051ae3e319","account":null} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":256,"team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","provider":"hubspot","status":"disconnected","duration_ms":49.63,"usage":24230936,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {"inbox_id":59} {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":59} {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {"inbox_id":212} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.WARNING: [Salesforce] Account not connected for user {"userId":"641f1acb-16b8-42d1-8726-df52979dad0e","account":{"Jiminny\\Models\\SocialAccount":{"id":1500,"sociable_id":143,"provider_user_id":"0052g000003frelAAA","expires":null,"refresh_token_expires":null,"provider":"salesforce","state":"full-refresh","auth_scope":"refresh_token web api","retry_after":null,"created_at":"2026-02-06 08:39:03","updated_at":"2026-05-14 09:46:30"}}} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.ERROR: Failed to set service context for google: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":212} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":56,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":168.0,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.88} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:37:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"1d77aff1-8cd7-4126-b383-a9d6f1036b9b","trace_id":"3e459ee7-82d6-4cff-bf3c-725c78c51fe4"}
[2026-05-27 12:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"1d77aff1-8cd7-4126-b383-a9d6f1036b9b","trace_id":"3e459ee7-82d6-4cff-bf3c-725c78c51fe4"}
[2026-05-27 12:37:07] local.NOTICE: Monitoring start {"correlation_id":"6f19b4b6-bdc4-4373-bb83-8026c5ca9541","trace_id":"ce167b98-a0e2-4042-81df-c199e63a7178"}
[2026-05-27 12:37:07] local.NOTICE: Monitoring end {"correlation_id":"6f19b4b6-bdc4-4373-bb83-8026c5ca9541","trace_id":"ce167b98-a0e2-4042-81df-c199e63a7178"}
[2026-05-27 12:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"b1f5b0ea-8979-458f-85fa-9ec8f107f890","trace_id":"3d6c9714-44f6-4182-9ef6-20b0b591ec16"}
[2026-05-27 12:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"b1f5b0ea-8979-458f-85fa-9ec8f107f890","trace_id":"3d6c9714-44f6-4182-9ef6-20b0b591ec16"}
[2026-05-27 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:13] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 1 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"1d77b07e-080e-4829-a50a-4201e4336a52","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"35d4b43f-f881-48b1-b35d-a7a6279d383e","trace_id":"5b39768e-c490-40c1-a320-7d6c0f731049"}
[2026-05-27 12:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"35d4b43f-f881-48b1-b35d-a7a6279d383e","trace_id":"5b39768e-c490-40c1-a320-7d6c0f731049"}
[2026-05-27 12:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"05985339-0f15-4991-8d86-a314a08b894e","trace_id":"e687a910-c51a-4aac-af86-d647fc6f304a"}
[2026-05-27 12:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"05985339-0f15-4991-8d86-a314a08b894e","trace_id":"e687a910-c51a-4aac-af86-d647fc6f304a"}
[2026-05-27 12:38:06] local.NOTICE: Monitoring start {"correlation_id":"33239855-c5df-4bb0-a469-b1654a53d484","trace_id":"81e70b33-817a-41de-a80a-41bc709c8731"}
[2026-05-27 12:38:06] local.NOTICE: Monitoring end {"correlation_id":"33239855-c5df-4bb0-a469-b1654a53d484","trace_id":"81e70b33-817a-41de-a80a-41bc709c8731"}
[2026-05-27 12:38:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"ceda4686-61f9-4efd-9dac-425274190b6c","trace_id":"2a7a6c33-b0c4-4299-8fa7-31759e937e7d"}
[2026-05-27 12:38:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"ceda4686-61f9-4efd-9dac-425274190b6c","trace_id":"2a7a6c33-b0c4-4299-8fa7-31759e937e7d"}
[2026-05-27 12:38:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"764a1ac9-502b-4a6d-ae0b-3820cc718427","trace_id":"f7829e9d-3a75-4e13-867d-1160e876cf07"}
[2026-05-27 12:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"764a1ac9-502b-4a6d-ae0b-3820cc718427","trace_id":"f7829e9d-3a75-4e13-867d-1160e876cf07"}
[2026-05-27 12:39:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"23f10df5-34f4-4e04-85f1-e82db52af5e6","trace_id":"db62bd45-dd20-422c-82cb-7acb7ddb2e06"}
[2026-05-27 12:39:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"23f10df5-34f4-4e04-85f1-e82db52af5e6","trace_id":"db62bd45-dd20-422c-82cb-7acb7ddb2e06"}
[2026-05-27 12:39:06] local.NOTICE: Monitoring start {"correlation_id":"2acea05b-8214-439e-a744-d02f85685068","trace_id":"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd"}
[2026-05-27 12:39:06] local.NOTICE: Monitoring end {"correlation_id":"2acea05b-8214-439e-a744-d02f85685068","trace_id":"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd"}
[2026-05-27 12:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"707d1d04-2d6f-4db8-89b4-e16fe9a83709","trace_id":"6f7049ea-fa50-46e2-8bf5-ed0e5effce45"}
[2026-05-27 12:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"707d1d04-2d6f-4db8-89b4-e16fe9a83709","trace_id":"6f7049ea-fa50-46e2-8bf5-ed0e5effce45"}
[2026-05-27 12:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:12] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:14] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"6ec39f30-28b3-4cc9-8c60-5bc8d0b55e63","trace_id":"e3428bc3-d52e-4a94-8d33-5c246d0bafd6"}
[2026-05-27 12:40:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"28d27090-0dec-46a4-8a79-2c6db1e89d26","trace_id":"6f6d7e96-ec35-4946-ac91-6496125a5291"}
[2026-05-27 12:40:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"28d27090-0dec-46a4-8a79-2c6db1e89d26","trace_id":"6f6d7e96-ec35-4946-ac91-6496125a5291"}
[2026-05-27 12:40:06] local.NOTICE: Monitoring start {"correlation_id":"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d","trace_id":"e8335595-dc87-48b1-a209-abbbe3e404fd"}
[2026-05-27 12:40:06] local.NOTICE: Monitoring end {"correlation_id":"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d","trace_id":"e8335595-dc87-48b1-a209-abbbe3e404fd"}
[2026-05-27 12:40:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0ded3374-9752-49d6-9446-af7f83b45a71","trace_id":"1a8bb850-013c-4a60-a56f-ffda95442111"}
[2026-05-27 12:40:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0ded3374-9752-49d6-9446-af7f83b45a71","trace_id":"1a8bb850-013c-4a60-a56f-ffda95442111"}
[2026-05-27 12:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"ba37789e-2370-41a3-8f54-16bcd1db3b8f","trace_id":"aa2efe6d-9fe6-460b-85ae-1d267b9579ca"}
[2026-05-27 12:40:11] local...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-27 12:36:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0eb801fb-3093-4017-962c-06d801a10a73\",\"trace_id\":\"99fe297b-7155-47d5-a6a7-d2ea18672b35\"}\n[2026-05-27 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0eb801fb-3093-4017-962c-06d801a10a73\",\"trace_id\":\"99fe297b-7155-47d5-a6a7-d2ea18672b35\"}\n[2026-05-27 12:36:06] local.NOTICE: Monitoring start {\"correlation_id\":\"355a8191-fdda-4e9f-b2d4-5e002515214e\",\"trace_id\":\"6743c452-a029-45bd-8e47-cfabe28496d8\"}\n[2026-05-27 12:36:06] local.NOTICE: Monitoring end {\"correlation_id\":\"355a8191-fdda-4e9f-b2d4-5e002515214e\",\"trace_id\":\"6743c452-a029-45bd-8e47-cfabe28496d8\"}\n[2026-05-27 12:36:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a\",\"trace_id\":\"ac1217d6-5e5d-4466-9b47-8946880ebb0b\"}\n[2026-05-27 12:36:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a\",\"trace_id\":\"ac1217d6-5e5d-4466-9b47-8946880ebb0b\"}\n[2026-05-27 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"90f00b85-f027-43e2-b9e0-946861cdfb51\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"90f00b85-f027-43e2-b9e0-946861cdfb51\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24180576,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.58,\"average_seconds_per_request\":0.58} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":593.42} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":646.6,\"usage\":24268616,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24246528,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":23.62,\"usage\":24234488,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24195248,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":10.72,\"usage\":24257312,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"200ac210-21c8-4677-b562-a0dd4a8bb7aa\",\"trace_id\":\"8b995657-ab68-439c-86b1-ba462fca3f4d\"}\n[2026-05-27 12:36:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"200ac210-21c8-4677-b562-a0dd4a8bb7aa\",\"trace_id\":\"8b995657-ab68-439c-86b1-ba462fca3f4d\"}\n[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24214824,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":49.63,\"usage\":24230936,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"641f1acb-16b8-42d1-8726-df52979dad0e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1500,\"sociable_id\":143,\"provider_user_id\":\"0052g000003frelAAA\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2026-02-06 08:39:03\",\"updated_at\":\"2026-05-14 09:46:30\"}}} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.ERROR: Failed to set service context for google: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":168.0,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:37:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"1d77aff1-8cd7-4126-b383-a9d6f1036b9b\",\"trace_id\":\"3e459ee7-82d6-4cff-bf3c-725c78c51fe4\"}\n[2026-05-27 12:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"1d77aff1-8cd7-4126-b383-a9d6f1036b9b\",\"trace_id\":\"3e459ee7-82d6-4cff-bf3c-725c78c51fe4\"}\n[2026-05-27 12:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"6f19b4b6-bdc4-4373-bb83-8026c5ca9541\",\"trace_id\":\"ce167b98-a0e2-4042-81df-c199e63a7178\"}\n[2026-05-27 12:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"6f19b4b6-bdc4-4373-bb83-8026c5ca9541\",\"trace_id\":\"ce167b98-a0e2-4042-81df-c199e63a7178\"}\n[2026-05-27 12:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b1f5b0ea-8979-458f-85fa-9ec8f107f890\",\"trace_id\":\"3d6c9714-44f6-4182-9ef6-20b0b591ec16\"}\n[2026-05-27 12:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b1f5b0ea-8979-458f-85fa-9ec8f107f890\",\"trace_id\":\"3d6c9714-44f6-4182-9ef6-20b0b591ec16\"}\n[2026-05-27 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:13] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"1d77b07e-080e-4829-a50a-4201e4336a52\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"35d4b43f-f881-48b1-b35d-a7a6279d383e\",\"trace_id\":\"5b39768e-c490-40c1-a320-7d6c0f731049\"}\n[2026-05-27 12:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"35d4b43f-f881-48b1-b35d-a7a6279d383e\",\"trace_id\":\"5b39768e-c490-40c1-a320-7d6c0f731049\"}\n[2026-05-27 12:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"05985339-0f15-4991-8d86-a314a08b894e\",\"trace_id\":\"e687a910-c51a-4aac-af86-d647fc6f304a\"}\n[2026-05-27 12:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"05985339-0f15-4991-8d86-a314a08b894e\",\"trace_id\":\"e687a910-c51a-4aac-af86-d647fc6f304a\"}\n[2026-05-27 12:38:06] local.NOTICE: Monitoring start {\"correlation_id\":\"33239855-c5df-4bb0-a469-b1654a53d484\",\"trace_id\":\"81e70b33-817a-41de-a80a-41bc709c8731\"}\n[2026-05-27 12:38:06] local.NOTICE: Monitoring end {\"correlation_id\":\"33239855-c5df-4bb0-a469-b1654a53d484\",\"trace_id\":\"81e70b33-817a-41de-a80a-41bc709c8731\"}\n[2026-05-27 12:38:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ceda4686-61f9-4efd-9dac-425274190b6c\",\"trace_id\":\"2a7a6c33-b0c4-4299-8fa7-31759e937e7d\"}\n[2026-05-27 12:38:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ceda4686-61f9-4efd-9dac-425274190b6c\",\"trace_id\":\"2a7a6c33-b0c4-4299-8fa7-31759e937e7d\"}\n[2026-05-27 12:38:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"764a1ac9-502b-4a6d-ae0b-3820cc718427\",\"trace_id\":\"f7829e9d-3a75-4e13-867d-1160e876cf07\"}\n[2026-05-27 12:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"764a1ac9-502b-4a6d-ae0b-3820cc718427\",\"trace_id\":\"f7829e9d-3a75-4e13-867d-1160e876cf07\"}\n[2026-05-27 12:39:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"23f10df5-34f4-4e04-85f1-e82db52af5e6\",\"trace_id\":\"db62bd45-dd20-422c-82cb-7acb7ddb2e06\"}\n[2026-05-27 12:39:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"23f10df5-34f4-4e04-85f1-e82db52af5e6\",\"trace_id\":\"db62bd45-dd20-422c-82cb-7acb7ddb2e06\"}\n[2026-05-27 12:39:06] local.NOTICE: Monitoring start {\"correlation_id\":\"2acea05b-8214-439e-a744-d02f85685068\",\"trace_id\":\"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd\"}\n[2026-05-27 12:39:06] local.NOTICE: Monitoring end {\"correlation_id\":\"2acea05b-8214-439e-a744-d02f85685068\",\"trace_id\":\"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd\"}\n[2026-05-27 12:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"707d1d04-2d6f-4db8-89b4-e16fe9a83709\",\"trace_id\":\"6f7049ea-fa50-46e2-8bf5-ed0e5effce45\"}\n[2026-05-27 12:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"707d1d04-2d6f-4db8-89b4-e16fe9a83709\",\"trace_id\":\"6f7049ea-fa50-46e2-8bf5-ed0e5effce45\"}\n[2026-05-27 12:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:12] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:14] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"6ec39f30-28b3-4cc9-8c60-5bc8d0b55e63\",\"trace_id\":\"e3428bc3-d52e-4a94-8d33-5c246d0bafd6\"}\n[2026-05-27 12:40:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"28d27090-0dec-46a4-8a79-2c6db1e89d26\",\"trace_id\":\"6f6d7e96-ec35-4946-ac91-6496125a5291\"}\n[2026-05-27 12:40:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"28d27090-0dec-46a4-8a79-2c6db1e89d26\",\"trace_id\":\"6f6d7e96-ec35-4946-ac91-6496125a5291\"}\n[2026-05-27 12:40:06] local.NOTICE: Monitoring start {\"correlation_id\":\"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d\",\"trace_id\":\"e8335595-dc87-48b1-a209-abbbe3e404fd\"}\n[2026-05-27 12:40:06] local.NOTICE: Monitoring end {\"correlation_id\":\"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d\",\"trace_id\":\"e8335595-dc87-48b1-a209-abbbe3e404fd\"}\n[2026-05-27 12:40:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0ded3374-9752-49d6-9446-af7f83b45a71\",\"trace_id\":\"1a8bb850-013c-4a60-a56f-ffda95442111\"}\n[2026-05-27 12:40:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0ded3374-9752-49d6-9446-af7f83b45a71\",\"trace_id\":\"1a8bb850-013c-4a60-a56f-ffda95442111\"}\n[2026-05-27 12:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ba37789e-2370-41a3-8f54-16bcd1db3b8f\",\"trace_id\":\"aa2efe6d-9fe6-460b-85ae-1d267b9579ca\"}\n[2026-05-27 12:40:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ba37789e-2370-41a3-8f54-16bcd1db3b8f\",\"trace_id\":\"aa2efe6d-9fe6-460b-85ae-1d267b9579ca\"}\n[2026-05-27 12:40:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:15] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:30:00, 2026-05-27 12:35:00] {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:35:00] {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:35\",\"to\":\"12:40\"} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:30\",\"to\":\"02:35\"} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:19] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"29fe7a5d-04c0-4618-a38c-acdcf1323d4b\",\"trace_id\":\"a7680682-ab33-409d-adc8-06401aaa9f32\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b4c3a371-38b2-4623-ae4e-414913d723b0\",\"trace_id\":\"dfe78599-b05f-4de0-a1a3-5ecea08f7962\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b4c3a371-38b2-4623-ae4e-414913d723b0\",\"trace_id\":\"dfe78599-b05f-4de0-a1a3-5ecea08f7962\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:42:22.914391Z\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"29fe7a5d-04c0-4618-a38c-acdcf1323d4b\",\"trace_id\":\"a7680682-ab33-409d-adc8-06401aaa9f32\"}\n[2026-05-27 12:40:23] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c258ac08-319e-4931-ab30-0c8d942335e6\",\"trace_id\":\"d2c818ab-1e72-469f-a915-96b2fa2c0beb\"}\n[2026-05-27 12:40:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c258ac08-319e-4931-ab30-0c8d942335e6\",\"trace_id\":\"d2c818ab-1e72-469f-a915-96b2fa2c0beb\"}\n[2026-05-27 12:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"20f61214-d28a-40da-a9dc-b74548047166\",\"trace_id\":\"6f549906-eaf0-40f9-a343-0eb858739e06\"}\n[2026-05-27 12:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"20f61214-d28a-40da-a9dc-b74548047166\",\"trace_id\":\"6f549906-eaf0-40f9-a343-0eb858739e06\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7c19c38c-69bf-4f5a-8626-a2a5c10224b0\",\"trace_id\":\"abde10f3-04bc-4081-9793-cc7eb58acce5\"}\n[2026-05-27 12:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7c19c38c-69bf-4f5a-8626-a2a5c10224b0\",\"trace_id\":\"abde10f3-04bc-4081-9793-cc7eb58acce5\"}\n[2026-05-27 12:41:06] local.NOTICE: Monitoring start {\"correlation_id\":\"a623051b-9914-4f21-8a54-5e09559d4b76\",\"trace_id\":\"3634f950-eda4-46a6-ab50-4d7462e2d042\"}\n[2026-05-27 12:41:06] local.NOTICE: Monitoring end {\"correlation_id\":\"a623051b-9914-4f21-8a54-5e09559d4b76\",\"trace_id\":\"3634f950-eda4-46a6-ab50-4d7462e2d042\"}\n[2026-05-27 12:41:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7b61940d-288f-4bd2-a9ac-ae496eebbdb2\",\"trace_id\":\"6d624f5a-a411-404e-8856-1ea7aa57cfac\"}\n[2026-05-27 12:41:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7b61940d-288f-4bd2-a9ac-ae496eebbdb2\",\"trace_id\":\"6d624f5a-a411-404e-8856-1ea7aa57cfac\"}\n[2026-05-27 12:41:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f2594895-b121-404b-b64d-a048786e75d1\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f2594895-b121-404b-b64d-a048786e75d1\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24192296,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.25,\"average_seconds_per_request\":0.25} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":250.95} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":292.67,\"usage\":24279960,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24257872,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":12.97,\"usage\":24245832,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24206592,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":5.88,\"usage\":24268656,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24226168,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":5.03,\"usage\":24242280,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:18] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:18] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":186.9,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:42:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d4d40e6a-e1fe-4e18-a293-b52558c1e370\",\"trace_id\":\"e972e469-8bf6-45bd-870b-6b39c0008b34\"}\n[2026-05-27 12:42:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d4d40e6a-e1fe-4e18-a293-b52558c1e370\",\"trace_id\":\"e972e469-8bf6-45bd-870b-6b39c0008b34\"}\n[2026-05-27 12:42:05] local.NOTICE: Monitoring start {\"correlation_id\":\"4c9b92e1-47d8-4b8f-b86e-b5213797cb2c\",\"trace_id\":\"23a7e5f2-50b0-462c-a82a-65e27b13aef7\"}\n[2026-05-27 12:42:05] local.NOTICE: Monitoring end {\"correlation_id\":\"4c9b92e1-47d8-4b8f-b86e-b5213797cb2c\",\"trace_id\":\"23a7e5f2-50b0-462c-a82a-65e27b13aef7\"}","depth":4,"on_screen":true,"value":"[2026-05-27 12:36:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"dcf24093-4455-46d4-9282-4a2581ed1bc6\",\"trace_id\":\"96d8032a-1905-4903-be5c-e9405c095aef\"}\n[2026-05-27 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0eb801fb-3093-4017-962c-06d801a10a73\",\"trace_id\":\"99fe297b-7155-47d5-a6a7-d2ea18672b35\"}\n[2026-05-27 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0eb801fb-3093-4017-962c-06d801a10a73\",\"trace_id\":\"99fe297b-7155-47d5-a6a7-d2ea18672b35\"}\n[2026-05-27 12:36:06] local.NOTICE: Monitoring start {\"correlation_id\":\"355a8191-fdda-4e9f-b2d4-5e002515214e\",\"trace_id\":\"6743c452-a029-45bd-8e47-cfabe28496d8\"}\n[2026-05-27 12:36:06] local.NOTICE: Monitoring end {\"correlation_id\":\"355a8191-fdda-4e9f-b2d4-5e002515214e\",\"trace_id\":\"6743c452-a029-45bd-8e47-cfabe28496d8\"}\n[2026-05-27 12:36:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a\",\"trace_id\":\"ac1217d6-5e5d-4466-9b47-8946880ebb0b\"}\n[2026-05-27 12:36:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a\",\"trace_id\":\"ac1217d6-5e5d-4466-9b47-8946880ebb0b\"}\n[2026-05-27 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"833fa7f5-4850-4d9e-b43d-fe1797b647af\",\"trace_id\":\"1384fbdf-1d76-4e15-9868-ebb8da257c8a\"}\n[2026-05-27 12:36:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8\",\"trace_id\":\"1d750b03-aa19-4619-a227-fcc03a45b770\"}\n[2026-05-27 12:36:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"90f00b85-f027-43e2-b9e0-946861cdfb51\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"90f00b85-f027-43e2-b9e0-946861cdfb51\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24180576,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.58,\"average_seconds_per_request\":0.58} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":593.42} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":646.6,\"usage\":24268616,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"79fca9e9-5a21-452c-9c00-6c8b150a9e0f\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24246528,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":23.62,\"usage\":24234488,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24195248,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":10.72,\"usage\":24257312,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"3483c3db-4a61-48ce-98e6-0161516e75e2\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"200ac210-21c8-4677-b562-a0dd4a8bb7aa\",\"trace_id\":\"8b995657-ab68-439c-86b1-ba462fca3f4d\"}\n[2026-05-27 12:36:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"200ac210-21c8-4677-b562-a0dd4a8bb7aa\",\"trace_id\":\"8b995657-ab68-439c-86b1-ba462fca3f4d\"}\n[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24214824,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":49.63,\"usage\":24230936,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"460dca4b-02d5-43c8-84dc-ac61ff551b40\",\"trace_id\":\"84bc4955-185c-4e9f-a049-1469983354dc\"}\n[2026-05-27 12:36:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cfff3469-314f-4fc5-b975-90204441b4a5\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"0de516de-9f67-4aac-a228-5bce0b9cae18\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"641f1acb-16b8-42d1-8726-df52979dad0e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1500,\"sociable_id\":143,\"provider_user_id\":\"0052g000003frelAAA\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2026-02-06 08:39:03\",\"updated_at\":\"2026-05-14 09:46:30\"}}} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.ERROR: Failed to set service context for google: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:19] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"dcf90e7e-f15f-4d68-96d5-4637d561bc8a\",\"trace_id\":\"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":168.0,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:37:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f7111cf8-923f-4249-a7e6-22bc9c6da875\",\"trace_id\":\"0277779e-61f4-46a9-8c06-68a1e14548a9\"}\n[2026-05-27 12:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"1d77aff1-8cd7-4126-b383-a9d6f1036b9b\",\"trace_id\":\"3e459ee7-82d6-4cff-bf3c-725c78c51fe4\"}\n[2026-05-27 12:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"1d77aff1-8cd7-4126-b383-a9d6f1036b9b\",\"trace_id\":\"3e459ee7-82d6-4cff-bf3c-725c78c51fe4\"}\n[2026-05-27 12:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"6f19b4b6-bdc4-4373-bb83-8026c5ca9541\",\"trace_id\":\"ce167b98-a0e2-4042-81df-c199e63a7178\"}\n[2026-05-27 12:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"6f19b4b6-bdc4-4373-bb83-8026c5ca9541\",\"trace_id\":\"ce167b98-a0e2-4042-81df-c199e63a7178\"}\n[2026-05-27 12:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b1f5b0ea-8979-458f-85fa-9ec8f107f890\",\"trace_id\":\"3d6c9714-44f6-4182-9ef6-20b0b591ec16\"}\n[2026-05-27 12:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b1f5b0ea-8979-458f-85fa-9ec8f107f890\",\"trace_id\":\"3d6c9714-44f6-4182-9ef6-20b0b591ec16\"}\n[2026-05-27 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6de9ec5b-fef1-46dc-af6f-6efd7159b14c\",\"trace_id\":\"44823d7e-2f30-4f2b-b473-57b40b8e3a32\"}\n[2026-05-27 12:37:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8ca29b95-53d5-49b3-974a-bd619436381c\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:13] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"1d77b07e-080e-4829-a50a-4201e4336a52\",\"trace_id\":\"559e80b1-5084-40ec-a006-c4079fb82e1a\"}\n[2026-05-27 12:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"35d4b43f-f881-48b1-b35d-a7a6279d383e\",\"trace_id\":\"5b39768e-c490-40c1-a320-7d6c0f731049\"}\n[2026-05-27 12:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"35d4b43f-f881-48b1-b35d-a7a6279d383e\",\"trace_id\":\"5b39768e-c490-40c1-a320-7d6c0f731049\"}\n[2026-05-27 12:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0a7f0331-2b33-4388-b36d-b10596474999\",\"trace_id\":\"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5\"}\n[2026-05-27 12:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"05985339-0f15-4991-8d86-a314a08b894e\",\"trace_id\":\"e687a910-c51a-4aac-af86-d647fc6f304a\"}\n[2026-05-27 12:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"05985339-0f15-4991-8d86-a314a08b894e\",\"trace_id\":\"e687a910-c51a-4aac-af86-d647fc6f304a\"}\n[2026-05-27 12:38:06] local.NOTICE: Monitoring start {\"correlation_id\":\"33239855-c5df-4bb0-a469-b1654a53d484\",\"trace_id\":\"81e70b33-817a-41de-a80a-41bc709c8731\"}\n[2026-05-27 12:38:06] local.NOTICE: Monitoring end {\"correlation_id\":\"33239855-c5df-4bb0-a469-b1654a53d484\",\"trace_id\":\"81e70b33-817a-41de-a80a-41bc709c8731\"}\n[2026-05-27 12:38:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ceda4686-61f9-4efd-9dac-425274190b6c\",\"trace_id\":\"2a7a6c33-b0c4-4299-8fa7-31759e937e7d\"}\n[2026-05-27 12:38:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ceda4686-61f9-4efd-9dac-425274190b6c\",\"trace_id\":\"2a7a6c33-b0c4-4299-8fa7-31759e937e7d\"}\n[2026-05-27 12:38:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b4bcbc0-01ae-4255-9bf6-ad0227189cae\",\"trace_id\":\"4e72b4d7-c681-4248-8937-3c67e3fbd58d\"}\n[2026-05-27 12:38:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9aff710c-8d60-4841-a3b2-4032ca3413c6\",\"trace_id\":\"4413a568-2935-486c-91f9-d031a51c69cc\"}\n[2026-05-27 12:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"764a1ac9-502b-4a6d-ae0b-3820cc718427\",\"trace_id\":\"f7829e9d-3a75-4e13-867d-1160e876cf07\"}\n[2026-05-27 12:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"764a1ac9-502b-4a6d-ae0b-3820cc718427\",\"trace_id\":\"f7829e9d-3a75-4e13-867d-1160e876cf07\"}\n[2026-05-27 12:39:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"113c64b0-f004-4000-94a7-78ce58c626b2\",\"trace_id\":\"728eddb5-54b0-487a-91a7-8b0032c5bb78\"}\n[2026-05-27 12:39:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"23f10df5-34f4-4e04-85f1-e82db52af5e6\",\"trace_id\":\"db62bd45-dd20-422c-82cb-7acb7ddb2e06\"}\n[2026-05-27 12:39:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"23f10df5-34f4-4e04-85f1-e82db52af5e6\",\"trace_id\":\"db62bd45-dd20-422c-82cb-7acb7ddb2e06\"}\n[2026-05-27 12:39:06] local.NOTICE: Monitoring start {\"correlation_id\":\"2acea05b-8214-439e-a744-d02f85685068\",\"trace_id\":\"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd\"}\n[2026-05-27 12:39:06] local.NOTICE: Monitoring end {\"correlation_id\":\"2acea05b-8214-439e-a744-d02f85685068\",\"trace_id\":\"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd\"}\n[2026-05-27 12:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"707d1d04-2d6f-4db8-89b4-e16fe9a83709\",\"trace_id\":\"6f7049ea-fa50-46e2-8bf5-ed0e5effce45\"}\n[2026-05-27 12:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"707d1d04-2d6f-4db8-89b4-e16fe9a83709\",\"trace_id\":\"6f7049ea-fa50-46e2-8bf5-ed0e5effce45\"}\n[2026-05-27 12:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"07eef107-678e-444c-b7a5-0cd0737b4fbf\",\"trace_id\":\"a3272e8e-c5ea-42cb-b073-3debce3e06fe\"}\n[2026-05-27 12:39:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:12] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b001759e-46c2-4b1b-8752-92cd1d2aad3b\",\"trace_id\":\"ee540c60-c191-444e-acfa-a9d7ae0ab9b0\"}\n[2026-05-27 12:39:14] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"6ec39f30-28b3-4cc9-8c60-5bc8d0b55e63\",\"trace_id\":\"e3428bc3-d52e-4a94-8d33-5c246d0bafd6\"}\n[2026-05-27 12:40:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c8027067-1a7b-4920-ab15-acac10f5730c\",\"trace_id\":\"ec37bb49-9131-40f3-8033-23fbd7a032ad\"}\n[2026-05-27 12:40:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"28d27090-0dec-46a4-8a79-2c6db1e89d26\",\"trace_id\":\"6f6d7e96-ec35-4946-ac91-6496125a5291\"}\n[2026-05-27 12:40:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"28d27090-0dec-46a4-8a79-2c6db1e89d26\",\"trace_id\":\"6f6d7e96-ec35-4946-ac91-6496125a5291\"}\n[2026-05-27 12:40:06] local.NOTICE: Monitoring start {\"correlation_id\":\"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d\",\"trace_id\":\"e8335595-dc87-48b1-a209-abbbe3e404fd\"}\n[2026-05-27 12:40:06] local.NOTICE: Monitoring end {\"correlation_id\":\"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d\",\"trace_id\":\"e8335595-dc87-48b1-a209-abbbe3e404fd\"}\n[2026-05-27 12:40:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0ded3374-9752-49d6-9446-af7f83b45a71\",\"trace_id\":\"1a8bb850-013c-4a60-a56f-ffda95442111\"}\n[2026-05-27 12:40:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0ded3374-9752-49d6-9446-af7f83b45a71\",\"trace_id\":\"1a8bb850-013c-4a60-a56f-ffda95442111\"}\n[2026-05-27 12:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d587c208-942b-4199-bfb0-35831bdc80d5\",\"trace_id\":\"93cc7bc8-613a-4737-8ed1-06d35111a6f2\"}\n[2026-05-27 12:40:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"588009b6-a95e-4566-9da5-f103a68ae30e\",\"trace_id\":\"14af6725-02bf-4a28-b860-aa71fea555bc\"}\n[2026-05-27 12:40:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ba37789e-2370-41a3-8f54-16bcd1db3b8f\",\"trace_id\":\"aa2efe6d-9fe6-460b-85ae-1d267b9579ca\"}\n[2026-05-27 12:40:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ba37789e-2370-41a3-8f54-16bcd1db3b8f\",\"trace_id\":\"aa2efe6d-9fe6-460b-85ae-1d267b9579ca\"}\n[2026-05-27 12:40:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"57a796bc-8e15-4be9-899a-9bd703e6f5c4\",\"trace_id\":\"33a6cea2-d2de-4876-9401-1027c3e18fd2\"}\n[2026-05-27 12:40:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:15] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4c4c19e4-2976-4f45-847d-833100ba05c1\",\"trace_id\":\"9efcfc6d-83ef-4274-90f6-0893a53f4fe5\"}\n[2026-05-27 12:40:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:30:00, 2026-05-27 12:35:00] {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:35:00] {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d41b4d97-536b-46c8-b13b-793c861b8a16\",\"trace_id\":\"576e4378-6725-40af-af35-6f2a5118e0f6\"}\n[2026-05-27 12:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:35\",\"to\":\"12:40\"} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:30\",\"to\":\"02:35\"} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"18b2d945-db41-490a-8ced-e2df01e4e9d4\",\"trace_id\":\"7894269d-2bee-4d88-a8aa-14718da32b58\"}\n[2026-05-27 12:40:19] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] 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\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:20] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"9aa5f957-7abb-4410-842d-877e3397cbd1\",\"trace_id\":\"2b14af28-93c7-4b91-87fa-e387e8b2f8a5\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"29fe7a5d-04c0-4618-a38c-acdcf1323d4b\",\"trace_id\":\"a7680682-ab33-409d-adc8-06401aaa9f32\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b4c3a371-38b2-4623-ae4e-414913d723b0\",\"trace_id\":\"dfe78599-b05f-4de0-a1a3-5ecea08f7962\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b4c3a371-38b2-4623-ae4e-414913d723b0\",\"trace_id\":\"dfe78599-b05f-4de0-a1a3-5ecea08f7962\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:42:22.914391Z\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"29fe7a5d-04c0-4618-a38c-acdcf1323d4b\",\"trace_id\":\"a7680682-ab33-409d-adc8-06401aaa9f32\"}\n[2026-05-27 12:40:23] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c258ac08-319e-4931-ab30-0c8d942335e6\",\"trace_id\":\"d2c818ab-1e72-469f-a915-96b2fa2c0beb\"}\n[2026-05-27 12:40:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c258ac08-319e-4931-ab30-0c8d942335e6\",\"trace_id\":\"d2c818ab-1e72-469f-a915-96b2fa2c0beb\"}\n[2026-05-27 12:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"20f61214-d28a-40da-a9dc-b74548047166\",\"trace_id\":\"6f549906-eaf0-40f9-a343-0eb858739e06\"}\n[2026-05-27 12:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"20f61214-d28a-40da-a9dc-b74548047166\",\"trace_id\":\"6f549906-eaf0-40f9-a343-0eb858739e06\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:28] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:33] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:40:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"acba19c7-1bc3-40ef-98b2-85a2035226db\",\"trace_id\":\"afe62bb7-7231-446e-ae64-3b21fb401d60\"}\n[2026-05-27 12:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7c19c38c-69bf-4f5a-8626-a2a5c10224b0\",\"trace_id\":\"abde10f3-04bc-4081-9793-cc7eb58acce5\"}\n[2026-05-27 12:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7c19c38c-69bf-4f5a-8626-a2a5c10224b0\",\"trace_id\":\"abde10f3-04bc-4081-9793-cc7eb58acce5\"}\n[2026-05-27 12:41:06] local.NOTICE: Monitoring start {\"correlation_id\":\"a623051b-9914-4f21-8a54-5e09559d4b76\",\"trace_id\":\"3634f950-eda4-46a6-ab50-4d7462e2d042\"}\n[2026-05-27 12:41:06] local.NOTICE: Monitoring end {\"correlation_id\":\"a623051b-9914-4f21-8a54-5e09559d4b76\",\"trace_id\":\"3634f950-eda4-46a6-ab50-4d7462e2d042\"}\n[2026-05-27 12:41:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7b61940d-288f-4bd2-a9ac-ae496eebbdb2\",\"trace_id\":\"6d624f5a-a411-404e-8856-1ea7aa57cfac\"}\n[2026-05-27 12:41:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7b61940d-288f-4bd2-a9ac-ae496eebbdb2\",\"trace_id\":\"6d624f5a-a411-404e-8856-1ea7aa57cfac\"}\n[2026-05-27 12:41:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"64cec3b6-f444-4f75-95a1-436c452b65b2\",\"trace_id\":\"afeeebf5-c864-4320-8023-97705a664888\"}\n[2026-05-27 12:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f2594895-b121-404b-b64d-a048786e75d1\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f2594895-b121-404b-b64d-a048786e75d1\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24192296,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.25,\"average_seconds_per_request\":0.25} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":250.95} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":292.67,\"usage\":24279960,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"95cc9280-de41-41e6-8bac-4872a42c9881\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24257872,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":12.97,\"usage\":24245832,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"fc422bb6-dfed-4fdf-a288-ee8c9c4515f5\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24206592,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:12] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":5.88,\"usage\":24268656,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"6f82b6ab-c5bf-47ff-9624-698ef1fdb38a\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24226168,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:13] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":5.03,\"usage\":24242280,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"bddd2eb0-666b-4bf7-880b-a59b7be8e03e\",\"trace_id\":\"8293b5d1-8636-454f-b5d7-86e0055ee1f4\"}\n[2026-05-27 12:41:18] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:18] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":186.9,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:41:19] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"c8dc7b6c-7912-49db-bc60-9621d792385c\",\"trace_id\":\"a2cbb938-dbdd-4d4c-a51d-7dab2774fae4\"}\n[2026-05-27 12:42:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"355830cb-cfc7-4423-b9b2-b6c6bfb6d5d5\",\"trace_id\":\"865fea08-7ee3-4430-956a-7575498a8eae\"}\n[2026-05-27 12:42:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d4d40e6a-e1fe-4e18-a293-b52558c1e370\",\"trace_id\":\"e972e469-8bf6-45bd-870b-6b39c0008b34\"}\n[2026-05-27 12:42:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d4d40e6a-e1fe-4e18-a293-b52558c1e370\",\"trace_id\":\"e972e469-8bf6-45bd-870b-6b39c0008b34\"}\n[2026-05-27 12:42:05] local.NOTICE: Monitoring start {\"correlation_id\":\"4c9b92e1-47d8-4b8f-b86e-b5213797cb2c\",\"trace_id\":\"23a7e5f2-50b0-462c-a82a-65e27b13aef7\"}\n[2026-05-27 12:42:05] local.NOTICE: Monitoring end {\"correlation_id\":\"4c9b92e1-47d8-4b8f-b86e-b5213797cb2c\",\"trace_id\":\"23a7e5f2-50b0-462c-a82a-65e27b13aef7\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-6554368415800612273
|
-2500219111388701443
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:36:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"dcf24093-4455-46d4-9282-4a2581ed1bc6","trace_id":"96d8032a-1905-4903-be5c-e9405c095aef"}
[2026-05-27 12:36:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0eb801fb-3093-4017-962c-06d801a10a73","trace_id":"99fe297b-7155-47d5-a6a7-d2ea18672b35"}
[2026-05-27 12:36:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0eb801fb-3093-4017-962c-06d801a10a73","trace_id":"99fe297b-7155-47d5-a6a7-d2ea18672b35"}
[2026-05-27 12:36:06] local.NOTICE: Monitoring start {"correlation_id":"355a8191-fdda-4e9f-b2d4-5e002515214e","trace_id":"6743c452-a029-45bd-8e47-cfabe28496d8"}
[2026-05-27 12:36:06] local.NOTICE: Monitoring end {"correlation_id":"355a8191-fdda-4e9f-b2d4-5e002515214e","trace_id":"6743c452-a029-45bd-8e47-cfabe28496d8"}
[2026-05-27 12:36:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a","trace_id":"ac1217d6-5e5d-4466-9b47-8946880ebb0b"}
[2026-05-27 12:36:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"2cf37b68-aeb7-4ce0-a5e9-a52f7af8954a","trace_id":"ac1217d6-5e5d-4466-9b47-8946880ebb0b"}
[2026-05-27 12:36:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"833fa7f5-4850-4d9e-b43d-fe1797b647af","trace_id":"1384fbdf-1d76-4e15-9868-ebb8da257c8a"}
[2026-05-27 12:36:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:34:00, 2026-05-27 12:36:00] {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e87fc18f-cd93-4b3b-9c54-2c7f81a86af8","trace_id":"1d750b03-aa19-4619-a227-fcc03a45b770"}
[2026-05-27 12:36:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"90f00b85-f027-43e2-b9e0-946861cdfb51","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"90f00b85-f027-43e2-b9e0-946861cdfb51","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24180576,"real_usage":65011712,"pid":42210} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:12] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.58,"average_seconds_per_request":0.58} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":593.42} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":646.6,"usage":24268616,"real_usage":65011712,"pid":42210} {"correlation_id":"79fca9e9-5a21-452c-9c00-6c8b150a9e0f","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24246528,"real_usage":65011712,"pid":42210} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":23.62,"usage":24234488,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"4fe53c8c-5986-4a26-83f9-c9f3ef6c8ec3","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24195248,"real_usage":65011712,"pid":42210} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":109,"team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:13] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","provider":"hubspot","status":"disconnected","duration_ms":10.72,"usage":24257312,"real_usage":65011712,"pid":42210,"reason":"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"3483c3db-4a61-48ce-98e6-0161516e75e2","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"200ac210-21c8-4677-b562-a0dd4a8bb7aa","trace_id":"8b995657-ab68-439c-86b1-ba462fca3f4d"}
[2026-05-27 12:36:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"200ac210-21c8-4677-b562-a0dd4a8bb7aa","trace_id":"8b995657-ab68-439c-86b1-ba462fca3f4d"}
[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","usage":24214824,"real_usage":65011712,"pid":42210} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"71e3aac5-fb66-47c5-a236-2d051ae3e319","account":null} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":256,"team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","provider":"hubspot","status":"disconnected","duration_ms":49.63,"usage":24230936,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"460dca4b-02d5-43c8-84dc-ac61ff551b40","trace_id":"84bc4955-185c-4e9f-a049-1469983354dc"}
[2026-05-27 12:36:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cfff3469-314f-4fc5-b975-90204441b4a5","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {"inbox_id":59} {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":59} {"correlation_id":"0de516de-9f67-4aac-a228-5bce0b9cae18","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:18] local.INFO: [Sync Mailbox] Sync start {"inbox_id":212} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.WARNING: [Salesforce] Account not connected for user {"userId":"641f1acb-16b8-42d1-8726-df52979dad0e","account":{"Jiminny\\Models\\SocialAccount":{"id":1500,"sociable_id":143,"provider_user_id":"0052g000003frelAAA","expires":null,"refresh_token_expires":null,"provider":"salesforce","state":"full-refresh","auth_scope":"refresh_token web api","retry_after":null,"created_at":"2026-02-06 08:39:03","updated_at":"2026-05-14 09:46:30"}}} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.ERROR: Failed to set service context for google: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:19] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":212} {"correlation_id":"dcf90e7e-f15f-4d68-96d5-4637d561bc8a","trace_id":"9fe9bdc7-d7b3-4663-aaee-b99d08fcd4be"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":56,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":168.0,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.88} {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:36:21] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"02c7da60-8ba0-415c-8f55-8d8337c5e442","trace_id":"adc13529-11a5-47f8-9bdf-1c940564c362"}
[2026-05-27 12:37:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f7111cf8-923f-4249-a7e6-22bc9c6da875","trace_id":"0277779e-61f4-46a9-8c06-68a1e14548a9"}
[2026-05-27 12:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"1d77aff1-8cd7-4126-b383-a9d6f1036b9b","trace_id":"3e459ee7-82d6-4cff-bf3c-725c78c51fe4"}
[2026-05-27 12:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"1d77aff1-8cd7-4126-b383-a9d6f1036b9b","trace_id":"3e459ee7-82d6-4cff-bf3c-725c78c51fe4"}
[2026-05-27 12:37:07] local.NOTICE: Monitoring start {"correlation_id":"6f19b4b6-bdc4-4373-bb83-8026c5ca9541","trace_id":"ce167b98-a0e2-4042-81df-c199e63a7178"}
[2026-05-27 12:37:07] local.NOTICE: Monitoring end {"correlation_id":"6f19b4b6-bdc4-4373-bb83-8026c5ca9541","trace_id":"ce167b98-a0e2-4042-81df-c199e63a7178"}
[2026-05-27 12:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"b1f5b0ea-8979-458f-85fa-9ec8f107f890","trace_id":"3d6c9714-44f6-4182-9ef6-20b0b591ec16"}
[2026-05-27 12:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"b1f5b0ea-8979-458f-85fa-9ec8f107f890","trace_id":"3d6c9714-44f6-4182-9ef6-20b0b591ec16"}
[2026-05-27 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6de9ec5b-fef1-46dc-af6f-6efd7159b14c","trace_id":"44823d7e-2f30-4f2b-b473-57b40b8e3a32"}
[2026-05-27 12:37:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"8ca29b95-53d5-49b3-974a-bd619436381c","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:13] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 1 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"1d77b07e-080e-4829-a50a-4201e4336a52","trace_id":"559e80b1-5084-40ec-a006-c4079fb82e1a"}
[2026-05-27 12:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"35d4b43f-f881-48b1-b35d-a7a6279d383e","trace_id":"5b39768e-c490-40c1-a320-7d6c0f731049"}
[2026-05-27 12:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"35d4b43f-f881-48b1-b35d-a7a6279d383e","trace_id":"5b39768e-c490-40c1-a320-7d6c0f731049"}
[2026-05-27 12:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0a7f0331-2b33-4388-b36d-b10596474999","trace_id":"512c1e1b-a692-4d44-b1b7-8c4b1955c0c5"}
[2026-05-27 12:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"05985339-0f15-4991-8d86-a314a08b894e","trace_id":"e687a910-c51a-4aac-af86-d647fc6f304a"}
[2026-05-27 12:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"05985339-0f15-4991-8d86-a314a08b894e","trace_id":"e687a910-c51a-4aac-af86-d647fc6f304a"}
[2026-05-27 12:38:06] local.NOTICE: Monitoring start {"correlation_id":"33239855-c5df-4bb0-a469-b1654a53d484","trace_id":"81e70b33-817a-41de-a80a-41bc709c8731"}
[2026-05-27 12:38:06] local.NOTICE: Monitoring end {"correlation_id":"33239855-c5df-4bb0-a469-b1654a53d484","trace_id":"81e70b33-817a-41de-a80a-41bc709c8731"}
[2026-05-27 12:38:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"ceda4686-61f9-4efd-9dac-425274190b6c","trace_id":"2a7a6c33-b0c4-4299-8fa7-31759e937e7d"}
[2026-05-27 12:38:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"ceda4686-61f9-4efd-9dac-425274190b6c","trace_id":"2a7a6c33-b0c4-4299-8fa7-31759e937e7d"}
[2026-05-27 12:38:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b4bcbc0-01ae-4255-9bf6-ad0227189cae","trace_id":"4e72b4d7-c681-4248-8937-3c67e3fbd58d"}
[2026-05-27 12:38:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:36:00, 2026-05-27 12:38:00] {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"9aff710c-8d60-4841-a3b2-4032ca3413c6","trace_id":"4413a568-2935-486c-91f9-d031a51c69cc"}
[2026-05-27 12:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"764a1ac9-502b-4a6d-ae0b-3820cc718427","trace_id":"f7829e9d-3a75-4e13-867d-1160e876cf07"}
[2026-05-27 12:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"764a1ac9-502b-4a6d-ae0b-3820cc718427","trace_id":"f7829e9d-3a75-4e13-867d-1160e876cf07"}
[2026-05-27 12:39:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"113c64b0-f004-4000-94a7-78ce58c626b2","trace_id":"728eddb5-54b0-487a-91a7-8b0032c5bb78"}
[2026-05-27 12:39:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"23f10df5-34f4-4e04-85f1-e82db52af5e6","trace_id":"db62bd45-dd20-422c-82cb-7acb7ddb2e06"}
[2026-05-27 12:39:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"23f10df5-34f4-4e04-85f1-e82db52af5e6","trace_id":"db62bd45-dd20-422c-82cb-7acb7ddb2e06"}
[2026-05-27 12:39:06] local.NOTICE: Monitoring start {"correlation_id":"2acea05b-8214-439e-a744-d02f85685068","trace_id":"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd"}
[2026-05-27 12:39:06] local.NOTICE: Monitoring end {"correlation_id":"2acea05b-8214-439e-a744-d02f85685068","trace_id":"a8dfd4cd-7eef-45dc-acc0-8f65eaf66fdd"}
[2026-05-27 12:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"707d1d04-2d6f-4db8-89b4-e16fe9a83709","trace_id":"6f7049ea-fa50-46e2-8bf5-ed0e5effce45"}
[2026-05-27 12:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"707d1d04-2d6f-4db8-89b4-e16fe9a83709","trace_id":"6f7049ea-fa50-46e2-8bf5-ed0e5effce45"}
[2026-05-27 12:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"07eef107-678e-444c-b7a5-0cd0737b4fbf","trace_id":"a3272e8e-c5ea-42cb-b073-3debce3e06fe"}
[2026-05-27 12:39:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:11] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:12] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"b001759e-46c2-4b1b-8752-92cd1d2aad3b","trace_id":"ee540c60-c191-444e-acfa-a9d7ae0ab9b0"}
[2026-05-27 12:39:14] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"6ec39f30-28b3-4cc9-8c60-5bc8d0b55e63","trace_id":"e3428bc3-d52e-4a94-8d33-5c246d0bafd6"}
[2026-05-27 12:40:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"c8027067-1a7b-4920-ab15-acac10f5730c","trace_id":"ec37bb49-9131-40f3-8033-23fbd7a032ad"}
[2026-05-27 12:40:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"28d27090-0dec-46a4-8a79-2c6db1e89d26","trace_id":"6f6d7e96-ec35-4946-ac91-6496125a5291"}
[2026-05-27 12:40:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"28d27090-0dec-46a4-8a79-2c6db1e89d26","trace_id":"6f6d7e96-ec35-4946-ac91-6496125a5291"}
[2026-05-27 12:40:06] local.NOTICE: Monitoring start {"correlation_id":"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d","trace_id":"e8335595-dc87-48b1-a209-abbbe3e404fd"}
[2026-05-27 12:40:06] local.NOTICE: Monitoring end {"correlation_id":"02ab863c-cfba-4b43-aa4f-cc0b1c2f671d","trace_id":"e8335595-dc87-48b1-a209-abbbe3e404fd"}
[2026-05-27 12:40:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"0ded3374-9752-49d6-9446-af7f83b45a71","trace_id":"1a8bb850-013c-4a60-a56f-ffda95442111"}
[2026-05-27 12:40:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"0ded3374-9752-49d6-9446-af7f83b45a71","trace_id":"1a8bb850-013c-4a60-a56f-ffda95442111"}
[2026-05-27 12:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"d587c208-942b-4199-bfb0-35831bdc80d5","trace_id":"93cc7bc8-613a-4737-8ed1-06d35111a6f2"}
[2026-05-27 12:40:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:38:00, 2026-05-27 12:40:00] {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"588009b6-a95e-4566-9da5-f103a68ae30e","trace_id":"14af6725-02bf-4a28-b860-aa71fea555bc"}
[2026-05-27 12:40:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"ba37789e-2370-41a3-8f54-16bcd1db3b8f","trace_id":"aa2efe6d-9fe6-460b-85ae-1d267b9579ca"}
[2026-05-27 12:40:11] local...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78520
|
2757
|
4
|
2026-05-27T12:42:06.601714+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885726601_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78519
|
2758
|
4
|
2026-05-27T12:41:59.814308+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885719814_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.43450797,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78518
|
2757
|
3
|
2026-05-27T12:41:36.213135+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885696213_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78517
|
2758
|
3
|
2026-05-27T12:41:29.418045+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885689418_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.43450797,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78516
|
2757
|
2
|
2026-05-27T12:41:02.206887+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885662206_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78515
|
2758
|
2
|
2026-05-27T12:40:59.004951+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885659004_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.43450797,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78514
|
2757
|
1
|
2026-05-27T12:40:31.861494+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885631861_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78513
|
2758
|
1
|
2026-05-27T12:40:28.630216+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885628630_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.43450797,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78512
|
2758
|
0
|
2026-05-27T12:39:58.270947+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885598270_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.43450797,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78511
|
2757
|
0
|
2026-05-27T12:39:57.928273+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885597928_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78510
|
NULL
|
0
|
2026-05-27T12:39:27.881537+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885567881_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.43450797,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78509
|
NULL
|
0
|
2026-05-27T12:39:27.612543+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885567612_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78508
|
2756
|
11
|
2026-05-27T12:38:57.526144+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885537526_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.43450797,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78507
|
2755
|
13
|
2026-05-27T12:38:53.764456+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885533764_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78506
|
2756
|
10
|
2026-05-27T12:38:27.137260+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885507137_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.43450797,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78505
|
2755
|
12
|
2026-05-27T12:38:23.427268+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885503427_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78504
|
2756
|
9
|
2026-05-27T12:37:56.728754+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885476728_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.43450797,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78503
|
2755
|
11
|
2026-05-27T12:37:49.454677+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885469454_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78502
|
2756
|
8
|
2026-05-27T12:37:26.353359+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885446353_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.43450797,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78501
|
2755
|
10
|
2026-05-27T12:37:19.100330+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885439100_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78500
|
2756
|
7
|
2026-05-27T12:36:55.891517+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885415891_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.43450797,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78499
|
2755
|
9
|
2026-05-27T12:36:33.534833+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885393534_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78498
|
2756
|
6
|
2026-05-27T12:36:25.526916+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885385526_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.43450797,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78497
|
2755
|
8
|
2026-05-27T12:36:00.155879+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885360155_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7631823762786779447
|
-5862347503831709301
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78496
|
NULL
|
NULL
|
NULL
|
|
78496
|
2755
|
7
|
2026-05-27T12:35:55.490405+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885355490_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
Analyzing…
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Analyzing…","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-8599193577290642275
|
-5857843887024469621
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
Analyzing…
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78495
|
2756
|
5
|
2026-05-27T12:35:52.529791+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885352529_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.43450797,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"","depth":4,"bounds":{"left":0.4418218,"top":0.0726257,"width":0.5465425,"height":0.9074222},"on_screen":true,"value":"","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-6743698290635017155
|
-6438808257200486005
|
typing_pause
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78492
|
NULL
|
NULL
|
NULL
|
|
78494
|
2755
|
6
|
2026-05-27T12:35:52.322353+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885352322_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"","depth":4,"on_screen":true,"value":"","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-6743698290635017155
|
-6438808257200486005
|
typing_pause
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78490
|
NULL
|
NULL
|
NULL
|
|
78493
|
2755
|
5
|
2026-05-27T12:35:29.245747+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885329245_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"provider":"twilio-flex","provider_id":317,"team":"jiminny","team_id":1,"reason":"Social account for Salesforce cannot be found. Please login to Jiminny to connect.","file":"/home/jiminny/app/Services/Crm/BaseService.php","line":646} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"provider":"groove","provider_id":228,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f4d8cff9-dda5-4a03-a932-0e8578466f6d\",\"trace_id\":\"32345780-1223-4bcc-b521-b56c0b808a7e\"}\n[2026-05-27 12:35:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f4d8cff9-dda5-4a03-a932-0e8578466f6d\",\"trace_id\":\"32345780-1223-4bcc-b521-b56c0b808a7e\"}\n[2026-05-27 12:35:07] local.NOTICE: Monitoring start {\"correlation_id\":\"9999809e-6229-473c-bb91-a216ff609552\",\"trace_id\":\"e09f5fde-e059-4a3a-95cc-783eec8c9bf5\"}\n[2026-05-27 12:35:07] local.NOTICE: Monitoring end {\"correlation_id\":\"9999809e-6229-473c-bb91-a216ff609552\",\"trace_id\":\"e09f5fde-e059-4a3a-95cc-783eec8c9bf5\"}\n[2026-05-27 12:35:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"5308eb8f-c335-4acd-ab76-e76664e9b1d0\",\"trace_id\":\"14d58804-b44c-429d-a943-e087ca1fbb35\"}\n[2026-05-27 12:35:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"5308eb8f-c335-4acd-ab76-e76664e9b1d0\",\"trace_id\":\"14d58804-b44c-429d-a943-e087ca1fbb35\"}\n[2026-05-27 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"bfb7044c-6c1a-4c89-bd14-f610010a998d\",\"trace_id\":\"35d5ba56-839c-41ee-b111-3e2abcf29aeb\"}\n[2026-05-27 12:35:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"bfb7044c-6c1a-4c89-bd14-f610010a998d\",\"trace_id\":\"35d5ba56-839c-41ee-b111-3e2abcf29aeb\"}\n[2026-05-27 12:35:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:15] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:25:00, 2026-05-27 12:30:00] {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:25:00, 2026-05-27 12:30:00] {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:30\",\"to\":\"12:35\"} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:25\",\"to\":\"02:30\"} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:19] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3d5e68c4-ff4e-4b24-97e6-96d358ac75ea\",\"trace_id\":\"9b05781f-c5c9-4399-9d88-5b3784832962\"}\n[2026-05-27 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4def257f-9b3d-4891-8f7f-3eed8f8f8140\",\"trace_id\":\"a29a382e-cdd0-4ff2-a487-dbecb527b8ed\"}\n[2026-05-27 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4def257f-9b3d-4891-8f7f-3eed8f8f8140\",\"trace_id\":\"a29a382e-cdd0-4ff2-a487-dbecb527b8ed\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:37:25.474683Z\"} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3d5e68c4-ff4e-4b24-97e6-96d358ac75ea\",\"trace_id\":\"9b05781f-c5c9-4399-9d88-5b3784832962\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}","depth":4,"on_screen":true,"value":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f4d8cff9-dda5-4a03-a932-0e8578466f6d\",\"trace_id\":\"32345780-1223-4bcc-b521-b56c0b808a7e\"}\n[2026-05-27 12:35:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f4d8cff9-dda5-4a03-a932-0e8578466f6d\",\"trace_id\":\"32345780-1223-4bcc-b521-b56c0b808a7e\"}\n[2026-05-27 12:35:07] local.NOTICE: Monitoring start {\"correlation_id\":\"9999809e-6229-473c-bb91-a216ff609552\",\"trace_id\":\"e09f5fde-e059-4a3a-95cc-783eec8c9bf5\"}\n[2026-05-27 12:35:07] local.NOTICE: Monitoring end {\"correlation_id\":\"9999809e-6229-473c-bb91-a216ff609552\",\"trace_id\":\"e09f5fde-e059-4a3a-95cc-783eec8c9bf5\"}\n[2026-05-27 12:35:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"5308eb8f-c335-4acd-ab76-e76664e9b1d0\",\"trace_id\":\"14d58804-b44c-429d-a943-e087ca1fbb35\"}\n[2026-05-27 12:35:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"5308eb8f-c335-4acd-ab76-e76664e9b1d0\",\"trace_id\":\"14d58804-b44c-429d-a943-e087ca1fbb35\"}\n[2026-05-27 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"bfb7044c-6c1a-4c89-bd14-f610010a998d\",\"trace_id\":\"35d5ba56-839c-41ee-b111-3e2abcf29aeb\"}\n[2026-05-27 12:35:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"bfb7044c-6c1a-4c89-bd14-f610010a998d\",\"trace_id\":\"35d5ba56-839c-41ee-b111-3e2abcf29aeb\"}\n[2026-05-27 12:35:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:15] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:25:00, 2026-05-27 12:30:00] {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:25:00, 2026-05-27 12:30:00] {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:30\",\"to\":\"12:35\"} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:25\",\"to\":\"02:30\"} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:19] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3d5e68c4-ff4e-4b24-97e6-96d358ac75ea\",\"trace_id\":\"9b05781f-c5c9-4399-9d88-5b3784832962\"}\n[2026-05-27 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4def257f-9b3d-4891-8f7f-3eed8f8f8140\",\"trace_id\":\"a29a382e-cdd0-4ff2-a487-dbecb527b8ed\"}\n[2026-05-27 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4def257f-9b3d-4891-8f7f-3eed8f8f8140\",\"trace_id\":\"a29a382e-cdd0-4ff2-a487-dbecb527b8ed\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:37:25.474683Z\"} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3d5e68c4-ff4e-4b24-97e6-96d358ac75ea\",\"trace_id\":\"9b05781f-c5c9-4399-9d88-5b3784832962\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8773410874267278233
|
6802101493113036205
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"provider":"twilio-flex","provider_id":317,"team":"jiminny","team_id":1,"reason":"Social account for Salesforce cannot be found. Please login to Jiminny to connect.","file":"/home/jiminny/app/Services/Crm/BaseService.php","line":646} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"provider":"groove","provider_id":228,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
78490
|
NULL
|
NULL
|
NULL
|
|
78492
|
2756
|
4
|
2026-05-27T12:35:23.619631+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885323619_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"provider":"twilio-flex","provider_id":317,"team":"jiminny","team_id":1,"reason":"Social account for Salesforce cannot be found. Please login to Jiminny to connect.","file":"/home/jiminny/app/Services/Crm/BaseService.php","line":646} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"provider":"groove","provider_id":228,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.43450797,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f4d8cff9-dda5-4a03-a932-0e8578466f6d\",\"trace_id\":\"32345780-1223-4bcc-b521-b56c0b808a7e\"}\n[2026-05-27 12:35:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f4d8cff9-dda5-4a03-a932-0e8578466f6d\",\"trace_id\":\"32345780-1223-4bcc-b521-b56c0b808a7e\"}\n[2026-05-27 12:35:07] local.NOTICE: Monitoring start {\"correlation_id\":\"9999809e-6229-473c-bb91-a216ff609552\",\"trace_id\":\"e09f5fde-e059-4a3a-95cc-783eec8c9bf5\"}\n[2026-05-27 12:35:07] local.NOTICE: Monitoring end {\"correlation_id\":\"9999809e-6229-473c-bb91-a216ff609552\",\"trace_id\":\"e09f5fde-e059-4a3a-95cc-783eec8c9bf5\"}\n[2026-05-27 12:35:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"5308eb8f-c335-4acd-ab76-e76664e9b1d0\",\"trace_id\":\"14d58804-b44c-429d-a943-e087ca1fbb35\"}\n[2026-05-27 12:35:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"5308eb8f-c335-4acd-ab76-e76664e9b1d0\",\"trace_id\":\"14d58804-b44c-429d-a943-e087ca1fbb35\"}\n[2026-05-27 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"bfb7044c-6c1a-4c89-bd14-f610010a998d\",\"trace_id\":\"35d5ba56-839c-41ee-b111-3e2abcf29aeb\"}\n[2026-05-27 12:35:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"bfb7044c-6c1a-4c89-bd14-f610010a998d\",\"trace_id\":\"35d5ba56-839c-41ee-b111-3e2abcf29aeb\"}\n[2026-05-27 12:35:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:15] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:25:00, 2026-05-27 12:30:00] {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:25:00, 2026-05-27 12:30:00] {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:30\",\"to\":\"12:35\"} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:25\",\"to\":\"02:30\"} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:19] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}","depth":4,"bounds":{"left":0.4418218,"top":0.0726257,"width":0.5581782,"height":0.9273743},"on_screen":true,"value":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f4d8cff9-dda5-4a03-a932-0e8578466f6d\",\"trace_id\":\"32345780-1223-4bcc-b521-b56c0b808a7e\"}\n[2026-05-27 12:35:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f4d8cff9-dda5-4a03-a932-0e8578466f6d\",\"trace_id\":\"32345780-1223-4bcc-b521-b56c0b808a7e\"}\n[2026-05-27 12:35:07] local.NOTICE: Monitoring start {\"correlation_id\":\"9999809e-6229-473c-bb91-a216ff609552\",\"trace_id\":\"e09f5fde-e059-4a3a-95cc-783eec8c9bf5\"}\n[2026-05-27 12:35:07] local.NOTICE: Monitoring end {\"correlation_id\":\"9999809e-6229-473c-bb91-a216ff609552\",\"trace_id\":\"e09f5fde-e059-4a3a-95cc-783eec8c9bf5\"}\n[2026-05-27 12:35:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"5308eb8f-c335-4acd-ab76-e76664e9b1d0\",\"trace_id\":\"14d58804-b44c-429d-a943-e087ca1fbb35\"}\n[2026-05-27 12:35:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"5308eb8f-c335-4acd-ab76-e76664e9b1d0\",\"trace_id\":\"14d58804-b44c-429d-a943-e087ca1fbb35\"}\n[2026-05-27 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"bfb7044c-6c1a-4c89-bd14-f610010a998d\",\"trace_id\":\"35d5ba56-839c-41ee-b111-3e2abcf29aeb\"}\n[2026-05-27 12:35:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"bfb7044c-6c1a-4c89-bd14-f610010a998d\",\"trace_id\":\"35d5ba56-839c-41ee-b111-3e2abcf29aeb\"}\n[2026-05-27 12:35:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:15] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:25:00, 2026-05-27 12:30:00] {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:25:00, 2026-05-27 12:30:00] {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:30\",\"to\":\"12:35\"} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:25\",\"to\":\"02:30\"} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:19] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8773410874267278233
|
6802101493113036205
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"provider":"twilio-flex","provider_id":317,"team":"jiminny","team_id":1,"reason":"Social account for Salesforce cannot be found. Please login to Jiminny to connect.","file":"/home/jiminny/app/Services/Crm/BaseService.php","line":646} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"provider":"groove","provider_id":228,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78491
|
2756
|
3
|
2026-05-27T12:34:48.513552+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885288513_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"provider":"twilio-flex","provider_id":317,"team":"jiminny","team_id":1,"reason":"Social account for Salesforce cannot be found. Please login to Jiminny to connect.","file":"/home/jiminny/app/Services/Crm/BaseService.php","line":646} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"provider":"groove","provider_id":228,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8374335,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.43450797,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}","depth":4,"bounds":{"left":0.4418218,"top":0.0726257,"width":0.5581782,"height":0.9273743},"on_screen":true,"value":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8773410874267278233
|
6802101493113036205
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"provider":"twilio-flex","provider_id":317,"team":"jiminny","team_id":1,"reason":"Social account for Salesforce cannot be found. Please login to Jiminny to connect.","file":"/home/jiminny/app/Services/Crm/BaseService.php","line":646} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"provider":"groove","provider_id":228,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
78488
|
NULL
|
NULL
|
NULL
|
|
78490
|
2755
|
4
|
2026-05-27T12:34:48.412948+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885288412_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"provider":"twilio-flex","provider_id":317,"team":"jiminny","team_id":1,"reason":"Social account for Salesforce cannot be found. Please login to Jiminny to connect.","file":"/home/jiminny/app/Services/Crm/BaseService.php","line":646} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"provider":"groove","provider_id":228,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}","depth":4,"on_screen":true,"value":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8773410874267278233
|
6802101493113036205
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"provider":"twilio-flex","provider_id":317,"team":"jiminny","team_id":1,"reason":"Social account for Salesforce cannot be found. Please login to Jiminny to connect.","file":"/home/jiminny/app/Services/Crm/BaseService.php","line":646} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"provider":"groove","provider_id":228,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1,"reason":"Activity Provider account not connected.","file":"/home/jiminny/app/Services/Activity/ActivityProviderService.php","line":174} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
NULL
|
NULL
|
NULL
|
NULL
|