decocms 2.179.2 → 2.179.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-QngH9BVd.js → AlertCircle-DcuzO-dN.js} +1 -1
- package/dist/client/assets/{AlignLeft-BUW8XsMa.js → AlignLeft-DH6vJ97u.js} +1 -1
- package/dist/client/assets/{ArrowDown-Ba2t7m6d.js → ArrowDown-DrJY3Wf3.js} +1 -1
- package/dist/client/assets/{ArrowLeft-DX2ldnBo.js → ArrowLeft-B0zQkfl0.js} +1 -1
- package/dist/client/assets/{ArrowUp-Wy3Qa9X3.js → ArrowUp-B4DKDJey.js} +1 -1
- package/dist/client/assets/{Building02-DW6RLSwU.js → Building02-B5vUKe4K.js} +1 -1
- package/dist/client/assets/{Check-CLxUgI8Z.js → Check-5nIJP_0B.js} +1 -1
- package/dist/client/assets/{CheckCircle-DDKCxiAn.js → CheckCircle-CPfAK_ok.js} +1 -1
- package/dist/client/assets/{CheckSquare-IgZnioYh.js → CheckSquare-Bd5OlGNx.js} +1 -1
- package/dist/client/assets/{CheckVerified02-Brnp4Z-Q.js → CheckVerified02-BImD45AM.js} +1 -1
- package/dist/client/assets/{ChevronDown-D0b1rvAp.js → ChevronDown-t60R5l2B.js} +1 -1
- package/dist/client/assets/{ChevronLeft-BOF7bp9d.js → ChevronLeft-lVdUD9SW.js} +1 -1
- package/dist/client/assets/{ChevronRight-BEUO8jhU.js → ChevronRight-3uKoJ2yX.js} +1 -1
- package/dist/client/assets/{ChevronUp-BWhuIqS7.js → ChevronUp-l7iXrppT.js} +1 -1
- package/dist/client/assets/{Clock-Aquumu5W.js → Clock-Cu62NiMl.js} +1 -1
- package/dist/client/assets/{Code01-_in0gxFd.js → Code01-DA4cXrzu.js} +1 -1
- package/dist/client/assets/{Container-b65PFshp.js → Container-Cvd3ILsk.js} +1 -1
- package/dist/client/assets/{Copy01-Ds0OKZs5.js → Copy01-DCmX2pvi.js} +1 -1
- package/dist/client/assets/{Dataflow03-CE4IJeUz.js → Dataflow03-SvWKmU9-.js} +1 -1
- package/dist/client/assets/{DotsHorizontal-EK1-V4Yv.js → DotsHorizontal-DE3Ptwny.js} +1 -1
- package/dist/client/assets/{DotsVertical-Bo0fAyx-.js → DotsVertical-CZep1rYf.js} +1 -1
- package/dist/client/assets/{Download01-CN3AkzFm.js → Download01-DOZIvPhC.js} +1 -1
- package/dist/client/assets/{Edit01-BeW3IgwV.js → Edit01-Bh7u1xp-.js} +1 -1
- package/dist/client/assets/{Edit05-DDQmnS5O.js → Edit05-DwDDlBNQ.js} +1 -1
- package/dist/client/assets/{Eye-Cqad01Et.js → Eye-D3Q7o9JY.js} +1 -1
- package/dist/client/assets/{EyeOff-rTYDCZUH.js → EyeOff--TPuyP7J.js} +1 -1
- package/dist/client/assets/{File02-k_9AZvHT.js → File02-6xeEPCuC.js} +1 -1
- package/dist/client/assets/{File06-BAp2UeVQ.js → File06-BocZAjHf.js} +1 -1
- package/dist/client/assets/{FilterLines-BQVg1PzI.js → FilterLines-CUdG83Ae.js} +1 -1
- package/dist/client/assets/{Globe01-sBw0ReRO.js → Globe01-BTdgnOS2.js} +1 -1
- package/dist/client/assets/{Globe02-DlxZmkSI.js → Globe02-X8fGWI0t.js} +1 -1
- package/dist/client/assets/{Grid01-B9zEjFyx.js → Grid01-NkSMXhQ7.js} +1 -1
- package/dist/client/assets/{Home02-DsMimBHw.js → Home02-BmcJp5G2.js} +1 -1
- package/dist/client/assets/{Image01-zSA25K9S.js → Image01-RwxwuRZg.js} +1 -1
- package/dist/client/assets/{Inbox01-Bcon6dDK.js → Inbox01-B7dU6IpS.js} +1 -1
- package/dist/client/assets/{InfoCircle-CA8mfcG6.js → InfoCircle-BO2XWy7v.js} +1 -1
- package/dist/client/assets/{Key01-V3zgT2bk.js → Key01-CjhxaGrC.js} +1 -1
- package/dist/client/assets/{LayersTwo01-D3otbQFN.js → LayersTwo01-DEwkReGL.js} +1 -1
- package/dist/client/assets/{Link01-VlHez4tu.js → Link01-h9aUM7NA.js} +1 -1
- package/dist/client/assets/{LinkExternal01-vs3DKlfq.js → LinkExternal01-CmkQ0Pr-.js} +1 -1
- package/dist/client/assets/{List-D6xZGoxJ.js → List-BbeB05v1.js} +1 -1
- package/dist/client/assets/{Loading01-DQphO9Su.js → Loading01-D0sCOwf7.js} +1 -1
- package/dist/client/assets/{Lock01-Cbqd9PVH.js → Lock01-DFfVnVtc.js} +1 -1
- package/dist/client/assets/{Play-jCDYHrdu.js → Play-hGa2UcUZ.js} +1 -1
- package/dist/client/assets/{Plus-CURSuoDd.js → Plus-Dcf0Y3wA.js} +1 -1
- package/dist/client/assets/{RefreshCcw01-oV1XFIRn.js → RefreshCcw01-BOXuamrY.js} +1 -1
- package/dist/client/assets/{Save01-CpNh-fPw.js → Save01-CA0I32a6.js} +1 -1
- package/dist/client/assets/{SearchMd-C8ADHGFY.js → SearchMd-BSRGE1t4.js} +1 -1
- package/dist/client/assets/{Settings01-B76KnDHb.js → Settings01-CCUkMwLj.js} +1 -1
- package/dist/client/assets/{Shield01-BodC6YjW.js → Shield01-BYpsgCVA.js} +1 -1
- package/dist/client/assets/{Terminal-BHkLJhoR.js → Terminal-ZymOmGb9.js} +1 -1
- package/dist/client/assets/{Tool01-DlbILfZg.js → Tool01-Doogi-IK.js} +1 -1
- package/dist/client/assets/{Trash01-CYMRq_nY.js → Trash01-Cs72bTP6.js} +1 -1
- package/dist/client/assets/{Upload01-BQ7z5iC5.js → Upload01-ByUvmqDm.js} +1 -1
- package/dist/client/assets/{Users03-DEpvReeu.js → Users03-CGvJARf5.js} +1 -1
- package/dist/client/assets/{X-BT_y3J3a.js → X-CD9ZB6hw.js} +1 -1
- package/dist/client/assets/{XClose-C-H07PEn.js → XClose-BxUlnJUs.js} +1 -1
- package/dist/client/assets/{Zap-BY3Hn1l9.js → Zap-0WHKFRes.js} +1 -1
- package/dist/client/assets/{agent-connections-preview-DbwllQSw.js → agent-connections-preview-BEmLqtx5.js} +1 -1
- package/dist/client/assets/agent-detail-jg81y7ZA.js +2 -0
- package/dist/client/assets/agents-PmHD6Xb_.js +1 -0
- package/dist/client/assets/{ai-providers-logos-DGTpC_MW.js → ai-providers-logos-C_voEDmL.js} +1 -1
- package/dist/client/assets/{alert-dialog-BqCiJDa8.js → alert-dialog-qmvoIx9J.js} +3 -3
- package/dist/client/assets/{auth-catchall-DPwCqyhO.js → auth-catchall-ByYcT8WN.js} +1 -1
- package/dist/client/assets/automation-detail-C1-q2EzY.js +1 -0
- package/dist/client/assets/automations-C9eao1B2.js +1 -0
- package/dist/client/assets/avatar-DeGeJRAR.js +1 -0
- package/dist/client/assets/badge-Cjjl_FHP.js +1 -0
- package/dist/client/assets/{binder-CuBUxi11.js → binder-C1eSZFT4.js} +1 -1
- package/dist/client/assets/{breadcrumb-BWfepeob.js → breadcrumb-C8hDXS86.js} +1 -1
- package/dist/client/assets/{card-gfMzoGpr.js → card-CoyaoT6W.js} +1 -1
- package/dist/client/assets/{checkbox-DygphnIU.js → checkbox-D5DFx9da.js} +1 -1
- package/dist/client/assets/{collapsible-BJo6q_NJ.js → collapsible-DcaWkNTt.js} +1 -1
- package/dist/client/assets/{collection-detail-fTigPh-V.js → collection-detail-Dsgpohom.js} +3 -3
- package/dist/client/assets/{collection-display-button-C42ZnuS7.js → collection-display-button-BcIJp1SX.js} +1 -1
- package/dist/client/assets/{collection-search-Dzoe9W56.js → collection-search-nKZEJ_r3.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-Bka5CUqj.js → collection-table-wrapper-Bq15EL3p.js} +1 -1
- package/dist/client/assets/{collection-tabs-D9qLvNTu.js → collection-tabs-qLP6ozkD.js} +1 -1
- package/dist/client/assets/{command-D_HBfmpj.js → command-Bk-fXiVb.js} +1 -1
- package/dist/client/assets/connection-card-BYUbg7iO.js +1 -0
- package/dist/client/assets/connection-detail-Zdtj4TKi.js +1 -0
- package/dist/client/assets/connections-CMaQr-QY.js +1 -0
- package/dist/client/assets/{constants-D5QZg84_.js → constants-DclZTqHf.js} +1 -1
- package/dist/client/assets/{context-CGMT963w.js → context-BFi-zuf6.js} +12 -12
- package/dist/client/assets/{create-organization-dialog-CeMf7qju.js → create-organization-dialog-pXQ89_sr.js} +1 -1
- package/dist/client/assets/{create-project-dialog-Bs_mS8aj.js → create-project-dialog-M-dgrV_c.js} +1 -1
- package/dist/client/assets/{danger-gTdMMqBl.js → danger-DqsrtWLB.js} +1 -1
- package/dist/client/assets/{danger-zone-BE94J4G-.js → danger-zone-BhDM5wIc.js} +1 -1
- package/dist/client/assets/{dependencies-DQ9gMDrw.js → dependencies-CPYZFhhf.js} +1 -1
- package/dist/client/assets/dialog-DzGwvQ_K.js +1 -0
- package/dist/client/assets/drawer-CAX2URBi.js +1 -0
- package/dist/client/assets/{dropdown-menu-DE2pKopg.js → dropdown-menu-BcNYk9_F.js} +1 -1
- package/dist/client/assets/dynamic-plugin-layout-D0dkPO22.js +1 -0
- package/dist/client/assets/editable-task-title-BR-xQ-UT.js +16 -0
- package/dist/client/assets/{empty-state-BjCXvoyS.js → empty-state-BuGXY27l.js} +1 -1
- package/dist/client/assets/{empty-state-Bk9Z7Q-U.js → empty-state-CGSu9IQ9.js} +1 -1
- package/dist/client/assets/{env-vars-editor-BjeFjhEe.js → env-vars-editor-VoVbIy9n.js} +1 -1
- package/dist/client/assets/{extract-connection-data-CZxT3XNH.js → extract-connection-data-DhU56Zd0.js} +1 -1
- package/dist/client/assets/{file-browser-C4MCCicp.js → file-browser-DIaRK0us.js} +2 -2
- package/dist/client/assets/{form-tOTNzCZe.js → form-DBjkdSps.js} +1 -1
- package/dist/client/assets/{general-DOjbT8YE.js → general-DCfBGmuh.js} +1 -1
- package/dist/client/assets/{generate-id-kfQDJb0K.js → generate-id-DRuK_WRM.js} +1 -1
- package/dist/client/assets/{grid-view-CM2kDBxz.js → grid-view-DsY2qZrB.js} +1 -1
- package/dist/client/assets/{home-rO4pkzPH.js → home-C52P_wmy.js} +1 -1
- package/dist/client/assets/{index-BLtI6TU9.js → index-BLNBD7Tl.js} +1 -1
- package/dist/client/assets/index-BObCXgKJ.js +1 -0
- package/dist/client/assets/{index-DyL93sTY.js → index-BzPzEjOV.js} +1 -1
- package/dist/client/assets/index-COFAW4F5.js +1 -0
- package/dist/client/assets/index-CubWD7-P.css +1 -0
- package/dist/client/assets/index-DMmNh7jR.js +218 -0
- package/dist/client/assets/index-DYAF-Vgt.js +1 -0
- package/dist/client/assets/index-DiczHAor.js +1 -0
- package/dist/client/assets/{index-DjVQ8cwy.js → index-Dumm3WtY.js} +2 -2
- package/dist/client/assets/{index-Bwlq4qOs.js → index-PFtbLrE4.js} +1 -1
- package/dist/client/assets/{index-DiHcYCxZ.js → index-bHgla3gL.js} +1 -1
- package/dist/client/assets/index-hmkE8HuP.js +1 -0
- package/dist/client/assets/{infiniteQueryObserver-XS4LWR6q.js → infiniteQueryObserver-CZ8w6Ao-.js} +1 -1
- package/dist/client/assets/input-Bt_nejZh.js +1 -0
- package/dist/client/assets/{integration-icon-C9GR_8Ea.js → integration-icon-Dyr7fOYU.js} +1 -1
- package/dist/client/assets/{label-DJvdRQ2A.js → label-DTNkd20e.js} +1 -1
- package/dist/client/assets/layout-Ck4QNb1R.js +1 -0
- package/dist/client/assets/{layout-10Sxtyop.js → layout-VG2uM_nk.js} +1 -1
- package/dist/client/assets/login-x4JJuKeA.js +1 -0
- package/dist/client/assets/{logo-upload-iqCQyRXD.js → logo-upload-7WcycT9q.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-C3qFwvPf.js → mcp-app-renderer-hLmmzHl_.js} +1 -1
- package/dist/client/assets/{mcp-server-card-DCDS8v4f.js → mcp-server-card-CwYAe4vO.js} +1 -1
- package/dist/client/assets/mcp-server-detail-CjZvaa-f.js +2 -0
- package/dist/client/assets/{members-CykhAYWe.js → members-Sgl6kVS6.js} +1 -1
- package/dist/client/assets/{monaco-editor-DQf5JSy_.js → monaco-editor-BS1-hh4n.js} +4 -4
- package/dist/client/assets/monitoring-DWB-fw7M.js +4 -0
- package/dist/client/assets/monitoring-dashboard-edit-DdNrWKBz.js +1 -0
- package/dist/client/assets/{monitoring-dashboard-view-CXCG5P_H.js → monitoring-dashboard-view-BUxqPLpn.js} +2 -2
- package/dist/client/assets/{monitoring-stats-row-BfoeteQX.js → monitoring-stats-row-CiWvBCYV.js} +2 -2
- package/dist/client/assets/{oauth-callback-CXrwzvh_.js → oauth-callback-7ed5Z9Xs.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-bQZvbhnr.js → oauth-callback-ai-provider-qEm-Q5-E.js} +1 -1
- package/dist/client/assets/{org-ai-providers-4gYTufEL.js → org-ai-providers-CUAlOa9f.js} +1 -1
- package/dist/client/assets/page-BQl7Ie3w.js +1 -0
- package/dist/client/assets/page-DfQnSuW1.js +1 -0
- package/dist/client/assets/{plugin-empty-state-cb7GbeKy.js → plugin-empty-state-DUosCqGd.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-CEvZCNFj.js → plugin-empty-state-qFDP0Nr2.js} +1 -1
- package/dist/client/assets/{plugin-header-C4ZfQdcs.js → plugin-header-BeGFVTX4.js} +1 -1
- package/dist/client/assets/{plugin-header-Do_HgCfI.js → plugin-header-CJlxZY-i.js} +1 -1
- package/dist/client/assets/plugins-CzL725OF.js +1 -0
- package/dist/client/assets/popover-CF2iI6mL.js +1 -0
- package/dist/client/assets/project-app-view-lqZ02NJN.js +1 -0
- package/dist/client/assets/project-layout-CBbKmowd.js +1 -0
- package/dist/client/assets/{project-plugins-C18qk0lc.js → project-plugins-DqmH9sWQ.js} +1 -1
- package/dist/client/assets/{projects-list-CtvT2y9h.js → projects-list-Bz_1RhAg.js} +1 -1
- package/dist/client/assets/{registry-layout-Cvu5zKVR.js → registry-layout-6H7s-msc.js} +2 -2
- package/dist/client/assets/{registry-utils-Bx7--rIH.js → registry-utils-DZHZD5gP.js} +1 -1
- package/dist/client/assets/{reset-password-CSswd9M3.js → reset-password-3HgT81EI.js} +1 -1
- package/dist/client/assets/{resizable-B0HQ1vuq.js → resizable-BwEPpKFX.js} +1 -1
- package/dist/client/assets/{save-actions-BxTuQTa4.js → save-actions-Z-_7bu1u.js} +1 -1
- package/dist/client/assets/scroll-area-CwrVaRUF.js +1 -0
- package/dist/client/assets/select-hHfKwVbN.js +1 -0
- package/dist/client/assets/select-virtual-mcp-DsImheli.js +1 -0
- package/dist/client/assets/shell-layout-Bh0wZbL8.js +3 -0
- package/dist/client/assets/{sidebar-settings-pZmI7pGH.js → sidebar-settings-U5rAu7py.js} +1 -1
- package/dist/client/assets/{skeleton-NLo71_Sb.js → skeleton-BvrwcS3X.js} +1 -1
- package/dist/client/assets/spinner-CSLYV8gq.js +1 -0
- package/dist/client/assets/{store-invite-CP9PWG-2.js → store-invite-z_eVOBRF.js} +1 -1
- package/dist/client/assets/switch-CoYIum7D.js +1 -0
- package/dist/client/assets/{table-BK1bAac3.js → table-BSLV9H8I.js} +1 -1
- package/dist/client/assets/tabs-sTqc1_U2.js +1 -0
- package/dist/client/assets/{task-status-DCsPkppQ.js → task-status-CrO2oj_v.js} +37 -37
- package/dist/client/assets/tasks-CazLoC59.js +1 -0
- package/dist/client/assets/tasks-panel-DBJx0hs6.js +1 -0
- package/dist/client/assets/textarea-CgJ5x-hs.js +1 -0
- package/dist/client/assets/{time-range-picker-CEhZhu7c.js → time-range-picker-BCm8UHQI.js} +1 -1
- package/dist/client/assets/toggle-group-C20N8vss.js +1 -0
- package/dist/client/assets/{tools-list-DGVVcYEB.js → tools-list-JehNbMf9.js} +1 -1
- package/dist/client/assets/tooltip-DHJtaI_Z.js +1 -0
- package/dist/client/assets/{topbar-portal-DLbOrsQP.js → topbar-portal-jewy4fLu.js} +1 -1
- package/dist/client/assets/{types-BOmhR0hZ.js → types-BtTmvTe4.js} +1 -1
- package/dist/client/assets/{use-automations-CPlNdxed.js → use-automations-D-X6Oij9.js} +1 -1
- package/dist/client/assets/{use-collections-Le9CzDbY.js → use-collections-DhavVshD.js} +1 -1
- package/dist/client/assets/{use-connection-CNeKPAtP.js → use-connection-CVlyXslk.js} +1 -1
- package/dist/client/assets/{use-copy-CR_0d0zs.js → use-copy-DkDz3lds.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-BOxl7MdZ.js → use-create-virtual-mcp-DZAv89rZ.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-CbBHKCjw.js → use-infinite-scroll-j2WybGGN.js} +1 -1
- package/dist/client/assets/{use-install-from-registry-Ckutd61H.js → use-install-from-registry-Ch6GOwHv.js} +1 -1
- package/dist/client/assets/{use-list-state-DrSbpG8C.js → use-list-state-Baq-X1EV.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-D4XXlnov.js → use-mcp-prompts-BDRKUj7D.js} +1 -1
- package/dist/client/assets/{use-mcp-resources-BueR0w1E.js → use-mcp-resources-BxIahbOo.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-CFyULGGP.js → use-mcp-tools-kv4r4Zvn.js} +1 -1
- package/dist/client/assets/{use-members-Bgz9FSqE.js → use-members-Coq2XO1k.js} +1 -1
- package/dist/client/assets/{use-project-RpN1fut9.js → use-project-XBmxO4XX.js} +1 -1
- package/dist/client/assets/{use-store-discovery-BS96E_Li.js → use-store-discovery-D-xa6Q86.js} +1 -1
- package/dist/client/assets/use-view-mode-CdGajc1j.js +1 -0
- package/dist/client/assets/{use-virtual-mcp-DGT5zflo.js → use-virtual-mcp-DCxXK_bv.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-H-W7n7En.js +1 -0
- package/dist/client/assets/{useMutation-Betr8yis.js → useMutation-DrLoVqQ7.js} +1 -1
- package/dist/client/assets/useQuery-B-AaJTeZ.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-Czq4y4BP.js +1 -0
- package/dist/client/assets/{user-ChA79mrb.js → user-8V0wpye0.js} +1 -1
- package/dist/client/assets/workflow-Bb3JE-XH.js +1 -0
- package/dist/client/index.html +3 -2
- package/dist/server/cli.js +1 -1
- package/dist/server/node_modules/pg-cloudflare/README.md +112 -0
- package/dist/server/node_modules/pg-cloudflare/dist/empty.d.ts +2 -0
- package/dist/server/node_modules/pg-cloudflare/dist/empty.js +6 -0
- package/dist/server/node_modules/pg-cloudflare/dist/empty.js.map +1 -0
- package/dist/server/node_modules/pg-cloudflare/dist/index.d.ts +31 -0
- package/dist/server/node_modules/pg-cloudflare/dist/index.js +152 -0
- package/dist/server/node_modules/pg-cloudflare/dist/index.js.map +1 -0
- package/dist/server/node_modules/pg-cloudflare/esm/index.mjs +3 -0
- package/dist/server/node_modules/pg-cloudflare/package.json +39 -0
- package/dist/server/node_modules/pg-cloudflare/src/empty.ts +3 -0
- package/dist/server/node_modules/pg-cloudflare/src/index.ts +166 -0
- package/dist/server/node_modules/pg-cloudflare/src/types.d.ts +25 -0
- package/dist/server/node_modules/pg-connection-string/LICENSE +21 -0
- package/dist/server/node_modules/pg-connection-string/README.md +105 -0
- package/dist/server/node_modules/pg-connection-string/esm/index.mjs +8 -0
- package/dist/server/node_modules/pg-connection-string/index.d.ts +36 -0
- package/dist/server/node_modules/pg-connection-string/index.js +231 -0
- package/dist/server/node_modules/pg-connection-string/package.json +52 -0
- package/dist/server/node_modules/pg-pool/LICENSE +21 -0
- package/dist/server/node_modules/pg-pool/README.md +357 -0
- package/dist/server/node_modules/pg-pool/esm/index.mjs +5 -0
- package/dist/server/node_modules/pg-pool/index.js +517 -0
- package/dist/server/node_modules/pg-pool/package.json +51 -0
- package/dist/server/node_modules/pg-protocol/LICENSE +21 -0
- package/dist/server/node_modules/pg-protocol/README.md +3 -0
- package/dist/server/node_modules/pg-protocol/dist/b.d.ts +1 -0
- package/dist/server/node_modules/pg-protocol/dist/b.js +23 -0
- package/dist/server/node_modules/pg-protocol/dist/b.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-reader.d.ts +15 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-reader.js +55 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-reader.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-writer.d.ts +16 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-writer.js +81 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-writer.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.d.ts +1 -0
- package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.js +530 -0
- package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/index.d.ts +6 -0
- package/dist/server/node_modules/pg-protocol/dist/index.js +15 -0
- package/dist/server/node_modules/pg-protocol/dist/index.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/messages.d.ts +162 -0
- package/dist/server/node_modules/pg-protocol/dist/messages.js +160 -0
- package/dist/server/node_modules/pg-protocol/dist/messages.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.d.ts +1 -0
- package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.js +252 -0
- package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/parser.d.ts +24 -0
- package/dist/server/node_modules/pg-protocol/dist/parser.js +324 -0
- package/dist/server/node_modules/pg-protocol/dist/parser.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/serializer.d.ts +42 -0
- package/dist/server/node_modules/pg-protocol/dist/serializer.js +189 -0
- package/dist/server/node_modules/pg-protocol/dist/serializer.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/esm/index.js +11 -0
- package/dist/server/node_modules/pg-protocol/package.json +45 -0
- package/dist/server/node_modules/pg-protocol/src/b.ts +25 -0
- package/dist/server/node_modules/pg-protocol/src/buffer-reader.ts +58 -0
- package/dist/server/node_modules/pg-protocol/src/buffer-writer.ts +85 -0
- package/dist/server/node_modules/pg-protocol/src/inbound-parser.test.ts +575 -0
- package/dist/server/node_modules/pg-protocol/src/index.ts +11 -0
- package/dist/server/node_modules/pg-protocol/src/messages.ts +262 -0
- package/dist/server/node_modules/pg-protocol/src/outbound-serializer.test.ts +276 -0
- package/dist/server/node_modules/pg-protocol/src/parser.ts +413 -0
- package/dist/server/node_modules/pg-protocol/src/serializer.ts +274 -0
- package/dist/server/node_modules/pg-protocol/src/testing/buffer-list.ts +67 -0
- package/dist/server/node_modules/pg-protocol/src/testing/test-buffers.ts +166 -0
- package/dist/server/node_modules/pg-protocol/src/types/chunky.d.ts +1 -0
- package/dist/server/node_modules/pg-types/.travis.yml +7 -0
- package/dist/server/node_modules/pg-types/Makefile +14 -0
- package/dist/server/node_modules/pg-types/README.md +75 -0
- package/dist/server/node_modules/pg-types/index.d.ts +137 -0
- package/dist/server/node_modules/pg-types/index.js +47 -0
- package/dist/server/node_modules/pg-types/index.test-d.ts +21 -0
- package/dist/server/node_modules/pg-types/lib/arrayParser.js +11 -0
- package/dist/server/node_modules/pg-types/lib/binaryParsers.js +257 -0
- package/dist/server/node_modules/pg-types/lib/builtins.js +73 -0
- package/dist/server/node_modules/pg-types/lib/textParsers.js +215 -0
- package/dist/server/node_modules/pg-types/package.json +42 -0
- package/dist/server/node_modules/pg-types/test/index.js +24 -0
- package/dist/server/node_modules/pg-types/test/types.js +597 -0
- package/dist/server/node_modules/pgpass/README.md +74 -0
- package/dist/server/node_modules/pgpass/lib/helper.js +233 -0
- package/dist/server/node_modules/pgpass/lib/index.js +23 -0
- package/dist/server/node_modules/pgpass/package.json +41 -0
- package/dist/server/node_modules/postgres-array/index.d.ts +4 -0
- package/dist/server/node_modules/postgres-array/index.js +97 -0
- package/dist/server/node_modules/postgres-array/license +21 -0
- package/dist/server/node_modules/postgres-array/package.json +35 -0
- package/dist/server/node_modules/postgres-array/readme.md +43 -0
- package/dist/server/node_modules/postgres-date/index.js +116 -0
- package/dist/server/node_modules/postgres-date/license +21 -0
- package/dist/server/node_modules/postgres-date/package.json +33 -0
- package/dist/server/node_modules/postgres-date/readme.md +49 -0
- package/dist/server/node_modules/postgres-interval/index.d.ts +20 -0
- package/dist/server/node_modules/postgres-interval/index.js +125 -0
- package/dist/server/node_modules/postgres-interval/license +21 -0
- package/dist/server/node_modules/postgres-interval/package.json +36 -0
- package/dist/server/node_modules/postgres-interval/readme.md +48 -0
- package/dist/server/node_modules/split2/LICENSE +13 -0
- package/dist/server/node_modules/split2/README.md +85 -0
- package/dist/server/node_modules/split2/bench.js +27 -0
- package/dist/server/node_modules/split2/index.js +141 -0
- package/dist/server/node_modules/split2/package.json +39 -0
- package/dist/server/node_modules/split2/test.js +409 -0
- package/dist/server/node_modules/xtend/.jshintrc +30 -0
- package/dist/server/node_modules/xtend/LICENSE +20 -0
- package/dist/server/node_modules/xtend/README.md +32 -0
- package/dist/server/node_modules/xtend/immutable.js +19 -0
- package/dist/server/node_modules/xtend/mutable.js +17 -0
- package/dist/server/node_modules/xtend/package.json +55 -0
- package/dist/server/node_modules/xtend/test.js +103 -0
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/LayoutLeft-CbUmiI7I.js +0 -1
- package/dist/client/assets/agent-detail-DqMa-yjy.js +0 -2
- package/dist/client/assets/agents-DXD0J3OW.js +0 -1
- package/dist/client/assets/automation-detail-bmoX3GK-.js +0 -1
- package/dist/client/assets/automations-Dp1WjxxK.js +0 -1
- package/dist/client/assets/avatar-BoRF-Me1.js +0 -1
- package/dist/client/assets/badge-DIWKuwVU.js +0 -1
- package/dist/client/assets/connection-card-DuHVLZ35.js +0 -1
- package/dist/client/assets/connection-detail-vcbLbssZ.js +0 -1
- package/dist/client/assets/connections-14pDMsUe.js +0 -1
- package/dist/client/assets/dialog-B8WS5FOh.js +0 -1
- package/dist/client/assets/dynamic-plugin-layout-yMvA298P.js +0 -1
- package/dist/client/assets/editable-task-title-oggBOZ_d.js +0 -16
- package/dist/client/assets/index-B09Yemt1.js +0 -1
- package/dist/client/assets/index-CAsAeYNN.css +0 -1
- package/dist/client/assets/index-CMImT9Gt.js +0 -1
- package/dist/client/assets/index-D-6rbOIG.js +0 -1
- package/dist/client/assets/index-DnJ6a24w.js +0 -218
- package/dist/client/assets/index-hCeFdkUk.js +0 -1
- package/dist/client/assets/index-qrpgIqks.js +0 -1
- package/dist/client/assets/input-BBKBJVKe.js +0 -1
- package/dist/client/assets/layout-BjyFY_1R.js +0 -1
- package/dist/client/assets/login-ClPbfjlJ.js +0 -1
- package/dist/client/assets/mcp-server-detail-lOR_wUNJ.js +0 -2
- package/dist/client/assets/monitoring-BPuhRE0m.js +0 -4
- package/dist/client/assets/monitoring-dashboard-edit-BVtLOBNe.js +0 -1
- package/dist/client/assets/page-CCXJyUyN.js +0 -1
- package/dist/client/assets/page-DB3QLlpA.js +0 -1
- package/dist/client/assets/plugins-pEgOY1Nz.js +0 -1
- package/dist/client/assets/popover-vDURg2rv.js +0 -1
- package/dist/client/assets/project-app-view-DfCIvrF7.js +0 -1
- package/dist/client/assets/project-layout-CkMdq05b.js +0 -1
- package/dist/client/assets/scroll-area-dsTSFUPi.js +0 -1
- package/dist/client/assets/select-Bbaj2HCW.js +0 -1
- package/dist/client/assets/select-virtual-mcp-CZJoA7HG.js +0 -1
- package/dist/client/assets/sheet-B_-2ygzJ.js +0 -1
- package/dist/client/assets/shell-layout-Ca5Bbhzi.js +0 -3
- package/dist/client/assets/spinner-EdHFCjIL.js +0 -1
- package/dist/client/assets/switch-bfk4EFAk.js +0 -1
- package/dist/client/assets/tabs-aIY_aIUV.js +0 -1
- package/dist/client/assets/tasks-Dw1i-69W.js +0 -1
- package/dist/client/assets/tasks-panel-CEAgXi7r.js +0 -1
- package/dist/client/assets/textarea-lF0m7xkk.js +0 -1
- package/dist/client/assets/toggle-group-Dak-s1p3.js +0 -1
- package/dist/client/assets/tooltip-Csc3oeTz.js +0 -1
- package/dist/client/assets/use-mobile-Y3tADOOl.js +0 -1
- package/dist/client/assets/use-view-mode-BeRbE5Df.js +0 -1
- package/dist/client/assets/useInfiniteQuery-ChOuKh6v.js +0 -1
- package/dist/client/assets/useQuery-mzOsnjYJ.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DFs2FFlW.js +0 -1
- package/dist/client/assets/workflow-CBDfcQFP.js +0 -1
- package/dist/server/node_modules/pg/README.md +0 -95
- package/dist/server/node_modules/pg/esm/index.mjs +0 -20
- package/dist/server/node_modules/pg/lib/client.js +0 -743
- package/dist/server/node_modules/pg/lib/connection-parameters.js +0 -171
- package/dist/server/node_modules/pg/lib/connection.js +0 -221
- package/dist/server/node_modules/pg/lib/crypto/cert-signatures.js +0 -122
- package/dist/server/node_modules/pg/lib/crypto/sasl.js +0 -212
- package/dist/server/node_modules/pg/lib/crypto/utils-legacy.js +0 -43
- package/dist/server/node_modules/pg/lib/crypto/utils-webcrypto.js +0 -89
- package/dist/server/node_modules/pg/lib/crypto/utils.js +0 -9
- package/dist/server/node_modules/pg/lib/defaults.js +0 -91
- package/dist/server/node_modules/pg/lib/index.js +0 -73
- package/dist/server/node_modules/pg/lib/native/client.js +0 -323
- package/dist/server/node_modules/pg/lib/native/index.js +0 -2
- package/dist/server/node_modules/pg/lib/native/query.js +0 -165
- package/dist/server/node_modules/pg/lib/query.js +0 -252
- package/dist/server/node_modules/pg/lib/result.js +0 -109
- package/dist/server/node_modules/pg/lib/stream.js +0 -83
- package/dist/server/node_modules/pg/lib/type-overrides.js +0 -35
- package/dist/server/node_modules/pg/lib/utils.js +0 -217
- package/dist/server/node_modules/pg/package.json +0 -76
- /package/dist/server/node_modules/{pg → pg-cloudflare}/LICENSE +0 -0
package/dist/server/cli.js
CHANGED
|
@@ -2767,7 +2767,7 @@ Good examples:
|
|
|
2767
2767
|
|
|
2768
2768
|
Bad (too vague): {"title": "Help with task"}
|
|
2769
2769
|
Bad (too long): {"title": "Investigate and fix the issue where the login button does not respond on mobile devices"}
|
|
2770
|
-
Bad (wrong case): {"title": "Fix Login Button On Mobile"}`;var cE=M(()=>{RW();vN6=["user_ask","subtask"]});function sG1(Y){return typeof Y==="string"?Y:Y.toISOString()}class Bc{inner;organizationId;constructor(Y,X){this.inner=Y;this.organizationId=X}requireOrg(){if(!this.organizationId)throw Error("OrgScopedThreadStorage: thread operations require an authenticated organization");return this.organizationId}create(Y){let X=this.requireOrg();return this.inner.create({...Y,organization_id:X})}get(Y){return this.inner.get(Y,this.requireOrg())}update(Y,X){return this.inner.update(Y,this.requireOrg(),X)}forceFailIfInProgress(Y){return this.inner.forceFailIfInProgress(Y,this.requireOrg())}delete(Y){return this.inner.delete(Y,this.requireOrg())}list(Y,X){return this.inner.list(this.requireOrg(),Y,X)}listByTriggerIds(Y,X){return this.inner.listByTriggerIds(this.requireOrg(),Y,X)}saveMessages(Y){return this.inner.saveMessages(Y,this.requireOrg())}listMessages(Y,X){return this.inner.listMessages(Y,this.requireOrg(),X)}}class Dc{db;constructor(Y){this.db=Y}async create(Y){let X=Y.id??a8("thrd"),J=new Date().toISOString();if(!Y.organization_id)throw Error("organization_id is required");if(!Y.created_by)throw Error("created_by is required");if(!Y.title)Y.title=oG1;let G={id:X,organization_id:Y.organization_id,title:Y.title,description:Y.description??null,status:Y.status??"completed",trigger_id:Y.trigger_id??null,created_at:J,updated_at:J,created_by:Y.created_by,updated_by:Y.updated_by??null},W=await this.db.insertInto("threads").values(G).returningAll().executeTakeFirstOrThrow();return this.threadFromDbRow(W)}async get(Y,X){let J=await this.db.selectFrom("threads").selectAll().where("id","=",Y).where("organization_id","=",X).executeTakeFirst();return J?this.threadFromDbRow(J):null}async update(Y,X,J){let W={updated_at:new Date().toISOString()};if(J.title!==void 0)W.title=J.title;if(J.description!==void 0)W.description=J.description;if(J.updated_by!==void 0)W.updated_by=J.updated_by;if(J.hidden!==void 0)W.hidden=J.hidden;if(J.status!==void 0)W.status=J.status;await this.db.updateTable("threads").set(W).where("id","=",Y).where("organization_id","=",X).execute();let K=await this.get(Y,X);if(!K)throw Error("Thread not found after update");return K}async forceFailIfInProgress(Y,X){let J=new Date().toISOString();return((await this.db.updateTable("threads").set({status:"failed",updated_at:J}).where("id","=",Y).where("organization_id","=",X).where("status","=","in_progress").executeTakeFirst()).numUpdatedRows??BigInt(0))>BigInt(0)}async delete(Y,X){await this.db.deleteFrom("threads").where("id","=",Y).where("organization_id","=",X).execute()}async list(Y,X,J){let G=this.db.selectFrom("threads").selectAll().where("organization_id","=",Y).where("hidden","=",!1).orderBy("updated_at","desc");if(X)G=G.where("created_by","=",X);let W=this.db.selectFrom("threads").select((Q)=>Q.fn.count("id").as("count")).where("organization_id","=",Y).where("hidden","=",!1);if(X)W=W.where("created_by","=",X);if(J?.limit)G=G.limit(J.limit);if(J?.offset)G=G.offset(J.offset);let[K,Z]=await Promise.all([G.execute(),W.executeTakeFirst()]);return{threads:K.map((Q)=>this.threadFromDbRow(Q)),total:Number(Z?.count||0)}}async listByTriggerIds(Y,X,J){if(X.length===0)return{threads:[],total:0};let G=this.db.selectFrom("threads").selectAll().where("organization_id","=",Y).where("hidden","=",!1).where("trigger_id","in",X).orderBy("updated_at","desc"),W=this.db.selectFrom("threads").select((Q)=>Q.fn.count("id").as("count")).where("organization_id","=",Y).where("hidden","=",!1).where("trigger_id","in",X);if(J?.limit)G=G.limit(J.limit);if(J?.offset)G=G.offset(J.offset);let[K,Z]=await Promise.all([G.execute(),W.executeTakeFirst()]);return{threads:K.map((Q)=>this.threadFromDbRow(Q)),total:Number(Z?.count||0)}}async saveMessages(Y,X){let J=new Date().toISOString(),G=Y[0]?.thread_id;if(!G)throw Error("thread_id is required when creating multiple messages");if(!await this.get(G,X))throw Error("Thread not found or access denied");let K=new Map;for(let $ of Y){let V=K.get($.id);if(V&&V.thread_id!==$.thread_id)throw Error(`Duplicate message id "${$.id}" with conflicting thread_ids: "${V.thread_id}" vs "${$.thread_id}"`);K.set($.id,$)}let Z=[...K.values()],Q=Z.find(($)=>$.thread_id!==G);if(Q)throw Error(`All messages must target the same thread. Expected thread_id "${G}", but message "${Q.id}" has thread_id "${Q.thread_id}"`);let H=Z.map(($)=>({id:$.id,thread_id:G,metadata:$.metadata?JSON.stringify($.metadata):null,parts:JSON.stringify($.parts),role:$.role,created_at:$.created_at??J,updated_at:J}));await this.db.transaction().execute(async($)=>{await $.insertInto("thread_messages").values(H).onConflict((V)=>V.column("id").doUpdateSet((U)=>({metadata:U.ref("excluded.metadata"),parts:U.ref("excluded.parts"),role:U.ref("excluded.role"),updated_at:U.ref("excluded.updated_at")}))).execute(),await $.updateTable("threads").set({updated_at:J}).where("id","=",G).where("organization_id","=",X).execute()})}async listMessages(Y,X,J){if(!await this.get(Y,X))return{messages:[],total:0};let W=J?.sort??"asc",K=this.db.selectFrom("thread_messages").selectAll().where("thread_id","=",Y).orderBy("created_at",W).orderBy("id",W),Z=this.db.selectFrom("thread_messages").select(($)=>$.fn.count("id").as("count")).where("thread_id","=",Y);if(J?.limit)K=K.limit(J.limit);if(J?.offset)K=K.offset(J.offset);let[Q,H]=await Promise.all([K.execute(),Z.executeTakeFirst()]);return{messages:Q.map(($)=>this.messageFromDbRow($)),total:Number(H?.count||0)}}threadFromDbRow(Y){return{id:Y.id,organization_id:Y.organization_id,title:Y.title,description:Y.description,status:Y.status,trigger_id:Y.trigger_id??null,created_at:sG1(Y.created_at),updated_at:sG1(Y.updated_at),created_by:Y.created_by,updated_by:Y.updated_by,hidden:!!Y.hidden}}messageFromDbRow(Y){let X,J;try{X=Y.metadata?JSON.parse(Y.metadata):void 0}catch(G){console.error(`Failed to parse metadata for message ${Y.id}:`,Y.metadata,G),X=void 0}try{J=typeof Y.parts==="string"?JSON.parse(Y.parts):Y.parts}catch(G){console.error(`Failed to parse parts for message ${Y.id}:`,Y.parts,G),J=[]}return{id:Y.id,thread_id:Y.thread_id,metadata:X,parts:J,role:Y.role,created_at:sG1(Y.created_at),updated_at:sG1(Y.updated_at)}}}var du1=M(()=>{RW();cE()});import{createHash as ZD8}from"crypto";function bN6(Y){return ZD8("sha256").update(Y).digest("hex")}class cu1{db;vault;constructor(Y,X){this.db=Y;this.vault=X}rowToKeyInfo(Y){return{id:Y.id,providerId:Y.provider_id,label:Y.label,organizationId:Y.organization_id,createdBy:Y.created_by,createdAt:Y.created_at instanceof Date?Y.created_at.toISOString():String(Y.created_at)}}async create(Y){let X=a8("aik"),J=await this.vault.encrypt(Y.apiKey),G=bN6(Y.apiKey),W=new Date;return await this.db.insertInto("ai_provider_keys").values({id:X,organization_id:Y.organizationId,provider_id:Y.providerId,label:Y.label,encrypted_api_key:J,key_hash:G,created_by:Y.createdBy,created_at:W}).execute(),this.rowToKeyInfo({id:X,provider_id:Y.providerId,label:Y.label,organization_id:Y.organizationId,created_by:Y.createdBy,created_at:W})}async upsert(Y){let X=a8("aik"),J=await this.vault.encrypt(Y.apiKey),G=bN6(Y.apiKey),W=new Date,K=await this.db.insertInto("ai_provider_keys").values({id:X,organization_id:Y.organizationId,provider_id:Y.providerId,label:Y.label,encrypted_api_key:J,key_hash:G,created_by:Y.createdBy,created_at:W}).onConflict((Z)=>Z.columns(["organization_id","provider_id","key_hash"]).doUpdateSet({label:Y.label})).returning(["id","provider_id","label","organization_id","created_by","created_at"]).executeTakeFirstOrThrow();return this.rowToKeyInfo(K)}async list(Y){let X=this.db.selectFrom("ai_provider_keys").where("organization_id","=",Y.organizationId).select(["id","provider_id","label","organization_id","created_by","created_at"]);if(Y.providerId)X=X.where("provider_id","=",Y.providerId);return(await X.orderBy("created_at","desc").execute()).map((G)=>this.rowToKeyInfo(G))}async resolve(Y,X){let J=await this.db.selectFrom("ai_provider_keys").where("id","=",Y).where("organization_id","=",X).selectAll().executeTakeFirstOrThrow(),G=await this.vault.decrypt(J.encrypted_api_key);return{keyInfo:this.rowToKeyInfo(J),apiKey:G}}async delete(Y,X){if(!(await this.db.deleteFrom("ai_provider_keys").where("id","=",Y).where("organization_id","=",X).executeTakeFirst()).numDeletedRows)throw Error(`AI provider key ${Y} not found`)}async findById(Y,X){let J=await this.db.selectFrom("ai_provider_keys").where("id","=",Y).where("organization_id","=",X).select(["id","provider_id","label","organization_id","created_by","created_at"]).executeTakeFirst();if(!J)throw Error("Provider key not found");return this.rowToKeyInfo(J)}}var xN6=M(()=>{RW()});class pu1{db;constructor(Y){this.db=Y}async create(Y,X,J){let G=crypto.randomUUID(),W=new Date(Date.now()+600000);return await this.db.insertInto("oauth_pkce_states").values({id:G,organization_id:X,user_id:J,code_verifier:Y,expires_at:W,created_at:new Date}).execute(),G}async consume(Y,X,J){let G=await this.db.deleteFrom("oauth_pkce_states").where("id","=",Y).where("organization_id","=",X).where("user_id","=",J).returningAll().executeTakeFirst();if(!G)throw Error("Invalid or expired OAuth state token");if((G.expires_at instanceof Date?G.expires_at:new Date(G.expires_at))<new Date)throw Error("OAuth state token has expired");return G.code_verifier}}function QD8(Y){return Y.includes("/")?Y.split("/").slice(1).join("/"):Y}function KD8(Y){let X=Y.supported_parameters.includes("tools"),J=Y.supported_parameters.includes("reasoning");return{providerId:"openrouter",modelId:QD8(Y.id),title:Y.name,description:Y.description||null,logo:null,capabilities:[...new Set([...Y.architecture.input_modalities,...Y.architecture.output_modalities,...X?["tools"]:[],...J?["reasoning"]:[]])],limits:{contextWindow:Y.context_length,maxOutputTokens:Y.top_provider.max_completion_tokens||null},costs:{input:Y.pricing.prompt,output:Y.pricing.completion}}}function uN6(Y){let X=new Map;for(let J of Y){let G={description:J.description,capabilities:J.capabilities,limits:J.limits,costs:J.costs};X.set(J.modelId,G);let W=J.modelId.replace(/\./g,"-");if(W!==J.modelId)X.set(W,G)}return X}async function HD8(Y){if(Y){let X=await Y.get(gN6,"openrouter");if(X)return uN6(X)}try{let X=await fetch("https://openrouter.ai/api/v1/models",{signal:AbortSignal.timeout(1e4)});if(!X.ok)return new Map;let{data:J}=await X.json(),G=J.map(KD8);if(Y)await Y.set(gN6,"openrouter",G);return uN6(G)}catch{return new Map}}function $D8(Y){let X=Y.replace(/\./g,"-"),J=Y.replace(/-\d{8}$/,""),G=J.replace(/\./g,"-");return[...new Set([Y,X,J,G])]}function FD8(Y,X){return Y.map((J)=>{let W=$D8(J.modelId).map((K)=>X.get(K)).find(Boolean);if(!W)return J;return{...J,description:J.description??W.description??null,capabilities:J.capabilities.length?J.capabilities:W.capabilities??[],limits:J.limits??W.limits??null,costs:J.costs??W.costs??null}})}class nu1{storage;cache;constructor(Y,X){this.storage=Y;this.cache=X}async activate(Y,X){let{keyInfo:J,apiKey:G}=await this.storage.resolve(Y,X),W=kW[J.providerId];if(!W)throw Error(`Unknown provider: ${J.providerId}`);return W.create(G)}async listModels(Y,X){let{keyInfo:J,apiKey:G}=await this.storage.resolve(Y,X),W=J.providerId;if(this.cache){let U=await this.cache.get(X,W);if(U)return U}let K=kW[W];if(!K)throw Error(`Unknown provider: ${W}`);let Q=await K.create(G).listModels(),H=new Set,$=Q.filter((U)=>{if(H.has(U.modelId))return!1;return H.add(U.modelId),!0});if(W!=="openrouter"){let U=await HD8(this.cache);$=FD8($,U)}let V=$.map((U)=>({...U,providerId:W}));if(this.cache)await this.cache.set(X,W,V);return V}}var gN6="_global";var mN6=M(()=>{ZB()});function VD8(Y){if(!Y)return;try{let X=JSON.parse(Y);if(typeof X!=="object"||X===null||Array.isArray(X))return;let J={};for(let[G,W]of Object.entries(X))if(typeof W==="string")J[G]=W;return Object.keys(J).length>0?J:void 0}catch{return}}function UD8(Y,X){for(let[J,G]of Object.entries(X)){let W=Y[J];if(!W||W.length===0){let K=Y["*"];if(!K||K.length===0)return!1;if(K.includes("*"))continue;for(let Z of G)if(!K.includes(Z))return!1;continue}if(W.includes("*"))continue;for(let K of G)if(!W.includes(K))return!1}return!0}function iu1(Y){let{auth:X,headers:J,role:G,permissions:W,userId:K}=Y,Z=X.api.hasPermission;return{hasPermission:async(Q)=>{if(G&&Vx1.includes(G))return!0;if(W)return UD8(W,Q);if(!Z)return console.error("[Auth] hasPermission API not available"),!1;try{if((await Z({headers:J,body:{permission:Q}}))?.success===!0)return!0;let $={};for(let U of Object.keys(Q))$[U]=["*"];return(await Z({headers:J,body:{permission:$}}))?.success===!0}catch(H){return console.error("[Auth] Permission check failed:",H),!1}},organization:{create:async(Q)=>{return X.api.createOrganization({headers:J,body:Q})},update:async(Q)=>{return X.api.updateOrganization({headers:J,body:Q})},delete:async(Q)=>{await X.api.deleteOrganization({headers:J,body:{organizationId:Q}})},get:async(Q)=>{return X.api.getFullOrganization({headers:J,query:Q?{organizationId:Q}:void 0})},list:async(Q)=>{return X.api.listOrganizations({headers:J,query:Q?{userId:Q}:void 0})},addMember:async(Q)=>{return X.api.addMember({headers:J,body:Q})},removeMember:async(Q)=>{await X.api.removeMember({headers:J,body:Q})},listMembers:async(Q)=>{return X.api.listMembers({headers:J,query:Q?{organizationId:Q.organizationId,limit:Q.limit,offset:Q.offset}:void 0})},updateMemberRole:async(Q)=>{return X.api.updateMemberRole({headers:J,body:Q})}},apiKey:{create:async(Q)=>{return X.api.createApiKey({body:{...Q,userId:K}})},list:async()=>{return X.api.listApiKeys({headers:J})},update:async(Q)=>{return X.api.updateApiKey({body:{...Q,userId:K}})},delete:async(Q)=>{await X.api.deleteApiKey({headers:J,body:{keyId:Q}})}}}}async function zD8(Y,X,J){if(Vx1.includes(J))return;let G=await Y.selectFrom("organizationRole").select(["permission"]).where("organizationId","=",X).where("role","=",J).executeTakeFirst();if(!G?.permission)return;try{return JSON.parse(G.permission)}catch{console.error(`[Auth] Failed to parse permissions for role: ${J}`);return}}async function qD8(Y,X,J,G=dN6){let W=Y.headers.get("Authorization");try{let K=new Headers(Y.headers);K.set("X-MCP-Session-Auth","true");let Z=await G.measure("auth_get_mcp_session",()=>X.api.getMcpSession({headers:K}));if(Z){let Q=Z.userId,H=await G.measure("auth_query_membership",()=>J.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","member.organizationId","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",Q).executeTakeFirst()),$=H?.role,V=H?{id:H.orgId,slug:H.orgSlug,name:H.orgName}:void 0,U;if(H&&$)U=await G.measure("auth_fetch_role_permissions",()=>zD8(J,H.organizationId,$));return{user:{id:Q,role:$},role:$,permissions:U,organization:V}}}catch(K){console.error("[Auth] OAuth session check failed:",K)}if(W?.startsWith("Bearer ")){let K=W.replace("Bearer ","").trim();try{let Z=await G.measure("auth_verify_mesh_jwt",()=>zJ6(K));if(Z){let Q,H=Z.metadata?.organizationId;if(Z.sub&&H)Q=(await G.measure("auth_query_membership",()=>J.selectFrom("member").select(["member.role"]).where("member.userId","=",Z.sub).where("member.organizationId","=",H).executeTakeFirst()))?.role;let $,V=Z.metadata?.organizationId;if(V){let U=Z.metadata?.organizationName,z=Z.metadata?.organizationSlug;if(U||z)$={id:V,name:U,slug:z};else{let q=await G.measure("auth_query_org_for_mesh_jwt",()=>J.selectFrom("organization").select(["id","slug","name"]).where("id","=",V).executeTakeFirst());$=q?{id:q.id,slug:q.slug,name:q.name}:{id:V}}}return{user:{id:Z.sub,connectionId:Z.metadata?.connectionId,role:Q},role:Q,permissions:Z.permissions,organization:$}}}catch{}try{let Z=await G.measure("auth_verify_api_key",()=>X.api.verifyApiKey({body:{key:K}}));if(Z?.valid&&Z.key){let Q=Z.key.metadata?.organization,H=Z.key.permissions,$,V=Z.key.userId;if(V&&Q?.id)$=(await G.measure("auth_query_membership",()=>J.selectFrom("member").select(["member.role"]).where("member.userId","=",V).where("member.organizationId","=",Q.id).executeTakeFirst()))?.role;return{apiKeyId:Z.key.id,user:{id:Z.key.userId,role:$},role:$,permissions:H,organization:Q?{id:Q.id,slug:Q.slug,name:Q.name}:void 0}}}catch(Z){console.error("[Auth] API key check failed:",Z)}}try{let K=new Headers(Y.headers);K.delete("Authorization");let Z=await G.measure("auth_get_session",()=>X.api.getSession({headers:K}));if(Z){let Q,H;if(Z.session.activeOrganizationId){let $=await G.measure("auth_get_full_organization",()=>X.api.getFullOrganization({headers:K}).catch(()=>null));if($)Q={id:$.id,slug:$.slug,name:$.name},H=$.members?.find((U)=>U.userId===Z.user.id)?.role;else Q={id:Z.session.activeOrganizationId,slug:"",name:""}}return{user:{id:Z.user.id,email:Z.user.email,role:H},role:H,organization:Q}}}catch(K){let Z=K;console.error("[Auth] Session check failed:",JSON.stringify({message:Z.message,body:Z.body,stack:Z.stack},null,2))}return{user:void 0}}async function cN6(Y){let X=new mA(Y.encryption.key),J=!!$6.CLICKHOUSE_URL,G=J?"clickhouse":"duckdb",W,K;if(J)W=new Oc($6.CLICKHOUSE_URL),K=new Oc($6.CLICKHOUSE_URL);else{let{engine:q}=await Iu1({basePath:gz}),{engine:O}=await Iu1({basePath:zA});W=q,K=O}let{resolve:Z}=await import("path"),Q=Z(gz),H=Z(zA),$=J?(q)=>"monitoring_logs":(q)=>`read_ndjson('${Q}/${q}/**/*.ndjson', auto_detect=true)`,V=J?(q)=>"monitoring_metrics":(q)=>`read_ndjson('${H}/${q}/**/*.ndjson', auto_detect=true)`,U=new Dc(Y.db),z={connections:new zm(Y.db,X),organizationSettings:new _u1(Y.db),monitoring:new ix1(W,$,K,V,G),monitoringDashboards:new Su1(Y.db),virtualMcps:new lx1(Y.db),users:new hu1(Y.db),tags:new yu1(Y.db),projects:new qm(Y.db),projectConnections:new ku1(Y.db),projectPluginConfigs:new vu1(Y.db),aiProviderKeys:new cu1(Y.db,X),oauthPkceStates:new pu1(Y.db),automations:dG1(Y.db)};return async(q,O)=>{let L=O?.timings??dN6,A=Bj(),P=q?.headers.get("x-caller-id")??void 0,R=q?await qD8(q,Y.auth,Y.db,L):{user:void 0},C=iu1({auth:Y.auth,headers:q?.headers??new Headers,role:R.role,permissions:R.permissions,userId:R.user?.id}),T={user:R.user};if(R.apiKeyId)T.apiKey={id:R.apiKeyId,name:"",userId:""};let E=R.organization,j=q?$6.BASE_URL??`${new URL(q.url).origin}`:kQ(),v=new e3(Y.auth,T.user?.id,void 0,C,R.role,"self"),k={...z,threads:new Bc(U,E?.id)},g=new nu1(k.aiProviderKeys,Y.modelListCache),f={timings:L,auth:T,connectionId:P,organization:E,storage:k,vault:X,authInstance:Y.auth,boundAuth:C,access:v,db:Y.db,tracer:Y.observability.tracer,meter:Y.observability.meter,baseUrl:j,metadata:{requestId:crypto.randomUUID(),timestamp:new Date,wellKnownForwardableHeaders:Object.fromEntries(OD8.map((y)=>[y,q?.headers.get(y)??null]).filter(([y,a])=>a!==null)),userAgent:q?.headers.get("x-mesh-client")||q?.headers.get("User-Agent")||void 0,ipAddress:(q?.headers.get("CF-Connecting-IP")||q?.headers.get("X-Forwarded-For"))??void 0,properties:VD8(q?.headers.get("x-mesh-properties"))},eventBus:Y.eventBus,aiProviders:g,createMCPProxy:async(y)=>{return await CN6(y,f)},getOrCreateClient:A};return f}}var lN6,xV,dN6,OD8;var nG1=M(()=>{M51();z51();x5();iL();ck1();vU6();bU6();ju1();ju1();aK();UN6();pk1();zN6();qN6();fu1();LN6();Dj();K_();SJ1();du1();E51();xN6();mN6();xV={set:(Y)=>{lN6=Y},create:async(Y,X)=>{return await lN6(Y,X)}},dN6={measure:async(Y,X)=>{return await X()}},OD8=["x-hub-signature-256"]});class pN6{db;constructor(Y){this.db=Y}mapRowToSubscription(Y){return{id:Y.id,organizationId:Y.organization_id,connectionId:Y.connection_id,publisher:Y.publisher,eventType:Y.event_type,filter:Y.filter,enabled:Boolean(Y.enabled),createdAt:Y.created_at,updatedAt:Y.updated_at}}async publishEvent(Y){let X=new Date().toISOString();return await this.db.insertInto("events").values({id:Y.id,organization_id:Y.organizationId,type:Y.type,source:Y.source,specversion:"1.0",subject:Y.subject??null,time:Y.time,datacontenttype:Y.datacontenttype??"application/json",dataschema:Y.dataschema??null,data:Y.data?JSON.stringify(Y.data):null,cron:Y.cron??null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:X,updated_at:X}).execute(),{id:Y.id,organizationId:Y.organizationId,type:Y.type,source:Y.source,specversion:"1.0",subject:Y.subject??null,time:Y.time,datacontenttype:Y.datacontenttype??"application/json",dataschema:Y.dataschema??null,data:Y.data??null,cron:Y.cron??null,status:"pending",attempts:0,lastError:null,nextRetryAt:null,createdAt:X,updatedAt:X}}async subscribe(Y){let X=this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Y.organizationId).where("connection_id","=",Y.connectionId).where("event_type","=",Y.eventType);if(Y.publisher)X=X.where("publisher","=",Y.publisher);else X=X.where("publisher","is",null);if(Y.filter)X=X.where("filter","=",Y.filter);else X=X.where("filter","is",null);let J=await X.executeTakeFirst();if(J)return this.mapRowToSubscription(J);let G=new Date().toISOString();return await this.db.insertInto("event_subscriptions").values({id:Y.id,organization_id:Y.organizationId,connection_id:Y.connectionId,publisher:Y.publisher??null,event_type:Y.eventType,filter:Y.filter??null,enabled:1,created_at:G,updated_at:G}).execute(),{id:Y.id,organizationId:Y.organizationId,connectionId:Y.connectionId,publisher:Y.publisher??null,eventType:Y.eventType,filter:Y.filter??null,enabled:1,createdAt:G,updatedAt:G}}async unsubscribe(Y,X){return{success:((await this.db.deleteFrom("event_subscriptions").where("id","=",Y).where("organization_id","=",X).executeTakeFirst()).numDeletedRows??0n)>0n}}async listSubscriptions(Y,X){let J=this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Y);if(X)J=J.where("connection_id","=",X);return(await J.execute()).map((W)=>this.mapRowToSubscription(W))}async getSubscription(Y,X){let J=await this.db.selectFrom("event_subscriptions").selectAll().where("id","=",Y).where("organization_id","=",X).executeTakeFirst();if(!J)return null;return this.mapRowToSubscription(J)}async getMatchingSubscriptions(Y){return(await this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Y.organizationId).where("enabled","=",1).where("event_type","=",Y.type).where((J)=>J.or([J("publisher","is",null),J("publisher","=",Y.source)])).execute()).map((J)=>this.mapRowToSubscription(J))}async createDeliveries(Y,X,J){if(X.length===0)return;let G=new Date().toISOString(),W=J??null,K=X.map((Z)=>({id:crypto.randomUUID(),event_id:Y,subscription_id:Z,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:W,created_at:G}));await this.db.insertInto("event_deliveries").values(K).execute()}async claimPendingDeliveries(Y){let X=new Date().toISOString(),G=(await this.db.updateTable("event_deliveries").set({status:"processing"}).where("id","in",(K)=>K.selectFrom("event_deliveries as d").innerJoin("event_subscriptions as s","s.id","d.subscription_id").select("d.id").where("d.status","=","pending").where("s.enabled","=",1).where((Z)=>Z.or([Z("d.next_retry_at","is",null),Z("d.next_retry_at","<=",X)])).orderBy("d.created_at","asc").limit(Y)).where("status","=","pending").returning(["id"]).execute()).map((K)=>K.id);if(G.length===0)return[];return(await this.db.selectFrom("event_deliveries as d").innerJoin("events as e","e.id","d.event_id").innerJoin("event_subscriptions as s","s.id","d.subscription_id").select(["d.id as delivery_id","d.event_id","d.subscription_id","d.status as delivery_status","d.attempts as delivery_attempts","d.last_error as delivery_last_error","d.delivered_at","d.next_retry_at as delivery_next_retry_at","d.created_at as delivery_created_at","e.organization_id","e.type","e.source","e.specversion","e.subject","e.time","e.datacontenttype","e.dataschema","e.data","e.cron","e.status as event_status","e.attempts as event_attempts","e.last_error as event_last_error","e.next_retry_at","e.created_at as event_created_at","e.updated_at as event_updated_at","s.connection_id","s.publisher","s.event_type","s.filter","s.enabled","s.created_at as subscription_created_at","s.updated_at as subscription_updated_at"]).where("d.id","in",G).where("d.status","=","processing").execute()).map((K)=>({delivery:{id:K.delivery_id,eventId:K.event_id,subscriptionId:K.subscription_id,status:K.delivery_status,attempts:K.delivery_attempts,lastError:K.delivery_last_error,deliveredAt:K.delivered_at,nextRetryAt:K.delivery_next_retry_at,createdAt:K.delivery_created_at},event:{id:K.event_id,organizationId:K.organization_id,type:K.type,source:K.source,specversion:K.specversion,subject:K.subject,time:K.time,datacontenttype:K.datacontenttype,dataschema:K.dataschema,data:K.data?JSON.parse(K.data):null,cron:K.cron,status:K.event_status,attempts:K.event_attempts,lastError:K.event_last_error,nextRetryAt:K.next_retry_at,createdAt:K.event_created_at,updatedAt:K.event_updated_at},subscription:{id:K.subscription_id,organizationId:K.organization_id,connectionId:K.connection_id,publisher:K.publisher,eventType:K.event_type,filter:K.filter,enabled:Boolean(K.enabled),createdAt:K.subscription_created_at,updatedAt:K.subscription_updated_at}}))}async markDeliveriesDelivered(Y){if(Y.length===0)return;let X=new Date().toISOString();await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:X}).where("id","in",Y).execute()}async markDeliveriesPermanentlyFailed(Y,X){if(Y.length===0)return;await this.db.updateTable("event_deliveries").set({status:"failed",last_error:X,next_retry_at:null}).where("id","in",Y).execute()}async markDeliveriesFailed(Y,X,J=20,G=1000,W=3600000){if(Y.length===0)return;for(let K of Y){let Z=await this.db.selectFrom("event_deliveries").select(["attempts"]).where("id","=",K).executeTakeFirst();if(!Z)continue;let Q=Z.attempts+1;if(Q>=J)await this.db.updateTable("event_deliveries").set({attempts:Q,last_error:X,status:"failed",next_retry_at:null}).where("id","=",K).execute();else{let H=Math.min(G*Math.pow(2,Q-1),W),$=new Date(Date.now()+H).toISOString();await this.db.updateTable("event_deliveries").set({attempts:Q,last_error:X,status:"pending",next_retry_at:$}).where("id","=",K).execute()}}}async updateEventStatus(Y){let X=await this.db.selectFrom("event_deliveries").select(["status"]).where("event_id","=",Y).execute();if(X.length===0)return;let J=X.every((K)=>K.status==="delivered"),G=X.some((K)=>K.status==="failed"),W=X.some((K)=>K.status==="pending"||K.status==="processing");if(J)await this.db.updateTable("events").set({status:"delivered",updated_at:new Date().toISOString()}).where("id","=",Y).execute();else if(G&&!W)await this.db.updateTable("events").set({status:"failed",updated_at:new Date().toISOString()}).where("id","=",Y).execute()}async resetStuckDeliveries(){let Y=await this.db.updateTable("event_deliveries").set({status:"pending"}).where("status","=","processing").executeTakeFirst();return Number(Y.numUpdatedRows??0)}async getEvent(Y,X){let J=await this.db.selectFrom("events").selectAll().where("id","=",Y).where("organization_id","=",X).executeTakeFirst();if(!J)return null;return{id:J.id,organizationId:J.organization_id,type:J.type,source:J.source,specversion:J.specversion,subject:J.subject,time:J.time,datacontenttype:J.datacontenttype,dataschema:J.dataschema,data:J.data?JSON.parse(J.data):null,cron:J.cron,status:J.status,attempts:J.attempts,lastError:J.last_error,nextRetryAt:J.next_retry_at,createdAt:J.created_at,updatedAt:J.updated_at}}async findActiveCronEvent(Y,X,J,G){let W=await this.db.selectFrom("events").selectAll().where("organization_id","=",Y).where("type","=",X).where("source","=",J).where("cron","=",G).where("status","in",["pending","processing","delivered"]).orderBy("created_at","desc").executeTakeFirst();if(!W)return null;return{id:W.id,organizationId:W.organization_id,type:W.type,source:W.source,specversion:W.specversion,subject:W.subject,time:W.time,datacontenttype:W.datacontenttype,dataschema:W.dataschema,data:W.data?JSON.parse(W.data):null,cron:W.cron,status:W.status,attempts:W.attempts,lastError:W.last_error,nextRetryAt:W.next_retry_at,createdAt:W.created_at,updatedAt:W.updated_at}}async findOrphanedCronEvents(){return(await this.db.selectFrom("events").selectAll().where("cron","is not",null).where("status","=","delivered").where((X)=>X.not(X.exists(X.selectFrom("event_deliveries").select("id").whereRef("event_deliveries.event_id","=","events.id").where("event_deliveries.status","in",["pending","processing"])))).execute()).map((X)=>({id:X.id,organizationId:X.organization_id,type:X.type,source:X.source,specversion:X.specversion,subject:X.subject,time:X.time,datacontenttype:X.datacontenttype,dataschema:X.dataschema,data:X.data?JSON.parse(X.data):null,cron:X.cron,status:X.status,attempts:X.attempts,lastError:X.last_error,nextRetryAt:X.next_retry_at,createdAt:X.created_at,updatedAt:X.updated_at}))}async cancelEvent(Y,X,J){let G=await this.db.updateTable("events").set({status:"failed",last_error:"Cancelled by publisher",updated_at:new Date().toISOString()}).where("id","=",Y).where("organization_id","=",X).where("source","=",J).where("status","in",["pending","processing"]).executeTakeFirst();if((G.numUpdatedRows??0n)>0n)await this.db.updateTable("event_deliveries").set({status:"failed",last_error:"Event cancelled by publisher"}).where("event_id","=",Y).where("status","in",["pending","processing"]).execute();return{success:(G.numUpdatedRows??0n)>0n}}async scheduleRetryWithoutAttemptIncrement(Y,X){if(Y.length===0)return;let J=new Date(Date.now()+X).toISOString();await this.db.updateTable("event_deliveries").set({status:"pending",next_retry_at:J}).where("id","in",Y).execute()}async ackDelivery(Y,X,J){if(!await this.db.selectFrom("events").select(["id"]).where("id","=",Y).where("organization_id","=",X).executeTakeFirst())return{success:!1};let K=((await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:new Date().toISOString()}).where("event_id","=",Y).where("status","in",["pending","processing"]).where((Z)=>Z.exists(Z.selectFrom("event_subscriptions").select("id").whereRef("event_subscriptions.id","=","event_deliveries.subscription_id").where("event_subscriptions.connection_id","=",J).where("event_subscriptions.organization_id","=",X))).executeTakeFirst()).numUpdatedRows??0n)>0n;if(K)await this.updateEventStatus(Y);return{success:K}}async syncSubscriptions(Y){let{organizationId:X,connectionId:J,subscriptions:G}=Y,W=(P,R)=>{return`${P}::${R??""}`},K=await this.listSubscriptions(X,J),Z=new Map;for(let P of K)Z.set(W(P.eventType,P.publisher),P);let Q=new Map;for(let P of G)Q.set(W(P.eventType,P.publisher),P);let H=new Date().toISOString(),$=[],V=[],U=[],z=0;for(let[P,R]of Q){let C=Z.get(P);if(!C)$.push({id:crypto.randomUUID(),organization_id:X,connection_id:J,event_type:R.eventType,publisher:R.publisher??null,filter:R.filter??null,enabled:1,created_at:H,updated_at:H});else{let T=C.filter??null,E=R.filter??null;if(T!==E)V.push({id:C.id,filter:E});else z++}}for(let[P,R]of Z)if(!Q.has(P))U.push(R.id);if($.length>0)await this.db.insertInto("event_subscriptions").values($).execute();if(V.length>0)await Promise.all(V.map((P)=>this.db.updateTable("event_subscriptions").set({filter:P.filter,updated_at:H}).where("id","=",P.id).execute()));if(U.length>0)await this.db.deleteFrom("event_subscriptions").where("id","in",U).execute();let q=$.length,O=V.length,L=U.length,A=await this.listSubscriptions(X,J);return{created:q,updated:O,deleted:L,unchanged:z,subscriptions:A}}}function nN6(Y){return new pN6(Y)}class iN6{listeners=new Map;totalCount=0;strategy=null;started=!1;async start(Y){if(this.started){if(!Y)return;await this.stop()}this.strategy=Y,await this.strategy.start((X,J)=>this.localEmit(X,J)),this.started=!0}async stop(){if(!this.started||!this.strategy)return;await this.strategy.stop(),this.started=!1}add(Y){if(this.totalCount>=500)return console.warn("[SSEHub] Total connection limit reached (500)"),null;let X=this.listeners.get(Y.organizationId);if(!X)X=new Map,this.listeners.set(Y.organizationId,X);if(X.size>=50)return console.warn(`[SSEHub] Per-org connection limit reached for ${Y.organizationId} (50)`),null;return X.set(Y.id,Y),this.totalCount++,Y.id}remove(Y,X){let J=this.listeners.get(Y);if(!J)return;if(J.delete(X)){if(this.totalCount--,J.size===0)this.listeners.delete(Y)}}emit(Y,X){if(this.strategy)this.strategy.broadcast(Y,X);else this.localEmit(Y,X)}countForOrg(Y){return this.listeners.get(Y)?.size??0}get count(){return this.totalCount}localEmit(Y,X){let J=this.listeners.get(Y);if(!J||J.size===0)return;for(let G of J.values()){if(G.typePatterns&&!LD8(X.type,G.typePatterns))continue;try{G.push(X)}catch{this.remove(Y,G.id)}}}}function LD8(Y,X){for(let J of X){if(J===Y)return!0;if(J.endsWith(".*")){let G=J.slice(0,-1);if(Y.startsWith(G))return!0}}return!1}function aN6(Y){return{id:Y.id,type:Y.type,source:Y.source,subject:Y.subject,data:Y.data?ND8(Y.data):void 0,time:Y.time}}function ND8(Y){if(typeof Y==="string")try{return JSON.parse(Y)}catch{return Y}return Y}var L$;var tG1=M(()=>{L$=new iN6});function rN6(Y){if(typeof Y==="object"&&Y!==null){let G=Y,W=G.status??G.code;if(typeof W==="number"&&BD8.has(W))return!0}let X=Y instanceof Error?Y.message:typeof Y==="string"?Y:"";if(!X)return!1;let J=X.toLowerCase();if(/\b401\b/.test(J))return!0;return DD8.some((G)=>J.includes(G))}var BD8,DD8,wc;var au1=M(()=>{BD8=new Set([401]),DD8=["unauthorized","invalid_token","invalid api key","api key required","api-key required"];wc=class wc extends Error{constructor(Y){super(Y);this.name="PermanentDeliveryError"}}});var eG1;var ru1=M(()=>{eG1={pollIntervalMs:5000,batchSize:100,maxAttempts:20,retryDelayMs:1000,maxDelayMs:3600000}});function wD8(Y){return Y.endsWith("_self")}function MD8(Y){return Y.slice(0,-5)}function oN6(){return async(Y,X)=>{try{if(wD8(Y)&&fM1()){let Z=MD8(Y),Q=await xV.create();if(await tF0(X,{organizationId:Z,connectionId:Y,publish:async(V,U,z,q)=>{await Q.eventBus.publish(Z,Y,{type:V,subject:U,data:z,deliverAt:q?.deliverAt})},createMCPProxy:async(V)=>{let U={...Q,getOrCreateClient:Bj()},z=await lu1(V,U);return{callTool:async(q,O,L)=>{let A=await z.callTool(q,O,L);return{content:A.content,structuredContent:A.structuredContent,isError:A.isError}},close:()=>z.close()}}}))return{success:!0}}let J=await xV.create(),G=await lu1(Y,J),K=await EN1.forClient(Nc(G)).ON_EVENTS({events:X});return{success:K.success,error:K.error,retryAfter:K.retryAfter,results:K.results}}catch(J){let G=J instanceof Error?J.message:String(J);if(console.error(`[EventBus] Failed to notify connection ${Y}:`,G),rN6(J))throw new wc(G);return{success:!1,error:G}}}}var sN6=M(()=>{nG1();nR();E51();Nh();K_();au1()});function tN6(Y){return{specversion:"1.0",id:Y.id,source:Y.source,type:Y.type,time:Y.time,subject:Y.subject??void 0,datacontenttype:Y.datacontenttype,dataschema:Y.dataschema??void 0,data:Y.data??void 0}}function AD8(Y){let X=new Map;for(let G of Y){let W=G.subscription.connectionId,K=X.get(W);if(K){if(K.deliveryIds.push(G.delivery.id),!K.seenEventIds.has(G.event.id))K.seenEventIds.add(G.event.id),K.events.push(tN6(G.event))}else X.set(W,{connectionId:G.subscription.connectionId,deliveryIds:[G.delivery.id],events:[tN6(G.event)],seenEventIds:new Set([G.event.id])})}let J=new Map;for(let[G,W]of X)J.set(G,{connectionId:W.connectionId,deliveryIds:W.deliveryIds,events:W.events});return J}class ou1{storage;notifySubscriber;running=!1;processing=!1;pendingNotify=!1;config;eventTriggerEngine;constructor(Y,X,J){this.storage=Y;this.notifySubscriber=J??oN6(),this.config={...eG1,...X}}setEventTriggerEngine(Y){this.eventTriggerEngine=Y}async start(){if(this.running)return;let Y=await this.storage.resetStuckDeliveries();if(Y>0)console.log(`[EventBus] Reset ${Y} stuck deliveries from previous shutdown`);let X=await this.storage.findOrphanedCronEvents();for(let J of X)await this.scheduleNextCronDelivery(J),console.log(`[EventBus] Recovered orphaned cron event ${J.id} (${J.type}, cron: ${J.cron})`);if(X.length>0)console.log(`[EventBus] Recovered ${X.length} orphaned cron event(s)`);this.running=!0}stop(){this.running=!1}isRunning(){return this.running}async processNow(){if(!this.running)return;if(this.processing){this.pendingNotify=!0;return}this.processing=!0;try{do this.pendingNotify=!1,await this.processEvents();while(this.pendingNotify)}catch(Y){console.error("[EventBus] Error processing events:",Y)}finally{this.processing=!1}}async processEvents(){let Y=await this.storage.claimPendingDeliveries(this.config.batchSize);if(Y.length===0)return;let X=AD8(Y),J=await Promise.allSettled(Array.from(X.entries()).map(async([K,Z])=>{let Q=new Set;try{let $=await this.notifySubscriber(Z.connectionId,Z.events);if($.results&&Object.keys($.results).length>0)await this.processPerEventResults(Z,$);else if($.success)await this.storage.markDeliveriesDelivered(Z.deliveryIds);else if($.retryAfter&&$.retryAfter>0)await this.storage.scheduleRetryWithoutAttemptIncrement(Z.deliveryIds,$.retryAfter);else await this.storage.markDeliveriesFailed(Z.deliveryIds,$.error||"Subscriber returned success=false",this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}catch($){if($ instanceof wc){await this.storage.markDeliveriesPermanentlyFailed(Z.deliveryIds,$.message);for(let V of Z.events)Q.add(V.id)}else{let V=$ instanceof Error?$.message:String($);console.error(`[EventBus] Failed to notify subscription ${K}:`,V),await this.storage.markDeliveriesFailed(Z.deliveryIds,V,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}}let H=new Set;for(let $ of Y)if(Z.deliveryIds.includes($.delivery.id))H.add($.event.id);return{eventIds:H,permanentlyFailed:Q}})),G=new Set,W=new Set;for(let K of J)if(K.status==="fulfilled"){for(let Z of K.value.eventIds)G.add(Z);for(let Z of K.value.permanentlyFailed)W.add(Z)}for(let K of G)try{await this.storage.updateEventStatus(K);let Z=Y.find((Q)=>Q.event.id===K)?.event;if(Z?.cron&&!W.has(K))await this.scheduleNextCronDelivery(Z)}catch(Z){console.error(`[EventBus] Failed to update event status ${K}:`,Z)}if(this.eventTriggerEngine){let K=new Set,Z=[];for(let Q of Y){if(Q.delivery.attempts>0)continue;if(!K.has(Q.event.id))K.add(Q.event.id),Z.push({source:Q.event.source,type:Q.event.type,data:Q.event.data,organizationId:Q.event.organizationId})}if(Z.length>0)this.eventTriggerEngine.notifyEvents(Z)}}async processPerEventResults(Y,X){let J=[],G=new Map,W=[],K=new Map;for(let Z=0;Z<Y.events.length;Z++){let Q=Y.events?.[Z];if(!Q)continue;let H=Y.deliveryIds?.[Z];if(!H)continue;K.set(Q.id,H)}for(let Z of Y.events){let Q=K.get(Z.id);if(!Q)continue;let H=X.results?.[Z.id];if(H)if(H.success)J.push(Q);else if(H.retryAfter&&H.retryAfter>0){let $=G.get(H.retryAfter)||[];$.push(Q),G.set(H.retryAfter,$)}else W.push({deliveryId:Q,error:H.error||"Event processing failed"});else if(X.success)J.push(Q);else if(X.retryAfter&&X.retryAfter>0){let $=G.get(X.retryAfter)||[];$.push(Q),G.set(X.retryAfter,$)}else W.push({deliveryId:Q,error:X.error||"Batch processing failed"})}if(J.length>0)await this.storage.markDeliveriesDelivered(J);for(let[Z,Q]of G)await this.storage.scheduleRetryWithoutAttemptIncrement(Q,Z);if(W.length>0){let Z=new Map;for(let{deliveryId:Q,error:H}of W){let $=Z.get(H)||[];$.push(Q),Z.set(H,$)}for(let[Q,H]of Z)await this.storage.markDeliveriesFailed(H,Q,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}}async scheduleNextCronDelivery(Y){if(!Y.cron)return;try{let J=new rN(Y.cron,{timezone:"UTC"}).nextRun();if(!J){console.log(`[EventBus] Cron expression for event ${Y.id} has no more runs`);return}let G=J.toISOString(),W=await this.storage.getMatchingSubscriptions(Y);if(W.length===0){console.log(`[EventBus] No subscriptions for cron event ${Y.id}, skipping next delivery`);return}await this.storage.createDeliveries(Y.id,W.map((K)=>K.id),G),console.log(`[EventBus] Scheduled next cron delivery for event ${Y.id} at ${G}`)}catch(X){console.error(`[EventBus] Failed to schedule next cron delivery for event ${Y.id}:`,X)}}}var eN6=M(()=>{Jl();au1();ru1();sN6()});class su1{storage;worker;notifyStrategy;running=!1;constructor(Y){this.storage=Y.storage,this.notifyStrategy=Y.notifyStrategy,this.worker=new ou1(this.storage,Y.config)}setEventTriggerEngine(Y){this.worker.setEventTriggerEngine(Y)}async publish(Y,X,J){if(J.deliverAt&&J.cron)throw Error("Cannot set both deliverAt and cron. Use one or the other.");let G;if(J.cron){try{let V=new rN(J.cron,{timezone:"UTC"}).nextRun();if(!V)throw Error("Cron expression does not produce a next run time");G=V.toISOString()}catch($){throw Error(`Invalid cron expression: ${$ instanceof Error?$.message:String($)}`)}let H=await this.storage.findActiveCronEvent(Y,J.type,X,J.cron);if(H)return H}let W=crypto.randomUUID(),K=new Date().toISOString(),Z=await this.storage.publishEvent({id:W,organizationId:Y,type:J.type,source:X,subject:J.subject,time:K,data:J.data,cron:J.cron});L$.emit(Y,aN6(Z));let Q=await this.storage.getMatchingSubscriptions(Z);if(Q.length>0){let H=J.deliverAt??G;if(await this.storage.createDeliveries(W,Q.map(($)=>$.id),H),this.notifyStrategy&&!H)await this.notifyStrategy.notify(W).catch(($)=>{console.warn("[EventBus] Notify failed (non-critical):",$)})}return Z}async subscribe(Y,X){return this.storage.subscribe({id:crypto.randomUUID(),organizationId:Y,connectionId:X.connectionId,publisher:X.publisher,eventType:X.eventType,filter:X.filter})}async unsubscribe(Y,X){return this.storage.unsubscribe(X,Y)}async listSubscriptions(Y,X){return this.storage.listSubscriptions(Y,X)}async getSubscription(Y,X){return this.storage.getSubscription(X,Y)}async getEvent(Y,X){return this.storage.getEvent(X,Y)}async cancelEvent(Y,X,J){return this.storage.cancelEvent(X,Y,J)}async ackEvent(Y,X,J){return this.storage.ackDelivery(X,Y,J)}async syncSubscriptions(Y,X){return this.storage.syncSubscriptions({organizationId:Y,...X})}async start(){if(this.running)return;if(this.running=!0,await this.worker.start(),this.notifyStrategy)await this.notifyStrategy.start(()=>{this.worker.processNow().catch((Y)=>{console.error("[EventBus] Error processing after notify:",Y)})});await this.worker.processNow().catch((Y)=>{console.error("[EventBus] Error processing pending events on startup:",Y)})}async stop(){if(!this.running)return;if(this.running=!1,this.worker.stop(),this.notifyStrategy)try{await this.notifyStrategy.stop()}catch(Y){console.error("[EventBus] Error stopping notify strategy:",Y)}}isRunning(){return this.running}}var YB6=M(()=>{Jl();tG1();eN6()});class tu1{options;sub=null;onNotify=null;encoder=new TextEncoder;constructor(Y){this.options=Y}async start(Y){if(this.sub)return;this.onNotify=Y,this.sub=this.options.getConnection().subscribe("mesh.events.notify"),(async()=>{for await(let X of this.sub)this.onNotify?.()})().catch((X)=>{console.error("[NatsNotify] Subscription error:",X)})}async stop(){this.sub?.unsubscribe(),this.sub=null,this.onNotify=null}async notify(Y){try{this.options.getConnection().publish("mesh.events.notify",this.encoder.encode(Y))}catch(X){console.warn("[NatsNotify] Publish failed (non-critical):",X)}}}class eu1{options;sub=null;localEmit=null;originId=crypto.randomUUID();encoder=new TextEncoder;constructor(Y){this.options=Y}async start(Y){if(this.localEmit=Y,this.sub)return;this.sub=this.options.getConnection().subscribe("mesh.sse.broadcast");let X=new TextDecoder;(async()=>{for await(let J of this.sub)try{let G=JSON.parse(X.decode(J.data));if(typeof G?.originId!=="string"||typeof G?.organizationId!=="string"||typeof G?.event?.id!=="string"||typeof G?.event?.type!=="string")continue;if(G.originId===this.originId)continue;this.localEmit?.(G.organizationId,G.event)}catch{}})().catch((J)=>{console.error("[NatsSSEBroadcast] Subscription error:",J)})}broadcast(Y,X){this.localEmit?.(Y,X);let J={originId:this.originId,organizationId:Y,event:X};try{this.options.getConnection().publish("mesh.sse.broadcast",this.encoder.encode(JSON.stringify(J)))}catch(G){console.warn("[NatsSSEBroadcast] Publish failed (non-critical):",G)}}async stop(){this.sub?.unsubscribe(),this.sub=null,this.localEmit=null}}function XB6(...Y){return{async start(X){await Promise.all(Y.map((J)=>J.start(X)))},async stop(){await Promise.all(Y.map((X)=>X.stop().catch((J)=>{console.error("[NotifyStrategy] Error stopping strategy:",J)})))},async notify(X){await Promise.all(Y.map((J)=>J.notify(X).catch((G)=>{console.warn("[NotifyStrategy] Notify failed (non-critical):",G)})))}}}class Ym1{intervalMs;timer=null;onNotify=null;constructor(Y){this.intervalMs=Y}async start(Y){if(this.timer)return;this.onNotify=Y,this.scheduleNext()}async stop(){if(this.timer)clearTimeout(this.timer),this.timer=null;this.onNotify=null}async notify(Y){if(this.onNotify)this.onNotify()}scheduleNext(){this.timer=setTimeout(()=>{if(this.onNotify)this.onNotify();if(this.timer)this.scheduleNext()},this.intervalMs)}}function JB6(Y,X,J){let G=nN6(Y.db),W=J?.pollIntervalMs??eG1.pollIntervalMs,K=XB6(new Ym1(W),new tu1({getConnection:()=>X.getConnection()})),Z=new eu1({getConnection:()=>X.getConnection()});return L$.start(Z).catch((Q)=>{console.error("[SSEHub] Failed to start broadcast strategy:",Q)}),new su1({storage:G,config:J,notifyStrategy:K})}var Xm1=M(()=>{YB6();ru1();tG1();tG1()});var GB6=()=>{};var Jm1=()=>{};var WB6=()=>{};var ED8,YiY;var ZB6=M(()=>{GB6();Jm1();QB();WB6();ED8={br:".br",zstd:".zst",gzip:".gz"},YiY=Object.keys(ED8)});var QB6=M(()=>{ZB6()});var KB6=()=>{};var HB6=M(()=>{KB6()});var $B6=()=>{};var FB6=M(()=>{fx1()});var Gm1=M(()=>{KB();FB6()});var Wm1="x-hono-disable-ssg",DiY;var Zm1=M(()=>{Gm1();DiY=(()=>{try{return new Response("SSG is disabled",{status:404,headers:{[Wm1]:"true"}})}catch{return null}})()});var VB6=M(()=>{bJ1()});var Qm1=M(()=>{VB6()});var UB6=M(()=>{HB6();$B6();Jm1();Zm1();Qm1();Gm1()});var zB6=M(()=>{Zm1();Qm1();UB6()});var YaY;var qB6=M(()=>{zB6();({write:YaY}=Bun)});var RD8=class{#Y;constructor(Y){this.#Y=Y,this.raw=Y.raw,this.url=Y.url?new URL(Y.url):null,this.protocol=Y.protocol??null}send(Y,X){this.#Y.send(Y,X??{})}raw;binaryType="arraybuffer";get readyState(){return this.#Y.readyState}url;protocol;close(Y,X){this.#Y.close(Y,X)}},OB6=(Y)=>{return(...X)=>{if(typeof X[0]==="function"){let[J,G]=X;return async function(K,Z){let Q=await J(K),H=await Y(K,Q,G);if(H)return H;await Z()}}else{let[J,G,W]=X;return(async()=>{let K=await Y(J,G,W);if(!K)throw Error("Failed to upgrade WebSocket");return K})()}}};var LB6=()=>{};var Mc=(Y)=>("server"in Y.env)?Y.env.server:Y.env;var Y71=()=>{};var CD8;var NB6=M(()=>{LB6();Y71();CD8=OB6((Y,X)=>{let J=Mc(Y);if(!J)throw TypeError("env has to include the 2nd argument of fetch.");if(J.upgrade(Y.req.raw,{data:{events:X,url:new URL(Y.req.url),protocol:Y.req.url}}))return new Response(null);return})});var Km1=(Y)=>{let X=Mc(Y);if(!X)throw TypeError("env has to include the 2nd argument of fetch.");if(typeof X.requestIP!=="function")throw TypeError("server.requestIP is not a function.");let J=X.requestIP(Y.req.raw);if(!J)return{remote:{}};return{remote:{address:J.address,addressType:J.family==="IPv6"||J.family==="IPv4"?J.family:void 0,port:J.port}}};var BB6=M(()=>{Y71()});var DB6=M(()=>{QB6();qB6();NB6();BB6();Y71()});var wB6;var MB6=M(()=>{wB6={google:{name:"Google",icon:"https://assets.decocache.com/webdraw/eb7480aa-a68b-4ce4-98ff-36aa121762a7/google.svg"},github:{name:"GitHub",icon:"https://assets.decocache.com/webdraw/5f999dcb-c8a6-4572-948c-9996ef1d502f/github.svg"},microsoft:{name:"Microsoft",icon:"https://assets.decocache.com/mcp/aa6f6e1a-6526-4bca-99cc-82e2ec38b0e4/microsoft.png"}}});var G71={};L6(G71,{waitForSeed:()=>gD8,seedLocalMode:()=>hD8,markSeedComplete:()=>xD8,isLocalMode:()=>pE,getLocalAdminUser:()=>Hm1,getLocalAdminPassword:()=>J71});import{randomBytes as ID8}from"crypto";import{mkdir as jD8,writeFile as SD8,chmod as _D8}from"fs/promises";import{userInfo as kD8}from"os";import{join as vD8}from"path";async function J71(){if(X71)return X71;let Y=$6.DATA_DIR,X=vD8(Y,"secrets.json");try{let G=Bun.file(X);if(await G.exists()){let W=await G.json();if(W.LOCAL_ADMIN_PASSWORD){let K=W.LOCAL_ADMIN_PASSWORD;return X71=K,K}}}catch{}let J=ID8(24).toString("base64");try{await jD8(Y,{recursive:!0,mode:448});let G={};try{let W=Bun.file(X);if(await W.exists())G=await W.json()}catch{}G.LOCAL_ADMIN_PASSWORD=J,await SD8(X,JSON.stringify(G,null,2),{mode:384}),await _D8(X,384)}catch(G){console.warn("Warning: Could not save secrets file:",G)}return X71=J,J}function AB6(){try{return kD8().username||"local"}catch{return"local"}}function fD8(Y){return Y.charAt(0).toUpperCase()+Y.slice(1)}async function yD8(){let Y=gQ(),X=await Y.db.selectFrom("user").select(Y.db.fn.countAll().as("count")).executeTakeFirst();return Number(X?.count??0)===0}async function hD8(){if(!await yD8())return!1;let X=AB6(),J=`${X}@localhost.mesh`,G=fD8(X),W=await J71(),K=await _Z.api.signUpEmail({body:{email:J,password:W,name:G}});if(!K?.user?.id)throw Error("Failed to create local admin user");let Z=K.user.id,Q=gQ();await Q.db.updateTable("user").set({role:"admin"}).where("id","=",Z).execute();let H=`${X}-local`.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),$=`${G} Local`;return await Q.db.updateTable("organization").set({name:$,slug:H}).where("id","in",(V)=>V.selectFrom("member").select("organizationId").where("userId","=",Z)).execute(),!0}async function Hm1(){let Y=gQ(),X=`${AB6()}@localhost.mesh`;return Y.db.selectFrom("user").where("email","=",X).selectAll().executeTakeFirst()}function pE(){return $6.MESH_LOCAL_MODE}function xD8(){EB6()}function gD8(){return bD8}var X71=null,EB6,bD8;var $_=M(()=>{xA();x5();_N();bD8=new Promise((Y)=>{if(EB6=Y,!pE())Y()})});var $m1,PB6;var TB6=M(()=>{kZ();DB6();x5();_N();MB6();$_();$m1=new aY;$m1.get("/config",async(Y)=>{try{let X=Object.keys(F8.socialProviders??{}),J=X.length>0,G=X.map((Z)=>({name:Z,icon:wB6[Z].icon})),W=$6.NODE_ENV!=="production"||$6.UNSAFE_ALLOW_STDIO_TRANSPORT,K={emailAndPassword:{enabled:F8.emailAndPassword?.enabled??!1},magicLink:{enabled:F8.magicLinkConfig?.enabled??!1},emailOtp:{enabled:F8.emailOtpConfig?.enabled??!1},resetPassword:{enabled:kJ1},socialProviders:{enabled:J,providers:G},sso:F8.ssoConfig?{enabled:!0,providerId:F8.ssoConfig.providerId}:{enabled:!1},stdioEnabled:W,localMode:pE()};return Y.json({success:!0,config:K})}catch(X){let J=X instanceof Error?X.message:"Failed to load auth config";return Y.json({success:!1,error:J},500)}});$m1.post("/local-session",async(Y)=>{if(!pE())return Y.json({success:!1,error:"Local mode is not active"},403);let X;try{X=Km1(Y).remote.address}catch{}if(!(X==="127.0.0.1"||X==="::1"||X==="::ffff:127.0.0.1"))return Y.json({success:!1,error:"Forbidden"},403);try{let{waitForSeed:G}=await Promise.resolve().then(() => ($_(),G71));await G();let{auth:W}=await Promise.resolve().then(() => (_N(),MV6)),K=await Hm1();if(!K)return Y.json({success:!1,error:"Local admin user not found"},500);let Z=await J71();return await W.api.signInEmail({body:{email:K.email,password:Z},asResponse:!0})}catch(G){return console.error("Failed to create local session:",G),Y.json({success:!1,error:G instanceof Error?G.message:"Failed to create local session"},500)}});PB6=$m1});function RB6(Y){let X=Y.filter((G)=>G.role==="system"),J=Y.find((G)=>G.role!=="system");return{systemMessages:X,requestMessage:J}}function uD8(Y){let X=!1,J=Y.map((G)=>{if(G.role!=="assistant")return G;if(!G.parts.some((K)=>("state"in K)&&K.state==="approval-requested"))return G;return X=!0,{...G,parts:G.parts.map((K)=>{if(!("state"in K)||K.state!=="approval-requested"||!("approval"in K)||!K.approval)return K;return{...K,state:"output-denied",approval:{...K.approval,approved:!1,reason:"User sent a new message without approving this tool call."}}})}});return X?J:Y}function mD8(Y){let[X,J]=Y.reduce((G,W)=>{if(W.role==="system")G[0].push(W);else G[1].push(W);return G},[[],[]]);return{systemMessages:X,messages:J}}async function lD8(Y,X){return await Y.loadHistory(X)}function dD8(Y,X){let J=Y.filter((K)=>K.parts&&K.parts.length>0),G=J.findIndex((K)=>K.id===X.id);return G>=0?[...J.slice(0,G),X]:[...J,X]}async function CB6(Y,X,J,G){let W=await lD8(Y,G),K=dD8(W,X);return[...J,...K]}async function IB6(Y,X){let J=await HQ0({messages:Y}),G=uD8(J),W=await KQ0(G,{tools:X.tools,ignoreIncompleteToolCalls:!0}),{systemMessages:K,messages:Z}=mD8(W),Q=FQ0({messages:Z,reasoning:"none",emptyMessages:"remove",toolCalls:"none"});return{systemMessages:K,messages:Q,originalMessages:J}}var Fm1=M(()=>{H7()});function jB6(Y){let{toolOutputMap:X}=Y;return F5({description:"Filter a tool output that was too large to display inline. Returns all lines matching the given regular expression pattern (grep-like). You may call this tool multiple times with different patterns to extract different pieces of information.",inputExamples:[{input:{tool_call_id:"id_1",pattern:"error|warning"}},{input:{tool_call_id:"id_2",pattern:'"status":\\s*"failed"'}}],inputSchema:B0(F.object({tool_call_id:F.string(),pattern:F.string().min(1).describe("Regular expression pattern to filter tool output lines. Returns all matching lines.")})),execute:async({tool_call_id:J,pattern:G})=>{if(!X.has(J))return{result:`Tool output not found for tool call id: ${J}. Available ids: ${[...X.keys()].join(", ")||"(none)"}`,matchCount:0,totalLines:0};let W=X.get(J),K;try{K=new RegExp(G)}catch{return{result:`Invalid regex pattern: ${G}`,matchCount:0,totalLines:0}}let Z=W.split(`
|
|
2770
|
+
Bad (wrong case): {"title": "Fix Login Button On Mobile"}`;var cE=M(()=>{RW();vN6=["user_ask","subtask"]});function sG1(Y){return typeof Y==="string"?Y:Y.toISOString()}class Bc{inner;organizationId;constructor(Y,X){this.inner=Y;this.organizationId=X}requireOrg(){if(!this.organizationId)throw Error("OrgScopedThreadStorage: thread operations require an authenticated organization");return this.organizationId}create(Y){let X=this.requireOrg();return this.inner.create({...Y,organization_id:X})}get(Y){return this.inner.get(Y,this.requireOrg())}update(Y,X){return this.inner.update(Y,this.requireOrg(),X)}forceFailIfInProgress(Y){return this.inner.forceFailIfInProgress(Y,this.requireOrg())}delete(Y){return this.inner.delete(Y,this.requireOrg())}list(Y,X){return this.inner.list(this.requireOrg(),Y,X)}listByTriggerIds(Y,X){return this.inner.listByTriggerIds(this.requireOrg(),Y,X)}saveMessages(Y){return this.inner.saveMessages(Y,this.requireOrg())}listMessages(Y,X){return this.inner.listMessages(Y,this.requireOrg(),X)}}class Dc{db;constructor(Y){this.db=Y}async create(Y){let X=Y.id??a8("thrd"),J=new Date().toISOString();if(!Y.organization_id)throw Error("organization_id is required");if(!Y.created_by)throw Error("created_by is required");if(!Y.title)Y.title=oG1;let G={id:X,organization_id:Y.organization_id,title:Y.title,description:Y.description??null,status:Y.status??"completed",trigger_id:Y.trigger_id??null,created_at:J,updated_at:J,created_by:Y.created_by,updated_by:Y.updated_by??null},W=await this.db.insertInto("threads").values(G).returningAll().executeTakeFirstOrThrow();return this.threadFromDbRow(W)}async get(Y,X){let J=await this.db.selectFrom("threads").selectAll().where("id","=",Y).where("organization_id","=",X).executeTakeFirst();return J?this.threadFromDbRow(J):null}async update(Y,X,J){let W={updated_at:new Date().toISOString()};if(J.title!==void 0)W.title=J.title;if(J.description!==void 0)W.description=J.description;if(J.updated_by!==void 0)W.updated_by=J.updated_by;if(J.hidden!==void 0)W.hidden=J.hidden;if(J.status!==void 0)W.status=J.status;await this.db.updateTable("threads").set(W).where("id","=",Y).where("organization_id","=",X).execute();let K=await this.get(Y,X);if(!K)throw Error("Thread not found after update");return K}async forceFailIfInProgress(Y,X){let J=new Date().toISOString();return((await this.db.updateTable("threads").set({status:"failed",updated_at:J}).where("id","=",Y).where("organization_id","=",X).where("status","=","in_progress").executeTakeFirst()).numUpdatedRows??BigInt(0))>BigInt(0)}async delete(Y,X){await this.db.deleteFrom("threads").where("id","=",Y).where("organization_id","=",X).execute()}async list(Y,X,J){let G=this.db.selectFrom("threads").selectAll().where("organization_id","=",Y).where("hidden","=",!1).orderBy("updated_at","desc");if(X)G=G.where("created_by","=",X);let W=this.db.selectFrom("threads").select((Q)=>Q.fn.count("id").as("count")).where("organization_id","=",Y).where("hidden","=",!1);if(X)W=W.where("created_by","=",X);if(J?.limit)G=G.limit(J.limit);if(J?.offset)G=G.offset(J.offset);let[K,Z]=await Promise.all([G.execute(),W.executeTakeFirst()]);return{threads:K.map((Q)=>this.threadFromDbRow(Q)),total:Number(Z?.count||0)}}async listByTriggerIds(Y,X,J){if(X.length===0)return{threads:[],total:0};let G=this.db.selectFrom("threads").selectAll().where("organization_id","=",Y).where("hidden","=",!1).where("trigger_id","in",X).orderBy("updated_at","desc"),W=this.db.selectFrom("threads").select((Q)=>Q.fn.count("id").as("count")).where("organization_id","=",Y).where("hidden","=",!1).where("trigger_id","in",X);if(J?.limit)G=G.limit(J.limit);if(J?.offset)G=G.offset(J.offset);let[K,Z]=await Promise.all([G.execute(),W.executeTakeFirst()]);return{threads:K.map((Q)=>this.threadFromDbRow(Q)),total:Number(Z?.count||0)}}async saveMessages(Y,X){let J=new Date().toISOString(),G=Y[0]?.thread_id;if(!G)throw Error("thread_id is required when creating multiple messages");if(!await this.get(G,X))throw Error("Thread not found or access denied");let K=new Map;for(let $ of Y){let V=K.get($.id);if(V&&V.thread_id!==$.thread_id)throw Error(`Duplicate message id "${$.id}" with conflicting thread_ids: "${V.thread_id}" vs "${$.thread_id}"`);K.set($.id,$)}let Z=[...K.values()],Q=Z.find(($)=>$.thread_id!==G);if(Q)throw Error(`All messages must target the same thread. Expected thread_id "${G}", but message "${Q.id}" has thread_id "${Q.thread_id}"`);let H=Z.map(($)=>({id:$.id,thread_id:G,metadata:$.metadata?JSON.stringify($.metadata):null,parts:JSON.stringify($.parts),role:$.role,created_at:$.created_at??J,updated_at:J}));await this.db.transaction().execute(async($)=>{await $.insertInto("thread_messages").values(H).onConflict((V)=>V.column("id").doUpdateSet((U)=>({metadata:U.ref("excluded.metadata"),parts:U.ref("excluded.parts"),role:U.ref("excluded.role"),updated_at:U.ref("excluded.updated_at")}))).execute(),await $.updateTable("threads").set({updated_at:J}).where("id","=",G).where("organization_id","=",X).execute()})}async listMessages(Y,X,J){if(!await this.get(Y,X))return{messages:[],total:0};let W=J?.sort??"asc",K=this.db.selectFrom("thread_messages").selectAll().where("thread_id","=",Y).orderBy("created_at",W).orderBy("id",W),Z=this.db.selectFrom("thread_messages").select(($)=>$.fn.count("id").as("count")).where("thread_id","=",Y);if(J?.limit)K=K.limit(J.limit);if(J?.offset)K=K.offset(J.offset);let[Q,H]=await Promise.all([K.execute(),Z.executeTakeFirst()]);return{messages:Q.map(($)=>this.messageFromDbRow($)),total:Number(H?.count||0)}}threadFromDbRow(Y){return{id:Y.id,organization_id:Y.organization_id,title:Y.title,description:Y.description,status:Y.status,trigger_id:Y.trigger_id??null,created_at:sG1(Y.created_at),updated_at:sG1(Y.updated_at),created_by:Y.created_by,updated_by:Y.updated_by,hidden:!!Y.hidden}}messageFromDbRow(Y){let X,J;try{X=Y.metadata?JSON.parse(Y.metadata):void 0}catch(G){console.error(`Failed to parse metadata for message ${Y.id}:`,Y.metadata,G),X=void 0}try{J=typeof Y.parts==="string"?JSON.parse(Y.parts):Y.parts}catch(G){console.error(`Failed to parse parts for message ${Y.id}:`,Y.parts,G),J=[]}return{id:Y.id,thread_id:Y.thread_id,metadata:X,parts:J,role:Y.role,created_at:sG1(Y.created_at),updated_at:sG1(Y.updated_at)}}}var du1=M(()=>{RW();cE()});import{createHash as ZD8}from"crypto";function bN6(Y){return ZD8("sha256").update(Y).digest("hex")}class cu1{db;vault;constructor(Y,X){this.db=Y;this.vault=X}rowToKeyInfo(Y){return{id:Y.id,providerId:Y.provider_id,label:Y.label,organizationId:Y.organization_id,createdBy:Y.created_by,createdAt:Y.created_at instanceof Date?Y.created_at.toISOString():String(Y.created_at)}}async create(Y){let X=a8("aik"),J=await this.vault.encrypt(Y.apiKey),G=bN6(Y.apiKey),W=new Date;return await this.db.insertInto("ai_provider_keys").values({id:X,organization_id:Y.organizationId,provider_id:Y.providerId,label:Y.label,encrypted_api_key:J,key_hash:G,created_by:Y.createdBy,created_at:W}).execute(),this.rowToKeyInfo({id:X,provider_id:Y.providerId,label:Y.label,organization_id:Y.organizationId,created_by:Y.createdBy,created_at:W})}async upsert(Y){let X=a8("aik"),J=await this.vault.encrypt(Y.apiKey),G=bN6(Y.apiKey),W=new Date,K=await this.db.insertInto("ai_provider_keys").values({id:X,organization_id:Y.organizationId,provider_id:Y.providerId,label:Y.label,encrypted_api_key:J,key_hash:G,created_by:Y.createdBy,created_at:W}).onConflict((Z)=>Z.columns(["organization_id","provider_id","key_hash"]).doUpdateSet({label:Y.label})).returning(["id","provider_id","label","organization_id","created_by","created_at"]).executeTakeFirstOrThrow();return this.rowToKeyInfo(K)}async list(Y){let X=this.db.selectFrom("ai_provider_keys").where("organization_id","=",Y.organizationId).select(["id","provider_id","label","organization_id","created_by","created_at"]);if(Y.providerId)X=X.where("provider_id","=",Y.providerId);return(await X.orderBy("created_at","desc").execute()).map((G)=>this.rowToKeyInfo(G))}async resolve(Y,X){let J=await this.db.selectFrom("ai_provider_keys").where("id","=",Y).where("organization_id","=",X).selectAll().executeTakeFirstOrThrow(),G=await this.vault.decrypt(J.encrypted_api_key);return{keyInfo:this.rowToKeyInfo(J),apiKey:G}}async delete(Y,X){if(!(await this.db.deleteFrom("ai_provider_keys").where("id","=",Y).where("organization_id","=",X).executeTakeFirst()).numDeletedRows)throw Error(`AI provider key ${Y} not found`)}async findById(Y,X){let J=await this.db.selectFrom("ai_provider_keys").where("id","=",Y).where("organization_id","=",X).select(["id","provider_id","label","organization_id","created_by","created_at"]).executeTakeFirst();if(!J)throw Error("Provider key not found");return this.rowToKeyInfo(J)}}var xN6=M(()=>{RW()});class pu1{db;constructor(Y){this.db=Y}async create(Y,X,J){let G=crypto.randomUUID(),W=new Date(Date.now()+600000);return await this.db.insertInto("oauth_pkce_states").values({id:G,organization_id:X,user_id:J,code_verifier:Y,expires_at:W,created_at:new Date}).execute(),G}async consume(Y,X,J){let G=await this.db.deleteFrom("oauth_pkce_states").where("id","=",Y).where("organization_id","=",X).where("user_id","=",J).returningAll().executeTakeFirst();if(!G)throw Error("Invalid or expired OAuth state token");if((G.expires_at instanceof Date?G.expires_at:new Date(G.expires_at))<new Date)throw Error("OAuth state token has expired");return G.code_verifier}}function QD8(Y){return Y.includes("/")?Y.split("/").slice(1).join("/"):Y}function KD8(Y){let X=Y.supported_parameters.includes("tools"),J=Y.supported_parameters.includes("reasoning");return{providerId:"openrouter",modelId:QD8(Y.id),title:Y.name,description:Y.description||null,logo:null,capabilities:[...new Set([...Y.architecture.input_modalities,...Y.architecture.output_modalities,...X?["tools"]:[],...J?["reasoning"]:[]])],limits:{contextWindow:Y.context_length,maxOutputTokens:Y.top_provider.max_completion_tokens||null},costs:{input:Y.pricing.prompt,output:Y.pricing.completion}}}function uN6(Y){let X=new Map;for(let J of Y){let G={description:J.description,capabilities:J.capabilities,limits:J.limits,costs:J.costs};X.set(J.modelId,G);let W=J.modelId.replace(/\./g,"-");if(W!==J.modelId)X.set(W,G)}return X}async function HD8(Y){if(Y){let X=await Y.get(gN6,"openrouter");if(X)return uN6(X)}try{let X=await fetch("https://openrouter.ai/api/v1/models",{signal:AbortSignal.timeout(1e4)});if(!X.ok)return new Map;let{data:J}=await X.json(),G=J.map(KD8);if(Y)await Y.set(gN6,"openrouter",G);return uN6(G)}catch{return new Map}}function $D8(Y){let X=Y.replace(/\./g,"-"),J=Y.replace(/-\d{8}$/,""),G=J.replace(/\./g,"-");return[...new Set([Y,X,J,G])]}function FD8(Y,X){return Y.map((J)=>{let W=$D8(J.modelId).map((K)=>X.get(K)).find(Boolean);if(!W)return J;return{...J,description:J.description??W.description??null,capabilities:J.capabilities.length?J.capabilities:W.capabilities??[],limits:J.limits??W.limits??null,costs:J.costs??W.costs??null}})}class nu1{storage;cache;constructor(Y,X){this.storage=Y;this.cache=X}async activate(Y,X){let{keyInfo:J,apiKey:G}=await this.storage.resolve(Y,X),W=kW[J.providerId];if(!W)throw Error(`Unknown provider: ${J.providerId}`);return W.create(G)}async listModels(Y,X){let{keyInfo:J,apiKey:G}=await this.storage.resolve(Y,X),W=J.providerId;if(this.cache){let U=await this.cache.get(X,W);if(U)return U}let K=kW[W];if(!K)throw Error(`Unknown provider: ${W}`);let Q=await K.create(G).listModels(),H=new Set,$=Q.filter((U)=>{if(H.has(U.modelId))return!1;return H.add(U.modelId),!0});if(W!=="openrouter"){let U=await HD8(this.cache);$=FD8($,U)}let V=$.map((U)=>({...U,providerId:W}));if(this.cache)await this.cache.set(X,W,V);return V}}var gN6="_global";var mN6=M(()=>{ZB()});function VD8(Y){if(!Y)return;try{let X=JSON.parse(Y);if(typeof X!=="object"||X===null||Array.isArray(X))return;let J={};for(let[G,W]of Object.entries(X))if(typeof W==="string")J[G]=W;return Object.keys(J).length>0?J:void 0}catch{return}}function UD8(Y,X){for(let[J,G]of Object.entries(X)){let W=Y[J];if(!W||W.length===0){let K=Y["*"];if(!K||K.length===0)return!1;if(K.includes("*"))continue;for(let Z of G)if(!K.includes(Z))return!1;continue}if(W.includes("*"))continue;for(let K of G)if(!W.includes(K))return!1}return!0}function iu1(Y){let{auth:X,headers:J,role:G,permissions:W,userId:K}=Y,Z=X.api.hasPermission;return{hasPermission:async(Q)=>{if(G&&Vx1.includes(G))return!0;if(W)return UD8(W,Q);if(!Z)return console.error("[Auth] hasPermission API not available"),!1;try{if((await Z({headers:J,body:{permission:Q}}))?.success===!0)return!0;let $={};for(let U of Object.keys(Q))$[U]=["*"];return(await Z({headers:J,body:{permission:$}}))?.success===!0}catch(H){return console.error("[Auth] Permission check failed:",H),!1}},organization:{create:async(Q)=>{return X.api.createOrganization({headers:J,body:Q})},update:async(Q)=>{return X.api.updateOrganization({headers:J,body:Q})},delete:async(Q)=>{await X.api.deleteOrganization({headers:J,body:{organizationId:Q}})},get:async(Q)=>{return X.api.getFullOrganization({headers:J,query:Q?{organizationId:Q}:void 0})},list:async(Q)=>{return X.api.listOrganizations({headers:J,query:Q?{userId:Q}:void 0})},addMember:async(Q)=>{return X.api.addMember({headers:J,body:Q})},removeMember:async(Q)=>{await X.api.removeMember({headers:J,body:Q})},listMembers:async(Q)=>{return X.api.listMembers({headers:J,query:Q?{organizationId:Q.organizationId,limit:Q.limit,offset:Q.offset}:void 0})},updateMemberRole:async(Q)=>{return X.api.updateMemberRole({headers:J,body:Q})}},apiKey:{create:async(Q)=>{return X.api.createApiKey({body:{...Q,userId:K}})},list:async()=>{return X.api.listApiKeys({headers:J})},update:async(Q)=>{return X.api.updateApiKey({body:{...Q,userId:K}})},delete:async(Q)=>{await X.api.deleteApiKey({headers:J,body:{keyId:Q}})}}}}async function zD8(Y,X,J){if(Vx1.includes(J))return;let G=await Y.selectFrom("organizationRole").select(["permission"]).where("organizationId","=",X).where("role","=",J).executeTakeFirst();if(!G?.permission)return;try{return JSON.parse(G.permission)}catch{console.error(`[Auth] Failed to parse permissions for role: ${J}`);return}}async function qD8(Y,X,J,G=dN6){let W=Y.headers.get("Authorization");try{let K=new Headers(Y.headers);K.set("X-MCP-Session-Auth","true");let Z=await G.measure("auth_get_mcp_session",()=>X.api.getMcpSession({headers:K}));if(Z){let Q=Z.userId,H=await G.measure("auth_query_membership",()=>J.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","member.organizationId","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",Q).executeTakeFirst()),$=H?.role,V=H?{id:H.orgId,slug:H.orgSlug,name:H.orgName}:void 0,U;if(H&&$)U=await G.measure("auth_fetch_role_permissions",()=>zD8(J,H.organizationId,$));return{user:{id:Q,role:$},role:$,permissions:U,organization:V}}}catch(K){console.error("[Auth] OAuth session check failed:",K)}if(W?.startsWith("Bearer ")){let K=W.replace("Bearer ","").trim();try{let Z=await G.measure("auth_verify_mesh_jwt",()=>zJ6(K));if(Z){let Q,H=Z.metadata?.organizationId;if(Z.sub&&H)Q=(await G.measure("auth_query_membership",()=>J.selectFrom("member").select(["member.role"]).where("member.userId","=",Z.sub).where("member.organizationId","=",H).executeTakeFirst()))?.role;let $,V=Z.metadata?.organizationId;if(V){let U=Z.metadata?.organizationName,z=Z.metadata?.organizationSlug;if(U||z)$={id:V,name:U,slug:z};else{let q=await G.measure("auth_query_org_for_mesh_jwt",()=>J.selectFrom("organization").select(["id","slug","name"]).where("id","=",V).executeTakeFirst());$=q?{id:q.id,slug:q.slug,name:q.name}:{id:V}}}return{user:{id:Z.sub,connectionId:Z.metadata?.connectionId,role:Q},role:Q,permissions:Z.permissions,organization:$}}}catch{}try{let Z=await G.measure("auth_verify_api_key",()=>X.api.verifyApiKey({body:{key:K}}));if(Z?.valid&&Z.key){let Q=Z.key.metadata?.organization,H=Z.key.permissions,$,V=Z.key.userId;if(V&&Q?.id)$=(await G.measure("auth_query_membership",()=>J.selectFrom("member").select(["member.role"]).where("member.userId","=",V).where("member.organizationId","=",Q.id).executeTakeFirst()))?.role;return{apiKeyId:Z.key.id,user:{id:Z.key.userId,role:$},role:$,permissions:H,organization:Q?{id:Q.id,slug:Q.slug,name:Q.name}:void 0}}}catch(Z){console.error("[Auth] API key check failed:",Z)}}try{let K=new Headers(Y.headers);K.delete("Authorization");let Z=await G.measure("auth_get_session",()=>X.api.getSession({headers:K}));if(Z){let Q,H;if(Z.session.activeOrganizationId){let $=await G.measure("auth_get_full_organization",()=>X.api.getFullOrganization({headers:K}).catch(()=>null));if($)Q={id:$.id,slug:$.slug,name:$.name},H=$.members?.find((U)=>U.userId===Z.user.id)?.role;else Q={id:Z.session.activeOrganizationId,slug:"",name:""}}return{user:{id:Z.user.id,email:Z.user.email,role:H},role:H,organization:Q}}}catch(K){let Z=K;console.error("[Auth] Session check failed:",JSON.stringify({message:Z.message,body:Z.body,stack:Z.stack},null,2))}return{user:void 0}}async function cN6(Y){let X=new mA(Y.encryption.key),J=!!$6.CLICKHOUSE_URL,G=J?"clickhouse":"duckdb",W,K;if(J)W=new Oc($6.CLICKHOUSE_URL),K=new Oc($6.CLICKHOUSE_URL);else{let{engine:q}=await Iu1({basePath:gz}),{engine:O}=await Iu1({basePath:zA});W=q,K=O}let{resolve:Z}=await import("path"),Q=Z(gz),H=Z(zA),$=J?(q)=>"monitoring_logs":(q)=>`read_ndjson('${Q}/${q}/**/*.ndjson', auto_detect=true)`,V=J?(q)=>"monitoring_metrics":(q)=>`read_ndjson('${H}/${q}/**/*.ndjson', auto_detect=true)`,U=new Dc(Y.db),z={connections:new zm(Y.db,X),organizationSettings:new _u1(Y.db),monitoring:new ix1(W,$,K,V,G),monitoringDashboards:new Su1(Y.db),virtualMcps:new lx1(Y.db),users:new hu1(Y.db),tags:new yu1(Y.db),projects:new qm(Y.db),projectConnections:new ku1(Y.db),projectPluginConfigs:new vu1(Y.db),aiProviderKeys:new cu1(Y.db,X),oauthPkceStates:new pu1(Y.db),automations:dG1(Y.db)};return async(q,O)=>{let L=O?.timings??dN6,A=Bj(),P=q?.headers.get("x-caller-id")??void 0,R=q?await qD8(q,Y.auth,Y.db,L):{user:void 0},C=iu1({auth:Y.auth,headers:q?.headers??new Headers,role:R.role,permissions:R.permissions,userId:R.user?.id}),T={user:R.user};if(R.apiKeyId)T.apiKey={id:R.apiKeyId,name:"",userId:""};let E=R.organization,j=q?$6.BASE_URL??`${new URL(q.url).origin}`:kQ(),v=new e3(Y.auth,T.user?.id,void 0,C,R.role,"self"),k={...z,threads:new Bc(U,E?.id)},g=new nu1(k.aiProviderKeys,Y.modelListCache),f={timings:L,auth:T,connectionId:P,organization:E,storage:k,vault:X,authInstance:Y.auth,boundAuth:C,access:v,db:Y.db,tracer:Y.observability.tracer,meter:Y.observability.meter,baseUrl:j,metadata:{requestId:crypto.randomUUID(),timestamp:new Date,wellKnownForwardableHeaders:Object.fromEntries(OD8.map((y)=>[y,q?.headers.get(y)??null]).filter(([y,a])=>a!==null)),userAgent:q?.headers.get("x-mesh-client")||q?.headers.get("User-Agent")||void 0,ipAddress:(q?.headers.get("CF-Connecting-IP")||q?.headers.get("X-Forwarded-For"))??void 0,properties:VD8(q?.headers.get("x-mesh-properties"))},eventBus:Y.eventBus,aiProviders:g,createMCPProxy:async(y)=>{return await CN6(y,f)},getOrCreateClient:A};return f}}var lN6,xV,dN6,OD8;var nG1=M(()=>{M51();z51();x5();iL();ck1();vU6();bU6();ju1();ju1();aK();UN6();pk1();zN6();qN6();fu1();LN6();Dj();K_();SJ1();du1();E51();xN6();mN6();xV={set:(Y)=>{lN6=Y},create:async(Y,X)=>{return await lN6(Y,X)}},dN6={measure:async(Y,X)=>{return await X()}},OD8=["x-hub-signature-256"]});class pN6{db;constructor(Y){this.db=Y}mapRowToSubscription(Y){return{id:Y.id,organizationId:Y.organization_id,connectionId:Y.connection_id,publisher:Y.publisher,eventType:Y.event_type,filter:Y.filter,enabled:Boolean(Y.enabled),createdAt:Y.created_at,updatedAt:Y.updated_at}}async publishEvent(Y){let X=new Date().toISOString();return await this.db.insertInto("events").values({id:Y.id,organization_id:Y.organizationId,type:Y.type,source:Y.source,specversion:"1.0",subject:Y.subject??null,time:Y.time,datacontenttype:Y.datacontenttype??"application/json",dataschema:Y.dataschema??null,data:Y.data?JSON.stringify(Y.data):null,cron:Y.cron??null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:X,updated_at:X}).execute(),{id:Y.id,organizationId:Y.organizationId,type:Y.type,source:Y.source,specversion:"1.0",subject:Y.subject??null,time:Y.time,datacontenttype:Y.datacontenttype??"application/json",dataschema:Y.dataschema??null,data:Y.data??null,cron:Y.cron??null,status:"pending",attempts:0,lastError:null,nextRetryAt:null,createdAt:X,updatedAt:X}}async subscribe(Y){let X=this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Y.organizationId).where("connection_id","=",Y.connectionId).where("event_type","=",Y.eventType);if(Y.publisher)X=X.where("publisher","=",Y.publisher);else X=X.where("publisher","is",null);if(Y.filter)X=X.where("filter","=",Y.filter);else X=X.where("filter","is",null);let J=await X.executeTakeFirst();if(J)return this.mapRowToSubscription(J);let G=new Date().toISOString();return await this.db.insertInto("event_subscriptions").values({id:Y.id,organization_id:Y.organizationId,connection_id:Y.connectionId,publisher:Y.publisher??null,event_type:Y.eventType,filter:Y.filter??null,enabled:1,created_at:G,updated_at:G}).execute(),{id:Y.id,organizationId:Y.organizationId,connectionId:Y.connectionId,publisher:Y.publisher??null,eventType:Y.eventType,filter:Y.filter??null,enabled:1,createdAt:G,updatedAt:G}}async unsubscribe(Y,X){return{success:((await this.db.deleteFrom("event_subscriptions").where("id","=",Y).where("organization_id","=",X).executeTakeFirst()).numDeletedRows??0n)>0n}}async listSubscriptions(Y,X){let J=this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Y);if(X)J=J.where("connection_id","=",X);return(await J.execute()).map((W)=>this.mapRowToSubscription(W))}async getSubscription(Y,X){let J=await this.db.selectFrom("event_subscriptions").selectAll().where("id","=",Y).where("organization_id","=",X).executeTakeFirst();if(!J)return null;return this.mapRowToSubscription(J)}async getMatchingSubscriptions(Y){return(await this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Y.organizationId).where("enabled","=",1).where("event_type","=",Y.type).where((J)=>J.or([J("publisher","is",null),J("publisher","=",Y.source)])).execute()).map((J)=>this.mapRowToSubscription(J))}async createDeliveries(Y,X,J){if(X.length===0)return;let G=new Date().toISOString(),W=J??null,K=X.map((Z)=>({id:crypto.randomUUID(),event_id:Y,subscription_id:Z,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:W,created_at:G}));await this.db.insertInto("event_deliveries").values(K).execute()}async claimPendingDeliveries(Y){let X=new Date().toISOString(),G=(await this.db.updateTable("event_deliveries").set({status:"processing"}).where("id","in",(K)=>K.selectFrom("event_deliveries as d").innerJoin("event_subscriptions as s","s.id","d.subscription_id").select("d.id").where("d.status","=","pending").where("s.enabled","=",1).where((Z)=>Z.or([Z("d.next_retry_at","is",null),Z("d.next_retry_at","<=",X)])).orderBy("d.created_at","asc").limit(Y)).where("status","=","pending").returning(["id"]).execute()).map((K)=>K.id);if(G.length===0)return[];return(await this.db.selectFrom("event_deliveries as d").innerJoin("events as e","e.id","d.event_id").innerJoin("event_subscriptions as s","s.id","d.subscription_id").select(["d.id as delivery_id","d.event_id","d.subscription_id","d.status as delivery_status","d.attempts as delivery_attempts","d.last_error as delivery_last_error","d.delivered_at","d.next_retry_at as delivery_next_retry_at","d.created_at as delivery_created_at","e.organization_id","e.type","e.source","e.specversion","e.subject","e.time","e.datacontenttype","e.dataschema","e.data","e.cron","e.status as event_status","e.attempts as event_attempts","e.last_error as event_last_error","e.next_retry_at","e.created_at as event_created_at","e.updated_at as event_updated_at","s.connection_id","s.publisher","s.event_type","s.filter","s.enabled","s.created_at as subscription_created_at","s.updated_at as subscription_updated_at"]).where("d.id","in",G).where("d.status","=","processing").execute()).map((K)=>({delivery:{id:K.delivery_id,eventId:K.event_id,subscriptionId:K.subscription_id,status:K.delivery_status,attempts:K.delivery_attempts,lastError:K.delivery_last_error,deliveredAt:K.delivered_at,nextRetryAt:K.delivery_next_retry_at,createdAt:K.delivery_created_at},event:{id:K.event_id,organizationId:K.organization_id,type:K.type,source:K.source,specversion:K.specversion,subject:K.subject,time:K.time,datacontenttype:K.datacontenttype,dataschema:K.dataschema,data:K.data?JSON.parse(K.data):null,cron:K.cron,status:K.event_status,attempts:K.event_attempts,lastError:K.event_last_error,nextRetryAt:K.next_retry_at,createdAt:K.event_created_at,updatedAt:K.event_updated_at},subscription:{id:K.subscription_id,organizationId:K.organization_id,connectionId:K.connection_id,publisher:K.publisher,eventType:K.event_type,filter:K.filter,enabled:Boolean(K.enabled),createdAt:K.subscription_created_at,updatedAt:K.subscription_updated_at}}))}async markDeliveriesDelivered(Y){if(Y.length===0)return;let X=new Date().toISOString();await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:X}).where("id","in",Y).execute()}async markDeliveriesPermanentlyFailed(Y,X){if(Y.length===0)return;await this.db.updateTable("event_deliveries").set({status:"failed",last_error:X,next_retry_at:null}).where("id","in",Y).execute()}async markDeliveriesFailed(Y,X,J=20,G=1000,W=3600000){if(Y.length===0)return;for(let K of Y){let Z=await this.db.selectFrom("event_deliveries").select(["attempts"]).where("id","=",K).executeTakeFirst();if(!Z)continue;let Q=Z.attempts+1;if(Q>=J)await this.db.updateTable("event_deliveries").set({attempts:Q,last_error:X,status:"failed",next_retry_at:null}).where("id","=",K).execute();else{let H=Math.min(G*Math.pow(2,Q-1),W),$=new Date(Date.now()+H).toISOString();await this.db.updateTable("event_deliveries").set({attempts:Q,last_error:X,status:"pending",next_retry_at:$}).where("id","=",K).execute()}}}async updateEventStatus(Y){let X=await this.db.selectFrom("event_deliveries").select(["status"]).where("event_id","=",Y).execute();if(X.length===0)return;let J=X.every((K)=>K.status==="delivered"),G=X.some((K)=>K.status==="failed"),W=X.some((K)=>K.status==="pending"||K.status==="processing");if(J)await this.db.updateTable("events").set({status:"delivered",updated_at:new Date().toISOString()}).where("id","=",Y).execute();else if(G&&!W)await this.db.updateTable("events").set({status:"failed",updated_at:new Date().toISOString()}).where("id","=",Y).execute()}async resetStuckDeliveries(){let Y=await this.db.updateTable("event_deliveries").set({status:"pending"}).where("status","=","processing").executeTakeFirst();return Number(Y.numUpdatedRows??0)}async getEvent(Y,X){let J=await this.db.selectFrom("events").selectAll().where("id","=",Y).where("organization_id","=",X).executeTakeFirst();if(!J)return null;return{id:J.id,organizationId:J.organization_id,type:J.type,source:J.source,specversion:J.specversion,subject:J.subject,time:J.time,datacontenttype:J.datacontenttype,dataschema:J.dataschema,data:J.data?JSON.parse(J.data):null,cron:J.cron,status:J.status,attempts:J.attempts,lastError:J.last_error,nextRetryAt:J.next_retry_at,createdAt:J.created_at,updatedAt:J.updated_at}}async findActiveCronEvent(Y,X,J,G){let W=await this.db.selectFrom("events").selectAll().where("organization_id","=",Y).where("type","=",X).where("source","=",J).where("cron","=",G).where("status","in",["pending","processing","delivered"]).orderBy("created_at","desc").executeTakeFirst();if(!W)return null;return{id:W.id,organizationId:W.organization_id,type:W.type,source:W.source,specversion:W.specversion,subject:W.subject,time:W.time,datacontenttype:W.datacontenttype,dataschema:W.dataschema,data:W.data?JSON.parse(W.data):null,cron:W.cron,status:W.status,attempts:W.attempts,lastError:W.last_error,nextRetryAt:W.next_retry_at,createdAt:W.created_at,updatedAt:W.updated_at}}async findOrphanedCronEvents(){return(await this.db.selectFrom("events").selectAll().where("cron","is not",null).where("status","=","delivered").where((X)=>X.not(X.exists(X.selectFrom("event_deliveries").select("id").whereRef("event_deliveries.event_id","=","events.id").where("event_deliveries.status","in",["pending","processing"])))).execute()).map((X)=>({id:X.id,organizationId:X.organization_id,type:X.type,source:X.source,specversion:X.specversion,subject:X.subject,time:X.time,datacontenttype:X.datacontenttype,dataschema:X.dataschema,data:X.data?JSON.parse(X.data):null,cron:X.cron,status:X.status,attempts:X.attempts,lastError:X.last_error,nextRetryAt:X.next_retry_at,createdAt:X.created_at,updatedAt:X.updated_at}))}async cancelEvent(Y,X,J){let G=await this.db.updateTable("events").set({status:"failed",last_error:"Cancelled by publisher",updated_at:new Date().toISOString()}).where("id","=",Y).where("organization_id","=",X).where("source","=",J).where("status","in",["pending","processing"]).executeTakeFirst();if((G.numUpdatedRows??0n)>0n)await this.db.updateTable("event_deliveries").set({status:"failed",last_error:"Event cancelled by publisher"}).where("event_id","=",Y).where("status","in",["pending","processing"]).execute();return{success:(G.numUpdatedRows??0n)>0n}}async scheduleRetryWithoutAttemptIncrement(Y,X){if(Y.length===0)return;let J=new Date(Date.now()+X).toISOString();await this.db.updateTable("event_deliveries").set({status:"pending",next_retry_at:J}).where("id","in",Y).execute()}async ackDelivery(Y,X,J){if(!await this.db.selectFrom("events").select(["id"]).where("id","=",Y).where("organization_id","=",X).executeTakeFirst())return{success:!1};let K=((await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:new Date().toISOString()}).where("event_id","=",Y).where("status","in",["pending","processing"]).where((Z)=>Z.exists(Z.selectFrom("event_subscriptions").select("id").whereRef("event_subscriptions.id","=","event_deliveries.subscription_id").where("event_subscriptions.connection_id","=",J).where("event_subscriptions.organization_id","=",X))).executeTakeFirst()).numUpdatedRows??0n)>0n;if(K)await this.updateEventStatus(Y);return{success:K}}async syncSubscriptions(Y){let{organizationId:X,connectionId:J,subscriptions:G}=Y,W=(P,R)=>{return`${P}::${R??""}`},K=await this.listSubscriptions(X,J),Z=new Map;for(let P of K)Z.set(W(P.eventType,P.publisher),P);let Q=new Map;for(let P of G)Q.set(W(P.eventType,P.publisher),P);let H=new Date().toISOString(),$=[],V=[],U=[],z=0;for(let[P,R]of Q){let C=Z.get(P);if(!C)$.push({id:crypto.randomUUID(),organization_id:X,connection_id:J,event_type:R.eventType,publisher:R.publisher??null,filter:R.filter??null,enabled:1,created_at:H,updated_at:H});else{let T=C.filter??null,E=R.filter??null;if(T!==E)V.push({id:C.id,filter:E});else z++}}for(let[P,R]of Z)if(!Q.has(P))U.push(R.id);if($.length>0)await this.db.insertInto("event_subscriptions").values($).execute();if(V.length>0)await Promise.all(V.map((P)=>this.db.updateTable("event_subscriptions").set({filter:P.filter,updated_at:H}).where("id","=",P.id).execute()));if(U.length>0)await this.db.deleteFrom("event_subscriptions").where("id","in",U).execute();let q=$.length,O=V.length,L=U.length,A=await this.listSubscriptions(X,J);return{created:q,updated:O,deleted:L,unchanged:z,subscriptions:A}}}function nN6(Y){return new pN6(Y)}class iN6{listeners=new Map;totalCount=0;strategy=null;started=!1;async start(Y){if(this.started){if(!Y)return;await this.stop()}this.strategy=Y,await this.strategy.start((X,J)=>this.localEmit(X,J)),this.started=!0}async stop(){if(!this.started||!this.strategy)return;await this.strategy.stop(),this.started=!1}add(Y){if(this.totalCount>=500)return console.warn("[SSEHub] Total connection limit reached (500)"),null;let X=this.listeners.get(Y.organizationId);if(!X)X=new Map,this.listeners.set(Y.organizationId,X);if(X.size>=50)return console.warn(`[SSEHub] Per-org connection limit reached for ${Y.organizationId} (50)`),null;return X.set(Y.id,Y),this.totalCount++,Y.id}remove(Y,X){let J=this.listeners.get(Y);if(!J)return;if(J.delete(X)){if(this.totalCount--,J.size===0)this.listeners.delete(Y)}}emit(Y,X){if(this.strategy)this.strategy.broadcast(Y,X);else this.localEmit(Y,X)}countForOrg(Y){return this.listeners.get(Y)?.size??0}get count(){return this.totalCount}localEmit(Y,X){let J=this.listeners.get(Y);if(!J||J.size===0)return;for(let G of J.values()){if(G.typePatterns&&!LD8(X.type,G.typePatterns))continue;try{G.push(X)}catch{this.remove(Y,G.id)}}}}function LD8(Y,X){for(let J of X){if(J===Y)return!0;if(J.endsWith(".*")){let G=J.slice(0,-1);if(Y.startsWith(G))return!0}}return!1}function aN6(Y){return{id:Y.id,type:Y.type,source:Y.source,subject:Y.subject,data:Y.data?ND8(Y.data):void 0,time:Y.time}}function ND8(Y){if(typeof Y==="string")try{return JSON.parse(Y)}catch{return Y}return Y}var L$;var tG1=M(()=>{L$=new iN6});function rN6(Y){if(typeof Y==="object"&&Y!==null){let G=Y,W=G.status??G.code;if(typeof W==="number"&&BD8.has(W))return!0}let X=Y instanceof Error?Y.message:typeof Y==="string"?Y:"";if(!X)return!1;let J=X.toLowerCase();if(/\b401\b/.test(J))return!0;return DD8.some((G)=>J.includes(G))}var BD8,DD8,wc;var au1=M(()=>{BD8=new Set([401]),DD8=["unauthorized","invalid_token","invalid api key","api key required","api-key required"];wc=class wc extends Error{constructor(Y){super(Y);this.name="PermanentDeliveryError"}}});var eG1;var ru1=M(()=>{eG1={pollIntervalMs:5000,batchSize:100,maxAttempts:20,retryDelayMs:1000,maxDelayMs:3600000}});function wD8(Y){return Y.endsWith("_self")}function MD8(Y){return Y.slice(0,-5)}function oN6(){return async(Y,X)=>{try{if(wD8(Y)&&fM1()){let Z=MD8(Y),Q=await xV.create();if(await tF0(X,{organizationId:Z,connectionId:Y,publish:async(V,U,z,q)=>{await Q.eventBus.publish(Z,Y,{type:V,subject:U,data:z,deliverAt:q?.deliverAt})},createMCPProxy:async(V)=>{let U={...Q,getOrCreateClient:Bj()},z=await lu1(V,U);return{callTool:async(q,O,L)=>{let A=await z.callTool(q,O,L);return{content:A.content,structuredContent:A.structuredContent,isError:A.isError}},close:()=>z.close()}}}))return{success:!0}}let J=await xV.create(),G=await lu1(Y,J),K=await EN1.forClient(Nc(G)).ON_EVENTS({events:X});return{success:K.success,error:K.error,retryAfter:K.retryAfter,results:K.results}}catch(J){let G=J instanceof Error?J.message:String(J);if(console.error(`[EventBus] Failed to notify connection ${Y}:`,G),rN6(J))throw new wc(G);return{success:!1,error:G}}}}var sN6=M(()=>{nG1();nR();E51();Nh();K_();au1()});function tN6(Y){return{specversion:"1.0",id:Y.id,source:Y.source,type:Y.type,time:Y.time,subject:Y.subject??void 0,datacontenttype:Y.datacontenttype,dataschema:Y.dataschema??void 0,data:Y.data??void 0}}function AD8(Y){let X=new Map;for(let G of Y){let W=G.subscription.connectionId,K=X.get(W);if(K){if(K.deliveryIds.push(G.delivery.id),!K.seenEventIds.has(G.event.id))K.seenEventIds.add(G.event.id),K.events.push(tN6(G.event))}else X.set(W,{connectionId:G.subscription.connectionId,deliveryIds:[G.delivery.id],events:[tN6(G.event)],seenEventIds:new Set([G.event.id])})}let J=new Map;for(let[G,W]of X)J.set(G,{connectionId:W.connectionId,deliveryIds:W.deliveryIds,events:W.events});return J}class ou1{storage;notifySubscriber;running=!1;processing=!1;pendingNotify=!1;config;eventTriggerEngine;constructor(Y,X,J){this.storage=Y;this.notifySubscriber=J??oN6(),this.config={...eG1,...X}}setEventTriggerEngine(Y){this.eventTriggerEngine=Y}async start(){if(this.running)return;let Y=await this.storage.resetStuckDeliveries();if(Y>0)console.log(`[EventBus] Reset ${Y} stuck deliveries from previous shutdown`);let X=await this.storage.findOrphanedCronEvents();for(let J of X)await this.scheduleNextCronDelivery(J),console.log(`[EventBus] Recovered orphaned cron event ${J.id} (${J.type}, cron: ${J.cron})`);if(X.length>0)console.log(`[EventBus] Recovered ${X.length} orphaned cron event(s)`);this.running=!0}stop(){this.running=!1}isRunning(){return this.running}async processNow(){if(!this.running)return;if(this.processing){this.pendingNotify=!0;return}this.processing=!0;try{do this.pendingNotify=!1,await this.processEvents();while(this.pendingNotify)}catch(Y){console.error("[EventBus] Error processing events:",Y)}finally{this.processing=!1}}async processEvents(){let Y=await this.storage.claimPendingDeliveries(this.config.batchSize);if(Y.length===0)return;let X=AD8(Y),J=await Promise.allSettled(Array.from(X.entries()).map(async([K,Z])=>{let Q=new Set;try{let $=await this.notifySubscriber(Z.connectionId,Z.events);if($.results&&Object.keys($.results).length>0)await this.processPerEventResults(Z,$);else if($.success)await this.storage.markDeliveriesDelivered(Z.deliveryIds);else if($.retryAfter&&$.retryAfter>0)await this.storage.scheduleRetryWithoutAttemptIncrement(Z.deliveryIds,$.retryAfter);else await this.storage.markDeliveriesFailed(Z.deliveryIds,$.error||"Subscriber returned success=false",this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}catch($){if($ instanceof wc){await this.storage.markDeliveriesPermanentlyFailed(Z.deliveryIds,$.message);for(let V of Z.events)Q.add(V.id)}else{let V=$ instanceof Error?$.message:String($);console.error(`[EventBus] Failed to notify subscription ${K}:`,V),await this.storage.markDeliveriesFailed(Z.deliveryIds,V,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}}let H=new Set;for(let $ of Y)if(Z.deliveryIds.includes($.delivery.id))H.add($.event.id);return{eventIds:H,permanentlyFailed:Q}})),G=new Set,W=new Set;for(let K of J)if(K.status==="fulfilled"){for(let Z of K.value.eventIds)G.add(Z);for(let Z of K.value.permanentlyFailed)W.add(Z)}for(let K of G)try{await this.storage.updateEventStatus(K);let Z=Y.find((Q)=>Q.event.id===K)?.event;if(Z?.cron&&!W.has(K))await this.scheduleNextCronDelivery(Z)}catch(Z){console.error(`[EventBus] Failed to update event status ${K}:`,Z)}if(this.eventTriggerEngine){let K=new Set,Z=[];for(let Q of Y){if(Q.delivery.attempts>0)continue;if(!K.has(Q.event.id))K.add(Q.event.id),Z.push({source:Q.event.source,type:Q.event.type,data:Q.event.data,organizationId:Q.event.organizationId})}if(Z.length>0)this.eventTriggerEngine.notifyEvents(Z)}}async processPerEventResults(Y,X){let J=[],G=new Map,W=[],K=new Map;for(let Z=0;Z<Y.events.length;Z++){let Q=Y.events?.[Z];if(!Q)continue;let H=Y.deliveryIds?.[Z];if(!H)continue;K.set(Q.id,H)}for(let Z of Y.events){let Q=K.get(Z.id);if(!Q)continue;let H=X.results?.[Z.id];if(H)if(H.success)J.push(Q);else if(H.retryAfter&&H.retryAfter>0){let $=G.get(H.retryAfter)||[];$.push(Q),G.set(H.retryAfter,$)}else W.push({deliveryId:Q,error:H.error||"Event processing failed"});else if(X.success)J.push(Q);else if(X.retryAfter&&X.retryAfter>0){let $=G.get(X.retryAfter)||[];$.push(Q),G.set(X.retryAfter,$)}else W.push({deliveryId:Q,error:X.error||"Batch processing failed"})}if(J.length>0)await this.storage.markDeliveriesDelivered(J);for(let[Z,Q]of G)await this.storage.scheduleRetryWithoutAttemptIncrement(Q,Z);if(W.length>0){let Z=new Map;for(let{deliveryId:Q,error:H}of W){let $=Z.get(H)||[];$.push(Q),Z.set(H,$)}for(let[Q,H]of Z)await this.storage.markDeliveriesFailed(H,Q,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}}async scheduleNextCronDelivery(Y){if(!Y.cron)return;try{let J=new rN(Y.cron,{timezone:"UTC"}).nextRun();if(!J){console.log(`[EventBus] Cron expression for event ${Y.id} has no more runs`);return}let G=J.toISOString(),W=await this.storage.getMatchingSubscriptions(Y);if(W.length===0){console.log(`[EventBus] No subscriptions for cron event ${Y.id}, skipping next delivery`);return}await this.storage.createDeliveries(Y.id,W.map((K)=>K.id),G),console.log(`[EventBus] Scheduled next cron delivery for event ${Y.id} at ${G}`)}catch(X){console.error(`[EventBus] Failed to schedule next cron delivery for event ${Y.id}:`,X)}}}var eN6=M(()=>{Jl();au1();ru1();sN6()});class su1{storage;worker;notifyStrategy;running=!1;constructor(Y){this.storage=Y.storage,this.notifyStrategy=Y.notifyStrategy,this.worker=new ou1(this.storage,Y.config)}setEventTriggerEngine(Y){this.worker.setEventTriggerEngine(Y)}async publish(Y,X,J){if(J.deliverAt&&J.cron)throw Error("Cannot set both deliverAt and cron. Use one or the other.");let G;if(J.cron){try{let V=new rN(J.cron,{timezone:"UTC"}).nextRun();if(!V)throw Error("Cron expression does not produce a next run time");G=V.toISOString()}catch($){throw Error(`Invalid cron expression: ${$ instanceof Error?$.message:String($)}`)}let H=await this.storage.findActiveCronEvent(Y,J.type,X,J.cron);if(H)return H}let W=crypto.randomUUID(),K=new Date().toISOString(),Z=await this.storage.publishEvent({id:W,organizationId:Y,type:J.type,source:X,subject:J.subject,time:K,data:J.data,cron:J.cron});L$.emit(Y,aN6(Z));let Q=await this.storage.getMatchingSubscriptions(Z);if(Q.length>0){let H=J.deliverAt??G;if(await this.storage.createDeliveries(W,Q.map(($)=>$.id),H),this.notifyStrategy&&!H)await this.notifyStrategy.notify(W).catch(($)=>{console.warn("[EventBus] Notify failed (non-critical):",$)})}return Z}async subscribe(Y,X){return this.storage.subscribe({id:crypto.randomUUID(),organizationId:Y,connectionId:X.connectionId,publisher:X.publisher,eventType:X.eventType,filter:X.filter})}async unsubscribe(Y,X){return this.storage.unsubscribe(X,Y)}async listSubscriptions(Y,X){return this.storage.listSubscriptions(Y,X)}async getSubscription(Y,X){return this.storage.getSubscription(X,Y)}async getEvent(Y,X){return this.storage.getEvent(X,Y)}async cancelEvent(Y,X,J){return this.storage.cancelEvent(X,Y,J)}async ackEvent(Y,X,J){return this.storage.ackDelivery(X,Y,J)}async syncSubscriptions(Y,X){return this.storage.syncSubscriptions({organizationId:Y,...X})}async start(){if(this.running)return;if(this.running=!0,await this.worker.start(),this.notifyStrategy)await this.notifyStrategy.start(()=>{this.worker.processNow().catch((Y)=>{console.error("[EventBus] Error processing after notify:",Y)})});await this.worker.processNow().catch((Y)=>{console.error("[EventBus] Error processing pending events on startup:",Y)})}async stop(){if(!this.running)return;if(this.running=!1,this.worker.stop(),this.notifyStrategy)try{await this.notifyStrategy.stop()}catch(Y){console.error("[EventBus] Error stopping notify strategy:",Y)}}isRunning(){return this.running}}var YB6=M(()=>{Jl();tG1();eN6()});class tu1{options;sub=null;onNotify=null;encoder=new TextEncoder;constructor(Y){this.options=Y}async start(Y){if(this.sub)return;this.onNotify=Y,this.sub=this.options.getConnection().subscribe("mesh.events.notify"),(async()=>{for await(let X of this.sub)this.onNotify?.()})().catch((X)=>{console.error("[NatsNotify] Subscription error:",X)})}async stop(){this.sub?.unsubscribe(),this.sub=null,this.onNotify=null}async notify(Y){try{this.options.getConnection().publish("mesh.events.notify",this.encoder.encode(Y))}catch(X){console.warn("[NatsNotify] Publish failed (non-critical):",X)}}}class eu1{options;sub=null;localEmit=null;originId=crypto.randomUUID();encoder=new TextEncoder;constructor(Y){this.options=Y}async start(Y){if(this.localEmit=Y,this.sub)return;this.sub=this.options.getConnection().subscribe("mesh.sse.broadcast");let X=new TextDecoder;(async()=>{for await(let J of this.sub)try{let G=JSON.parse(X.decode(J.data));if(typeof G?.originId!=="string"||typeof G?.organizationId!=="string"||typeof G?.event?.id!=="string"||typeof G?.event?.type!=="string")continue;if(G.originId===this.originId)continue;this.localEmit?.(G.organizationId,G.event)}catch{}})().catch((J)=>{console.error("[NatsSSEBroadcast] Subscription error:",J)})}broadcast(Y,X){this.localEmit?.(Y,X);let J={originId:this.originId,organizationId:Y,event:X};try{this.options.getConnection().publish("mesh.sse.broadcast",this.encoder.encode(JSON.stringify(J)))}catch(G){console.warn("[NatsSSEBroadcast] Publish failed (non-critical):",G)}}async stop(){this.sub?.unsubscribe(),this.sub=null,this.localEmit=null}}function XB6(...Y){return{async start(X){await Promise.all(Y.map((J)=>J.start(X)))},async stop(){await Promise.all(Y.map((X)=>X.stop().catch((J)=>{console.error("[NotifyStrategy] Error stopping strategy:",J)})))},async notify(X){await Promise.all(Y.map((J)=>J.notify(X).catch((G)=>{console.warn("[NotifyStrategy] Notify failed (non-critical):",G)})))}}}class Ym1{intervalMs;timer=null;onNotify=null;constructor(Y){this.intervalMs=Y}async start(Y){if(this.timer)return;this.onNotify=Y,this.scheduleNext()}async stop(){if(this.timer)clearTimeout(this.timer),this.timer=null;this.onNotify=null}async notify(Y){if(this.onNotify)this.onNotify()}scheduleNext(){this.timer=setTimeout(()=>{if(this.onNotify)this.onNotify();if(this.timer)this.scheduleNext()},this.intervalMs)}}function JB6(Y,X,J){let G=nN6(Y.db),W=J?.pollIntervalMs??eG1.pollIntervalMs,K=XB6(new Ym1(W),new tu1({getConnection:()=>X.getConnection()})),Z=new eu1({getConnection:()=>X.getConnection()});return L$.start(Z).catch((Q)=>{console.error("[SSEHub] Failed to start broadcast strategy:",Q)}),new su1({storage:G,config:J,notifyStrategy:K})}var Xm1=M(()=>{YB6();ru1();tG1();tG1()});var GB6=()=>{};var Jm1=()=>{};var WB6=()=>{};var ED8,YiY;var ZB6=M(()=>{GB6();Jm1();QB();WB6();ED8={br:".br",zstd:".zst",gzip:".gz"},YiY=Object.keys(ED8)});var QB6=M(()=>{ZB6()});var KB6=()=>{};var HB6=M(()=>{KB6()});var $B6=()=>{};var FB6=M(()=>{fx1()});var Gm1=M(()=>{KB();FB6()});var Wm1="x-hono-disable-ssg",DiY;var Zm1=M(()=>{Gm1();DiY=(()=>{try{return new Response("SSG is disabled",{status:404,headers:{[Wm1]:"true"}})}catch{return null}})()});var VB6=M(()=>{bJ1()});var Qm1=M(()=>{VB6()});var UB6=M(()=>{HB6();$B6();Jm1();Zm1();Qm1();Gm1()});var zB6=M(()=>{Zm1();Qm1();UB6()});var YaY;var qB6=M(()=>{zB6();({write:YaY}=Bun)});var RD8=class{#Y;constructor(Y){this.#Y=Y,this.raw=Y.raw,this.url=Y.url?new URL(Y.url):null,this.protocol=Y.protocol??null}send(Y,X){this.#Y.send(Y,X??{})}raw;binaryType="arraybuffer";get readyState(){return this.#Y.readyState}url;protocol;close(Y,X){this.#Y.close(Y,X)}},OB6=(Y)=>{return(...X)=>{if(typeof X[0]==="function"){let[J,G]=X;return async function(K,Z){let Q=await J(K),H=await Y(K,Q,G);if(H)return H;await Z()}}else{let[J,G,W]=X;return(async()=>{let K=await Y(J,G,W);if(!K)throw Error("Failed to upgrade WebSocket");return K})()}}};var LB6=()=>{};var Mc=(Y)=>("server"in Y.env)?Y.env.server:Y.env;var Y71=()=>{};var CD8;var NB6=M(()=>{LB6();Y71();CD8=OB6((Y,X)=>{let J=Mc(Y);if(!J)throw TypeError("env has to include the 2nd argument of fetch.");if(J.upgrade(Y.req.raw,{data:{events:X,url:new URL(Y.req.url),protocol:Y.req.url}}))return new Response(null);return})});var Km1=(Y)=>{let X=Mc(Y);if(!X)throw TypeError("env has to include the 2nd argument of fetch.");if(typeof X.requestIP!=="function")throw TypeError("server.requestIP is not a function.");let J=X.requestIP(Y.req.raw);if(!J)return{remote:{}};return{remote:{address:J.address,addressType:J.family==="IPv6"||J.family==="IPv4"?J.family:void 0,port:J.port}}};var BB6=M(()=>{Y71()});var DB6=M(()=>{QB6();qB6();NB6();BB6();Y71()});var wB6;var MB6=M(()=>{wB6={google:{name:"Google",icon:"https://assets.decocache.com/webdraw/eb7480aa-a68b-4ce4-98ff-36aa121762a7/google.svg"},github:{name:"GitHub",icon:"https://assets.decocache.com/webdraw/5f999dcb-c8a6-4572-948c-9996ef1d502f/github.svg"},microsoft:{name:"Microsoft",icon:"https://assets.decocache.com/mcp/aa6f6e1a-6526-4bca-99cc-82e2ec38b0e4/microsoft.png"}}});var G71={};L6(G71,{waitForSeed:()=>gD8,seedLocalMode:()=>hD8,markSeedComplete:()=>xD8,isLocalMode:()=>pE,getLocalAdminUser:()=>Hm1,getLocalAdminPassword:()=>J71});import{randomBytes as ID8}from"crypto";import{mkdir as jD8,writeFile as SD8,chmod as _D8}from"fs/promises";import{userInfo as kD8}from"os";import{join as vD8}from"path";async function J71(){if(X71)return X71;let Y=$6.DATA_DIR,X=vD8(Y,"secrets.json");try{let G=Bun.file(X);if(await G.exists()){let W=await G.json();if(W.LOCAL_ADMIN_PASSWORD){let K=W.LOCAL_ADMIN_PASSWORD;return X71=K,K}}}catch{}let J=ID8(24).toString("base64");try{await jD8(Y,{recursive:!0,mode:448});let G={};try{let W=Bun.file(X);if(await W.exists())G=await W.json()}catch{}G.LOCAL_ADMIN_PASSWORD=J,await SD8(X,JSON.stringify(G,null,2),{mode:384}),await _D8(X,384)}catch(G){console.warn("Warning: Could not save secrets file:",G)}return X71=J,J}function AB6(){try{return kD8().username||"local"}catch{return"local"}}function fD8(Y){return Y.charAt(0).toUpperCase()+Y.slice(1)}async function yD8(){let Y=gQ(),X=await Y.db.selectFrom("user").select(Y.db.fn.countAll().as("count")).executeTakeFirst();return Number(X?.count??0)===0}async function hD8(){if(!await yD8())return!1;let X=AB6(),J=`${X}@localhost.mesh`,G=fD8(X),W=await J71(),K=await _Z.api.signUpEmail({body:{email:J,password:W,name:G}});if(!K?.user?.id)throw Error("Failed to create local admin user");let Z=K.user.id,Q=gQ();await Q.db.updateTable("user").set({role:"admin"}).where("id","=",Z).execute();let H=`${X}-local`.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),$=`${G} Local`;return await Q.db.updateTable("organization").set({name:$,slug:H}).where("id","in",(V)=>V.selectFrom("member").select("organizationId").where("userId","=",Z)).execute(),!0}async function Hm1(){let Y=gQ(),X=`${AB6()}@localhost.mesh`;return Y.db.selectFrom("user").where("email","=",X).selectAll().executeTakeFirst()}function pE(){return $6.MESH_LOCAL_MODE}function xD8(){EB6()}function gD8(){return bD8}var X71=null,EB6,bD8;var $_=M(()=>{xA();x5();_N();bD8=new Promise((Y)=>{if(EB6=Y,!pE())Y()})});var $m1,PB6;var TB6=M(()=>{kZ();DB6();x5();_N();MB6();$_();$m1=new aY;$m1.get("/config",async(Y)=>{try{let X=Object.keys(F8.socialProviders??{}),J=X.length>0,G=X.map((Z)=>({name:Z,icon:wB6[Z].icon})),W=$6.NODE_ENV!=="production"||$6.UNSAFE_ALLOW_STDIO_TRANSPORT,K={emailAndPassword:{enabled:F8.emailAndPassword?.enabled??!1},magicLink:{enabled:F8.magicLinkConfig?.enabled??!1},emailOtp:{enabled:F8.emailOtpConfig?.enabled??!1},resetPassword:{enabled:kJ1},socialProviders:{enabled:J,providers:G},sso:F8.ssoConfig?{enabled:!0,providerId:F8.ssoConfig.providerId}:{enabled:!1},stdioEnabled:W,localMode:pE()};return Y.json({success:!0,config:K})}catch(X){let J=X instanceof Error?X.message:"Failed to load auth config";return Y.json({success:!1,error:J},500)}});$m1.post("/local-session",async(Y)=>{if(!pE())return Y.json({success:!1,error:"Local mode is not active"},403);let X;try{X=Km1(Y).remote.address}catch{}if(!(X==="127.0.0.1"||X==="::1"||X==="::ffff:127.0.0.1"))return Y.json({success:!1,error:"Forbidden"},403);try{let{waitForSeed:G}=await Promise.resolve().then(() => ($_(),G71));await G();let{auth:W}=await Promise.resolve().then(() => (_N(),MV6)),K=await Hm1();if(!K)return Y.json({success:!1,error:"Local admin user not found"},500);let Z=await J71();return await W.api.signInEmail({body:{email:K.email,password:Z},asResponse:!0})}catch(G){return console.error("Failed to create local session:",G),Y.json({success:!1,error:G instanceof Error?G.message:"Failed to create local session"},500)}});PB6=$m1});function RB6(Y){let X=Y.filter((G)=>G.role==="system"),J=Y.find((G)=>G.role!=="system");return{systemMessages:X,requestMessage:J}}function uD8(Y){let X=!1,J=Y.map((G)=>{if(G.role!=="assistant")return G;if(!G.parts.some((K)=>("state"in K)&&K.state==="approval-requested"))return G;return X=!0,{...G,parts:G.parts.map((K)=>{if(!("state"in K)||K.state!=="approval-requested"||!("approval"in K)||!K.approval)return K;return{...K,state:"output-denied",approval:{...K.approval,approved:!1,reason:"User sent a new message without approving this tool call."}}})}});return X?J:Y}function mD8(Y){let[X,J]=Y.reduce((G,W)=>{if(W.role==="system")G[0].push(W);else G[1].push(W);return G},[[],[]]);return{systemMessages:X,messages:J}}async function lD8(Y,X){return await Y.loadHistory(X)}function dD8(Y,X){let J=Y.filter((K)=>K.parts&&K.parts.length>0),G=J.findIndex((K)=>K.id===X.id);return G>=0?[...J.slice(0,G),X]:[...J,X]}async function CB6(Y,X,J,G){let W=await lD8(Y,G),K=dD8(W,X);return[...J,...K]}async function IB6(Y,X){let J=await HQ0({messages:Y}),G=uD8(J),W=await KQ0(G,{tools:X.tools,ignoreIncompleteToolCalls:!0}),{systemMessages:K,messages:Z}=mD8(W),Q=FQ0({messages:Z,reasoning:"all",emptyMessages:"remove",toolCalls:"none"});return{systemMessages:K,messages:Q,originalMessages:J}}var Fm1=M(()=>{H7()});function jB6(Y){let{toolOutputMap:X}=Y;return F5({description:"Filter a tool output that was too large to display inline. Returns all lines matching the given regular expression pattern (grep-like). You may call this tool multiple times with different patterns to extract different pieces of information.",inputExamples:[{input:{tool_call_id:"id_1",pattern:"error|warning"}},{input:{tool_call_id:"id_2",pattern:'"status":\\s*"failed"'}}],inputSchema:B0(F.object({tool_call_id:F.string(),pattern:F.string().min(1).describe("Regular expression pattern to filter tool output lines. Returns all matching lines.")})),execute:async({tool_call_id:J,pattern:G})=>{if(!X.has(J))return{result:`Tool output not found for tool call id: ${J}. Available ids: ${[...X.keys()].join(", ")||"(none)"}`,matchCount:0,totalLines:0};let W=X.get(J),K;try{K=new RegExp(G)}catch{return{result:`Invalid regex pattern: ${G}`,matchCount:0,totalLines:0}}let Z=W.split(`
|
|
2771
2771
|
`),Q=Z.filter((V)=>K.test(V)),H=Q.join(`
|
|
2772
2772
|
`),$=Sq(H);if($>Iq){let V=jq(H);return{result:`Output is still too long (${$} tokens), use a more specific pattern to reduce output.
|
|
2773
2773
|
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# pg-cloudflare
|
|
2
|
+
|
|
3
|
+
`pg-cloudflare` makes it easier to take an existing package that relies on `tls` and `net`, and make it work in environments where only `connect()` is supported, such as Cloudflare Workers.
|
|
4
|
+
|
|
5
|
+
`pg-cloudflare` wraps `connect()`, the [TCP Socket API](https://github.com/wintercg/proposal-sockets-api) proposed within WinterCG, and implemented in [Cloudflare Workers](https://developers.cloudflare.com/workers/runtime-apis/tcp-sockets/), and exposes an interface with methods similar to what the `net` and `tls` modules in Node.js expose. (ex: `net.connect(path[, options][, callback])`). This minimizes the number of changes needed in order to make an existing package work across JavaScript runtimes.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
npm i --save-dev pg-cloudflare
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
The package uses conditional exports to support bundlers that don't know about
|
|
14
|
+
`cloudflare:sockets`, so the consumer code by default imports an empty file. To
|
|
15
|
+
enable the package, resolve to the `cloudflare` condition in your bundler's
|
|
16
|
+
config. For example:
|
|
17
|
+
|
|
18
|
+
- `webpack.config.js`
|
|
19
|
+
```js
|
|
20
|
+
export default {
|
|
21
|
+
...,
|
|
22
|
+
resolve: { conditionNames: [..., "workerd"] },
|
|
23
|
+
plugins: [
|
|
24
|
+
// ignore cloudflare:sockets imports
|
|
25
|
+
new webpack.IgnorePlugin({
|
|
26
|
+
resourceRegExp: /^cloudflare:sockets$/,
|
|
27
|
+
}),
|
|
28
|
+
],
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
- `vite.config.js`
|
|
32
|
+
|
|
33
|
+
> [!NOTE]
|
|
34
|
+
> If you are using the [Cloudflare Vite plugin](https://www.npmjs.com/package/@cloudflare/vite-plugin) then the following configuration is not necessary.
|
|
35
|
+
|
|
36
|
+
```js
|
|
37
|
+
export default defineConfig({
|
|
38
|
+
...,
|
|
39
|
+
resolve: {
|
|
40
|
+
conditions: [..., "workerd"],
|
|
41
|
+
},
|
|
42
|
+
build: {
|
|
43
|
+
...,
|
|
44
|
+
// don't try to bundle cloudflare:sockets
|
|
45
|
+
rollupOptions: {
|
|
46
|
+
external: [..., 'cloudflare:sockets'],
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
})
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
- `rollup.config.js`
|
|
53
|
+
```js
|
|
54
|
+
export default defineConfig({
|
|
55
|
+
...,
|
|
56
|
+
plugins: [..., nodeResolve({ exportConditions: [..., 'workerd'] })],
|
|
57
|
+
// don't try to bundle cloudflare:sockets
|
|
58
|
+
external: [..., 'cloudflare:sockets'],
|
|
59
|
+
})
|
|
60
|
+
```
|
|
61
|
+
- `esbuild.config.js`
|
|
62
|
+
```js
|
|
63
|
+
await esbuild.build({
|
|
64
|
+
...,
|
|
65
|
+
conditions: [..., 'workerd'],
|
|
66
|
+
})
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
The concrete examples can be found in `packages/pg-bundler-test`.
|
|
70
|
+
|
|
71
|
+
## How to use conditionally, in non-Node.js environments
|
|
72
|
+
|
|
73
|
+
As implemented in `pg` [here](https://github.com/brianc/node-postgres/commit/07553428e9c0eacf761a5d4541a3300ff7859578#diff-34588ad868ebcb232660aba7ee6a99d1e02f4bc93f73497d2688c3f074e60533R5-R13), a typical use case might look as follows, where in a Node.js environment the `net` module is used, while in a non-Node.js environment, where `net` is unavailable, `pg-cloudflare` is used instead, providing an equivalent interface:
|
|
74
|
+
|
|
75
|
+
```js
|
|
76
|
+
module.exports.getStream = function getStream(ssl = false) {
|
|
77
|
+
const net = require('net')
|
|
78
|
+
if (typeof net.Socket === 'function') {
|
|
79
|
+
return net.Socket()
|
|
80
|
+
}
|
|
81
|
+
const { CloudflareSocket } = require('pg-cloudflare')
|
|
82
|
+
return new CloudflareSocket(ssl)
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Node.js implementation of the Socket API proposal
|
|
87
|
+
|
|
88
|
+
If you're looking for a way to rely on `connect()` as the interface you use to interact with raw sockets, but need this interface to be available in a Node.js environment, [`@arrowood.dev/socket`](https://github.com/Ethan-Arrowood/socket) provides a Node.js implementation of the Socket API.
|
|
89
|
+
|
|
90
|
+
### license
|
|
91
|
+
|
|
92
|
+
The MIT License (MIT)
|
|
93
|
+
|
|
94
|
+
Copyright (c) 2023 Brian M. Carlson
|
|
95
|
+
|
|
96
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
97
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
98
|
+
in the Software without restriction, including without limitation the rights
|
|
99
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
100
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
101
|
+
furnished to do so, subject to the following conditions:
|
|
102
|
+
|
|
103
|
+
The above copyright notice and this permission notice shall be included in
|
|
104
|
+
all copies or substantial portions of the Software.
|
|
105
|
+
|
|
106
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
107
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
108
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
109
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
110
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
111
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
112
|
+
THE SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"empty.js","sourceRoot":"","sources":["../src/empty.ts"],"names":[],"mappings":";;AAAA,kFAAkF;AAClF,0CAA0C;AAC1C,kBAAe,EAAE,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
/// <reference types="node" />
|
|
4
|
+
import { TlsOptions } from 'cloudflare:sockets';
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
/**
|
|
7
|
+
* Wrapper around the Cloudflare built-in socket that can be used by the `Connection`.
|
|
8
|
+
*/
|
|
9
|
+
export declare class CloudflareSocket extends EventEmitter {
|
|
10
|
+
readonly ssl: boolean;
|
|
11
|
+
writable: boolean;
|
|
12
|
+
destroyed: boolean;
|
|
13
|
+
private _upgrading;
|
|
14
|
+
private _upgraded;
|
|
15
|
+
private _cfSocket;
|
|
16
|
+
private _cfWriter;
|
|
17
|
+
private _cfReader;
|
|
18
|
+
constructor(ssl: boolean);
|
|
19
|
+
setNoDelay(): this;
|
|
20
|
+
setKeepAlive(): this;
|
|
21
|
+
ref(): this;
|
|
22
|
+
unref(): this;
|
|
23
|
+
connect(port: number, host: string, connectListener?: (...args: unknown[]) => void): Promise<this | undefined>;
|
|
24
|
+
_listen(): Promise<void>;
|
|
25
|
+
_listenOnce(): Promise<void>;
|
|
26
|
+
write(data: Uint8Array | string, encoding?: BufferEncoding, callback?: (...args: unknown[]) => void): true | void;
|
|
27
|
+
end(data?: Buffer, encoding?: BufferEncoding, callback?: (...args: unknown[]) => void): this;
|
|
28
|
+
destroy(reason: string): this;
|
|
29
|
+
startTls(options: TlsOptions): void;
|
|
30
|
+
_addClosedHandler(): void;
|
|
31
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CloudflareSocket = void 0;
|
|
4
|
+
const events_1 = require("events");
|
|
5
|
+
/**
|
|
6
|
+
* Wrapper around the Cloudflare built-in socket that can be used by the `Connection`.
|
|
7
|
+
*/
|
|
8
|
+
class CloudflareSocket extends events_1.EventEmitter {
|
|
9
|
+
constructor(ssl) {
|
|
10
|
+
super();
|
|
11
|
+
this.ssl = ssl;
|
|
12
|
+
this.writable = false;
|
|
13
|
+
this.destroyed = false;
|
|
14
|
+
this._upgrading = false;
|
|
15
|
+
this._upgraded = false;
|
|
16
|
+
this._cfSocket = null;
|
|
17
|
+
this._cfWriter = null;
|
|
18
|
+
this._cfReader = null;
|
|
19
|
+
}
|
|
20
|
+
setNoDelay() {
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
setKeepAlive() {
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
ref() {
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
unref() {
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
async connect(port, host, connectListener) {
|
|
33
|
+
try {
|
|
34
|
+
log('connecting');
|
|
35
|
+
if (connectListener)
|
|
36
|
+
this.once('connect', connectListener);
|
|
37
|
+
const options = this.ssl ? { secureTransport: 'starttls' } : {};
|
|
38
|
+
const mod = await import('cloudflare:sockets');
|
|
39
|
+
const connect = mod.connect;
|
|
40
|
+
this._cfSocket = connect(`${host}:${port}`, options);
|
|
41
|
+
this._cfWriter = this._cfSocket.writable.getWriter();
|
|
42
|
+
this._addClosedHandler();
|
|
43
|
+
this._cfReader = this._cfSocket.readable.getReader();
|
|
44
|
+
if (this.ssl) {
|
|
45
|
+
this._listenOnce().catch((e) => this.emit('error', e));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this._listen().catch((e) => this.emit('error', e));
|
|
49
|
+
}
|
|
50
|
+
await this._cfWriter.ready;
|
|
51
|
+
log('socket ready');
|
|
52
|
+
this.writable = true;
|
|
53
|
+
this.emit('connect');
|
|
54
|
+
return this;
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
this.emit('error', e);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async _listen() {
|
|
61
|
+
// eslint-disable-next-line no-constant-condition
|
|
62
|
+
while (true) {
|
|
63
|
+
log('awaiting receive from CF socket');
|
|
64
|
+
const { done, value } = await this._cfReader.read();
|
|
65
|
+
log('CF socket received:', done, value);
|
|
66
|
+
if (done) {
|
|
67
|
+
log('done');
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
this.emit('data', Buffer.from(value));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async _listenOnce() {
|
|
74
|
+
log('awaiting first receive from CF socket');
|
|
75
|
+
const { done, value } = await this._cfReader.read();
|
|
76
|
+
log('First CF socket received:', done, value);
|
|
77
|
+
this.emit('data', Buffer.from(value));
|
|
78
|
+
}
|
|
79
|
+
write(data, encoding = 'utf8', callback = () => { }) {
|
|
80
|
+
if (data.length === 0)
|
|
81
|
+
return callback();
|
|
82
|
+
if (typeof data === 'string')
|
|
83
|
+
data = Buffer.from(data, encoding);
|
|
84
|
+
log('sending data direct:', data);
|
|
85
|
+
this._cfWriter.write(data).then(() => {
|
|
86
|
+
log('data sent');
|
|
87
|
+
callback();
|
|
88
|
+
}, (err) => {
|
|
89
|
+
log('send error', err);
|
|
90
|
+
callback(err);
|
|
91
|
+
});
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
end(data = Buffer.alloc(0), encoding = 'utf8', callback = () => { }) {
|
|
95
|
+
log('ending CF socket');
|
|
96
|
+
this.write(data, encoding, (err) => {
|
|
97
|
+
this._cfSocket.close();
|
|
98
|
+
if (callback)
|
|
99
|
+
callback(err);
|
|
100
|
+
});
|
|
101
|
+
return this;
|
|
102
|
+
}
|
|
103
|
+
destroy(reason) {
|
|
104
|
+
log('destroying CF socket', reason);
|
|
105
|
+
this.destroyed = true;
|
|
106
|
+
return this.end();
|
|
107
|
+
}
|
|
108
|
+
startTls(options) {
|
|
109
|
+
if (this._upgraded) {
|
|
110
|
+
// Don't try to upgrade again.
|
|
111
|
+
this.emit('error', 'Cannot call `startTls()` more than once on a socket');
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
this._cfWriter.releaseLock();
|
|
115
|
+
this._cfReader.releaseLock();
|
|
116
|
+
this._upgrading = true;
|
|
117
|
+
this._cfSocket = this._cfSocket.startTls(options);
|
|
118
|
+
this._cfWriter = this._cfSocket.writable.getWriter();
|
|
119
|
+
this._cfReader = this._cfSocket.readable.getReader();
|
|
120
|
+
this._addClosedHandler();
|
|
121
|
+
this._listen().catch((e) => this.emit('error', e));
|
|
122
|
+
}
|
|
123
|
+
_addClosedHandler() {
|
|
124
|
+
this._cfSocket.closed.then(() => {
|
|
125
|
+
if (!this._upgrading) {
|
|
126
|
+
log('CF socket closed');
|
|
127
|
+
this._cfSocket = null;
|
|
128
|
+
this.emit('close');
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
this._upgrading = false;
|
|
132
|
+
this._upgraded = true;
|
|
133
|
+
}
|
|
134
|
+
}).catch((e) => this.emit('error', e));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.CloudflareSocket = CloudflareSocket;
|
|
138
|
+
const debug = false;
|
|
139
|
+
function dump(data) {
|
|
140
|
+
if (data instanceof Uint8Array || data instanceof ArrayBuffer) {
|
|
141
|
+
const hex = Buffer.from(data).toString('hex');
|
|
142
|
+
const str = new TextDecoder().decode(data);
|
|
143
|
+
return `\n>>> STR: "${str.replace(/\n/g, '\\n')}"\n>>> HEX: ${hex}\n`;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
return data;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
function log(...args) {
|
|
150
|
+
debug && console.log(...args.map(dump));
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,mCAAqC;AAErC;;GAEG;AACH,MAAa,gBAAiB,SAAQ,qBAAY;IAUhD,YAAqB,GAAY;QAC/B,KAAK,EAAE,CAAA;QADY,QAAG,GAAH,GAAG,CAAS;QATjC,aAAQ,GAAG,KAAK,CAAA;QAChB,cAAS,GAAG,KAAK,CAAA;QAET,eAAU,GAAG,KAAK,CAAA;QAClB,cAAS,GAAG,KAAK,CAAA;QACjB,cAAS,GAAkB,IAAI,CAAA;QAC/B,cAAS,GAAuC,IAAI,CAAA;QACpD,cAAS,GAAuC,IAAI,CAAA;IAI5D,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAA;IACb,CAAC;IACD,YAAY;QACV,OAAO,IAAI,CAAA;IACb,CAAC;IACD,GAAG;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,KAAK;QACH,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,IAAY,EAAE,eAA8C;QACtF,IAAI;YACF,GAAG,CAAC,YAAY,CAAC,CAAA;YACjB,IAAI,eAAe;gBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;YAE1D,MAAM,OAAO,GAAkB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YAC9E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;YAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;YAC3B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAA;YACpD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAA;YACpD,IAAI,CAAC,iBAAiB,EAAE,CAAA;YAExB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAA;YACpD,IAAI,IAAI,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;aACvD;iBAAM;gBACL,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;aACnD;YAED,MAAM,IAAI,CAAC,SAAU,CAAC,KAAK,CAAA;YAC3B,GAAG,CAAC,cAAc,CAAC,CAAA;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;YACpB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAEpB,OAAO,IAAI,CAAA;SACZ;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;SACtB;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,iDAAiD;QACjD,OAAO,IAAI,EAAE;YACX,GAAG,CAAC,iCAAiC,CAAC,CAAA;YACtC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,SAAU,CAAC,IAAI,EAAE,CAAA;YACpD,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;YACvC,IAAI,IAAI,EAAE;gBACR,GAAG,CAAC,MAAM,CAAC,CAAA;gBACX,MAAK;aACN;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;SACtC;IACH,CAAC;IAED,KAAK,CAAC,WAAW;QACf,GAAG,CAAC,uCAAuC,CAAC,CAAA;QAC5C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,SAAU,CAAC,IAAI,EAAE,CAAA;QACpD,GAAG,CAAC,2BAA2B,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;QAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IACvC,CAAC;IAED,KAAK,CACH,IAAyB,EACzB,WAA2B,MAAM,EACjC,WAAyC,GAAG,EAAE,GAAE,CAAC;QAEjD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,QAAQ,EAAE,CAAA;QACxC,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAEhE,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAA;QACjC,IAAI,CAAC,SAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAC9B,GAAG,EAAE;YACH,GAAG,CAAC,WAAW,CAAC,CAAA;YAChB,QAAQ,EAAE,CAAA;QACZ,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;YACN,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;YACtB,QAAQ,CAAC,GAAG,CAAC,CAAA;QACf,CAAC,CACF,CAAA;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAA2B,MAAM,EAAE,WAAyC,GAAG,EAAE,GAAE,CAAC;QAC9G,GAAG,CAAC,kBAAkB,CAAC,CAAA;QACvB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;YACjC,IAAI,CAAC,SAAU,CAAC,KAAK,EAAE,CAAA;YACvB,IAAI,QAAQ;gBAAE,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAA;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,OAAO,IAAI,CAAC,GAAG,EAAE,CAAA;IACnB,CAAC;IAED,QAAQ,CAAC,OAAmB;QAC1B,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,8BAA8B;YAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,qDAAqD,CAAC,CAAA;YACzE,OAAM;SACP;QACD,IAAI,CAAC,SAAU,CAAC,WAAW,EAAE,CAAA;QAC7B,IAAI,CAAC,SAAU,CAAC,WAAW,EAAE,CAAA;QAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAClD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAA;QACpD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAA;QACpD,IAAI,CAAC,iBAAiB,EAAE,CAAA;QACxB,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;IACpD,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,SAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACpB,GAAG,CAAC,kBAAkB,CAAC,CAAA;gBACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;gBACrB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;aACnB;iBAAM;gBACL,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;gBACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;aACtB;QACH,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;IACxC,CAAC;CACF;AA/ID,4CA+IC;AAED,MAAM,KAAK,GAAG,KAAK,CAAA;AAEnB,SAAS,IAAI,CAAC,IAAa;IACzB,IAAI,IAAI,YAAY,UAAU,IAAI,IAAI,YAAY,WAAW,EAAE;QAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC7C,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC1C,OAAO,eAAe,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,eAAe,GAAG,IAAI,CAAA;KACtE;SAAM;QACL,OAAO,IAAI,CAAA;KACZ;AACH,CAAC;AAED,SAAS,GAAG,CAAC,GAAG,IAAe;IAC7B,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;AACzC,CAAC"}
|