decocms 4.303.10 → 4.303.11
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-CMTmkvDN.js → AlertCircle-DMOa9kaA.js} +1 -1
- package/dist/client/assets/{AreaChart-BAuhe9Vl.js → AreaChart-AOjZ9LZw.js} +1 -1
- package/dist/client/assets/{ArrowLeft-9yo27wlH.js → ArrowLeft-CUggYItL.js} +1 -1
- package/dist/client/assets/{ArrowUp-BGDaoV2y.js → ArrowUp-C5IsCES1.js} +1 -1
- package/dist/client/assets/{Check-BmG6b3S9.js → Check-Db1Ga7PI.js} +1 -1
- package/dist/client/assets/{CheckCircle-CegfzMgc.js → CheckCircle-DkOuRy8w.js} +1 -1
- package/dist/client/assets/{ChevronDown-C4Y6c1S5.js → ChevronDown-BiaRsEZ7.js} +1 -1
- package/dist/client/assets/{ChevronRight-CGjMKmeV.js → ChevronRight-BLj_FeNP.js} +1 -1
- package/dist/client/assets/{ChevronSelectorVertical-ngmhwANB.js → ChevronSelectorVertical-D0KbvfBw.js} +1 -1
- package/dist/client/assets/{ChevronUp-ffPNSzcT.js → ChevronUp-DaybYliq.js} +1 -1
- package/dist/client/assets/{Copy01-BSA2KxC2.js → Copy01-D7nfxMHV.js} +1 -1
- package/dist/client/assets/{CreditCard01-vnTgz9Zm.js → CreditCard01-CTvqtvgt.js} +1 -1
- package/dist/client/assets/{DotsVertical-IudFi734.js → DotsVertical-CIyQEVsE.js} +1 -1
- package/dist/client/assets/{Download01-CKJeETm_.js → Download01-fLJ1Bz25.js} +1 -1
- package/dist/client/assets/{Eye-CUj596h2.js → Eye-DfyRI3KQ.js} +1 -1
- package/dist/client/assets/{FilterLines-Cdjwk80w.js → FilterLines-DUnC1PEg.js} +1 -1
- package/dist/client/assets/{Globe01-CvQmHlun.js → Globe01-DgFtmJNr.js} +1 -1
- package/dist/client/assets/{Globe04-CAnWG0az.js → Globe04-C0pyE58w.js} +1 -1
- package/dist/client/assets/{HardDrive-BOqvh3f2.js → HardDrive-DPozgSAt.js} +1 -1
- package/dist/client/assets/{Key01-aS3s539d.js → Key01-DJGx-EKO.js} +1 -1
- package/dist/client/assets/{LinkExternal01-BDW0S4lO.js → LinkExternal01-CA_Skzix.js} +1 -1
- package/dist/client/assets/{LockUnlocked01-D13s1HCu.js → LockUnlocked01-SrLoD2vz.js} +1 -1
- package/dist/client/assets/{LogOut01-B1zyzOxE.js → LogOut01-YuMaHEL1.js} +1 -1
- package/dist/client/assets/{Monitor01-DRu8-wuG.js → Monitor01-DCkUNsdu.js} +1 -1
- package/dist/client/assets/{Palette-CmMMw9CF.js → Palette-BAnBzLym.js} +1 -1
- package/dist/client/assets/{Play-5tBaRjn6.js → Play-BAFMivpn.js} +1 -1
- package/dist/client/assets/{Plus-cBKEMDFU.js → Plus-BHQmSgnX.js} +1 -1
- package/dist/client/assets/{SearchLg-UV8LoRH5.js → SearchLg-DQOL9Dm2.js} +1 -1
- package/dist/client/assets/{SearchMd-WJ0ZXI0G.js → SearchMd-n0eQ_gbl.js} +1 -1
- package/dist/client/assets/{Settings02-Ck1pwHhR.js → Settings02-Cnnaio_j.js} +1 -1
- package/dist/client/assets/{Share07-CpJzrNL5.js → Share07-BoPbwvLN.js} +1 -1
- package/dist/client/assets/{Shield01-DEjaQBul.js → Shield01-0gcGQcwo.js} +1 -1
- package/dist/client/assets/{Stars01-BYuT3-FH.js → Stars01-B6NZkP0o.js} +1 -1
- package/dist/client/assets/{Stars02-B7tpyypT.js → Stars02-C-jkvwWs.js} +1 -1
- package/dist/client/assets/{Sun-C0qjCz3X.js → Sun-Ft6dCmdr.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-HN5dBMvf.js → SwitchHorizontal01-CwvbJQSg.js} +1 -1
- package/dist/client/assets/{Tool01-DlNc5wfk.js → Tool01-CjsmlgOy.js} +1 -1
- package/dist/client/assets/{Tool02-BL3Z96Su.js → Tool02-D9pXL7Da.js} +1 -1
- package/dist/client/assets/{Trash01-CnmTPvZZ.js → Trash01-CNsYpppx.js} +1 -1
- package/dist/client/assets/{TrendUp01-CsNGUI9F.js → TrendUp01-Kx4Gxoi9.js} +1 -1
- package/dist/client/assets/{Upload01-B1ilTb3Q.js → Upload01-DDbhhdot.js} +1 -1
- package/dist/client/assets/{User01-BPID40-j.js → User01-g33NTlmc.js} +1 -1
- package/dist/client/assets/{UserSquare-LjplIYV9.js → UserSquare-BunrXFXr.js} +1 -1
- package/dist/client/assets/{Users01-Dx9RduTL.js → Users01-DDLgn4WZ.js} +1 -1
- package/dist/client/assets/{Users03-BY_Lt-u6.js → Users03-Bf-Teta7.js} +1 -1
- package/dist/client/assets/{XCircle-BKXstYsQ.js → XCircle-CnIkWy8M.js} +1 -1
- package/dist/client/assets/{XClose-CpaIl_OM.js → XClose-B1i-i4Sd.js} +1 -1
- package/dist/client/assets/{YAxis-DS4tjRsr.js → YAxis-D0lCypT7.js} +1 -1
- package/dist/client/assets/{Zap-CGwg-Sr1.js → Zap-CusCWEaA.js} +1 -1
- package/dist/client/assets/{ZapSquare-BhjdaiQ-.js → ZapSquare-B0s1V88g.js} +1 -1
- package/dist/client/assets/{access-gate-CbM1wY7M.js → access-gate-Ciq9J0Wk.js} +1 -1
- package/dist/client/assets/{agent-icon-BOJBZxvL.js → agent-icon-JTWzRfUr.js} +1 -1
- package/dist/client/assets/{agents-list-bdQSWu3G.js → agents-list-Cy0Xpx5s.js} +1 -1
- package/dist/client/assets/{ai-providers-Dz0UwtKX.js → ai-providers-DZysu9Fa.js} +1 -1
- package/dist/client/assets/{alert-C53imx2L.js → alert-DdDdSQQ3.js} +1 -1
- package/dist/client/assets/{alert-dialog-D2aFNPAH.js → alert-dialog-fmqjaAIx.js} +1 -1
- package/dist/client/assets/{api-keys-nUizK3q2.js → api-keys-B6oMf-wH.js} +1 -1
- package/dist/client/assets/{app-editor-B8CDXGBK.js → app-editor-wDqqCuJ0.js} +1 -1
- package/dist/client/assets/{auth-b8LLd7qm.js → auth-DujKiZBI.js} +1 -1
- package/dist/client/assets/{auth-catchall-57Lx4ba1.js → auth-catchall-RsV1tgVz.js} +1 -1
- package/dist/client/assets/{auth-entry-CRtbo99v.js → auth-entry-BVL8VpMj.js} +1 -1
- package/dist/client/assets/{auth-split-layout-BMdNkdoi.js → auth-split-layout-UHSTrUWs.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-B5hNLgrJ.js → authenticate-and-persist-oauth-Bk88SoXM.js} +1 -1
- package/dist/client/assets/{automation-list-row-kbViZmtL.js → automation-list-row-CO66g6eg.js} +1 -1
- package/dist/client/assets/{automation-runs-B6C35ouG.js → automation-runs-BX6GNNHs.js} +13 -13
- package/dist/client/assets/{automations-DK4jL6c8.js → automations-BmJZ0GGc.js} +1 -1
- package/dist/client/assets/{avatar-Dw6HXaRN.js → avatar-DUlaigDJ.js} +1 -1
- package/dist/client/assets/{badge-DlNjaNBM.js → badge-DEaqwrDa.js} +1 -1
- package/dist/client/assets/{block-document-_6vnjYuF.js → block-document-iUXzrXs-.js} +1 -1
- package/dist/client/assets/{breadcrumb-Czb3Bs9F.js → breadcrumb-BfEkOZ6B.js} +1 -1
- package/dist/client/assets/{buckets-B4ozpVKY.js → buckets-CMzJTIa9.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-BciGOCRh.js → bulk-category-panel-4RKGHXK1.js} +1 -1
- package/dist/client/assets/{capability-load-error-C5IXFhHB.js → capability-load-error-CLVtb0dS.js} +1 -1
- package/dist/client/assets/{cards-BPbGR6Ol.js → cards-BvbzdW46.js} +1 -1
- package/dist/client/assets/{category-editor-D91yMzIv.js → category-editor-nqhKIF07.js} +1 -1
- package/dist/client/assets/{chart-CE-aaSIV.js → chart-Dy8sVXBz.js} +1 -1
- package/dist/client/assets/{chat-context-BDd-jb5j.js → chat-context-CSpPIaWT.js} +1 -1
- package/dist/client/assets/{checkbox-CGZPHwNl.js → checkbox-Cx76Ddwh.js} +1 -1
- package/dist/client/assets/{choose-editor-DGrpJZbe.js → choose-editor-BjmWduXE.js} +1 -1
- package/dist/client/assets/{cli-auth-success-lqy21_sY.js → cli-auth-success-Ds9SsFzY.js} +1 -1
- package/dist/client/assets/{collection-detail-DWtYWG6w.js → collection-detail-DaMo7-13.js} +1 -1
- package/dist/client/assets/{collection-display-button-DJH0raBq.js → collection-display-button-Bz7VHchR.js} +1 -1
- package/dist/client/assets/{collection-search-C37PdqMF.js → collection-search-Dv_KF1p2.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-BGytufe1.js → collection-table-wrapper-CmNSr9KH.js} +1 -1
- package/dist/client/assets/{collection-tabs-BHpVd8oQ.js → collection-tabs-4gtHKs40.js} +1 -1
- package/dist/client/assets/{command-CBaUZr6u.js → command-BkLVGE7W.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-GL_96WB1.js → commerce-onboarding-DN1qco0V.js} +1 -1
- package/dist/client/assets/{config-C29F3CXY.js → config-CLtzt--z.js} +1 -1
- package/dist/client/assets/{connect-D-RJK-Ht.js → connect-z8SIeaxB.js} +1 -1
- package/dist/client/assets/{connection-obR7RNQB.js → connection-CHMG6Tnp.js} +1 -1
- package/dist/client/assets/{connection-card-B1Kv98ke.js → connection-card-D3UrBkIa.js} +1 -1
- package/dist/client/assets/{connection-detail-yY_gSpqp.js → connection-detail-Cf4cYTic.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-Bu5E1m7b.js → connection-form-helpers-C2CUvYTs.js} +1 -1
- package/dist/client/assets/{connections-CmRsq_H1.js → connections-B2Xlz0rP.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-C2DRqqzb.js → decopilot-sse-pool-DWg5BFEU.js} +1 -1
- package/dist/client/assets/{dialog-B-aNs606.js → dialog-Bn4bGZ4f.js} +1 -1
- package/dist/client/assets/{domain-settings-Bm8Kxxgr.js → domain-settings-vKiFwUyc.js} +1 -1
- package/dist/client/assets/{drawer-gWbrxszo.js → drawer-DZnFItsd.js} +1 -1
- package/dist/client/assets/{dropdown-menu-nfSJEEyf.js → dropdown-menu-X02O5o7_.js} +1 -1
- package/dist/client/assets/{empty-state-CRZWFScF.js → empty-state-Dz43Z1LU.js} +1 -1
- package/dist/client/assets/{extract-connection-data-Bhc-mbrQ.js → extract-connection-data-BdBcX_vz.js} +1 -1
- package/dist/client/assets/{file-explorer-Cp0PPast.js → file-explorer-o3f18_Qn.js} +1 -1
- package/dist/client/assets/{file-type-icon-CKHXdh6n.js → file-type-icon-CChY0pkT.js} +1 -1
- package/dist/client/assets/{form-CZfjrPrb.js → form-BV-2uWsA.js} +1 -1
- package/dist/client/assets/{general-DNVgPVRI.js → general-C4SZZCYH.js} +1 -1
- package/dist/client/assets/{github-repo-picker-D8Cx-NPj.js → github-repo-picker-BjPpNg-z.js} +1 -1
- package/dist/client/assets/{hooks-adwUKQEy.js → hooks-DylJX_26.js} +1 -1
- package/dist/client/assets/{index-Hh5U0t8v.js → index-2AgMm8ZX.js} +1 -1
- package/dist/client/assets/{index-8ZN8Ix8B.js → index-BqdxzkOY.js} +1 -1
- package/dist/client/assets/{index-D_IG02oY.js → index-C30UUSE2.js} +1 -1
- package/dist/client/assets/{index-CrNgGfla.js → index-C66SCwBg.js} +1 -1
- package/dist/client/assets/{index-DGAiD-n3.js → index-DNXA7h66.js} +1 -1
- package/dist/client/assets/{index-DYAbD7da.js → index-Dk00fj47.js} +7 -7
- package/dist/client/assets/{index-CtrTWESE.js → index-MUTxYYEE.js} +5 -5
- package/dist/client/assets/index-ft2FAZmV.js +5 -0
- package/dist/client/assets/{index-DcOJM9nx.js → index-gJEZm_X5.js} +1 -1
- package/dist/client/assets/{index-redirect-DUKygWst.js → index-redirect-CMfuXfsQ.js} +1 -1
- package/dist/client/assets/{infra-billing-CVvxfIeX.js → infra-billing-BpobUS3u.js} +1 -1
- package/dist/client/assets/{input-CnqhmWgr.js → input-vm2uKwNC.js} +1 -1
- package/dist/client/assets/{integration-icon-BoPssjzH.js → integration-icon-Cj_7lcs1.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-JQJrSWL2.js → invite-member-dialog-DRX65Gbb.js} +1 -1
- package/dist/client/assets/{label-CNWDPGce.js → label-CYHmnwG-.js} +1 -1
- package/dist/client/assets/{layout-gxIt7dCQ.js → layout-BcKCqUn8.js} +1 -1
- package/dist/client/assets/{login-yMs2vwea.js → login-CvPNuknF.js} +1 -1
- package/dist/client/assets/{mcp-oauth-CdtsP1Qq.js → mcp-oauth-DY6QuBpc.js} +1 -1
- package/dist/client/assets/{members-BCneMGrn.js → members-mGzbUAyL.js} +1 -1
- package/dist/client/assets/{monaco-editor-Dq5_TFCT.js → monaco-editor-Bd6iUTWW.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-CUA8Uird.js → monitoring-stats-row-OJZb7jCh.js} +1 -1
- package/dist/client/assets/{multi-select-BTFHHi5z.js → multi-select-wrGpCLQx.js} +1 -1
- package/dist/client/assets/{oauth-callback-C_BHFwHc.js → oauth-callback-Dwn3yein.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-DlOq5YBU.js → oauth-callback-ai-provider-DhSQsWIn.js} +1 -1
- package/dist/client/assets/{onboarding-BaE_M2_o.js → onboarding-Qyq7k24c.js} +1 -1
- package/dist/client/assets/{org-layout-BoVofWNS.js → org-layout-CX9WuFmg.js} +1 -1
- package/dist/client/assets/{organization-choice-vQk7cGU1.js → organization-choice-9CflgOM6.js} +1 -1
- package/dist/client/assets/{orgs-GPTFpdoE.js → orgs-CucuLirf.js} +1 -1
- package/dist/client/assets/{page-seo-form-CXxD2XhX.js → page-seo-form-CoadzAGi.js} +1 -1
- package/dist/client/assets/{popover-ER5kFhd5.js → popover-DDpVq7Hb.js} +1 -1
- package/dist/client/assets/{post-calendar-D7O4FfKf.js → post-calendar-ClZOjr4j.js} +1 -1
- package/dist/client/assets/{post-editor-BNQqdZZA.js → post-editor-CXGgsuAN.js} +1 -1
- package/dist/client/assets/{primitives-DSHOkpQD.js → primitives-Bw2NZwXR.js} +1 -1
- package/dist/client/assets/{profile-BAQ1R0bW.js → profile-DkisSkRh.js} +1 -1
- package/dist/client/assets/{project-app-view-D4XIMelY.js → project-app-view-CdK0Pu97.js} +1 -1
- package/dist/client/assets/{prompts-D088iVdR.js → prompts-BcBs0gcM.js} +1 -1
- package/dist/client/assets/record-editor-BrWjsCtV.js +1 -0
- package/dist/client/assets/{redirect-editor-BQMfy2K_.js → redirect-editor-Dj00QKJc.js} +1 -1
- package/dist/client/assets/registry-DxGVvioT.js +2 -0
- package/dist/client/assets/{registry-layout-CwG38xbF.js → registry-layout-Ckgks3qn.js} +1 -1
- package/dist/client/assets/{reports-BtAto5AY.js → reports-PPPJ6KES.js} +1 -1
- package/dist/client/assets/{require-capability-EFPYSMVg.js → require-capability-fij1_ke3.js} +1 -1
- package/dist/client/assets/{required-auth-layout-CBgndaXv.js → required-auth-layout-CTIsnA-q.js} +1 -1
- package/dist/client/assets/{reset-password-DuZiuU8M.js → reset-password-DG7EeLzX.js} +1 -1
- package/dist/client/assets/{review-settings-QlbwzteJ.js → review-settings-Cup2FRKZ.js} +1 -1
- package/dist/client/assets/{roles-CUuldCBY.js → roles-DdZ_QhQ-.js} +1 -1
- package/dist/client/assets/{scroll-area-BS1Ozt1z.js → scroll-area-Cna_OYrE.js} +1 -1
- package/dist/client/assets/{search-input-D8VtE4yy.js → search-input-BzEejMEp.js} +1 -1
- package/dist/client/assets/{secrets-srSUutpz.js → secrets-C8ga99pt.js} +1 -1
- package/dist/client/assets/{sections-editor-D9WBwC0x.js → sections-editor-DqxmXXe6.js} +1 -1
- package/dist/client/assets/{select-CHJpOmN9.js → select-C29EPVjb.js} +1 -1
- package/dist/client/assets/{select-model-Dj8BSYbZ.js → select-model-Dqai1paS.js} +1 -1
- package/dist/client/assets/{self-tool-result-D_GONLMm.js → self-tool-result-8-Mxm4Zl.js} +1 -1
- package/dist/client/assets/{seo-editor-BnYyFIzq.js → seo-editor-CvYt9Q0F.js} +1 -1
- package/dist/client/assets/{settings-layout-CytB_91u.js → settings-layout-B5YBhje-.js} +1 -1
- package/dist/client/assets/{shell-controls-CRoUGWTu.js → shell-controls-CBatbPlR.js} +1 -1
- package/dist/client/assets/{shell-layout-Bgy4QDik.js → shell-layout-IorYjGog.js} +1 -1
- package/dist/client/assets/{spinner-CQWcIDGa.js → spinner-BfbbdapK.js} +1 -1
- package/dist/client/assets/{sso-DlArB0GA.js → sso-CVvBUxny.js} +1 -1
- package/dist/client/assets/{store-BxpICXvO.js → store-DTClBj0f.js} +1 -1
- package/dist/client/assets/store-registry-DY3bdKqq.js +2 -0
- package/dist/client/assets/{super-agent-icon-fdpKpsLJ.js → super-agent-icon-DqYxz3NW.js} +1 -1
- package/dist/client/assets/{switch-B0i38R-U.js → switch-C4kbtoAs.js} +1 -1
- package/dist/client/assets/{synced-repos-B1zeudAm.js → synced-repos-BvdcpcjQ.js} +1 -1
- package/dist/client/assets/{table-Df10FVfQ.js → table-amkDYRV1.js} +1 -1
- package/dist/client/assets/{tabs-DifZwfLS.js → tabs-BBy6wQm1.js} +1 -1
- package/dist/client/assets/{task-board-stQQll8e.js → task-board-BuRQDvs6.js} +1 -1
- package/dist/client/assets/{tasks-D0aEaaS8.js → tasks-CkRVm7UJ.js} +1 -1
- package/dist/client/assets/{textarea-Beywpl1x.js → textarea-B3AjwX3K.js} +1 -1
- package/dist/client/assets/{toggle-group-D8hiKjrH.js → toggle-group-9F5hhrjx.js} +1 -1
- package/dist/client/assets/{toolbar-vYm6faIe.js → toolbar-R7PQyXZE.js} +1 -1
- package/dist/client/assets/{track-D9gviXIR.js → track-CLeLOcL1.js} +1 -1
- package/dist/client/assets/{types-BB7HRYbN.js → types-CsBZaQRw.js} +1 -1
- package/dist/client/assets/{use-ai-providers-C5AtyNJj.js → use-ai-providers-CgBo57Dq.js} +1 -1
- package/dist/client/assets/{use-api-keys-DVW8392B.js → use-api-keys-CEBsoMy-.js} +1 -1
- package/dist/client/assets/{use-automations-CVOS6Gbf.js → use-automations-BW4HF-pb.js} +1 -1
- package/dist/client/assets/{use-autosave-C2NMvxeW.js → use-autosave-LhN0Ho5S.js} +1 -1
- package/dist/client/assets/{use-connection-JPaAS2fH.js → use-connection-CgPknhuf.js} +1 -1
- package/dist/client/assets/{use-copy-B8LGnW9A.js → use-copy-BYBbh_-y.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-DYogpmLM.js → use-create-virtual-mcp-CQzSvYTK.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-2xH00R3Y.js → use-debounced-autosave-CxcPaMKY.js} +1 -1
- package/dist/client/assets/{use-debounced-value-vP9-B4wZ.js → use-debounced-value-DPWCI8OT.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-DkiL7cci.js → use-decopilot-events-CAGKwwOn.js} +1 -1
- package/dist/client/assets/{use-delete-connection-n-74DZMR.js → use-delete-connection-BNt-D_GL.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-st3XYt2T.js → use-deployment-admin-Du2k5ELr.js} +1 -1
- package/dist/client/assets/{use-destination-route-cDhIXrif.js → use-destination-route-DYTJgnog.js} +1 -1
- package/dist/client/assets/{use-file-configs-UTTOKKod.js → use-file-configs-JXCjBwRh.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-Bjh1ZOJz.js → use-infinite-scroll-Bff5_WIM.js} +1 -1
- package/dist/client/assets/{use-join-requests-iHgGhRM3.js → use-join-requests-BgqXt3k1.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-BI7B4w0i.js → use-mcp-auth-status-DbX9PGkZ.js} +1 -1
- package/dist/client/assets/{use-mcp-client-uSoC8XtC.js → use-mcp-client-BXMYkrzH.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-B5KwrPdk.js → use-mcp-tools-CUpr66BT.js} +1 -1
- package/dist/client/assets/{use-members-O7K_Dw-T.js → use-members-BaEspq5m.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-DD_wgcDL.js → use-navigate-to-agent-XvYlVQgn.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-B7GgVMVa.js → use-org-auth-client-0M3Rn0Fi.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-B-fN4-sg.js → use-org-repo-syncs-BxfLRoE_.js} +1 -1
- package/dist/client/assets/{use-org-sso-DEUJfqju.js → use-org-sso-_j4qZ4S6.js} +1 -1
- package/dist/client/assets/{use-organization-roles-DC50At2P.js → use-organization-roles-DSCD4BU0.js} +1 -1
- package/dist/client/assets/{use-organization-settings-33DPQ4xx.js → use-organization-settings-Ct1a3da0.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-Bwqtgsls.js → use-panel-navigate-DLl7z2iO.js} +1 -1
- package/dist/client/assets/{use-registry-connections-DzHQKCBk.js → use-registry-connections-BEkcbRrF.js} +1 -1
- package/dist/client/assets/{use-secrets-DAUYod4R.js → use-secrets-CzKBVxsZ.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-CoUwLk3d.js → use-section-preview-base-BLc253FO.js} +1 -1
- package/dist/client/assets/{use-status-sounds-D-98VCnU.js → use-status-sounds-DBw-EkAC.js} +1 -1
- package/dist/client/assets/{use-tags-Db50zMJp.js → use-tags-D36fLMdh.js} +1 -1
- package/dist/client/assets/{use-view-mode-Bcamhsiu.js → use-view-mode-H2zkFwO-.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-CR9iSERj.js → use-virtual-mcp-rIn_FB58.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-CkXkhA4Y.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-CTGA_G_8.js +1 -0
- package/dist/client/assets/{users-BNeE9wGb.js → users-D1XtX3FL.js} +1 -1
- package/dist/client/assets/{variant-calendar-qAGFT7Rt.js → variant-calendar-DMn-bXJK.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-B8odvl3Z.js → view-mode-toggle-3QHrCJjf.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +4 -4
- package/dist/server/server.js +4 -4
- package/package.json +1 -1
- package/dist/client/assets/index-B55dIkar.js +0 -5
- package/dist/client/assets/record-editor-CqyDT08j.js +0 -1
- package/dist/client/assets/registry-DLXJEo7g.js +0 -2
- package/dist/client/assets/store-registry-Czt53bDT.js +0 -2
- package/dist/client/assets/useInfiniteQuery-BJiVddph.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-C1XIRGeA.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -361,7 +361,7 @@ ${Y}`}return $}});var i60=_((lw)=>{var Pl8=lw&&lw.__createBinding||(Object.creat
|
|
|
361
361
|
${q$.ref("meta_json")}::jsonb->'mcp.studio'->>'verified',
|
|
362
362
|
${q$.ref("meta_json")}::jsonb->'mcp.mesh'->>'verified'
|
|
363
363
|
) = 'true' THEN 1 ELSE 0 END
|
|
364
|
-
) desc`}class Sx{db;constructor($){this.db=$}async create($){let Z=new Date().toISOString(),X=Pm1($._meta??{}),Q=O50(X),Y=kQ(Q.tags),G=kQ(Q.categories),J={id:$.id,organization_id:$.organization_id,title:$.title,description:$.description??null,server_json:JSON.stringify($.server),meta_json:JSON.stringify(X),tags:U50(Y),categories:U50(G),is_public:$.is_public?1:0,is_unlisted:$.is_unlisted?1:0,created_at:Z,updated_at:Z,created_by:$.created_by??null};await this.db.insertInto("private_registry_item").values(J).execute();let W=await this.findById($.organization_id,$.id);if(!W)throw Error(`Failed to create registry item "${$.id}"`);return W}async findById($,Z){let X=await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async findByIdOrName($,Z){let X=await this.findById($,Z);if(X)return X;let Q=await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",$).where("title","=",Z).executeTakeFirst();return Q?this.deserialize(Q):null}async update($,Z,X){let Q=await this.findById($,Z);if(!Q)throw Error(`Registry item not found: ${Z}`);let Y=Pm1(X._meta??Q._meta??{}),G=O50(Y),J=kQ(G.tags),W=kQ(G.categories),K={updated_at:new Date().toISOString()};if(X.title!==void 0)K.title=X.title;if(X.description!==void 0)K.description=X.description;if(X.server!==void 0)K.server_json=JSON.stringify(X.server);if(X._meta!==void 0)K.meta_json=JSON.stringify(Y);if(X._meta!==void 0)K.tags=U50(J),K.categories=U50(W);if(X.is_public!==void 0)K.is_public=X.is_public?1:0;if(X.is_unlisted!==void 0)K.is_unlisted=X.is_unlisted?1:0;await this.db.updateTable("private_registry_item").set(K).where("organization_id","=",$).where("id","=",Z).execute();let F=await this.findById($,Z);if(!F)throw Error(`Registry item not found after update: ${Z}`);return F}async delete($,Z){let X=await this.findById($,Z);if(!X)return null;return await this.db.deleteFrom("private_registry_item").where("organization_id","=",$).where("id","=",Z).execute(),X}async list($,Z={}){let X=this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",$);if(!Z.includeUnlisted)X=X.where("is_unlisted","=",0);let Q=kQ(Z.tags);if(Q.length>0)X=X.where(B50("tags",Q));let Y=kQ(Z.categories);if(Y.length>0)X=X.where(B50("categories",Y));if(Z.where)X=X.where(Zu0(Z.where));let W=(await this.db.selectFrom(X.as("filtered")).select(q$`count(*)::int`.as("count")).executeTakeFirst())?.count??0;X=X.orderBy(Am1()).orderBy("created_at","desc");let F=H50(Z.cursor)??Z.offset??0,H=Z.limit??24;X=X.limit(H).offset(F);let U=(await X.execute()).map((L)=>this.deserialize(L)),B=F+H<W,O=B?F50(F+H):void 0;return{items:U,totalCount:W,hasMore:B,nextCursor:O}}async listPublic($,Z={}){let X=this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",$).where("is_public","=",1).where("is_unlisted","=",0),Q=kQ(Z.tags);if(Q.length>0)X=X.where(B50("tags",Q));let Y=kQ(Z.categories);if(Y.length>0)X=X.where(B50("categories",Y));if(Z.where)X=X.where(Zu0(Z.where));let W=(await this.db.selectFrom(X.as("filtered")).select(q$`count(*)::int`.as("count")).executeTakeFirst())?.count??0;X=X.orderBy(Am1()).orderBy("created_at","desc");let F=H50(Z.cursor)??Z.offset??0,H=Z.limit??24;X=X.limit(H).offset(F);let U=(await X.execute()).map((L)=>this.deserialize(L)),B=F+H<W,O=B?F50(F+H):void 0;return{items:U,totalCount:W,hasMore:B,nextCursor:O}}async getFilters($,Z){let X=this.db.selectFrom("private_registry_item").select(["tags","categories"]).where("organization_id","=",$);if(Z?.publicOnly)X=X.where("is_public","=",1);if(!Z?.includeUnlisted)X=X.where("is_unlisted","=",0);let Q=await X.execute(),Y=new Map,G=new Map;for(let W of Q){for(let K of pw(W.tags))Y.set(K,(Y.get(K)??0)+1);for(let K of pw(W.categories))G.set(K,(G.get(K)??0)+1)}let J=(W)=>Array.from(W.entries()).map(([K,F])=>({value:K,count:F})).sort((K,F)=>K.value.localeCompare(F.value));return{tags:J(Y),categories:J(G)}}async search($,Z={},X){let Q=this.db.selectFrom("private_registry_item").select(["id","title","description","meta_json","server_json","tags","categories","is_public","is_unlisted"]).where("organization_id","=",$).orderBy("created_at","desc");if(X?.publicOnly)Q=Q.where("is_public","=",1);if(!X?.includeUnlisted)Q=Q.where("is_unlisted","=",0);let Y=await Q.execute(),G=Z.query?.trim().toLowerCase(),J=kQ(Z.tags),W=kQ(Z.categories),K=Y.filter((w)=>{if(G){let E=N50(w.server_json,{}),j=N50(w.meta_json,{}),z=O50(j).short_description??"";if(![w.id,w.title,w.description??"",E.name??"",E.description??"",z].join(" ").toLowerCase().includes(G))return!1}if(J.length>0){let E=kQ(pw(w.tags));if(!J.every((j)=>E.includes(j)))return!1}if(W.length>0){let E=kQ(pw(w.categories));if(!W.every((j)=>E.includes(j)))return!1}return!0}),H=H50(Z.cursor)??0,N=Z.limit??20,U=K.slice(H,H+N),B=H+N<K.length,O=B?F50(H+N):void 0;return{items:U.map((w)=>({id:w.id,title:w.title,tags:pw(w.tags),categories:pw(w.categories),is_public:w.is_public===1,is_unlisted:w.is_unlisted===1})),totalCount:K.length,hasMore:B,nextCursor:O}}deserialize($){let Z=N50($.server_json,{}),X=N50($.meta_json,{});return{id:$.id,name:typeof Z.name==="string"?Z.name:void 0,title:$.title,description:$.description,_meta:X,server:Z,is_public:$.is_public===1,is_unlisted:$.is_unlisted===1,created_at:$.created_at,updated_at:$.updated_at,...$.created_by?{created_by:$.created_by}:{}}}}var im8,pm8,nm8;var Xu0=D(()=>{im8=new Set(["id","title","description","is_public","is_unlisted","created_at","updated_at","created_by"]),pm8=new Set(["is_public","is_unlisted"]),nm8={_meta:"meta_json",server:"server_json"}});import{randomUUID as rm8}from"crypto";function Tm1($,Z){if(!$)return Z;try{return JSON.parse($)}catch{return Z}}function Rm1($){if(!$)return null;let Z=$K($);return JSON.stringify(Z?K50($,Z):$)}class Cx{db;constructor($){this.db=$}async createOrUpdate($){let Z=new Date().toISOString(),X=await this.findPendingByRequestedId($.organization_id,$.requested_id);if(X){let J={title:$.title,description:$.description??null,server_json:JSON.stringify($.server),meta_json:Rm1($._meta),requester_name:$.requester_name??null,requester_email:$.requester_email??null,updated_at:Z};await this.db.updateTable("private_registry_publish_request").set(J).where("organization_id","=",$.organization_id).where("id","=",X.id).execute();let W=await this.findById($.organization_id,X.id);if(!W)throw Error("Failed to update publish request");return W}let Q=rm8(),Y={id:Q,organization_id:$.organization_id,requested_id:$.requested_id,status:"pending",title:$.title,description:$.description??null,server_json:JSON.stringify($.server),meta_json:Rm1($._meta),requester_name:$.requester_name??null,requester_email:$.requester_email??null,reviewer_notes:null,created_at:Z,updated_at:Z};await this.db.insertInto("private_registry_publish_request").values(Y).execute();let G=await this.findById($.organization_id,Q);if(!G)throw Error("Failed to create publish request");return G}async findPendingByRequestedId($,Z){let X=await this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",$).where("requested_id","=",Z).where("status","=","pending").executeTakeFirst();return X?this.deserialize(X):null}async findById($,Z){let X=await this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async list($,Z={}){let X=this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",$),Q=this.db.selectFrom("private_registry_publish_request").select((F)=>F.fn.countAll().as("count")).where("organization_id","=",$);if(Z.status)X=X.where("status","=",Z.status),Q=Q.where("status","=",Z.status);let Y=await Q.executeTakeFirst(),G=Number(Y?.count??0),J=Z.sortBy??"created_at",W=Z.sortDirection??"desc";if(J==="title")X=X.orderBy("title",W);else X=X.orderBy("created_at",W);return{items:(await X.limit(Z.limit??24).offset(Z.offset??0).execute()).map((F)=>this.deserialize(F)),totalCount:G}}async updateStatus($,Z,X,Q){let Y={status:X,updated_at:new Date().toISOString(),reviewer_notes:Q??null};await this.db.updateTable("private_registry_publish_request").set(Y).where("organization_id","=",$).where("id","=",Z).execute();let G=await this.findById($,Z);if(!G)throw Error(`Publish request not found: ${Z}`);return G}async countPending($){let Z=await this.db.selectFrom("private_registry_publish_request").select((X)=>X.fn.countAll().as("count")).where("organization_id","=",$).where("status","=","pending").executeTakeFirst();return Number(Z?.count??0)}async delete($,Z){let X=await this.findById($,Z);if(!X)return null;return await this.db.deleteFrom("private_registry_publish_request").where("organization_id","=",$).where("id","=",Z).execute(),X}deserialize($){return{id:$.id,organization_id:$.organization_id,requested_id:$.requested_id??null,status:$.status,title:$.title,description:$.description,_meta:Tm1($.meta_json,{}),server:Tm1($.server_json,{name:""}),requester_name:$.requester_name,requester_email:$.requester_email,reviewer_notes:$.reviewer_notes,created_at:$.created_at,updated_at:$.updated_at}}}var Qu0=()=>{};import{createHash as am8,randomBytes as sm8,randomUUID as em8}from"crypto";function Im1($){return am8("sha256").update($).digest("hex")}function $i8(){return`prk_${sm8(32).toString("hex")}`}class _x{db;constructor($){this.db=$}async generate($,Z){let X=em8(),Q=$i8(),Y=await Im1(Q),G=Q.slice(0,12),J=new Date().toISOString();return await this.db.insertInto("private_registry_publish_api_key").values({id:X,organization_id:$,name:Z,key_hash:Y,prefix:G,created_at:J}).execute(),{entity:{id:X,organization_id:$,name:Z,prefix:G,created_at:J},key:Q}}async list($){return await this.db.selectFrom("private_registry_publish_api_key").select(["id","organization_id","name","prefix","created_at"]).where("organization_id","=",$).orderBy("created_at","desc").execute()}async revoke($,Z){return(await this.db.deleteFrom("private_registry_publish_api_key").where("organization_id","=",$).where("id","=",Z).execute()).length>0}async validate($,Z){let X=await Im1(Z),Q=await this.db.selectFrom("private_registry_publish_api_key").select(["id"]).where("organization_id","=",$).where("key_hash","=",X).executeTakeFirst();return Boolean(Q)}async hasKeys($){let Z=await this.db.selectFrom("private_registry_publish_api_key").select((X)=>X.fn.countAll().as("count")).where("organization_id","=",$).executeTakeFirst();return Number(Z?.count??0)>0}}var Yu0=()=>{};import{randomUUID as qm1}from"crypto";function Mm1($,Z){if(!$)return Z;try{return JSON.parse($)}catch{return Z}}class D50{db;constructor($){this.db=$}async create($){let Z=qm1(),X=new Date().toISOString(),Q={id:Z,organization_id:$.organization_id,status:$.status??"pending",config_snapshot:$.config_snapshot?JSON.stringify($.config_snapshot):null,total_items:$.total_items??0,tested_items:0,passed_items:0,failed_items:0,skipped_items:0,current_item_id:null,started_at:$.started_at??null,finished_at:null,created_at:X};await this.db.insertInto("private_registry_monitor_run").values(Q).execute();let Y=await this.findById($.organization_id,Z);if(!Y)throw Error(`Failed to create monitor run ${Z}`);return Y}async findById($,Z){let X=await this.db.selectFrom("private_registry_monitor_run").selectAll().where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return X?this.deserializeRun(X):null}async list($,Z={}){let X=this.db.selectFrom("private_registry_monitor_run").selectAll().where("organization_id","=",$),Q=this.db.selectFrom("private_registry_monitor_run").select((W)=>W.fn.countAll().as("count")).where("organization_id","=",$);if(Z.status)X=X.where("status","=",Z.status),Q=Q.where("status","=",Z.status);let Y=await Q.executeTakeFirst(),G=Number(Y?.count??0);return{items:(await X.orderBy("created_at","desc").limit(Z.limit??24).offset(Z.offset??0).execute()).map((W)=>this.deserializeRun(W)),totalCount:G}}async update($,Z,X){let Q={};if(X.total_items!==void 0)Q.total_items=X.total_items;if(X.status!==void 0)Q.status=X.status;if(X.tested_items!==void 0)Q.tested_items=X.tested_items;if(X.passed_items!==void 0)Q.passed_items=X.passed_items;if(X.failed_items!==void 0)Q.failed_items=X.failed_items;if(X.skipped_items!==void 0)Q.skipped_items=X.skipped_items;if(X.current_item_id!==void 0)Q.current_item_id=X.current_item_id;if(X.started_at!==void 0)Q.started_at=X.started_at;if(X.finished_at!==void 0)Q.finished_at=X.finished_at;await this.db.updateTable("private_registry_monitor_run").set(Q).where("organization_id","=",$).where("id","=",Z).execute();let Y=await this.findById($,Z);if(!Y)throw Error(`Monitor run not found: ${Z}`);return Y}deserializeRun($){return{id:$.id,organization_id:$.organization_id,status:$.status,config_snapshot:Mm1($.config_snapshot,null),total_items:Number($.total_items??0),tested_items:Number($.tested_items??0),passed_items:Number($.passed_items??0),failed_items:Number($.failed_items??0),skipped_items:Number($.skipped_items??0),current_item_id:$.current_item_id,started_at:$.started_at,finished_at:$.finished_at,created_at:$.created_at}}}class L50{db;constructor($){this.db=$}async create($){let Z=qm1(),X=new Date().toISOString(),Q={id:Z,run_id:$.run_id,organization_id:$.organization_id,item_id:$.item_id,item_title:$.item_title,status:$.status,error_message:$.error_message??null,connection_ok:$.connection_ok?1:0,tools_listed:$.tools_listed?1:0,tool_results:$.tool_results?JSON.stringify($.tool_results):null,agent_summary:$.agent_summary??null,duration_ms:$.duration_ms??0,action_taken:$.action_taken??"none",tested_at:X};await this.db.insertInto("private_registry_monitor_result").values(Q).execute();let Y=await this.findById($.organization_id,Z);if(!Y)throw Error("Failed to create test result");return Y}async findById($,Z){let X=await this.db.selectFrom("private_registry_monitor_result").selectAll().where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async listByRun($,Z,X={}){let Q=this.db.selectFrom("private_registry_monitor_result").selectAll().where("organization_id","=",$).where("run_id","=",Z),Y=this.db.selectFrom("private_registry_monitor_result").select((K)=>K.fn.countAll().as("count")).where("organization_id","=",$).where("run_id","=",Z);if(X.status)Q=Q.where("status","=",X.status),Y=Y.where("status","=",X.status);let G=await Y.executeTakeFirst(),J=Number(G?.count??0);return{items:(await Q.orderBy("tested_at","desc").limit(X.limit??50).offset(X.offset??0).execute()).map((K)=>this.deserialize(K)),totalCount:J}}async update($,Z,X){let Q={};if(X.status!==void 0)Q.status=X.status;if(X.error_message!==void 0)Q.error_message=X.error_message;if(X.connection_ok!==void 0)Q.connection_ok=X.connection_ok?1:0;if(X.tools_listed!==void 0)Q.tools_listed=X.tools_listed?1:0;if(X.tool_results!==void 0)Q.tool_results=JSON.stringify(X.tool_results);if(X.agent_summary!==void 0)Q.agent_summary=X.agent_summary;if(X.duration_ms!==void 0)Q.duration_ms=X.duration_ms;if(X.action_taken!==void 0)Q.action_taken=X.action_taken;await this.db.updateTable("private_registry_monitor_result").set(Q).where("organization_id","=",$).where("id","=",Z).execute();let Y=await this.findById($,Z);if(!Y)throw Error(`Monitor result not found: ${Z}`);return Y}deserialize($){return{id:$.id,run_id:$.run_id,organization_id:$.organization_id,item_id:$.item_id,item_title:$.item_title,status:$.status,error_message:$.error_message,connection_ok:$.connection_ok===1,tools_listed:$.tools_listed===1,tool_results:Mm1($.tool_results,[]),agent_summary:$.agent_summary,duration_ms:Number($.duration_ms??0),action_taken:$.action_taken,tested_at:$.tested_at}}}var km1=()=>{};import{randomUUID as Zi8}from"crypto";class w50{db;constructor($){this.db=$}async findByItemId($,Z){let X=await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",$).where("item_id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async list($){return(await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",$).orderBy("updated_at","desc").execute()).map((X)=>this.deserialize(X))}async findByConnectionId($,Z){let X=await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",$).where("connection_id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async upsert($){let Z=await this.findByItemId($.organization_id,$.item_id),X=new Date().toISOString();if(!Z){let Y={id:Zi8(),organization_id:$.organization_id,item_id:$.item_id,connection_id:$.connection_id,auth_status:$.auth_status??"none",created_at:X,updated_at:X};await this.db.insertInto("private_registry_monitor_connection").values(Y).execute()}else{let Y={connection_id:$.connection_id,auth_status:$.auth_status??Z.auth_status,updated_at:X};await this.db.updateTable("private_registry_monitor_connection").set(Y).where("organization_id","=",$.organization_id).where("item_id","=",$.item_id).execute()}let Q=await this.findByItemId($.organization_id,$.item_id);if(!Q)throw Error("Failed to save monitor connection");return Q}async updateAuthStatus($,Z,X){return await this.db.updateTable("private_registry_monitor_connection").set({auth_status:X,updated_at:new Date().toISOString()}).where("organization_id","=",$).where("item_id","=",Z).execute(),this.findByItemId($,Z)}deserialize($){return{id:$.id,organization_id:$.organization_id,item_id:$.item_id,connection_id:$.connection_id,auth_status:$.auth_status,created_at:$.created_at,updated_at:$.updated_at}}}var Vm1=()=>{};var Sm1=D(()=>{Xu0();Qu0();Yu0();km1();Vm1()});class Ui{db;constructor($){this.db=$}async listOrgTags($){return(await this.db.selectFrom("organization_tags").selectAll().where("organization_id","=",$).orderBy("name","asc").execute()).map((X)=>this.tagFromDbRow(X))}async getTag($){let Z=await this.db.selectFrom("organization_tags").selectAll().where("id","=",$).executeTakeFirst();return Z?this.tagFromDbRow(Z):null}async getTagsByIds($){if($.length===0)return[];return(await this.db.selectFrom("organization_tags").selectAll().where("id","in",$).execute()).map((X)=>this.tagFromDbRow(X))}async getTagByName($,Z){let X=await this.db.selectFrom("organization_tags").selectAll().where("organization_id","=",$).where("name","=",Z).executeTakeFirst();return X?this.tagFromDbRow(X):null}async createTag($,Z,X){let Q=p$("tag"),Y=new Date().toISOString();await this.db.insertInto("organization_tags").values({id:Q,organization_id:$,name:Z,color:X??null,created_at:Y}).onConflict((J)=>J.columns(["organization_id","name"]).doNothing()).execute();let G=await this.getTagByName($,Z);if(!G)throw Error(`Failed to create or retrieve tag: ${Z}`);return G}async deleteTag($){await this.db.deleteFrom("organization_tags").where("id","=",$).execute()}async getMemberTags($){return(await this.db.selectFrom("member_tags").innerJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["organization_tags.id","organization_tags.organization_id","organization_tags.name","organization_tags.color","organization_tags.created_at"]).where("member_tags.member_id","=",$).orderBy("organization_tags.name","asc").execute()).map((X)=>this.tagFromDbRow(X))}async setMemberTags($,Z){await this.db.transaction().execute(async(X)=>{if(await X.deleteFrom("member_tags").where("member_id","=",$).execute(),Z.length>0){let Q=new Date().toISOString();await X.insertInto("member_tags").values(Z.map((Y)=>({id:p$("mtag"),member_id:$,tag_id:Y,created_at:Q}))).execute()}})}async addMemberTag($,Z){let X=new Date().toISOString();await this.db.insertInto("member_tags").values({id:p$("mtag"),member_id:$,tag_id:Z,created_at:X}).onConflict((Q)=>Q.columns(["member_id","tag_id"]).doNothing()).execute()}async removeMemberTag($,Z){await this.db.deleteFrom("member_tags").where("member_id","=",$).where("tag_id","=",Z).execute()}async verifyMemberOrg($,Z){return await this.db.selectFrom("member").select("id").where("id","=",$).where("organizationId","=",Z).executeTakeFirst()!==void 0}async getUserTagsInOrg($,Z){return(await this.db.selectFrom("member").innerJoin("member_tags","member_tags.member_id","member.id").innerJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["organization_tags.id","organization_tags.organization_id","organization_tags.name","organization_tags.color","organization_tags.created_at"]).where("member.userId","=",$).where("member.organizationId","=",Z).orderBy("organization_tags.name","asc").execute()).map((Q)=>this.tagFromDbRow(Q))}async getMembersWithTags($){let Z=await this.db.selectFrom("member").leftJoin("member_tags","member_tags.member_id","member.id").leftJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["member.id as memberId","organization_tags.name as tagName"]).where("member.organizationId","=",$).execute(),X=new Map;for(let Q of Z){if(!X.has(Q.memberId))X.set(Q.memberId,[]);if(Q.tagName)X.get(Q.memberId).push(Q.tagName)}return X}tagFromDbRow($){return{id:$.id,organizationId:$.organization_id,name:$.name,color:$.color??null,createdAt:$.created_at}}}var Gu0=D(()=>{CZ()});import{sql as Xi8}from"kysely";function Cm1($){return{organizationId:$.organization_id,status:$.status,stripeCustomerId:$.stripe_customer_id,stripeSubscriptionId:$.stripe_subscription_id,currentPeriodEnd:$.current_period_end,lastStripeEventAt:$.last_stripe_event_at,freeTaskExecutions:$.free_task_executions,monthlyTaskExecutions:$.monthly_task_executions}}class ZK{db;constructor($){this.db=$}async getBilling($){let Z=await this.db.selectFrom("organization_billing").selectAll().where("organization_id","=",$).executeTakeFirst();return Z?Cm1(Z):null}async getBillingByStripeSubscriptionId($){let Z=await this.db.selectFrom("organization_billing").selectAll().where("stripe_subscription_id","=",$).executeTakeFirst();return Z?Cm1(Z):null}async updateStripeState($,Z){return((await this.db.updateTable("organization_billing").set({...Z.stripeCustomerId!==void 0&&{stripe_customer_id:Z.stripeCustomerId},...Z.stripeSubscriptionId!==void 0&&{stripe_subscription_id:Z.stripeSubscriptionId},...Z.status!==void 0&&{status:Z.status},...Z.currentPeriodEnd!==void 0&&{current_period_end:Z.currentPeriodEnd},...Z.lastStripeEventAt!==void 0&&{last_stripe_event_at:Z.lastStripeEventAt},updated_at:new Date}).where("organization_id","=",$).executeTakeFirst()).numUpdatedRows??0n)>0n}async taskClaim($){let Z=await this.db.selectFrom("task_quota_claims").select(["run_count","state"]).where("task_board_item_id","=",$).executeTakeFirst();return Z?{runCount:Z.run_count,state:Z.state}:null}static liveClaimCount($,Z,X){return $.selectFrom("task_quota_claims").select((Q)=>Q.fn.countAll().as("count")).where("organization_id","=",Z).where("period_key","=",X).where("state","<>","released").executeTakeFirst().then((Q)=>Number(Q?.count??0))}async countTaskClaims($,Z){return await ZK.liveClaimCount(this.db,$,Z)}async claimTaskUnderLimit($,Z,X,Q,Y){return await this.db.transaction().execute(async(G)=>{await G.insertInto("organization_billing").values({organization_id:$}).onConflict((K)=>K.column("organization_id").doNothing()).execute(),await G.selectFrom("organization_billing").select("organization_id").where("organization_id","=",$).forUpdate().executeTakeFirstOrThrow();let J=await G.selectFrom("task_quota_claims").select(["run_count","state"]).where("task_board_item_id","=",Z).executeTakeFirst();if(J&&J.run_count>=Y)return"runs_exhausted";let W=()=>ZK.liveClaimCount(G,$,X);if(J&&J.state!=="released")return await G.updateTable("task_quota_claims").set({run_count:J.run_count+1}).where("task_board_item_id","=",Z).execute(),"rerun";if(await W()>=Q)return"exhausted";if(J)return await G.updateTable("task_quota_claims").set({state:"held",period_key:X,run_count:J.run_count+1}).where("task_board_item_id","=",Z).execute(),"claimed";return await G.insertInto("task_quota_claims").values({task_board_item_id:Z,organization_id:$,period_key:X,state:"held"}).execute(),"claimed"})}async releaseTaskClaim($,Z){return((await this.db.updateTable("task_quota_claims").set({state:"released"}).where("organization_id","=",$).where("task_board_item_id","=",Z).where("state","=","held").executeTakeFirst()).numUpdatedRows??0n)>0n}async rollbackTaskClaim($,Z,{releaseSlot:X}){await this.db.updateTable("task_quota_claims").set(()=>({...X?{state:"released"}:{},run_count:Xi8`greatest(run_count - 1, 0)`})).where("organization_id","=",$).where("task_board_item_id","=",Z).where("state","=","held").execute()}}var E50=()=>{};class Ju0{db;constructor($){this.db=$}async findById($,Z){let X=await this.db.selectFrom("user").select(["user.id","user.name","user.email","user.image","user.createdAt","user.updatedAt"]).where("user.id","=",$).where((Q)=>Q.exists(Q.selectFrom("member as m1").innerJoin("member as m2","m1.organizationId","m2.organizationId").select("m1.id").where("m1.userId","=",$).where("m2.userId","=",Z))).executeTakeFirst();if(!X)return null;return{id:X.id,name:X.name,email:X.email,role:"",createdAt:X.createdAt,updatedAt:X.updatedAt,image:X.image??void 0}}}function vm1(){let $={};for(let Z of j50){if(Z.id==="basic-usage")continue;$[Z.id]=!0}return $}function Ku0($){let Z=(G)=>{let J=$[G];return Array.isArray(J)?J:[]},X=Z("*").includes("*")||Z("self").includes("*"),Q=new Set;if(!X)for(let G of Object.values($)){if(!Array.isArray(G))continue;for(let J of G)Q.add(J)}let Y={};for(let G of j50){if(G.id==="basic-usage")continue;Y[G.id]=X||G.tools.every((J)=>Q.has(J))}return Y}function nw(){let $={Organizations:[],Connections:[],"Virtual MCPs":[],Threads:[],Monitoring:[],Users:[],"API Keys":[],Tags:[],"AI Providers":[],Secrets:[],"File Configs":[],Automations:[],"Object Storage":[],Registry:[],GitHub:[],VM:[],Search:[],"Task Board":[],Jira:[]};for(let Z of Wu0)$[Z.category].push(Z);return $}var Wu0,j50,_m1,Qi8,z50;var vx=D(()=>{Wu0=[{name:"ORGANIZATION_CREATE",description:"Create a new organization",category:"Organizations"},{name:"ORGANIZATION_LIST",description:"List organizations",category:"Organizations"},{name:"ORGANIZATION_GET",description:"View organization details",category:"Organizations"},{name:"ORGANIZATION_UPDATE",description:"Update organization",category:"Organizations"},{name:"ORGANIZATION_DELETE",description:"Delete organization",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_SETTINGS_GET",description:"View organization settings",category:"Organizations"},{name:"ORGANIZATION_SETTINGS_UPDATE",description:"Update organization settings",category:"Organizations"},{name:"BRAND_CONTEXT_LIST",description:"List brand contexts",category:"Organizations"},{name:"BRAND_CONTEXT_GET",description:"View brand context",category:"Organizations"},{name:"BRAND_CONTEXT_CREATE",description:"Create brand context",category:"Organizations"},{name:"BRAND_CONTEXT_UPDATE",description:"Update brand context",category:"Organizations"},{name:"BRAND_CONTEXT_DELETE",description:"Delete brand context",category:"Organizations",dangerous:!0},{name:"BRAND_CONTEXT_EXTRACT",description:"Extract brand context from website",category:"Organizations"},{name:"BRAND_GET",description:"Get brand (binding)",category:"Organizations"},{name:"BRAND_LIST",description:"List brands (binding)",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_LIST",description:"List organization domain claims",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_ADD",description:"Claim an email domain for the organization",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_UPDATE",description:"Set a domain's join mode",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_VERIFY",description:"Verify a domain via DNS TXT record",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_REMOVE",description:"Remove an organization domain claim",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_JOIN_REQUEST_LIST",description:"List pending requests to join the organization",category:"Organizations"},{name:"ORGANIZATION_JOIN_REQUEST_APPROVE",description:"Approve a request to join the organization",category:"Organizations"},{name:"ORGANIZATION_JOIN_REQUEST_DENY",description:"Deny a request to join the organization",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_MEMBER_ADD",description:"Add members",category:"Organizations"},{name:"ORGANIZATION_MEMBER_REMOVE",description:"Remove members",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_MEMBER_LIST",description:"List members",category:"Organizations"},{name:"ORGANIZATION_MEMBER_UPDATE_ROLE",description:"Update member roles",category:"Organizations"},{name:"ORGANIZATION_BILLING_CHECKOUT_START",description:"Start the org subscription checkout",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_BILLING_PORTAL",description:"Open the Stripe billing portal",category:"Organizations"},{name:"ORGANIZATION_TASK_QUOTA_GET",description:"Get the org's auto-task quota usage",category:"Organizations"},{name:"INFRA_BILLING_SITES_LIST",description:"List the legacy deco.cx sites the org owns",category:"Organizations"},{name:"INFRA_BILLING_GET",description:"Get infra usage, plan and invoices for an owned site",category:"Organizations"},{name:"INFRA_BILLING_PORTAL",description:"Open the Stripe billing portal for an owned site",category:"Organizations"},{name:"COLLECTION_CONNECTIONS_CREATE",description:"Create connections",category:"Connections"},{name:"COLLECTION_CONNECTIONS_LIST",description:"List connections",category:"Connections"},{name:"COLLECTION_CONNECTIONS_GET",description:"View connection details",category:"Connections"},{name:"COLLECTION_CONNECTIONS_UPDATE",description:"Update connections",category:"Connections"},{name:"COLLECTION_CONNECTIONS_DELETE",description:"Delete connections",category:"Connections",dangerous:!0},{name:"CONNECTION_TEST",description:"Test connections",category:"Connections"},{name:"COMMERCE_DISCOVERY_SETUP",description:"Set up Commerce Discovery",category:"Connections"},{name:"COMMERCE_DISCOVERY_RUN",description:"Run Commerce Discovery",category:"Connections"},{name:"COMMERCE_DISCOVERY_BIND",description:"Bind Commerce Discovery data source",category:"Connections"},{name:"COMMERCE_DISCOVERY_CONNECTION_STATUS",description:"Read Commerce Discovery connection status",category:"Connections"},{name:"DATABASES_RUN_SQL",description:"Run SQL queries",category:"Connections",dangerous:!0},{name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create virtual MCPs",category:"Virtual MCPs"},{name:"COLLECTION_VIRTUAL_MCP_LIST",description:"List virtual MCPs",category:"Virtual MCPs"},{name:"COLLECTION_VIRTUAL_MCP_GET",description:"View virtual MCP details",category:"Virtual MCPs"},{name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update virtual MCPs",category:"Virtual MCPs"},{name:"COLLECTION_VIRTUAL_MCP_DELETE",description:"Delete virtual MCPs",category:"Virtual MCPs",dangerous:!0},{name:"MONITORING_HEATMAP",description:"View tool-call volume by agent and tool",category:"Monitoring"},{name:"MONITORING_LOG_GET",description:"View monitoring log details",category:"Monitoring"},{name:"MONITORING_LOGS_LIST",description:"List monitoring logs",category:"Monitoring"},{name:"MONITORING_STATS",description:"View monitoring statistics",category:"Monitoring"},{name:"MONITORING_THREAD_USAGE",description:"View per-thread token usage and cost",category:"Monitoring"},{name:"API_KEY_CREATE",description:"Create API key",category:"API Keys"},{name:"API_KEY_LIST",description:"List API keys",category:"API Keys"},{name:"API_KEY_UPDATE",description:"Update API key",category:"API Keys"},{name:"API_KEY_DELETE",description:"Delete API key",category:"API Keys",dangerous:!0},{name:"USER_GET",description:"Get a user by id",category:"Users"},{name:"USER_MODEL_PREFERENCES_GET",description:"Get the calling user's chat tier \u2192 model overrides",category:"Users"},{name:"USER_MODEL_PREFERENCES_UPDATE",description:"Set the calling user's chat tier \u2192 model overrides",category:"Users"},{name:"COLLECTION_THREADS_CREATE",description:"Create threads",category:"Threads"},{name:"COLLECTION_THREADS_LIST",description:"List threads",category:"Threads"},{name:"COLLECTION_THREADS_GET",description:"View thread details",category:"Threads"},{name:"COLLECTION_THREADS_UPDATE",description:"Update threads",category:"Threads"},{name:"COLLECTION_THREADS_DELETE",description:"Delete threads",category:"Threads",dangerous:!0},{name:"COLLECTION_THREAD_MESSAGES_LIST",description:"List thread messages",category:"Threads"},{name:"TAGS_LIST",description:"List organization tags",category:"Tags"},{name:"TAGS_CREATE",description:"Create organization tag",category:"Tags"},{name:"TAGS_DELETE",description:"Delete organization tag",category:"Tags",dangerous:!0},{name:"MEMBER_TAGS_GET",description:"Get member tags",category:"Tags"},{name:"MEMBER_TAGS_SET",description:"Set member tags",category:"Tags"},{name:"AUTOMATION_CREATE",description:"Create automation",category:"Automations"},{name:"AUTOMATION_GET",description:"View automation details",category:"Automations"},{name:"AUTOMATION_LIST",description:"List automations",category:"Automations"},{name:"AUTOMATION_UPDATE",description:"Update automation",category:"Automations"},{name:"AUTOMATION_DELETE",description:"Delete automation",category:"Automations",dangerous:!0},{name:"AUTOMATION_TRIGGER_ADD",description:"Add trigger to automation",category:"Automations"},{name:"AUTOMATION_TRIGGER_REMOVE",description:"Remove trigger from automation",category:"Automations"},{name:"AUTOMATION_TRIGGER_ROTATE_TOKEN",description:"Rotate the secret token for a webhook automation trigger",category:"Automations"},{name:"AUTOMATION_RUN",description:"Manually trigger an automation run",category:"Automations"},{name:"AUTOMATION_RUN_STATS",description:"View aggregated run counts and token/cost for an automation",category:"Automations"},{name:"VIRTUAL_MCP_PLUGIN_CONFIG_GET",description:"View virtual MCP plugin configuration",category:"Virtual MCPs"},{name:"VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE",description:"Update virtual MCP plugin configuration",category:"Virtual MCPs"},{name:"VIRTUAL_MCP_PINNED_VIEWS_UPDATE",description:"Update virtual MCP pinned sidebar views",category:"Virtual MCPs"},{name:"VIRTUAL_MCP_LAST_USED_LIST",description:"Get last-used info for one or more virtual MCPs",category:"Virtual MCPs"},{name:"AI_PROVIDERS_LIST",description:"List available AI providers",category:"AI Providers"},{name:"AI_PROVIDERS_LIST_MODELS",description:"List AI provider models",category:"AI Providers"},{name:"AI_PROVIDERS_ACTIVE",description:"List active AI providers",category:"AI Providers"},{name:"AI_PROVIDER_KEY_CREATE",description:"Store AI provider API key",category:"AI Providers"},{name:"AI_PROVIDER_KEY_LIST",description:"List AI provider API keys",category:"AI Providers"},{name:"AI_PROVIDER_KEY_DELETE",description:"Delete AI provider API key",category:"AI Providers",dangerous:!0},{name:"AI_PROVIDER_KEY_UPDATE",description:"Update AI provider API key label or credential",category:"AI Providers"},{name:"AI_PROVIDER_KEY_PREVIEW",description:"Get masked preview of AI provider API key",category:"AI Providers"},{name:"AI_PROVIDER_OAUTH_URL",description:"Get OAuth URL for provider",category:"AI Providers"},{name:"AI_PROVIDER_OAUTH_EXCHANGE",description:"Exchange OAuth code for API key",category:"AI Providers"},{name:"AI_PROVIDER_PROVISION_KEY",description:"Auto-provision API key for a provider",category:"AI Providers"},{name:"AI_PROVIDER_TOPUP_URL",description:"Get checkout URL to top up provider credits",category:"AI Providers"},{name:"CLAUDE_SUBSCRIPTION_CONNECT",description:"Link your own Claude subscription with a setup token",category:"AI Providers"},{name:"CLAUDE_SUBSCRIPTION_STATUS",description:"Whether your Claude subscription is linked, and since when",category:"AI Providers"},{name:"CLAUDE_SUBSCRIPTION_DISCONNECT",description:"Unlink your Claude subscription",category:"AI Providers"},{name:"AI_PROVIDER_CREDITS",description:"Get current credit balance for a provider",category:"AI Providers"},{name:"SECRET_CREATE",description:"Create a secret in the credential vault",category:"Secrets"},{name:"SECRET_LIST",description:"List secrets visible to the caller (no values returned)",category:"Secrets"},{name:"FILE_CONFIG_CREATE",description:"Create an S3-compatible bucket configuration for the org",category:"File Configs"},{name:"FILE_CONFIG_LIST",description:"List S3 bucket configurations for the org (no creds returned)",category:"File Configs"},{name:"ORG_FS_PUBLIC_SETS_SYNC",description:"Re-sync the shared public skill-set volumes from their GitHub sources",category:"File Configs"},{name:"ORG_REPO_SYNC_CREATE",description:"Keep a GitHub repository mirrored into a new org-fs volume",category:"File Configs"},{name:"ORG_REPO_SYNC_LIST",description:"List the org's synced repositories and their sync status",category:"File Configs"},{name:"ORG_REPO_SYNC_UPDATE",description:"Update a synced repository's ref, paths, or enabled flag",category:"File Configs"},{name:"ORG_REPO_SYNC_DELETE",description:"Stop syncing a repository (already-synced files are kept)",category:"File Configs"},{name:"ORG_REPO_SYNC_RUN",description:"Sync a repository into its volume right now",category:"File Configs"},{name:"JIRA_INTEGRATION_GET",description:"Get the org's Jira integration config and last sync status",category:"Jira"},{name:"JIRA_INTEGRATION_UPSERT",description:"Connect or update the org's Jira integration",category:"Jira"},{name:"JIRA_INTEGRATION_DELETE",description:"Disconnect Jira (already-synced cards are kept)",category:"Jira"},{name:"JIRA_BOARDS_LIST",description:"List Jira boards visible to the connected credentials",category:"Jira"},{name:"JIRA_BOARD_COLUMNS_LIST",description:"List a Jira board's columns and statuses for the mapping",category:"Jira"},{name:"JIRA_SYNC_RUN",description:"Pull from Jira into the task board right now",category:"Jira"},{name:"JIRA_RESYNC_REQUEST",description:"Mark the whole Jira board to be re-read on the next scheduled sync",category:"Jira"},{name:"FILE_CONFIG_UPDATE",description:"Update an S3 bucket configuration, optionally rotating credentials",category:"File Configs"},{name:"FILE_CONFIG_DELETE",description:"Delete an S3 bucket configuration",category:"File Configs"},{name:"FILE_OBJECTS_LIST",description:"List existing objects in a configured bucket",category:"File Configs"},{name:"FILE_OBJECT_DELETE",description:"Delete an object from a configured bucket",category:"File Configs"},{name:"LIST_OBJECTS",description:"List objects in storage",category:"Object Storage"},{name:"GET_OBJECT_METADATA",description:"Get object metadata",category:"Object Storage"},{name:"GET_PRESIGNED_URL",description:"Generate download URL",category:"Object Storage"},{name:"PUT_PRESIGNED_URL",description:"Generate upload URL",category:"Object Storage"},{name:"DELETE_OBJECT",description:"Delete object",category:"Object Storage",dangerous:!0},{name:"DELETE_OBJECTS",description:"Delete multiple objects",category:"Object Storage",dangerous:!0},{name:"COLLECTION_REGISTRY_APP_LIST",description:"List registry apps",category:"Registry"},{name:"COLLECTION_REGISTRY_APP_GET",description:"Get registry app details",category:"Registry"},{name:"COLLECTION_REGISTRY_APP_VERSIONS",description:"List registry app versions",category:"Registry"},{name:"COLLECTION_REGISTRY_APP_FILTERS",description:"Get registry app filters",category:"Registry"},{name:"REGISTRY_ITEM_LIST",description:"List private registry items",category:"Registry"},{name:"REGISTRY_ITEM_SEARCH",description:"Search registry items",category:"Registry"},{name:"REGISTRY_ITEM_GET",description:"Get registry item details",category:"Registry"},{name:"REGISTRY_ITEM_VERSIONS",description:"List registry item versions",category:"Registry"},{name:"REGISTRY_ITEM_CREATE",description:"Create registry item",category:"Registry"},{name:"REGISTRY_ITEM_BULK_CREATE",description:"Bulk create registry items",category:"Registry"},{name:"REGISTRY_ITEM_UPDATE",description:"Update registry item",category:"Registry"},{name:"REGISTRY_ITEM_DELETE",description:"Delete registry item",category:"Registry",dangerous:!0},{name:"REGISTRY_ITEM_FILTERS",description:"Get registry item filters",category:"Registry"},{name:"REGISTRY_DISCOVER_TOOLS",description:"Discover tools from MCP server",category:"Registry"},{name:"REGISTRY_AI_GENERATE",description:"AI-generate registry content",category:"Registry"},{name:"REGISTRY_PUBLISH_REQUEST_LIST",description:"List publish requests",category:"Registry"},{name:"REGISTRY_PUBLISH_REQUEST_REVIEW",description:"Review publish request",category:"Registry"},{name:"REGISTRY_PUBLISH_REQUEST_COUNT",description:"Count pending publish requests",category:"Registry"},{name:"REGISTRY_PUBLISH_REQUEST_DELETE",description:"Delete publish request",category:"Registry",dangerous:!0},{name:"REGISTRY_PUBLISH_API_KEY_GENERATE",description:"Generate publish API key",category:"Registry"},{name:"REGISTRY_PUBLISH_API_KEY_LIST",description:"List publish API keys",category:"Registry"},{name:"REGISTRY_PUBLISH_API_KEY_REVOKE",description:"Revoke publish API key",category:"Registry",dangerous:!0},{name:"REGISTRY_MONITOR_RUN_START",description:"Start monitor run",category:"Registry"},{name:"REGISTRY_MONITOR_RUN_LIST",description:"List monitor runs",category:"Registry"},{name:"REGISTRY_MONITOR_RUN_GET",description:"Get monitor run details",category:"Registry"},{name:"REGISTRY_MONITOR_RUN_CANCEL",description:"Cancel monitor run",category:"Registry"},{name:"REGISTRY_MONITOR_RESULT_LIST",description:"List monitor results",category:"Registry"},{name:"REGISTRY_MONITOR_CONNECTION_LIST",description:"List monitor connections",category:"Registry"},{name:"REGISTRY_MONITOR_CONNECTION_SYNC",description:"Sync monitor connections",category:"Registry"},{name:"REGISTRY_MONITOR_CONNECTION_UPDATE_AUTH",description:"Update monitor connection auth",category:"Registry"},{name:"SANDBOX_START",description:"Start a sandbox VM with dev server preview",category:"VM"},{name:"SANDBOX_DELETE",description:"Stop and delete a sandbox VM",category:"VM"},{name:"GITHUB_LIST_USER_ORGS",description:"List GitHub user's personal account and organizations",category:"GitHub"},{name:"GITHUB_SEARCH_BRANCHES",description:"Search a repository's branches by name substring",category:"GitHub"},{name:"GITHUB_PR_STATE",description:"Read a branch's pull request with its checks, review state and comments",category:"GitHub"},{name:"GITHUB_LAST_PUBLISHED_PR",description:"Read the most recently merged pull request into a base branch",category:"GitHub"},{name:"GLOBAL_SEARCH",description:"Search across organization resources (currently threads). Returns a typed union of matches.",category:"Search"},{name:"TASK_BOARD_ITEM_CREATE",description:"Create task board item",category:"Task Board"},{name:"TASK_BOARD_ITEM_LIST",description:"List task board items",category:"Task Board"},{name:"TASK_BOARD_ITEM_UPDATE",description:"Update task board item",category:"Task Board"},{name:"TASK_BOARD_ITEM_DELETE",description:"Delete task board item",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_AUTOMATION_LIST",description:"List what the board runs when a card lands in each column",category:"Task Board"},{name:"TASK_BOARD_AUTOMATION_UPSERT",description:"Run the agent on cards landing in a board column",category:"Task Board"},{name:"TASK_BOARD_AUTOMATION_DELETE",description:"Stop running the agent on cards landing in a board column",category:"Task Board"},{name:"TASK_BOARD_COLUMN_ROLE_SET",description:"Say what one of the board's columns means to Studio",category:"Task Board"},{name:"TASK_BOARD_ITEM_PRS_GET",description:"Get a task board item's linked pull requests with live state",category:"Task Board"},{name:"TASK_BOARD_ITEM_PR_LINK",description:"Link a pull request a task run opened to its task board item",category:"Task Board"},{name:"TASK_BOARD_ITEM_RERUN",description:"Re-run a task with the Super Agent, failing any run still holding it open",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_RESOLVE_CONFLICT",description:"Hand a task's conflicting pull request back to the Super Agent to resolve the merge conflict",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_REVIEW_DECISION",description:"Record a reviewer's decision (approve or request changes) for a task under review",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_PROMOTE_TO_PRODUCTION",description:"Merge a reviewed task's pull request and move the task to Done",category:"Task Board",dangerous:!0},{name:"NOTIFICATION_LIST",description:"List your unread notifications in this organization",category:"Task Board"},{name:"NOTIFICATION_MARK_READ",description:"Mark your notifications read",category:"Task Board"},{name:"NOTIFICATION_SUBSCRIPTION_SET",description:"Follow or unfollow a task board item",category:"Task Board"},{name:"NOTIFICATION_SUBSCRIPTION_LIST",description:"List the users following a task board item",category:"Task Board"},{name:"TASK_BOARD_ACTIVITY_LIST",description:"List a task board item's change history",category:"Task Board"},{name:"TASK_BOARD_COMMENT_LIST",description:"List a task board item's comment threads",category:"Task Board"},{name:"TASK_BOARD_COMMENT_CREATE",description:"Post a comment or a reply on a task board item",category:"Task Board"},{name:"TASK_BOARD_COMMENT_UPDATE",description:"Edit a comment, or resolve/unresolve a comment thread",category:"Task Board"},{name:"TASK_BOARD_COMMENT_DELETE",description:"Delete a comment (a thread root takes its replies)",category:"Task Board"},{name:"TASK_BOARD_DISMISSED_LIST",description:"List diagnostic findings dismissed by deleting their task board cards",category:"Task Board"},{name:"TASK_BOARD_DISMISSED_RESTORE",description:"Un-dismiss diagnostic findings so the next report import pushes them again",category:"Task Board"},{name:"TASK_ADD_REPO",description:"Clone an organization repository into the sandbox of the task run calling it",category:"Task Board"}],j50=[{id:"basic-usage",label:"Basic Usage",description:"Tools all org members can access by default",section:"Basic Usage",tools:["COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET","CONNECTION_TEST","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","VIRTUAL_MCP_PLUGIN_CONFIG_GET","VIRTUAL_MCP_LAST_USED_LIST","AUTOMATION_GET","AUTOMATION_LIST","AUTOMATION_RUN_STATS","AI_PROVIDERS_LIST","AI_PROVIDERS_LIST_MODELS","AI_PROVIDERS_ACTIVE","AI_PROVIDER_KEY_LIST","AI_PROVIDER_CREDITS","AI_PROVIDER_TOPUP_URL","LIST_OBJECTS","GET_OBJECT_METADATA","GET_PRESIGNED_URL","PUT_PRESIGNED_URL","FILE_OBJECTS_LIST","ORG_REPO_SYNC_LIST","SANDBOX_START","SANDBOX_DELETE","GITHUB_SEARCH_BRANCHES","GITHUB_PR_STATE","GITHUB_LAST_PUBLISHED_PR","GLOBAL_SEARCH","ORGANIZATION_SETTINGS_GET","USER_GET","BRAND_CONTEXT_LIST","COLLECTION_THREADS_CREATE","COLLECTION_THREADS_LIST","COLLECTION_THREADS_GET","COLLECTION_THREADS_UPDATE","COLLECTION_THREADS_DELETE","COLLECTION_THREAD_MESSAGES_LIST","TASK_BOARD_ITEM_CREATE","TASK_BOARD_ITEM_LIST","TASK_BOARD_ITEM_UPDATE","TASK_BOARD_ITEM_DELETE","TASK_BOARD_AUTOMATION_LIST","TASK_BOARD_AUTOMATION_UPSERT","TASK_BOARD_AUTOMATION_DELETE","TASK_BOARD_COLUMN_ROLE_SET","TASK_BOARD_ITEM_PRS_GET","TASK_BOARD_ITEM_PR_LINK","TASK_BOARD_ITEM_RERUN","TASK_BOARD_REVIEW_DECISION","TASK_BOARD_PROMOTE_TO_PRODUCTION","TASK_BOARD_ACTIVITY_LIST","TASK_BOARD_COMMENT_LIST","TASK_BOARD_COMMENT_CREATE","TASK_BOARD_COMMENT_UPDATE","TASK_BOARD_COMMENT_DELETE","TASK_BOARD_DISMISSED_LIST","TASK_BOARD_DISMISSED_RESTORE","NOTIFICATION_LIST","NOTIFICATION_MARK_READ","NOTIFICATION_SUBSCRIPTION_SET","NOTIFICATION_SUBSCRIPTION_LIST"]},{id:"org:manage",label:"Manage organization",description:"Edit organization settings, brand context, and domain configuration",section:"Organization",tools:["ORGANIZATION_GET","ORGANIZATION_LIST","ORGANIZATION_UPDATE","ORGANIZATION_SETTINGS_GET","ORGANIZATION_SETTINGS_UPDATE","BRAND_CONTEXT_LIST","BRAND_CONTEXT_GET","BRAND_CONTEXT_CREATE","BRAND_CONTEXT_UPDATE","BRAND_CONTEXT_DELETE","BRAND_CONTEXT_EXTRACT","BRAND_GET","BRAND_LIST","ORGANIZATION_DOMAIN_LIST","ORGANIZATION_DOMAIN_ADD","ORGANIZATION_DOMAIN_UPDATE","ORGANIZATION_DOMAIN_VERIFY","ORGANIZATION_DOMAIN_REMOVE","JIRA_INTEGRATION_GET","JIRA_INTEGRATION_UPSERT","JIRA_INTEGRATION_DELETE","JIRA_BOARDS_LIST","JIRA_BOARD_COLUMNS_LIST","JIRA_SYNC_RUN","JIRA_RESYNC_REQUEST"]},{id:"members:manage",label:"Manage members",description:"Invite members, remove them, and change their roles",section:"Organization",tools:["ORGANIZATION_MEMBER_LIST","ORGANIZATION_MEMBER_ADD","ORGANIZATION_MEMBER_REMOVE","ORGANIZATION_MEMBER_UPDATE_ROLE","ORGANIZATION_BILLING_CHECKOUT_START","ORGANIZATION_BILLING_PORTAL","ORGANIZATION_TASK_QUOTA_GET","INFRA_BILLING_SITES_LIST","INFRA_BILLING_GET","INFRA_BILLING_PORTAL","ORGANIZATION_JOIN_REQUEST_LIST","ORGANIZATION_JOIN_REQUEST_APPROVE","ORGANIZATION_JOIN_REQUEST_DENY"],dangerous:!0},{id:"connections:manage",label:"Manage connections",description:"Create, update, and delete connections",section:"Connections & Agents",tools:["COLLECTION_CONNECTIONS_CREATE","COLLECTION_CONNECTIONS_UPDATE","COLLECTION_CONNECTIONS_DELETE","COMMERCE_DISCOVERY_SETUP","COMMERCE_DISCOVERY_RUN","COMMERCE_DISCOVERY_BIND","COMMERCE_DISCOVERY_CONNECTION_STATUS"],dangerous:!0},{id:"agents:manage",label:"Manage agents",description:"Create, configure, and delete agents",section:"Connections & Agents",tools:["COLLECTION_VIRTUAL_MCP_CREATE","COLLECTION_VIRTUAL_MCP_UPDATE","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE","VIRTUAL_MCP_PINNED_VIEWS_UPDATE"],dangerous:!0},{id:"automations:manage",label:"Manage automations",description:"Create, update, run, and delete automations",section:"Automations",tools:["AUTOMATION_CREATE","AUTOMATION_UPDATE","AUTOMATION_DELETE","AUTOMATION_TRIGGER_ADD","AUTOMATION_TRIGGER_REMOVE","AUTOMATION_TRIGGER_ROTATE_TOKEN","AUTOMATION_RUN"],dangerous:!0},{id:"monitoring:view",label:"View monitoring",description:"Access logs and usage statistics",section:"Monitoring",tools:["MONITORING_HEATMAP","MONITORING_LOG_GET","MONITORING_LOGS_LIST","MONITORING_STATS","MONITORING_THREAD_USAGE"]},{id:"secrets:manage",label:"Manage secrets",description:"Create and list secrets stored in the credential vault",section:"Organization",tools:["SECRET_CREATE","SECRET_LIST"]},{id:"file-configs:manage",label:"Manage file configs",description:"Create, list, update and delete S3 bucket configurations and synced GitHub repositories",section:"Organization",tools:["FILE_CONFIG_CREATE","FILE_CONFIG_LIST","FILE_CONFIG_UPDATE","FILE_CONFIG_DELETE","FILE_OBJECTS_LIST","FILE_OBJECT_DELETE","ORG_REPO_SYNC_CREATE","ORG_REPO_SYNC_LIST","ORG_REPO_SYNC_UPDATE","ORG_REPO_SYNC_DELETE","ORG_REPO_SYNC_RUN"]},{id:"ai-providers:manage",label:"Manage AI providers",description:"Add or remove API keys and provision provider credentials",section:"AI Providers",tools:["AI_PROVIDER_KEY_CREATE","AI_PROVIDER_KEY_LIST","AI_PROVIDER_KEY_DELETE","AI_PROVIDER_KEY_UPDATE","AI_PROVIDER_KEY_PREVIEW","AI_PROVIDER_OAUTH_URL","AI_PROVIDER_OAUTH_EXCHANGE","AI_PROVIDER_PROVISION_KEY","AI_PROVIDER_TOPUP_URL","AI_PROVIDER_CREDITS","CLAUDE_SUBSCRIPTION_CONNECT","CLAUDE_SUBSCRIPTION_STATUS","CLAUDE_SUBSCRIPTION_DISCONNECT"]},{id:"tags:manage",label:"Manage tags",description:"Create, assign, and delete organization tags",section:"Organization",tools:["TAGS_LIST","TAGS_CREATE","TAGS_DELETE","MEMBER_TAGS_GET","MEMBER_TAGS_SET"]},{id:"registry:manage",label:"Manage registry",description:"Browse, publish, and manage items in the registry",section:"Store & Registry",tools:["COLLECTION_REGISTRY_APP_LIST","COLLECTION_REGISTRY_APP_GET","COLLECTION_REGISTRY_APP_VERSIONS","COLLECTION_REGISTRY_APP_FILTERS","REGISTRY_ITEM_LIST","REGISTRY_ITEM_SEARCH","REGISTRY_ITEM_GET","REGISTRY_ITEM_VERSIONS","REGISTRY_ITEM_FILTERS","REGISTRY_DISCOVER_TOOLS","REGISTRY_ITEM_CREATE","REGISTRY_ITEM_BULK_CREATE","REGISTRY_ITEM_UPDATE","REGISTRY_ITEM_DELETE","REGISTRY_AI_GENERATE","REGISTRY_PUBLISH_REQUEST_LIST","REGISTRY_PUBLISH_REQUEST_REVIEW","REGISTRY_PUBLISH_REQUEST_COUNT","REGISTRY_PUBLISH_REQUEST_DELETE","REGISTRY_PUBLISH_API_KEY_GENERATE","REGISTRY_PUBLISH_API_KEY_LIST","REGISTRY_PUBLISH_API_KEY_REVOKE"],dangerous:!0},{id:"registry:monitor",label:"Monitor registry health",description:"Run health checks on registry connections and view results",section:"Store & Registry",tools:["REGISTRY_MONITOR_RUN_START","REGISTRY_MONITOR_RUN_LIST","REGISTRY_MONITOR_RUN_GET","REGISTRY_MONITOR_RUN_CANCEL","REGISTRY_MONITOR_RESULT_LIST","REGISTRY_MONITOR_CONNECTION_LIST","REGISTRY_MONITOR_CONNECTION_SYNC","REGISTRY_MONITOR_CONNECTION_UPDATE_AUTH"]},{id:"api-keys:manage",label:"Manage API keys",description:"Create, update, and revoke API keys",section:"Developer",tools:["API_KEY_CREATE","API_KEY_LIST","API_KEY_UPDATE","API_KEY_DELETE"]},{id:"storage:delete",label:"Delete from storage",description:"Permanently delete files from object storage",section:"Developer",tools:["DELETE_OBJECT","DELETE_OBJECTS"],dangerous:!0},{id:"connections:sql",label:"Run SQL queries",description:"Execute raw SQL against connected databases",section:"Developer",tools:["DATABASES_RUN_SQL"],dangerous:!0}],_m1=new Set([...j50.find(($)=>$.id==="basic-usage")?.tools??[],"ORG_FS_READ","ORG_FS_WRITE"]),Qi8=["agents:manage","connections:manage"],z50=new Set(j50.filter(($)=>Qi8.includes($.id)).flatMap(($)=>$.tools))});function o7($){if(!$)return!1;return $.split(",").some((X)=>Bi.includes(X))}function P50($,Z){let X=Array.isArray(Z)?Z:[Z];if(X.length===0)return!1;let Q=$?$.split(","):[];if(Q.includes("owner"))return!0;if(Q.includes("admin"))return X.every((Y)=>Y!=="owner");return!1}var fx,Bi;var VQ=D(()=>{fx=["owner","admin","user"],Bi=["owner","admin"]});class tw{userId;toolName;boundAuth;role;connectionId;getToolMeta;organizationId;_granted=!1;constructor($,Z,X,Q,Y="self",G,J){this.userId=$;this.toolName=Z;this.boundAuth=X;this.role=Q;this.connectionId=Y;this.getToolMeta=G;this.organizationId=J}setToolName($){this.toolName=$}setOrganizationId($){this.organizationId=$}getOrganizationId(){return this.organizationId}setRole($){this.role=$}getRole(){return this.role}grant(){this._granted=!0}async check(...$){if(this._granted)return;if(this.toolName?.startsWith("STUDIO_PUBLIC_")||this.toolName?.startsWith("MESH_PUBLIC_")){this.grant();return}if(!this.userId&&!this.boundAuth){if(this.getToolMeta&&await this.isToolPublic()){this.grant();return}throw new bx("Authentication required. Please provide a valid OAuth token or API key.")}let Z=$.length>0?$:this.toolName?[this.toolName]:[];if(Z.length===0)throw new AH("No resources specified for access check");for(let X of Z)if(await this.checkResource(X)){this.grant();return}throw new AH(`Access denied to: ${Z.join(", ")}`)}async checkResource($){if(!this.userId&&!this.boundAuth)return!1;return this.boundAuth?.isApiKeyPrincipal?this.checkApiKeyAccess($):this.checkMemberAccess($)}async checkApiKeyAccess($){if(!this.boundAuth)return!1;return this.boundAuth.hasPermission({[this.connectionId]:[$]})}async checkMemberAccess($){if(this.userId&&this.role&&_m1.has($))return!0;if(o7(this.role))return!0;if(!this.boundAuth)return!1;return this.boundAuth.hasPermission({[this.connectionId]:[$]},{organizationId:this.organizationId,role:this.role})}async isToolPublic(){if(this.toolName?.startsWith("STUDIO_PUBLIC_")||this.toolName?.startsWith("MESH_PUBLIC_"))return!0;if(!this.getToolMeta)return!1;try{let $=await this.getToolMeta();if(!$)return!1;let X=$K($)?.public_tool;return X===!0||X==="true"}catch{return!1}}granted(){return this._granted}}var bx,AH;var ow=D(()=>{vx();VQ();bx=class bx extends Error{constructor($){super($);this.name="UnauthorizedError"}};AH=class AH extends Error{constructor($){super($);this.name="ForbiddenError"}}});function fm1($){let Z={};for(let X of Object.keys($))Z[X]=["*"];return Z}function fZ($){let Z=$?.metadata;if(!Z)return!1;try{return(typeof Z==="string"?JSON.parse(Z):Z).archived===!0}catch{return!1}}function A50($,Z){return $.get(bm1[Z])??$.get(xm1[Z])}function Fu0($,Z,X){$[bm1[Z]]=X,$[xm1[Z]]=X}var bm1,xm1;var Hu0=D(()=>{bm1={token:"x-studio-token",client:"x-studio-client",properties:"x-studio-properties",runMetadata:"x-studio-run-metadata"},xm1={token:"x-mesh-token",client:"x-mesh-client",properties:"x-mesh-properties",runMetadata:"x-mesh-run-metadata"}});function T50($){let Z=fB.get($);if(!Z||Z.state==="CLOSED")return;if(Z.state==="HALF_OPEN"){if(Z.halfOpenInFlight){if(Date.now()-Z.halfOpenStartedAt<Fh1)throw new xx($,0)}Z.halfOpenInFlight=!0,Z.halfOpenStartedAt=Date.now();return}let X=Date.now()-Z.lastFailureTime;if(X>=sy0){Z.state="HALF_OPEN",Z.halfOpenInFlight=!0,Z.halfOpenStartedAt=Date.now();return}throw new xx($,sy0-X)}function R50($){fB.delete($)}function I50($){let Z=fB.get($);if(!Z){Yi8(),fB.set($,{state:1>=ay0?"OPEN":"CLOSED",consecutiveFailures:1,lastFailureTime:Date.now(),halfOpenInFlight:!1,halfOpenStartedAt:0});return}if(Z.consecutiveFailures++,Z.lastFailureTime=Date.now(),Z.halfOpenInFlight=!1,Z.consecutiveFailures>=ay0)Z.state="OPEN"}function Yi8(){if(fB.size<Y60)return;let $=null,Z=1/0;for(let[X,Q]of fB)if(Q.lastFailureTime<Z)Z=Q.lastFailureTime,$=X;if($)fB.delete($)}var fB,xx;var Nu0=D(()=>{I6();fB=new Map;w$.createObservableGauge("mcp_circuit_breaker.circuits",{description:"MCP connection circuits by state (open, half_open)",unit:"{circuits}"}).addCallback(($)=>{let Z=0,X=0;for(let Q of fB.values())if(Q.state==="OPEN")Z++;else if(Q.state==="HALF_OPEN")X++;$.observe(Z,{state:"open"}),$.observe(X,{state:"half_open"})});xx=class xx extends Error{cooldownRemainingMs;constructor($,Z){super(`Connection ${$} circuit breaker is open \u2014 downstream server unreachable. `+`Retry in ${Math.ceil(Z/1000)}s.`);this.name="CircuitOpenError",this.cooldownRemainingMs=Z}}});var Oi=($,Z)=>{if(Z===null||Z===void 0)return;let X=$.replace(/\[(\w+)\]/g,".$1").split(".").filter(Boolean),Q=Z;for(let Y of X){if(Q===null||Q===void 0||typeof Q!=="object")return;Q=Q[Y]}return Q};function q50($){let Z=$.split("::");if(Z.length!==2||!Z[0]||!Z[1])throw Error(`Invalid scope format: ${$}. Expected format: "KEY::SCOPE"`);return Z}function Gi8($){try{return q50($)}catch{return null}}function Ji8($){if(typeof $==="object"&&$!==null&&"value"in $){let Z=$.value;if(typeof Z==="string")return Z}return null}function Uu0($,Z){let X={};if(!$||!Z)return X;for(let Q of Z){if(Q==="*"){X["*"]=["*"];continue}let Y=Gi8(Q);if(!Y)continue;let[G,J]=Y,W=Oi(G,$),K=Ji8(W);if(K){if(!X[K])X[K]=[];X[K].push(J)}}return X}function ym1($,Z){let X=Uu0($,Z);return new Set(Object.keys(X).filter((Q)=>Q!=="*"))}var Bu0=()=>{};async function gm1($){if(!$.refreshToken)return{success:!1,permanent:!1,error:"No refresh token available"};if(!$.tokenEndpoint)return{success:!1,permanent:!1,error:"No token endpoint available"};if(!$.clientId)return{success:!1,permanent:!1,error:"No client ID available"};try{let Z=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refreshToken,client_id:$.clientId});if($.clientSecret)Z.set("client_secret",$.clientSecret);if($.scope)Z.set("scope",$.scope);let X=await fetch($.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:Z.toString(),signal:AbortSignal.timeout(1e4)});if(!X.ok){let G=await X.text(),J,W;try{let F=JSON.parse(G);if(typeof F.error==="string")J=F.error;if(typeof F.error_description==="string")W=F.error_description}catch{}let K=X.status===400&&!!J&&Wi8.has(J);return(K?console.error:console.warn)("[TokenRefresh] refresh failed",{connectionId:$.connectionId,tokenEndpoint:$.tokenEndpoint,status:X.status,errorCode:J,errorDescription:W,permanent:K}),{success:!1,permanent:K,status:X.status,errorCode:J,error:W||J||`Token refresh failed: ${X.status}`}}let Q=await X.json();if(typeof Q.access_token!=="string"||!Q.access_token)return console.warn("[TokenRefresh] 200 response missing access_token",{connectionId:$.connectionId,tokenEndpoint:$.tokenEndpoint}),{success:!1,permanent:!1,status:X.status,error:"Token endpoint returned no access_token"};let Y;if(Q.expires_in!==void 0){let G=Number(Q.expires_in);if(Number.isFinite(G)&&G>=0&&G<=3153600000)Y=G;else console.warn("[TokenRefresh] ignoring malformed expires_in",{connectionId:$.connectionId,tokenEndpoint:$.tokenEndpoint,expiresIn:Q.expires_in})}return{success:!0,accessToken:Q.access_token,refreshToken:typeof Q.refresh_token==="string"&&Q.refresh_token?Q.refresh_token:$.refreshToken,expiresIn:Y,scope:typeof Q.scope==="string"?Q.scope:void 0}}catch(Z){return console.warn("[TokenRefresh] network/parse error",{connectionId:$.connectionId,tokenEndpoint:$.tokenEndpoint,message:Z instanceof Error?Z.message:String(Z)}),{success:!1,permanent:!1,error:Z instanceof Error?Z.message:"Token refresh failed"}}}var Wi8;var hm1=D(()=>{Wi8=new Set(["invalid_grant","bad_refresh_token"])});var Ou0=($,Z,X)=>{return(Q,Y)=>{let G=-1;return J(0);async function J(W){if(W<=G)throw Error("next() called multiple times");G=W;let K,F=!1,H;if($[W])H=$[W][0][0],Q.req.routeIndex=W;else H=W===$.length&&Y||void 0;if(H)try{K=await H(Q,()=>J(W+1))}catch(N){if(N instanceof Error&&Z)Q.error=N,K=await Z(N,Q),F=!0;else throw N}else if(Q.finalized===!1&&X)K=await X(Q);if(K&&(Q.finalized===!1||F))Q.res=K;return Q}}};var um1=()=>{};var Z$;var P3=D(()=>{Z$=class extends Error{res;status;constructor($=500,Z){super(Z?.message,{cause:Z?.cause});this.res=Z?.res,this.status=$}getResponse(){if(this.res)return new Response(this.res.body,{status:this.status,headers:this.res.headers});return new Response(this.message,{status:this.status})}}});var cm1;var lm1=D(()=>{cm1=Symbol()});async function Ki8($,Z){let X=await $.formData();if(X)return Fi8(X,Z);return{}}function Fi8($,Z){let X=Object.create(null);if($.forEach((Q,Y)=>{if(!(Z.all||Y.endsWith("[]")))X[Y]=Q;else Hi8(X,Y,Q)}),Z.dot)Object.entries(X).forEach(([Q,Y])=>{if(Q.includes("."))Ni8(X,Q,Y),delete X[Q]});return X}var dm1=async($,Z=Object.create(null))=>{let{all:X=!1,dot:Q=!1}=Z,G=($ instanceof M50?$.raw.headers:$.headers).get("Content-Type");if(G?.startsWith("multipart/form-data")||G?.startsWith("application/x-www-form-urlencoded"))return Ki8($,{all:X,dot:Q});return{}},Hi8=($,Z,X)=>{if($[Z]!==void 0)if(Array.isArray($[Z]))$[Z].push(X);else $[Z]=[$[Z],X];else if(!Z.endsWith("[]"))$[Z]=X;else $[Z]=[X]},Ni8=($,Z,X)=>{if(/(?:^|\.)__proto__\./.test(Z))return;let Q=$,Y=Z.split(".");Y.forEach((G,J)=>{if(J===Y.length-1)Q[G]=X;else{if(!Q[G]||typeof Q[G]!=="object"||Array.isArray(Q[G])||Q[G]instanceof File)Q[G]=Object.create(null);Q=Q[G]}})};var mm1=D(()=>{Du0()});var wu0=($)=>{let Z=$.split("/");if(Z[0]==="")Z.shift();return Z},im1=($)=>{let{groups:Z,path:X}=Ui8($),Q=wu0(X);return Bi8(Q,Z)},Ui8=($)=>{let Z=[];return $=$.replace(/\{[^}]+\}/g,(X,Q)=>{let Y=`@${Q}`;return Z.push([Y,X]),Y}),{groups:Z,path:$}},Bi8=($,Z)=>{for(let X=Z.length-1;X>=0;X--){let[Q]=Z[X];for(let Y=$.length-1;Y>=0;Y--)if($[Y].includes(Q)){$[Y]=$[Y].replace(Q,Z[X][1]);break}}return $},k50,pm1=($,Z)=>{if($==="*")return"*";let X=$.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(X){let Q=`${$}#${Z}`;if(!k50[Q])if(X[2])k50[Q]=Z&&Z[0]!==":"&&Z[0]!=="*"?[Q,X[1],new RegExp(`^${X[2]}(?=/${Z})`)]:[$,X[1],new RegExp(`^${X[2]}$`)];else k50[Q]=[$,X[1],!0];return k50[Q]}return null},yx=($,Z)=>{try{return Z($)}catch{return $.replace(/(?:%[0-9A-Fa-f]{2})+/g,(X)=>{try{return Z(X)}catch{return X}})}},nm1=($)=>yx($,decodeURI),Eu0=($)=>{let Z=$.url,X=Z.indexOf("/",Z.indexOf(":")+4),Q=X;for(;Q<Z.length;Q++){let Y=Z.charCodeAt(Q);if(Y===37){let G=Z.indexOf("?",Q),J=Z.indexOf("#",Q),W=G===-1?J===-1?void 0:J:J===-1?G:Math.min(G,J),K=Z.slice(X,W);return nm1(K.includes("%25")?K.replace(/%25/g,"%2525"):K)}else if(Y===63||Y===35)break}return Z.slice(X,Q)},tm1=($)=>{let Z=Eu0($);return Z.length>1&&Z.at(-1)==="/"?Z.slice(0,-1):Z},rw=($,Z,...X)=>{if(X.length)Z=rw(Z,...X);return`${$?.[0]==="/"?"":"/"}${$}${Z==="/"?"":`${$?.at(-1)==="/"?"":"/"}${Z?.[0]==="/"?Z.slice(1):Z}`}`},V50=($)=>{if($.charCodeAt($.length-1)!==63||!$.includes(":"))return null;let Z=$.split("/"),X=[],Q="";return Z.forEach((Y)=>{if(Y!==""&&!/\:/.test(Y))Q+="/"+Y;else if(/\:/.test(Y))if(/\?/.test(Y)){if(X.length===0&&Q==="")X.push("/");else X.push(Q);let G=Y.replace("?","");Q+="/"+G,X.push(Q)}else Q+="/"+Y}),X.filter((Y,G,J)=>J.indexOf(Y)===G)},Lu0=($)=>{if(!/[%+]/.test($))return $;if($.indexOf("+")!==-1)$=$.replace(/\+/g," ");return $.indexOf("%")!==-1?yx($,Di):$},om1=($,Z,X)=>{let Q;if(!X&&Z&&!/[%+]/.test(Z)){let J=$.indexOf("?",8);if(J===-1)return;if(!$.startsWith(Z,J+1))J=$.indexOf(`&${Z}`,J+1);while(J!==-1){let W=$.charCodeAt(J+Z.length+1);if(W===61){let K=J+Z.length+2,F=$.indexOf("&",K);return Lu0($.slice(K,F===-1?void 0:F))}else if(W==38||isNaN(W))return"";J=$.indexOf(`&${Z}`,J+1)}if(Q=/[%+]/.test($),!Q)return}let Y={};Q??=/[%+]/.test($);let G=$.indexOf("?",8);while(G!==-1){let J=$.indexOf("&",G+1),W=$.indexOf("=",G);if(W>J&&J!==-1)W=-1;let K=$.slice(G+1,W===-1?J===-1?void 0:J:W);if(Q)K=Lu0(K);if(G=J,K==="")continue;let F;if(W===-1)F="";else if(F=$.slice(W+1,J===-1?void 0:J),Q)F=Lu0(F);if(X){if(!(Y[K]&&Array.isArray(Y[K])))Y[K]=[];Y[K].push(F)}else Y[K]??=F}return Z?Y[Z]:Y},rm1,am1=($,Z)=>{return om1($,Z,!0)},Di;var bB=D(()=>{k50={},rm1=om1,Di=decodeURIComponent});var sm1=($)=>yx($,Di),M50;var Du0=D(()=>{P3();lm1();mm1();bB();M50=class{raw;#$;#Z;routeIndex=0;path;bodyCache={};constructor($,Z="/",X=[[]]){this.raw=$,this.path=Z,this.#Z=X,this.#$={}}param($){return $?this.#X($):this.#G()}#X($){let Z=this.#Z[0][this.routeIndex][1][$],X=this.#Y(Z);return X&&/\%/.test(X)?sm1(X):X}#G(){let $={},Z=Object.keys(this.#Z[0][this.routeIndex][1]);for(let X of Z){let Q=this.#Y(this.#Z[0][this.routeIndex][1][X]);if(Q!==void 0)$[X]=/\%/.test(Q)?sm1(Q):Q}return $}#Y($){return this.#Z[1]?this.#Z[1][$]:$}query($){return rm1(this.url,$)}queries($){return am1(this.url,$)}header($){if($)return this.raw.headers.get($)??void 0;let Z={};return this.raw.headers.forEach((X,Q)=>{Z[Q]=X}),Z}async parseBody($){return dm1(this,$)}#Q=($)=>{let{bodyCache:Z,raw:X}=this,Q=Z[$];if(Q)return Q;let Y=Object.keys(Z)[0];if(Y)return Z[Y].then((G)=>{if(Y==="json")G=JSON.stringify(G);return new Response(G)[$]()});return Z[$]=X[$]()};json(){return this.#Q("text").then(($)=>JSON.parse($))}text(){return this.#Q("text")}arrayBuffer(){return this.#Q("arrayBuffer")}blob(){return this.#Q("blob")}formData(){return this.#Q("formData")}addValidatedData($,Z){this.#$[$]=Z}valid($){return this.#$[$]}get url(){return this.raw.url}get method(){return this.raw.method}get[cm1](){return this.#Z}get matchedRoutes(){return this.#Z[0].map(([[,$]])=>$)}get routePath(){return this.#Z[0].map(([[,$]])=>$)[this.routeIndex].path}}});var S50,em1=($,Z)=>{let X=new String($);return X.isEscaped=!0,X.callbacks=Z,X},Li=async($,Z,X,Q,Y)=>{if(typeof $==="object"&&!($ instanceof String)){if(!($ instanceof Promise))$=$.toString();if($ instanceof Promise)$=await $}let G=$.callbacks;if(!G?.length)return Promise.resolve($);if(Y)Y[0]+=$;else Y=[$];let J=Promise.all(G.map((W)=>W({phase:Z,buffer:Y,context:Q}))).then((W)=>Promise.all(W.filter(Boolean).map((K)=>Li(K,Z,!1,Q,Y))).then(()=>Y[0]));if(X)return em1(await J,G);else return J};var C50=D(()=>{S50={Stringify:1,BeforeStream:2,Stream:3}});var $i1="text/plain; charset=UTF-8",ju0=($,Z)=>{return{"Content-Type":$,...Z}},wi=($,Z)=>new Response($,Z),Zi1=class{#$;#Z;env={};#X;finalized=!1;error;#G;#Y;#Q;#J;#W;#K;#H;#N;#U;constructor($,Z){if(this.#$=$,Z)this.#Y=Z.executionCtx,this.env=Z.env,this.#K=Z.notFoundHandler,this.#U=Z.path,this.#N=Z.matchResult}get req(){return this.#Z??=new M50(this.#$,this.#U,this.#N),this.#Z}get event(){if(this.#Y&&"respondWith"in this.#Y)return this.#Y;else throw Error("This context has no FetchEvent")}get executionCtx(){if(this.#Y)return this.#Y;else throw Error("This context has no ExecutionContext")}get res(){return this.#Q||=wi(null,{headers:this.#H??=new Headers})}set res($){if(this.#Q&&$){$=wi($.body,$);for(let[Z,X]of this.#Q.headers.entries()){if(Z==="content-type")continue;if(Z==="set-cookie"){let Q=this.#Q.headers.getSetCookie();$.headers.delete("set-cookie");for(let Y of Q)$.headers.append("set-cookie",Y)}else $.headers.set(Z,X)}}this.#Q=$,this.finalized=!0}render=(...$)=>{return this.#W??=(Z)=>this.html(Z),this.#W(...$)};setLayout=($)=>this.#J=$;getLayout=()=>this.#J;setRenderer=($)=>{this.#W=$};header=($,Z,X)=>{if(this.finalized)this.#Q=wi(this.#Q.body,this.#Q);let Q=this.#Q?this.#Q.headers:this.#H??=new Headers;if(Z===void 0)Q.delete($);else if(X?.append)Q.append($,Z);else Q.set($,Z)};status=($)=>{this.#G=$};set=($,Z)=>{this.#X??=new Map,this.#X.set($,Z)};get=($)=>{return this.#X?this.#X.get($):void 0};get var(){if(!this.#X)return{};return Object.fromEntries(this.#X)}#F($,Z,X){let Q=this.#Q?new Headers(this.#Q.headers):this.#H??new Headers;if(typeof Z==="object"&&"headers"in Z){let G=Z.headers instanceof Headers?Z.headers:new Headers(Z.headers);for(let[J,W]of G)if(J.toLowerCase()==="set-cookie")Q.append(J,W);else Q.set(J,W)}if(X)for(let[G,J]of Object.entries(X))if(typeof J==="string")Q.set(G,J);else{Q.delete(G);for(let W of J)Q.append(G,W)}let Y=typeof Z==="number"?Z:Z?.status??this.#G;return wi($,{status:Y,headers:Q})}newResponse=(...$)=>this.#F(...$);body=($,Z,X)=>this.#F($,Z,X);text=($,Z,X)=>{return!this.#H&&!this.#G&&!Z&&!X&&!this.finalized?new Response($):this.#F($,Z,ju0($i1,X))};json=($,Z,X)=>{return this.#F(JSON.stringify($),Z,ju0("application/json",X))};html=($,Z,X)=>{let Q=(Y)=>this.#F(Y,Z,ju0("text/html; charset=UTF-8",X));return typeof $==="object"?Li($,S50.Stringify,!1,{}).then(Q):Q($)};redirect=($,Z)=>{let X=String($);return this.header("Location",!/[^\x00-\xFF]/.test(X)?X:encodeURI(X)),this.newResponse(null,Z??302)};notFound=()=>{return this.#K??=()=>wi(),this.#K(this)}};var _50=D(()=>{Du0();C50()});var k6="ALL",Xi1="all",Qi1,v50="Can not add a route since the matcher is already built.",f50;var xB=D(()=>{Qi1=["get","post","put","delete","options","patch"],f50=class extends Error{}});var zu0="__COMPOSED_HANDLER";var Pu0=()=>{};var Oi8=($)=>{return $.text("404 Not Found",404)},Yi1=($,Z)=>{if("getResponse"in $){let X=$.getResponse();return Z.newResponse(X.body,X)}return console.error($),Z.text("Internal Server Error",500)},Gi1=class ${get;post;put;delete;options;patch;all;on;use;router;getPath;_basePath="/";#$="/";routes=[];constructor(Z={}){[...Qi1,Xi1].forEach((G)=>{this[G]=(J,...W)=>{if(typeof J==="string")this.#$=J;else this.#G(G,this.#$,J);return W.forEach((K)=>{this.#G(G,this.#$,K)}),this}}),this.on=(G,J,...W)=>{for(let K of[J].flat()){this.#$=K;for(let F of[G].flat())W.map((H)=>{this.#G(F.toUpperCase(),this.#$,H)})}return this},this.use=(G,...J)=>{if(typeof G==="string")this.#$=G;else this.#$="*",J.unshift(G);return J.forEach((W)=>{this.#G(k6,this.#$,W)}),this};let{strict:Q,...Y}=Z;Object.assign(this,Y),this.getPath=Q??!0?Z.getPath??Eu0:tm1}#Z(){let Z=new $({router:this.router,getPath:this.getPath});return Z.errorHandler=this.errorHandler,Z.#X=this.#X,Z.routes=this.routes,Z}#X=Oi8;errorHandler=Yi1;route(Z,X){let Q=this.basePath(Z);return X.routes.map((Y)=>{let G;if(X.errorHandler===Yi1)G=Y.handler;else G=async(J,W)=>(await Ou0([],X.errorHandler)(J,()=>Y.handler(J,W))).res,G[zu0]=Y.handler;Q.#G(Y.method,Y.path,G)}),this}basePath(Z){let X=this.#Z();return X._basePath=rw(this._basePath,Z),X}onError=(Z)=>{return this.errorHandler=Z,this};notFound=(Z)=>{return this.#X=Z,this};mount(Z,X,Q){let Y,G;if(Q)if(typeof Q==="function")G=Q;else if(G=Q.optionHandler,Q.replaceRequest===!1)Y=(K)=>K;else Y=Q.replaceRequest;let J=G?(K)=>{let F=G(K);return Array.isArray(F)?F:[F]}:(K)=>{let F=void 0;try{F=K.executionCtx}catch{}return[K.env,F]};Y||=(()=>{let K=rw(this._basePath,Z),F=K==="/"?0:K.length;return(H)=>{let N=new URL(H.url);return N.pathname=N.pathname.slice(F)||"/",new Request(N,H)}})();let W=async(K,F)=>{let H=await X(Y(K.req.raw),...J(K));if(H)return H;await F()};return this.#G(k6,rw(Z,"*"),W),this}#G(Z,X,Q){Z=Z.toUpperCase(),X=rw(this._basePath,X);let Y={basePath:this._basePath,path:X,method:Z,handler:Q};this.router.add(Z,X,[Q,Y]),this.routes.push(Y)}#Y(Z,X){if(Z instanceof Error)return this.errorHandler(Z,X);throw Z}#Q(Z,X,Q,Y){if(Y==="HEAD")return(async()=>new Response(null,await this.#Q(Z,X,Q,"GET")))();let G=this.getPath(Z,{env:Q}),J=this.router.match(Y,G),W=new Zi1(Z,{path:G,matchResult:J,env:Q,executionCtx:X,notFoundHandler:this.#X});if(J[0].length===1){let F;try{F=J[0][0][0][0](W,async()=>{W.res=await this.#X(W)})}catch(H){return this.#Y(H,W)}return F instanceof Promise?F.then((H)=>H||(W.finalized?W.res:this.#X(W))).catch((H)=>this.#Y(H,W)):F??this.#X(W)}let K=Ou0(J[0],this.errorHandler,this.#X);return(async()=>{try{let F=await K(W);if(!F.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return F.res}catch(F){return this.#Y(F,W)}})()}fetch=(Z,...X)=>{return this.#Q(Z,X[1],X[0],Z.method)};request=(Z,X,Q,Y)=>{if(Z instanceof Request)return this.fetch(X?new Request(Z,X):Z,Q,Y);return Z=Z.toString(),this.fetch(new Request(/^https?:\/\//.test(Z)?Z:`http://localhost${rw("/",Z)}`,X),Q,Y)};fire=()=>{addEventListener("fetch",(Z)=>{Z.respondWith(this.#Q(Z.request,Z,void 0,Z.request.method))})}};var Ji1=D(()=>{um1();_50();xB();Pu0();bB()});function b50($,Z){let X=this.buildAllMatchers(),Q=(Y,G)=>{let J=X[Y]||X[k6],W=J[2][G];if(W)return W;let K=G.match(J[0]);if(!K)return[[],Ei];let F=K.indexOf("",1);return[J[1][F],K]};return this.match=Q,Q($,Z)}var Ei;var Au0=D(()=>{xB();Ei=[]});function Li8($,Z){if($.length===1)return Z.length===1?$<Z?-1:1:-1;if(Z.length===1)return 1;if($===ji||$===zi)return 1;else if(Z===ji||Z===zi)return-1;if($===x50)return 1;else if(Z===x50)return-1;return $.length===Z.length?$<Z?-1:1:Z.length-$.length}var x50="[^/]+",ji=".*",zi="(?:|/.*)",aw,Di8,Wi1=class ${#$;#Z;#X=Object.create(null);insert(Z,X,Q,Y,G){if(Z.length===0){if(this.#$!==void 0)throw aw;if(G)return;this.#$=X;return}let[J,...W]=Z,K=J==="*"?W.length===0?["","",ji]:["","",x50]:J==="/*"?["","",zi]:J.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),F;if(K){let H=K[1],N=K[2]||x50;if(H&&K[2]){if(N===".*")throw aw;if(N=N.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(N))throw aw}if(F=this.#X[N],!F){if(Object.keys(this.#X).some((U)=>U!==ji&&U!==zi))throw aw;if(G)return;if(F=this.#X[N]=new $,H!=="")F.#Z=Y.varIndex++}if(!G&&H!=="")Q.push([H,F.#Z])}else if(F=this.#X[J],!F){if(Object.keys(this.#X).some((H)=>H.length>1&&H!==ji&&H!==zi))throw aw;if(G)return;F=this.#X[J]=new $}F.insert(W,X,Q,Y,G)}buildRegExpStr(){let X=Object.keys(this.#X).sort(Li8).map((Q)=>{let Y=this.#X[Q];return(typeof Y.#Z==="number"?`(${Q})@${Y.#Z}`:Di8.has(Q)?`\\${Q}`:Q)+Y.buildRegExpStr()});if(typeof this.#$==="number")X.unshift(`#${this.#$}`);if(X.length===0)return"";if(X.length===1)return X[0];return"(?:"+X.join("|")+")"}};var Tu0=D(()=>{aw=Symbol(),Di8=new Set(".\\+*[^]$()")});var Ki1=class{#$={varIndex:0};#Z=new Wi1;insert($,Z,X){let Q=[],Y=[];for(let J=0;;){let W=!1;if($=$.replace(/\{[^}]+\}/g,(K)=>{let F=`@\\${J}`;return Y[J]=[F,K],J++,W=!0,F}),!W)break}let G=$.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let J=Y.length-1;J>=0;J--){let[W]=Y[J];for(let K=G.length-1;K>=0;K--)if(G[K].indexOf(W)!==-1){G[K]=G[K].replace(W,Y[J][1]);break}}return this.#Z.insert(G,Z,Q,this.#$,X),Q}buildRegExp(){let $=this.#Z.buildRegExpStr();if($==="")return[/^$/,[],[]];let Z=0,X=[],Q=[];return $=$.replace(/#(\d+)|@(\d+)|\.\*\$/g,(Y,G,J)=>{if(G!==void 0)return X[++Z]=Number(G),"$()";if(J!==void 0)return Q[Number(J)]=++Z,"";return""}),[new RegExp(`^${$}`),X,Q]}};var Fi1=D(()=>{Tu0()});function Ni1($){return Hi1[$]??=new RegExp($==="*"?"":`^${$.replace(/\/\*$|([.\\+*[^\]$()])/g,(Z,X)=>X?`\\${X}`:"(?:|/.*)")}$`)}function Ei8(){Hi1=Object.create(null)}function ji8($){let Z=new Ki1,X=[];if($.length===0)return wi8;let Q=$.map((F)=>[!/\*|\/:/.test(F[0]),...F]).sort(([F,H],[N,U])=>F?1:N?-1:H.length-U.length),Y=Object.create(null);for(let F=0,H=-1,N=Q.length;F<N;F++){let[U,B,O]=Q[F];if(U)Y[B]=[O.map(([w])=>[w,Object.create(null)]),Ei];else H++;let L;try{L=Z.insert(B,H,U)}catch(w){throw w===aw?new f50(B):w}if(U)continue;X[H]=O.map(([w,E])=>{let j=Object.create(null);E-=1;for(;E>=0;E--){let[z,A]=L[E];j[z]=A}return[w,j]})}let[G,J,W]=Z.buildRegExp();for(let F=0,H=X.length;F<H;F++)for(let N=0,U=X[F].length;N<U;N++){let B=X[F][N]?.[1];if(!B)continue;let O=Object.keys(B);for(let L=0,w=O.length;L<w;L++)B[O[L]]=W[B[O[L]]]}let K=[];for(let F in J)K[F]=X[J[F]];return[G,K,Y]}function gx($,Z){if(!$)return;for(let X of Object.keys($).sort((Q,Y)=>Y.length-Q.length))if(Ni1(X).test(Z))return[...$[X]];return}var wi8,Hi1,y50=class{name="RegExpRouter";#$;#Z;constructor(){this.#$={[k6]:Object.create(null)},this.#Z={[k6]:Object.create(null)}}add($,Z,X){let Q=this.#$,Y=this.#Z;if(!Q||!Y)throw Error(v50);if(!Q[$])[Q,Y].forEach((W)=>{W[$]=Object.create(null),Object.keys(W[k6]).forEach((K)=>{W[$][K]=[...W[k6][K]]})});if(Z==="/*")Z="*";let G=(Z.match(/\/:/g)||[]).length;if(/\*$/.test(Z)){let W=Ni1(Z);if($===k6)Object.keys(Q).forEach((K)=>{Q[K][Z]||=gx(Q[K],Z)||gx(Q[k6],Z)||[]});else Q[$][Z]||=gx(Q[$],Z)||gx(Q[k6],Z)||[];Object.keys(Q).forEach((K)=>{if($===k6||$===K)Object.keys(Q[K]).forEach((F)=>{W.test(F)&&Q[K][F].push([X,G])})}),Object.keys(Y).forEach((K)=>{if($===k6||$===K)Object.keys(Y[K]).forEach((F)=>W.test(F)&&Y[K][F].push([X,G]))});return}let J=V50(Z)||[Z];for(let W=0,K=J.length;W<K;W++){let F=J[W];Object.keys(Y).forEach((H)=>{if($===k6||$===H)Y[H][F]||=[...gx(Q[H],F)||gx(Q[k6],F)||[]],Y[H][F].push([X,G-K+W+1])})}}match=b50;buildAllMatchers(){let $=Object.create(null);return Object.keys(this.#Z).concat(Object.keys(this.#$)).forEach((Z)=>{$[Z]||=this.#X(Z)}),this.#$=this.#Z=void 0,Ei8(),$}#X($){let Z=[],X=$===k6;if([this.#$,this.#Z].forEach((Q)=>{let Y=Q[$]?Object.keys(Q[$]).map((G)=>[G,Q[$][G]]):[];if(Y.length!==0)X||=!0,Z.push(...Y);else if($!==k6)Z.push(...Object.keys(Q[k6]).map((G)=>[G,Q[k6][G]]))}),!X)return null;else return ji8(Z)}};var Ru0=D(()=>{xB();bB();Au0();Tu0();Fi1();wi8=[/^$/,[],Object.create(null)],Hi1=Object.create(null)});var zi8=class{name="PreparedRegExpRouter";#$;#Z;constructor($,Z){this.#$=$,this.#Z=Z}#X($,Z){let X=this.#$[$];X[1].forEach((Q)=>Q&&Q.push(Z)),Object.values(X[2]).forEach((Q)=>Q[0].push(Z))}#G($,Z,X,Q,Y){let G=this.#$[$];if(!Y)G[2][Z][0].push([X,{}]);else Q.forEach((J)=>{if(typeof J==="number")G[1][J].push([X,Y]);else G[2][J||Z][0].push([X,Y])})}add($,Z,X){if(!this.#$[$]){let Y=this.#$[k6],G={};for(let J in Y[2])G[J]=[Y[2][J][0].slice(),Ei];this.#$[$]=[Y[0],Y[1].map((J)=>Array.isArray(J)?J.slice():0),G]}if(Z==="/*"||Z==="*"){let Y=[X,{}];if($===k6)for(let G in this.#$)this.#X(G,Y);else this.#X($,Y);return}let Q=this.#Z[Z];if(!Q)throw Error(`Path ${Z} is not registered`);for(let[Y,G]of Q)if($===k6)for(let J in this.#$)this.#G(J,Z,X,Y,G);else this.#G($,Z,X,Y,G)}buildAllMatchers(){return this.#$}match=b50};var Ui1=D(()=>{xB();Au0();Ru0()});var Bi1=D(()=>{Ru0();Ui1()});var Iu0=class{name="SmartRouter";#$=[];#Z=[];constructor($){this.#$=$.routers}add($,Z,X){if(!this.#Z)throw Error(v50);this.#Z.push([$,Z,X])}match($,Z){if(!this.#Z)throw Error("Fatal error");let X=this.#$,Q=this.#Z,Y=X.length,G=0,J;for(;G<Y;G++){let W=X[G];try{for(let K=0,F=Q.length;K<F;K++)W.add(...Q[K]);J=W.match($,Z)}catch(K){if(K instanceof f50)continue;throw K}this.match=W.match.bind(W),this.#$=[W],this.#Z=void 0;break}if(G===Y)throw Error("Fatal error");return this.name=`SmartRouter + ${this.activeRouter.name}`,J}get activeRouter(){if(this.#Z||this.#$.length!==1)throw Error("No active router has been determined yet.");return this.#$[0]}};var Oi1=D(()=>{xB()});var Di1=D(()=>{Oi1()});var Pi,Pi8=($)=>{for(let Z in $)return!0;return!1},Li1=class ${#$;#Z;#X;#G=0;#Y=Pi;constructor(Z,X,Q){if(this.#Z=Q||Object.create(null),this.#$=[],Z&&X){let Y=Object.create(null);Y[Z]={handler:X,possibleKeys:[],score:0},this.#$=[Y]}this.#X=[]}insert(Z,X,Q){this.#G=++this.#G;let Y=this,G=im1(X),J=[];for(let W=0,K=G.length;W<K;W++){let F=G[W],H=G[W+1],N=pm1(F,H),U=Array.isArray(N)?N[0]:F;if(U in Y.#Z){if(Y=Y.#Z[U],N)J.push(N[1]);continue}if(Y.#Z[U]=new $,N)Y.#X.push(N),J.push(N[1]);Y=Y.#Z[U]}return Y.#$.push({[Z]:{handler:Q,possibleKeys:J.filter((W,K,F)=>F.indexOf(W)===K),score:this.#G}}),Y}#Q(Z,X,Q,Y,G){for(let J=0,W=X.#$.length;J<W;J++){let K=X.#$[J],F=K[Q]||K[k6],H={};if(F!==void 0){if(F.params=Object.create(null),Z.push(F),Y!==Pi||G&&G!==Pi)for(let N=0,U=F.possibleKeys.length;N<U;N++){let B=F.possibleKeys[N],O=H[F.score];F.params[B]=G?.[B]&&!O?G[B]:Y[B]??G?.[B],H[F.score]=!0}}}}search(Z,X){let Q=[];this.#Y=Pi;let G=[this],J=wu0(X),W=[],K=J.length,F=null;for(let H=0;H<K;H++){let N=J[H],U=H===K-1,B=[];for(let L=0,w=G.length;L<w;L++){let E=G[L],j=E.#Z[N];if(j)if(j.#Y=E.#Y,U){if(j.#Z["*"])this.#Q(Q,j.#Z["*"],Z,E.#Y);this.#Q(Q,j,Z,E.#Y)}else B.push(j);for(let z=0,A=E.#X.length;z<A;z++){let P=E.#X[z],I=E.#Y===Pi?{}:{...E.#Y};if(P==="*"){let f=E.#Z["*"];if(f)this.#Q(Q,f,Z,E.#Y),f.#Y=I,B.push(f);continue}let[k,M,S]=P;if(!N&&!(S instanceof RegExp))continue;let m=E.#Z[k];if(S instanceof RegExp){if(F===null){F=Array(K);let i=X[0]==="/"?1:0;for(let c=0;c<K;c++)F[c]=i,i+=J[c].length+1}let f=X.substring(F[H]),b=S.exec(f);if(b){if(I[M]=b[0],this.#Q(Q,m,Z,E.#Y,I),Pi8(m.#Z)){m.#Y=I;let i=b[0].match(/\//)?.length??0;(W[i]||=[]).push(m)}continue}}if(S===!0||S.test(N))if(I[M]=N,U){if(this.#Q(Q,m,Z,I,E.#Y),m.#Z["*"])this.#Q(Q,m.#Z["*"],Z,I,E.#Y)}else m.#Y=I,B.push(m)}}let O=W.shift();G=O?B.concat(O):B}if(Q.length>1)Q.sort((H,N)=>{return H.score-N.score});return[Q.map(({handler:H,params:N})=>[H,N])]}};var wi1=D(()=>{xB();bB();Pi=Object.create(null)});var qu0=class{name="TrieRouter";#$;constructor(){this.#$=new Li1}add($,Z,X){let Q=V50(Z);if(Q){for(let Y=0,G=Q.length;Y<G;Y++)this.#$.insert($,Q[Y],X);return}this.#$.insert($,Z,X)}match($,Z){return this.#$.search($,Z)}};var Ei1=D(()=>{bB();wi1()});var ji1=D(()=>{Ei1()});var H1;var Mu0=D(()=>{Ji1();Bi1();Di1();ji1();H1=class extends Gi1{constructor($={}){super($);this.router=$.router??new Iu0({routers:[new y50,new qu0]})}}});var U8=D(()=>{Mu0()});import{z as e4}from"zod";function zi1(){return Ti8.parse(process.env)}var ku0=($)=>e4.enum(["true","false","1","0"]).optional().transform((Z)=>Z===void 0?$:Z==="true"||Z==="1"),Ai8=($)=>e4.string().optional().transform((Z)=>Z?Z.split(",").map((X)=>X.trim()):$),Ti8;var Pi1=D(()=>{Ti8=e4.object({AUTH_EMAIL_PASSWORD_ENABLED:ku0(!0),AUTH_GOOGLE_CLIENT_ID:e4.string().optional(),AUTH_GOOGLE_CLIENT_SECRET:e4.string().optional(),AUTH_GITHUB_CLIENT_ID:e4.string().optional(),AUTH_GITHUB_CLIENT_SECRET:e4.string().optional(),AUTH_RESEND_API_KEY:e4.string().optional(),AUTH_RESEND_FROM_EMAIL:e4.string().optional(),AUTH_SENDGRID_API_KEY:e4.string().optional(),AUTH_SENDGRID_FROM_EMAIL:e4.string().optional(),AUTH_INVITE_EMAIL_PROVIDER:e4.enum(["resend","sendgrid"]).optional(),AUTH_RESET_PASSWORD_EMAIL_PROVIDER:e4.enum(["resend","sendgrid"]).optional(),AUTH_MAGIC_LINK_ENABLED:ku0(!1),AUTH_MAGIC_LINK_EMAIL_PROVIDER:e4.enum(["resend","sendgrid"]).optional(),AUTH_EMAIL_OTP_ENABLED:ku0(!1),AUTH_EMAIL_OTP_EMAIL_PROVIDER:e4.enum(["resend","sendgrid"]).optional(),AUTH_EMAIL_OTP_LENGTH:e4.coerce.number().optional(),AUTH_EMAIL_OTP_EXPIRES_IN:e4.coerce.number().optional(),AUTH_SSO_DOMAIN:e4.string().optional(),AUTH_SSO_MS_TENANT_ID:e4.string().optional(),AUTH_SSO_MS_CLIENT_ID:e4.string().optional(),AUTH_SSO_MS_CLIENT_SECRET:e4.string().optional(),AUTH_SSO_SCOPES:Ai8(["openid","email","profile"]),AUTH_SSO_GOOGLE_CLIENT_ID:e4.string().optional(),AUTH_SSO_GOOGLE_CLIENT_SECRET:e4.string().optional()}).superRefine(($,Z)=>{let X=new Set;if($.AUTH_RESEND_API_KEY)X.add("resend");if($.AUTH_SENDGRID_API_KEY)X.add("sendgrid");let Q=["AUTH_INVITE_EMAIL_PROVIDER","AUTH_RESET_PASSWORD_EMAIL_PROVIDER","AUTH_MAGIC_LINK_EMAIL_PROVIDER","AUTH_EMAIL_OTP_EMAIL_PROVIDER"];for(let Y of Q){let G=$[Y];if(G&&!X.has(G)){let J=G==="resend"?"AUTH_RESEND_API_KEY":"AUTH_SENDGRID_API_KEY";Z.addIssue({code:e4.ZodIssueCode.custom,path:[Y],message:`${Y}="${G}" but ${J} is not set`})}}if($.AUTH_MAGIC_LINK_ENABLED&&X.size===0)Z.addIssue({code:e4.ZodIssueCode.custom,path:["AUTH_MAGIC_LINK_ENABLED"],message:"AUTH_MAGIC_LINK_ENABLED=true requires AUTH_RESEND_API_KEY or AUTH_SENDGRID_API_KEY to be set"});if($.AUTH_EMAIL_OTP_ENABLED&&X.size===0)Z.addIssue({code:e4.ZodIssueCode.custom,path:["AUTH_EMAIL_OTP_ENABLED"],message:"AUTH_EMAIL_OTP_ENABLED=true requires AUTH_RESEND_API_KEY or AUTH_SENDGRID_API_KEY to be set"});if($.AUTH_SSO_MS_CLIENT_ID&&$.AUTH_SSO_DOMAIN){if(!$.AUTH_SSO_MS_CLIENT_SECRET)Z.addIssue({code:e4.ZodIssueCode.custom,path:["AUTH_SSO_MS_CLIENT_SECRET"],message:"AUTH_SSO_MS_CLIENT_ID and AUTH_SSO_DOMAIN are set but AUTH_SSO_MS_CLIENT_SECRET is not"});if(!$.AUTH_SSO_MS_TENANT_ID)Z.addIssue({code:e4.ZodIssueCode.custom,path:["AUTH_SSO_MS_TENANT_ID"],message:"AUTH_SSO_MS_CLIENT_ID and AUTH_SSO_DOMAIN are set but AUTH_SSO_MS_TENANT_ID is not"})}if($.AUTH_SSO_GOOGLE_CLIENT_ID&&$.AUTH_SSO_DOMAIN&&!$.AUTH_SSO_GOOGLE_CLIENT_SECRET)Z.addIssue({code:e4.ZodIssueCode.custom,path:["AUTH_SSO_GOOGLE_CLIENT_SECRET"],message:"AUTH_SSO_GOOGLE_CLIENT_ID and AUTH_SSO_DOMAIN are set but AUTH_SSO_GOOGLE_CLIENT_SECRET is not"});if($.AUTH_EMAIL_OTP_LENGTH!==void 0&&(!Number.isInteger($.AUTH_EMAIL_OTP_LENGTH)||$.AUTH_EMAIL_OTP_LENGTH<1))Z.addIssue({code:e4.ZodIssueCode.custom,path:["AUTH_EMAIL_OTP_LENGTH"],message:"AUTH_EMAIL_OTP_LENGTH must be a positive integer"});if($.AUTH_EMAIL_OTP_EXPIRES_IN!==void 0&&(!Number.isInteger($.AUTH_EMAIL_OTP_EXPIRES_IN)||$.AUTH_EMAIL_OTP_EXPIRES_IN<1))Z.addIssue({code:e4.ZodIssueCode.custom,path:["AUTH_EMAIL_OTP_EXPIRES_IN"],message:"AUTH_EMAIL_OTP_EXPIRES_IN must be a positive integer"})}).transform(($)=>{let Z={};if($.AUTH_GOOGLE_CLIENT_ID)Z.google={clientId:$.AUTH_GOOGLE_CLIENT_ID,clientSecret:$.AUTH_GOOGLE_CLIENT_SECRET??""};if($.AUTH_GITHUB_CLIENT_ID)Z.github={clientId:$.AUTH_GITHUB_CLIENT_ID,clientSecret:$.AUTH_GITHUB_CLIENT_SECRET??""};let X=[];if($.AUTH_RESEND_API_KEY)X.push({id:"resend",provider:"resend",config:{apiKey:$.AUTH_RESEND_API_KEY,fromEmail:$.AUTH_RESEND_FROM_EMAIL??"noreply@example.com"}});if($.AUTH_SENDGRID_API_KEY)X.push({id:"sendgrid",provider:"sendgrid",config:{apiKey:$.AUTH_SENDGRID_API_KEY,fromEmail:$.AUTH_SENDGRID_FROM_EMAIL??"noreply@example.com"}});let Q=X[0]?.id,Y;if($.AUTH_SSO_MS_CLIENT_ID&&$.AUTH_SSO_DOMAIN)Y={providerId:"microsoft",domain:$.AUTH_SSO_DOMAIN,MS_TENANT_ID:$.AUTH_SSO_MS_TENANT_ID??"",MS_CLIENT_ID:$.AUTH_SSO_MS_CLIENT_ID,MS_CLIENT_SECRET:$.AUTH_SSO_MS_CLIENT_SECRET??"",scopes:$.AUTH_SSO_SCOPES};else if($.AUTH_SSO_GOOGLE_CLIENT_ID&&$.AUTH_SSO_DOMAIN)Y={providerId:"google",domain:$.AUTH_SSO_DOMAIN,GOOGLE_CLIENT_ID:$.AUTH_SSO_GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET:$.AUTH_SSO_GOOGLE_CLIENT_SECRET??"",scopes:$.AUTH_SSO_SCOPES};let G;if($.AUTH_MAGIC_LINK_ENABLED)G={enabled:!0,emailProviderId:$.AUTH_MAGIC_LINK_EMAIL_PROVIDER??Q??""};let J;if($.AUTH_EMAIL_OTP_ENABLED)J={enabled:!0,emailProviderId:$.AUTH_EMAIL_OTP_EMAIL_PROVIDER??Q??"",...$.AUTH_EMAIL_OTP_LENGTH!==void 0&&{otpLength:$.AUTH_EMAIL_OTP_LENGTH},...$.AUTH_EMAIL_OTP_EXPIRES_IN!==void 0&&{expiresIn:$.AUTH_EMAIL_OTP_EXPIRES_IN}};return{emailAndPassword:{enabled:$.AUTH_EMAIL_PASSWORD_ENABLED},socialProviders:Object.keys(Z).length>0?Z:void 0,emailProviders:X.length>0?X:void 0,inviteEmailProviderId:$.AUTH_INVITE_EMAIL_PROVIDER,resetPasswordEmailProviderId:$.AUTH_RESET_PASSWORD_EMAIL_PROVIDER,ssoConfig:Y,magicLinkConfig:G,emailOtpConfig:J}})});var g50;var Ai1=D(()=>{g50={enabled:!0,batchSize:250,flushIntervalMs:300,maxQueueSize:1e4,redactor:"regex"}});import{existsSync as Ri8,readFileSync as Ii8}from"fs";function qi8(){let $=zi1(),Z=b0().configPath;if(!Ri8(Z))return{auth:$,monitoring:g50};try{let X=JSON.parse(Ii8(Z,"utf-8"));if(X.auth)console.warn("[config] DEPRECATION: 'auth' key found in config.json. Auth is now configured via AUTH_* environment variables. The 'auth' key will be ignored.");return{auth:$,monitoring:X.monitoring??g50,theme:X.theme,logo:X.logo,autoCreateOrganizationOnSignup:X.autoCreateOrganizationOnSignup}}catch{return{auth:$,monitoring:g50}}}function TH(){if(!Vu0)Vu0=qi8();return Vu0}function Ti1(){return TH().theme}var Vu0=null;var h50=D(()=>{Pi1();Ai1();R$()});import{dirname as Mi8,posix as ki8,sep as Vi8}from"path";function Ii1(){let $=Si8();return async(Z)=>{for(let X of Z)X.module=$(X.filename);return Z}}function Si8($=process.argv[1]?Mi8(process.argv[1]):process.cwd(),Z=Vi8==="\\"){let X=Z?Ri1($):$;return(Q)=>{if(!Q)return;let Y=Z?Ri1(Q):Q,{dir:G,base:J,ext:W}=ki8.parse(Y);if(W===".js"||W===".mjs"||W===".cjs")J=J.slice(0,-1*W.length);let K=decodeURIComponent(J);if(!G)G=".";let F=G.lastIndexOf("/node_modules");if(F>-1)return`${G.slice(F+14).replace(/\//g,".")}:${K}`;if(G.startsWith(X)){let H=G.slice(X.length+1).replace(/\//g,".");return H?`${H}:${K}`:K}return K}}function Ri1($){return $.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var qi1=()=>{};function Ci8($,Z,X){return{key:$,enabled:typeof Z=="string"?!0:Z,variant:typeof Z=="string"?Z:void 0,reason:void 0,metadata:{id:void 0,version:void 0,payload:X?JSON.stringify(X):void 0,description:void 0}}}var Su0=($)=>{if("flags"in $){let Z=Mi1($.flags),X=ki1($.flags);return{...$,featureFlags:Z,featureFlagPayloads:X}}{let Z=$.featureFlags??{},X=Object.fromEntries(Object.entries($.featureFlagPayloads||{}).map(([Y,G])=>[Y,Cu0(G)])),Q=Object.fromEntries(Object.entries(Z).map(([Y,G])=>[Y,Ci8(Y,G,X[Y])]));return{...$,featureFlags:Z,featureFlagPayloads:X,flags:Q}}},Mi1=($)=>Object.fromEntries(Object.entries($??{}).map(([Z,X])=>[Z,Ai(X)]).filter(([,Z])=>Z!==void 0)),ki1=($)=>{let Z=$??{};return Object.fromEntries(Object.keys(Z).filter((X)=>{let Q=Z[X];return Q.enabled&&Q.metadata&&Q.metadata.payload!==void 0}).map((X)=>{let Q=Z[X].metadata?.payload;return[X,Q?Cu0(Q):void 0]}))},Ai=($)=>$===void 0?void 0:$.variant??$.enabled,Cu0=($)=>{if(typeof $!="string")return $;try{return JSON.parse($)}catch{return $}};var u50=()=>{};function Vi1(){return"CompressionStream"in globalThis&&"TextEncoder"in globalThis&&"Response"in globalThis&&typeof Response.prototype.blob=="function"}async function c50($,Z=!0,X){try{let Q=new CompressionStream("gzip"),Y=Q.writable.getWriter(),G=Y.write(new TextEncoder().encode($)).then(()=>Y.close()).catch(async(K)=>{try{await Y.abort(K)}catch{}throw K}),J=new Response(Q.readable).blob(),[W]=await Promise.all([J,G]);return W}catch(Q){if(X?.rethrow)throw Q;if(Z)console.error("Failed to gzip compress data",Q);return null}}var _u0=()=>{};var _i8,Si1=function($,Z=[]){if(!$)return!1;let X=$.toLowerCase();return _i8.concat(Z).some((Q)=>{let Y=Q.toLowerCase();return X.indexOf(Y)!==-1})};var Ci1=D(()=>{_i8=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterest","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"]});var r7;var sw=D(()=>{r7=function($){return $.AnonymousId="anonymous_id",$.DistinctId="distinct_id",$.Props="props",$.EnablePersonProcessing="enable_person_processing",$.PersonMode="person_mode",$.FeatureFlagDetails="feature_flag_details",$.FeatureFlags="feature_flags",$.FeatureFlagPayloads="feature_flag_payloads",$.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",$.BootstrapFeatureFlags="bootstrap_feature_flags",$.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",$.OverrideFeatureFlags="override_feature_flags",$.Queue="queue",$.LogsQueue="logs_queue",$.OptedOut="opted_out",$.SessionId="session_id",$.SessionStartTimestamp="session_start_timestamp",$.SessionLastTimestamp="session_timestamp",$.PersonProperties="person_properties",$.GroupProperties="group_properties",$.InstalledAppBuild="installed_app_build",$.InstalledAppVersion="installed_app_version",$.SessionReplay="session_replay",$.SurveyLastSeenDate="survey_last_seen_date",$.SurveysSeen="surveys_seen",$.Surveys="surveys",$.RemoteConfig="remote_config",$.FlagsEndpointWasHit="flags_endpoint_was_hit",$.DeviceId="device_id",$}({})});var l50=()=>{};function m50($){return $===null||typeof $!="object"}function ew($,Z){return Object.prototype.toString.call($)===`[object ${Z}]`}function fi1($){return ew($,"ErrorEvent")}function ux($){return typeof Event<"u"&&bi8($,Event)}function bi1($){return ew($,"Object")}function bi8($,Z){try{return $ instanceof Z}catch{return!1}}var fi8,_i1,L15,vu0,d50,Ti=($)=>$===Object($)&&!d50($),hx=($)=>$===void 0,yB=($)=>vu0.call($)=="[object String]",vi1=($)=>yB($)&&$.trim().length===0,Ri=($)=>vu0.call($)=="[object Number]"&&$===$,fu0=($)=>$ instanceof Error;var Ii=D(()=>{sw();l50();fi8=Array.isArray,_i1=Object.prototype,L15=_i1.hasOwnProperty,vu0=_i1.toString,d50=fi8||function($){return vu0.call($)==="[object Array]"}});function qi($,Z,X,Q,Y){if(Z>X)Q.warn("min cannot be greater than max."),Z=X;if(Ri($))if($>X)return Q.warn(" cannot be greater than max: "+X+". Using max value instead."),X;else{if(!($<Z))return $;return Q.warn(" cannot be less than min: "+Z+". Using min value instead."),Z}return Q.warn(" must be a number. using max or fallback. max: "+X+", fallback: "+Y),qi(Y||X,Z,X,Q)}var bu0=D(()=>{Ii()});class xu0{constructor($){this._buckets={},this._onBucketRateLimited=$._onBucketRateLimited,this._bucketSize=qi($.bucketSize,0,100,$._logger),this._refillRate=qi($.refillRate,0,this._bucketSize,$._logger),this._refillInterval=qi($.refillInterval,0,xi8,$._logger)}_applyRefill($,Z){let X=Z-$.lastAccess,Q=Math.floor(X/this._refillInterval);if(Q>0){let Y=Q*this._refillRate;$.tokens=Math.min($.tokens+Y,this._bucketSize),$.lastAccess=$.lastAccess+Q*this._refillInterval}}consumeRateLimit($){let Z=Date.now(),X=String($),Q=this._buckets[X];if(Q)this._applyRefill(Q,Z);else Q={tokens:this._bucketSize,lastAccess:Z},this._buckets[X]=Q;if(Q.tokens===0)return!0;if(Q.tokens--,Q.tokens===0)this._onBucketRateLimited?.($);return Q.tokens===0}stop(){this._buckets={}}}var xi8=86400000;var xi1=D(()=>{bu0()});class $E{constructor($){this.bytes=$}static ofInner($){if($.length===16)return new $E($);throw TypeError("not 128-bit length")}static fromFieldsV7($,Z,X,Q){if(!Number.isInteger($)||!Number.isInteger(Z)||!Number.isInteger(X)||!Number.isInteger(Q)||$<0||Z<0||X<0||Q<0||$>281474976710655||Z>4095||X>1073741823||Q>4294967295)throw RangeError("invalid field value");let Y=new Uint8Array(16);return Y[0]=$/1099511627776,Y[1]=$/4294967296,Y[2]=$/16777216,Y[3]=$/65536,Y[4]=$/256,Y[5]=$,Y[6]=112|Z>>>8,Y[7]=Z,Y[8]=128|X>>>24,Y[9]=X>>>16,Y[10]=X>>>8,Y[11]=X,Y[12]=Q>>>24,Y[13]=Q>>>16,Y[14]=Q>>>8,Y[15]=Q,new $E(Y)}static parse($){let Z;switch($.length){case 32:Z=/^[0-9a-f]{32}$/i.exec($)?.[0];break;case 36:Z=/^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec($)?.slice(1,6).join("");break;case 38:Z=/^\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\}$/i.exec($)?.slice(1,6).join("");break;case 45:Z=/^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec($)?.slice(1,6).join("");break;default:break}if(Z){let X=new Uint8Array(16);for(let Q=0;Q<16;Q+=4){let Y=parseInt(Z.substring(2*Q,2*Q+8),16);X[Q+0]=Y>>>24,X[Q+1]=Y>>>16,X[Q+2]=Y>>>8,X[Q+3]=Y}return new $E(X)}throw SyntaxError("could not parse UUID string")}toString(){let $="";for(let Z=0;Z<this.bytes.length;Z++)if($+="0123456789abcdef".charAt(this.bytes[Z]>>>4),$+="0123456789abcdef".charAt(15&this.bytes[Z]),Z===3||Z===5||Z===7||Z===9)$+="-";return $}toHex(){let $="";for(let Z=0;Z<this.bytes.length;Z++)$+="0123456789abcdef".charAt(this.bytes[Z]>>>4),$+="0123456789abcdef".charAt(15&this.bytes[Z]);return $}toJSON(){return this.toString()}getVariant(){let $=this.bytes[8]>>>4;if($<0)throw Error("unreachable");if($<=7)return this.bytes.every((Z)=>Z===0)?"NIL":"VAR_0";if($<=11)return"VAR_10";if($<=13)return"VAR_110";if($<=15)return this.bytes.every((Z)=>Z===255)?"MAX":"VAR_RESERVED";else throw Error("unreachable")}getVersion(){return this.getVariant()==="VAR_10"?this.bytes[6]>>>4:void 0}clone(){return new $E(this.bytes.slice(0))}equals($){return this.compareTo($)===0}compareTo($){for(let Z=0;Z<16;Z++){let X=this.bytes[Z]-$.bytes[Z];if(X!==0)return Math.sign(X)}return 0}}class gi1{constructor($){this.timestamp=0,this.counter=0,this.random=$??yi8()}generate(){return this.generateOrResetCore(Date.now(),1e4)}generateOrAbort(){return this.generateOrAbortCore(Date.now(),1e4)}generateOrResetCore($,Z){let X=this.generateOrAbortCore($,Z);if(X===void 0)this.timestamp=0,X=this.generateOrAbortCore($,Z);return X}generateOrAbortCore($,Z){if(!Number.isInteger($)||$<1||$>281474976710655)throw RangeError("`unixTsMs` must be a 48-bit positive integer");if(Z<0||Z>281474976710655)throw RangeError("`rollbackAllowance` out of reasonable range");if($>this.timestamp)this.timestamp=$,this.resetCounter();else{if(!($+Z>=this.timestamp))return;if(this.counter++,this.counter>4398046511103)this.timestamp++,this.resetCounter()}return $E.fromFieldsV7(this.timestamp,Math.trunc(this.counter/1073741824),this.counter&1073741823,this.random.nextUint32())}resetCounter(){this.counter=1024*this.random.nextUint32()+(1023&this.random.nextUint32())}generateV4(){let $=new Uint8Array(Uint32Array.of(this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32()).buffer);return $[6]=64|$[6]>>>4,$[8]=128|$[8]>>>2,$E.ofInner($)}}var yi8=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())}),yi1,gB=()=>gi8().toString(),gi8=()=>(yi1||(yi1=new gi1)).generate();var Mi=D(()=>{/*! For license information please see uuidv7.mjs.LICENSE.txt */});class yu0{add($){let Z=gB();return this.promiseByIds[Z]=$,$.catch(()=>{}).finally(()=>{delete this.promiseByIds[Z]}),$}async join(){let $=Object.values(this.promiseByIds),Z=$.length;while(Z>0)await Promise.all($),$=Object.values(this.promiseByIds),Z=$.length}get length(){return Object.keys(this.promiseByIds).length}constructor(){this.promiseByIds={}}}var hi1=D(()=>{Mi()});function hi8($=console){return{log:$.log.bind($),warn:$.warn.bind($),error:$.error.bind($),debug:$.debug.bind($)}}function ci1($,Z=ui8){return ui1($,Z,hi8())}var ui1=($,Z,X)=>{function Q(G,...J){Z(()=>{let W=X[G];W($,...J)})}return{info:(...G)=>{Q("log",...G)},warn:(...G)=>{Q("warn",...G)},error:(...G)=>{Q("error",...G)},critical:(...G)=>{X.error($,...G)},createLogger:(G)=>ui1(`${$} ${G}`,Z,X)}},ui8=($)=>$();var li1=()=>{};var lx="Mobile",p50="iOS",cx="Android",di1="Tablet",k15,li8="Apple",V15,mi1="Safari",n50="BlackBerry",ii1="Samsung",di8,mi8,t50="Chrome",ii8,pi8,pi1="Internet Explorer",ni8,hu0="Opera",S15,ni1="Edge",ti8,uu0="Firefox",oi8,cu0="Nintendo",lu0="PlayStation",i50="Xbox",ri8,ai8,ki="Windows",si8,ti1="Generic",C15,_15,ei8="Konqueror",cX="(\\d+(\\.\\d+)?)",gu0,v15,f15,b15,$p8,Zp8,x15,y15;var oi1=D(()=>{l50();Ii();k15=cx+" "+di1,V15=li8+" Watch",di8=ii1+"Browser",mi8=ii1+" Internet",ii8=t50+" OS",pi8=t50+" "+p50,ni8=pi1+" "+lx,S15=hu0+" Mini",ti8="Microsoft "+ni1,oi8=uu0+" "+p50,ri8=cx+" "+lx,ai8=lx+" "+mi1,si8=ki+" Phone",C15=ti1+" "+lx.toLowerCase(),_15=ti1+" "+di1.toLowerCase(),gu0=new RegExp("Version/"+cX),v15=new RegExp(i50,"i"),f15=new RegExp(lu0+" \\w+","i"),b15=new RegExp(cu0+" \\w+","i"),$p8=new RegExp(n50+"|PlayBook|BB10","i"),Zp8={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000","5.1":"XP","5.2":"XP","6.0":"Vista","6.1":"7","6.2":"8","6.3":"8.1","6.4":"10","10.0":"10"},x15={[ni8]:[new RegExp("rv:"+cX)],[ti8]:[new RegExp(ni1+"?\\/"+cX)],[t50]:[new RegExp("("+t50+"|CrMo)\\/"+cX)],[pi8]:[new RegExp("CriOS\\/"+cX)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+cX)],[mi1]:[gu0],[ai8]:[gu0],[hu0]:[new RegExp("("+hu0+"|OPR)\\/"+cX)],[uu0]:[new RegExp(uu0+"\\/"+cX)],[oi8]:[new RegExp("FxiOS\\/"+cX)],[ei8]:[new RegExp("Konqueror[:/]?"+cX,"i")],[n50]:[new RegExp(n50+" "+cX),gu0],[ri8]:[new RegExp("android\\s"+cX,"i")],[mi8]:[new RegExp(di8+"\\/"+cX)],[pi1]:[new RegExp("(rv:|MSIE )"+cX)],Mozilla:[new RegExp("rv:"+cX)]},y15=[[new RegExp(i50+"; "+i50+" (.*?)[);]","i"),($)=>[i50,$&&$[1]||""]],[new RegExp(cu0,"i"),[cu0,""]],[new RegExp(lu0,"i"),[lu0,""]],[$p8,[n50,""]],[new RegExp(ki,"i"),($,Z)=>{if(/Phone/.test(Z)||/WPDesktop/.test(Z))return[si8,""];if(new RegExp(lx).test(Z)&&!/IEMobile\b/.test(Z))return[ki+" "+lx,""];let X=/Windows NT ([0-9.]+)/i.exec(Z);if(X&&X[1]){let Q=X[1],Y=Zp8[Q]||"";if(/arm/i.test(Z))Y="RT";return[ki,Y]}return[ki,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,($)=>{if($&&$[3]){let Z=[$[3],$[4],$[5]||"0"];return[p50,Z.join(".")]}return[p50,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,($)=>{let Z="";if($&&$.length>=3)Z=hx($[2])?$[3]:$[2];return["watchOS",Z]}],[new RegExp("("+cx+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+cx+")","i"),($)=>{if($&&$[2]){let Z=[$[2],$[3],$[4]||"0"];return[cx,Z.join(".")]}return[cx,""]}],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,($)=>{let Z=["Mac OS X",""];if($&&$[1]){let X=[$[1],$[2],$[3]||"0"];Z[1]=X.join(".")}return Z}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[ii8,""]],[/Linux|debian/i,["Linux",""]]]});function ai1($){return $?.replace(/\/+$/,"")}async function si1($,Z){let X=null;for(let Q=0;Q<Z.retryCount+1;Q++){if(Q>0)await new Promise((Y)=>setTimeout(Y,Z.retryDelay));try{return await $()}catch(Y){if(X=Y,!Z.retryCheck(Y))throw Y}}throw X}function o50(){return new Date().toISOString()}function RH($,Z){let X=setTimeout($,Z);return X?.unref&&X?.unref(),X}function du0($){return Promise.all($.map((Z)=>(Z??Promise.resolve()).then((X)=>({status:"fulfilled",value:X}),(X)=>({status:"rejected",reason:X}))))}var ri1="utf8",ei1=($)=>$ instanceof Error;var lX=D(()=>{Ci1();xi1();bu0();l50();Ii();hi1();li1();oi1()});var Xp8,a15;var mu0=D(()=>{lX();Xp8={trace:{text:"TRACE",number:1},debug:{text:"DEBUG",number:5},info:{text:"INFO",number:9},warn:{text:"WARN",number:13},error:{text:"ERROR",number:17},fatal:{text:"FATAL",number:21}},a15=Xp8.info});var $p1=D(()=>{mu0();sw()});var Zp1=D(()=>{sw()});class iu0{constructor(){this.events={},this.events={}}on($,Z){if(!this.events[$])this.events[$]=[];return this.events[$].push(Z),()=>{this.events[$]=this.events[$].filter((X)=>X!==Z)}}emit($,Z){for(let X of this.events[$]||[])X(Z);for(let X of this.events["*"]||[])X($,Z)}}var Xp1=()=>{};async function Qp1($){if($ instanceof dx){let Z="";try{Z=await $.text}catch{}console.error(`Error while flushing PostHog: message=${$.message}, response body=${Z}`,$)}else console.error("Error while flushing PostHog",$);return Promise.resolve()}function pu0($){return typeof $=="object"&&($ instanceof dx||$ instanceof Vi)}function Yp1($){return typeof $=="object"&&$ instanceof dx&&$.status===413}class r50{constructor($,Z={}){this.flushPromise=null,this.shutdownPromise=null,this.promiseQueue=new yu0,this._events=new iu0,this._isInitialized=!1;let X=typeof $=="string"?$.trim():"",Q=typeof Z.host=="string"?Z.host.trim():"",Y=!X;if(this._logger=ci1("[PostHog]",this.logMsgIfDebug.bind(this)),Y)this._logger.error("You must pass your PostHog project's api key. The client will be disabled.");if(this.apiKey=X,this.host=ai1(Q||"https://us.i.posthog.com"),this.flushAt=Z.flushAt?Math.max(Z.flushAt,1):20,this.maxBatchSize=Math.max(this.flushAt,Z.maxBatchSize??100),this.maxQueueSize=Math.max(this.flushAt,Z.maxQueueSize??1000),this.flushInterval=Z.flushInterval??1e4,this.preloadFeatureFlags=Z.preloadFeatureFlags??!0,this.defaultOptIn=Z.defaultOptIn??!0,this.disableSurveys=Z.disableSurveys??!1,this._retryOptions={retryCount:Z.fetchRetryCount??3,retryDelay:Z.fetchRetryDelay??3000,retryCheck:pu0},this.requestTimeout=Z.requestTimeout??1e4,this.featureFlagsRequestTimeoutMs=Z.featureFlagsRequestTimeoutMs??3000,this.remoteConfigRequestTimeoutMs=Z.remoteConfigRequestTimeoutMs??3000,this.disableGeoip=Z.disableGeoip??!0,this.disabled=(Z.disabled??!1)||Y,this.historicalMigration=Z?.historicalMigration??!1,this._initPromise=Promise.resolve(),this._isInitialized=!0,this.evaluationContexts=Z?.evaluationContexts??Z?.evaluationEnvironments,Z?.evaluationEnvironments&&!Z?.evaluationContexts)this._logger.warn("evaluationEnvironments is deprecated. Use evaluationContexts instead. This property will be removed in a future version.");this.disableCompression=!Vi1()||(Z?.disableCompression??!1)}logMsgIfDebug($){if(this.isDebug)$()}wrap($){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized)return $();this._initPromise.then(()=>$())}getCommonEventProperties(){return{$lib:this.getLibraryId(),$lib_version:this.getLibraryVersion()}}get optedOut(){return this.getPersistedProperty(r7.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(r7.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(r7.OptedOut,!0)})}on($,Z){return this._events.on($,Z)}debug($=!0){if(this.removeDebugCallback?.(),$){let Z=this.on("*",(X,Q)=>this._logger.info(X,Q));this.removeDebugCallback=()=>{Z(),this.removeDebugCallback=void 0}}}get isDebug(){return!!this.removeDebugCallback}get isDisabled(){return this.disabled}buildPayload($){return{distinct_id:$.distinct_id,event:$.event,properties:{...$.properties||{},...this.getCommonEventProperties()}}}addPendingPromise($){return this.promiseQueue.add($)}identifyStateless($,Z,X){this.wrap(()=>{let Q={...this.buildPayload({distinct_id:$,event:"$identify",properties:Z})};this.enqueue("identify",Q,X)})}async identifyStatelessImmediate($,Z,X){let Q={...this.buildPayload({distinct_id:$,event:"$identify",properties:Z})};await this.sendImmediate("identify",Q,X)}captureStateless($,Z,X,Q){this.wrap(()=>{let Y=this.buildPayload({distinct_id:$,event:Z,properties:X});this.enqueue("capture",Y,Q)})}async captureStatelessImmediate($,Z,X,Q){let Y=this.buildPayload({distinct_id:$,event:Z,properties:X});await this.sendImmediate("capture",Y,Q)}aliasStateless($,Z,X,Q){this.wrap(()=>{let Y=this.buildPayload({event:"$create_alias",distinct_id:Z,properties:{...X||{},distinct_id:Z,alias:$}});this.enqueue("alias",Y,Q)})}async aliasStatelessImmediate($,Z,X,Q){let Y=this.buildPayload({event:"$create_alias",distinct_id:Z,properties:{...X||{},distinct_id:Z,alias:$}});await this.sendImmediate("alias",Y,Q)}groupIdentifyStateless($,Z,X,Q,Y,G){this.wrap(()=>{let J=this.buildPayload({distinct_id:Y||`$${$}_${Z}`,event:"$groupidentify",properties:{$group_type:$,$group_key:Z,$group_set:X||{},...G||{}}});this.enqueue("capture",J,Q)})}async getRemoteConfig(){await this._initPromise;let $=this.host;if($==="https://us.i.posthog.com")$="https://us-assets.i.posthog.com";else if($==="https://eu.i.posthog.com")$="https://eu-assets.i.posthog.com";let Z=`${$}/array/${this.apiKey}/config`,X={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}};return this.fetchWithRetry(Z,X,{retryCount:0},this.remoteConfigRequestTimeoutMs).then((Q)=>Q.json()).catch((Q)=>{this._logger.error("Remote config could not be loaded",Q),this._events.emit("error",Q)})}async getFlags($,Z={},X={},Q={},Y={},G=!1){await this._initPromise;let J=G?"&config=true":"",W=`${this.host}/flags/?v=2${J}`,K={token:this.apiKey,distinct_id:$,groups:Z,person_properties:X,group_properties:Q,...Y};if(X.$device_id)K.$device_id=X.$device_id;if(this.evaluationContexts&&this.evaluationContexts.length>0)K.evaluation_contexts=this.evaluationContexts;let F={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(K)};return this._logger.info("Flags URL",W),this.fetchWithRetry(W,F,{retryCount:0},this.featureFlagsRequestTimeoutMs).then((H)=>H.json()).then((H)=>({success:!0,response:Su0(H)})).catch((H)=>{return this._events.emit("error",H),{success:!1,error:this.categorizeRequestError(H)}})}categorizeRequestError($){if($ instanceof dx)return{type:"api_error",statusCode:$.status};if($ instanceof Vi){let Z=$.error;if(Z instanceof Error&&(Z.name==="AbortError"||Z.name==="TimeoutError"))return{type:"timeout"};return{type:"connection_error"}}return{type:"unknown_error"}}async getFeatureFlagStateless($,Z,X={},Q={},Y={},G){await this._initPromise;let J=await this.getFeatureFlagDetailStateless($,Z,X,Q,Y,G);if(J===void 0)return{response:void 0,requestId:void 0};let W=Ai(J.response);if(W===void 0)W=!1;return{response:W,requestId:J.requestId}}async getFeatureFlagDetailStateless($,Z,X={},Q={},Y={},G){await this._initPromise;let J=await this.getFeatureFlagDetailsStateless(Z,X,Q,Y,G,[$]);if(J===void 0)return;return{response:J.flags[$],requestId:J.requestId,evaluatedAt:J.evaluatedAt}}async getFeatureFlagPayloadStateless($,Z,X={},Q={},Y={},G){await this._initPromise;let J=await this.getFeatureFlagPayloadsStateless(Z,X,Q,Y,G,[$]);if(!J)return;let W=J[$];if(W===void 0)return null;return W}async getFeatureFlagPayloadsStateless($,Z={},X={},Q={},Y,G){return await this._initPromise,(await this.getFeatureFlagsAndPayloadsStateless($,Z,X,Q,Y,G)).payloads}async getFeatureFlagsStateless($,Z={},X={},Q={},Y,G){return await this._initPromise,await this.getFeatureFlagsAndPayloadsStateless($,Z,X,Q,Y,G)}async getFeatureFlagsAndPayloadsStateless($,Z={},X={},Q={},Y,G){await this._initPromise;let J=await this.getFeatureFlagDetailsStateless($,Z,X,Q,Y,G);if(!J)return{flags:void 0,payloads:void 0,requestId:void 0};return{flags:J.featureFlags,payloads:J.featureFlagPayloads,requestId:J.requestId}}async getFeatureFlagDetailsStateless($,Z={},X={},Q={},Y,G){await this._initPromise;let J={};if(Y??this.disableGeoip)J.geoip_disable=!0;if(G)J.flag_keys_to_evaluate=G;let W=await this.getFlags($,Z,X,Q,J);if(!W.success)return;let K=W.response;if(K.errorsWhileComputingFlags)console.error("[FEATURE FLAGS] Error while computing feature flags, some flags may be missing or incorrect. Learn more at https://posthog.com/docs/feature-flags/best-practices");if(K.quotaLimited?.includes("feature_flags"))return console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - feature flags unavailable. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),{flags:{},featureFlags:{},featureFlagPayloads:{},requestId:K?.requestId,quotaLimited:K.quotaLimited};return K}async getSurveysStateless(){if(await this._initPromise,this.disableSurveys===!0)return this._logger.info("Loading surveys is disabled."),[];let $=`${this.host}/api/surveys/?token=${this.apiKey}`,Z={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}},Q=(await this.fetchWithRetry($,Z).then((Y)=>{if(Y.status!==200||!Y.json){let G=`Surveys API could not be loaded: ${Y.status}`,J=Error(G);this._logger.error(J),this._events.emit("error",Error(G));return}return Y.json()}).catch((Y)=>{this._logger.error("Surveys API could not be loaded",Y),this._events.emit("error",Y)}))?.surveys;if(Q)this._logger.info("Surveys fetched from API: ",JSON.stringify(Q));return Q??[]}get props(){if(!this._props)this._props=this.getPersistedProperty(r7.Props);return this._props||{}}set props($){this._props=$}async register($){this.wrap(()=>{this.props={...this.props,...$},this.setPersistedProperty(r7.Props,this.props)})}async unregister($){this.wrap(()=>{delete this.props[$],this.setPersistedProperty(r7.Props,this.props)})}processBeforeEnqueue($){return $}async flushStorage(){}enqueue($,Z,X){this.wrap(()=>{if(this.optedOut)return void this._events.emit($,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let Q=this.prepareMessage($,Z,X);if(Q=this.processBeforeEnqueue(Q),Q===null)return;let Y=this.getPersistedProperty(r7.Queue)||[];if(Y.length>=this.maxQueueSize)Y.shift(),this._logger.info("Queue is full, the oldest event is dropped.");if(Y.push({message:Q}),this.setPersistedProperty(r7.Queue,Y),this._events.emit($,Q),Y.length>=this.flushAt)this.flushBackground();if(this.flushInterval&&!this._flushTimer)this._flushTimer=RH(()=>this.flushBackground(),this.flushInterval)})}async sendImmediate($,Z,X){if(this.disabled)return void this._logger.warn("The client is disabled");if(!this._isInitialized)await this._initPromise;if(this.optedOut)return void this._events.emit($,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let Q=this.prepareMessage($,Z,X);if(Q=this.processBeforeEnqueue(Q),Q===null)return;let Y={api_key:this.apiKey,batch:[Q],sent_at:o50()};if(this.historicalMigration)Y.historical_migration=!0;let G=JSON.stringify(Y),J=`${this.host}/batch/`,W=this.disableCompression?null:await c50(G,this.isDebug),K={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...W!==null&&{"Content-Encoding":"gzip"}},body:W||G};try{await this.fetchWithRetry(J,K)}catch(F){this._events.emit("error",F)}}prepareMessage($,Z,X){let Q={...Z,type:$,library:this.getLibraryId(),library_version:this.getLibraryVersion(),timestamp:X?.timestamp?X?.timestamp:o50(),uuid:X?.uuid?X.uuid:gB()};if(X?.disableGeoip??this.disableGeoip){if(!Q.properties)Q.properties={};Q.properties.$geoip_disable=!0}if(Q.distinctId)Q.distinct_id=Q.distinctId,delete Q.distinctId;return Q}clearFlushTimer(){if(this._flushTimer)clearTimeout(this._flushTimer),this._flushTimer=void 0}flushBackground(){this.flush().catch(async($)=>{await Qp1($)})}async flush(){let $=du0([this.flushPromise]).then(()=>this._flush());return this.flushPromise=$,this.addPendingPromise($),du0([$]).then(()=>{if(this.flushPromise===$)this.flushPromise=null}),$}getCustomHeaders(){let $=this.getCustomUserAgent(),Z={};if($&&$!=="")Z["User-Agent"]=$;return Z}async _flush(){this.clearFlushTimer(),await this._initPromise;let $=this.getPersistedProperty(r7.Queue)||[];if(!$.length)return;let Z=[],X=$.length;while($.length>0&&Z.length<X){let Q=$.slice(0,this.maxBatchSize),Y=Q.map((U)=>U.message),G=async()=>{let B=(this.getPersistedProperty(r7.Queue)||[]).slice(Q.length);this.setPersistedProperty(r7.Queue,B),$=B,await this.flushStorage()},J={api_key:this.apiKey,batch:Y,sent_at:o50()};if(this.historicalMigration)J.historical_migration=!0;let W=JSON.stringify(J),K=`${this.host}/batch/`,F=this.disableCompression?null:await c50(W,this.isDebug),H={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...F!==null&&{"Content-Encoding":"gzip"}},body:F||W},N={retryCheck:(U)=>{if(Yp1(U))return!1;return pu0(U)}};try{await this.fetchWithRetry(K,H,N)}catch(U){if(Yp1(U)&&Y.length>1){this.maxBatchSize=Math.max(1,Math.floor(Y.length/2)),this._logger.warn(`Received 413 when sending batch of size ${Y.length}, reducing batch size to ${this.maxBatchSize}`);continue}if(!(U instanceof Vi))await G();throw this._events.emit("error",U),U}await G(),Z.push(...Y)}this._events.emit("flush",Z)}async fetchWithRetry($,Z,X,Q){let Y=Z.body?Z.body:"",G=-1;try{G=Y instanceof Blob?Y.size:Buffer.byteLength(Y,ri1)}catch{if(Y instanceof Blob)G=Y.size;else G=new TextEncoder().encode(Y).length}return await si1(async()=>{let J=new AbortController,W=Q??this.requestTimeout,K=RH(()=>J.abort(),W),F=null;try{F=await this.fetch($,{signal:J.signal,...Z})}catch(N){throw new Vi(N)}finally{clearTimeout(K)}if(Z.mode!=="no-cors"&&(F.status<200||F.status>=400))throw new dx(F,G);return F},{...this._retryOptions,...X})}async _shutdown($=30000){await this._initPromise;let Z=!1;this.clearFlushTimer();let X=async()=>{try{await this.promiseQueue.join();while(!0){if((this.getPersistedProperty(r7.Queue)||[]).length===0)break;if(await this.flush(),Z)break}}catch(Y){if(!pu0(Y))throw Y;await Qp1(Y)}},Q;try{return await Promise.race([new Promise((Y,G)=>{Q=RH(()=>{this._logger.error("Timed out while shutting down PostHog"),Z=!0,G("Timeout while shutting down PostHog. Some events may not have been sent.")},$)}),X()])}finally{clearTimeout(Q)}}async shutdown($=30000){if(this.shutdownPromise)this._logger.warn("shutdown() called while already shutting down. shutdown() is meant to be called once before process exit - use flush() for per-request cleanup");else this.shutdownPromise=this._shutdown($).finally(()=>{this.shutdownPromise=null});return this.shutdownPromise}}var dx,Vi;var nu0=D(()=>{Xp1();u50();_u0();sw();lX();Mi();dx=class dx extends Error{constructor($,Z){super("HTTP error while fetching PostHog: status="+$.status+", reqByteLength="+Z),this.response=$,this.reqByteLength=Z,this.name="PostHogFetchHttpError"}get status(){return this.response.status}get text(){return this.response.text()}get json(){return this.response.json()}};Vi=class Vi extends Error{constructor($){super("Network error while fetching PostHog",$ instanceof Error?{cause:$}:{}),this.error=$,this.name="PostHogFetchNetworkError"}}});var Gp1=D(()=>{u50();sw();nu0();Mi();lX()});var Jp1=D(()=>{Ii()});function Kp1($){let Z=globalThis._posthogChunkIds;if(!Z)return;let X=Object.keys(Z);if(s50&&X.length===Wp1)return s50;return Wp1=X.length,s50=X.reduce((Q,Y)=>{if(!a50)a50={};let G=a50[Y];if(G)Q[G[0]]=G[1];else{let J=$(Y);for(let W=J.length-1;W>=0;W--){let F=J[W]?.filename,H=Z[Y];if(F&&H){Q[F]=H,a50[Y]=[F,H];break}}}return Q},{}),s50}var a50,Wp1,s50;var Fp1=()=>{};class Hp1{constructor($,Z,X=[]){this.coercers=$,this.stackParser=Z,this.modifiers=X}buildFromUnknown($,Z={}){let Q=Z&&Z.mechanism||{handled:!0,type:"generic"},G=this.buildCoercingContext(Q,Z,0).apply($),J=this.buildParsingContext(Z),W=this.parseStacktrace(G,J);return{$exception_list:this.convertToExceptionList(W,Q),$exception_level:"error"}}async modifyFrames($){for(let Z of $)if(Z.stacktrace&&Z.stacktrace.frames&&d50(Z.stacktrace.frames))Z.stacktrace.frames=await this.applyModifiers(Z.stacktrace.frames);return $}coerceFallback($){return{type:"Error",value:"Unknown error",stack:$.syntheticException?.stack,synthetic:!0}}parseStacktrace($,Z){let X;if($.cause!=null)X=this.parseStacktrace($.cause,Z);let Q;if($.stack!=""&&$.stack!=null)Q=this.applyChunkIds(this.stackParser($.stack,$.synthetic?Z.skipFirstLines:0),Z.chunkIdMap);return{...$,cause:X,stack:Q}}applyChunkIds($,Z){return $.map((X)=>{if(X.filename&&Z)X.chunk_id=Z[X.filename];return X})}applyCoercers($,Z){for(let X of this.coercers)if(X.match($))return X.coerce($,Z);return this.coerceFallback(Z)}async applyModifiers($){let Z=$;for(let X of this.modifiers)Z=await X(Z);return Z}convertToExceptionList($,Z){let X={type:$.type,value:$.value,mechanism:{type:Z.type??"generic",handled:Z.handled??!0,synthetic:$.synthetic??!1}};if($.stack)X.stacktrace={type:"raw",frames:$.stack};let Q=[X];if($.cause!=null)Q.push(...this.convertToExceptionList($.cause,{...Z,handled:!0}));return Q}buildParsingContext($){return{chunkIdMap:Kp1(this.stackParser),skipFirstLines:$.skipFirstLines??1}}buildCoercingContext($,Z,X=0){let Q=(G,J)=>{if(!(J<=Gp8))return;{let W=this.buildCoercingContext($,Z,J);return this.applyCoercers(G,W)}};return{...Z,syntheticException:X==0?Z.syntheticException:void 0,mechanism:$,apply:(G)=>Q(G,X),next:(G)=>Q(G,X+1)}}}var Gp8=4;var Np1=D(()=>{lX();Fp1()});function XK($,Z,X,Q,Y){let G={platform:$,filename:Z,function:X==="<anonymous>"?U7:X,in_app:!0};if(!hx(Q))G.lineno=Q;if(!hx(Y))G.colno=Y;return G}var U7="?";var hB=D(()=>{lX()});var e50=($,Z)=>{let X=$.indexOf("safari-extension")!==-1,Q=$.indexOf("safari-web-extension")!==-1;return X||Q?[$.indexOf("@")!==-1?$.split("@")[0]:U7,X?`safari-extension:${Z}`:`safari-web-extension:${Z}`]:[$,Z]};var tu0=D(()=>{hB()});var Jp8,Wp8,Kp8,ou0=($,Z)=>{let X=Jp8.exec($);if(X){let[,Y,G,J]=X;return XK(Z,Y,U7,+G,+J)}let Q=Wp8.exec($);if(Q){if(Q[2]&&Q[2].indexOf("eval")===0){let W=Kp8.exec(Q[2]);if(W)Q[2]=W[1],Q[3]=W[2],Q[4]=W[3]}let[G,J]=e50(Q[1]||U7,Q[2]);return XK(Z,J,G,Q[3]?+Q[3]:void 0,Q[4]?+Q[4]:void 0)}};var Up1=D(()=>{hB();tu0();Jp8=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Wp8=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Kp8=/\((\S*)(?::(\d+))(?::(\d+))\)/});var Fp8,Hp8,ru0=($,Z)=>{let X=Fp8.exec($);if(X){if(X[3]&&X[3].indexOf(" > eval")>-1){let J=Hp8.exec(X[3]);if(J)X[1]=X[1]||"eval",X[3]=J[1],X[4]=J[2],X[5]=""}let Y=X[3],G=X[1]||U7;return[G,Y]=e50(G,Y),XK(Z,Y,G,X[4]?+X[4]:void 0,X[5]?+X[5]:void 0)}};var Bp1=D(()=>{hB();tu0();Fp8=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Hp8=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i});var Np8,Op1=($,Z)=>{let X=Np8.exec($);return X?XK(Z,X[2],X[1]||U7,+X[3],X[4]?+X[4]:void 0):void 0};var Dp1=D(()=>{hB();Np8=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i});var Up8,Lp1=($,Z)=>{let X=Up8.exec($);return X?XK(Z,X[2],X[3]||U7,+X[1]):void 0},Bp8,wp1=($,Z)=>{let X=Bp8.exec($);return X?XK(Z,X[5],X[3]||X[4]||U7,+X[1],+X[2]):void 0};var Ep1=D(()=>{hB();Up8=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,Bp8=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i});function Lp8($,Z=!1){return!(Z||$&&!$.startsWith("/")&&!$.match(/^[A-Z]:/)&&!$.startsWith(".")&&!$.match(/^[a-zA-Z]([a-zA-Z0-9.\-+])*:\/\//))&&$!==void 0&&!$.includes("node_modules/")}function jp1($){return parseInt($||"",10)||void 0}var Op8,Dp8,zp1=($,Z)=>{let X=$.match(Dp8);if(X){let Q,Y,G,J,W;if(X[1]){G=X[1];let H=G.lastIndexOf(".");if(G[H-1]===".")H--;if(H>0){Q=G.slice(0,H),Y=G.slice(H+1);let N=Q.indexOf(".Module");if(N>0)G=G.slice(N+1),Q=Q.slice(0,N)}J=void 0}if(Y)J=Q,W=Y;if(Y==="<anonymous>")W=void 0,G=void 0;if(G===void 0)W=W||U7,G=J?`${J}.${W}`:W;let K=X[2]?.startsWith("file://")?X[2].slice(7):X[2],F=X[5]==="native";if(K?.match(/\/[A-Z]:/))K=K.slice(1);if(!K&&X[5]&&!F)K=X[5];return{filename:K?decodeURI(K):void 0,module:void 0,function:G,lineno:jp1(X[3]),colno:jp1(X[4]),in_app:Lp8(K||"",F),platform:Z}}if($.match(Op8))return{filename:$,platform:Z}};var Pp1=D(()=>{hB();Op8=/^\s*[-]{4,}$/,Dp8=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/});function Rp1($){if(!$.length)return[];let Z=Array.from($);return Z.reverse(),Z.slice(0,Tp1).map((X)=>({...X,filename:X.filename||wp8(Z).filename,function:X.function||U7}))}function wp8($){return $[$.length-1]||{}}function Ep8(){return Ip1("web:javascript",ou0,ru0)}function Ip1($,...Z){return(X,Q=0)=>{let Y=[],G=X.split(`
|
|
364
|
+
) desc`}class Sx{db;constructor($){this.db=$}async create($){let Z=new Date().toISOString(),X=Pm1($._meta??{}),Q=O50(X),Y=kQ(Q.tags),G=kQ(Q.categories),J={id:$.id,organization_id:$.organization_id,title:$.title,description:$.description??null,server_json:JSON.stringify($.server),meta_json:JSON.stringify(X),tags:U50(Y),categories:U50(G),is_public:$.is_public?1:0,is_unlisted:$.is_unlisted?1:0,created_at:Z,updated_at:Z,created_by:$.created_by??null};await this.db.insertInto("private_registry_item").values(J).execute();let W=await this.findById($.organization_id,$.id);if(!W)throw Error(`Failed to create registry item "${$.id}"`);return W}async findById($,Z){let X=await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async findByIdOrName($,Z){let X=await this.findById($,Z);if(X)return X;let Q=await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",$).where("title","=",Z).executeTakeFirst();return Q?this.deserialize(Q):null}async update($,Z,X){let Q=await this.findById($,Z);if(!Q)throw Error(`Registry item not found: ${Z}`);let Y=Pm1(X._meta??Q._meta??{}),G=O50(Y),J=kQ(G.tags),W=kQ(G.categories),K={updated_at:new Date().toISOString()};if(X.title!==void 0)K.title=X.title;if(X.description!==void 0)K.description=X.description;if(X.server!==void 0)K.server_json=JSON.stringify(X.server);if(X._meta!==void 0)K.meta_json=JSON.stringify(Y);if(X._meta!==void 0)K.tags=U50(J),K.categories=U50(W);if(X.is_public!==void 0)K.is_public=X.is_public?1:0;if(X.is_unlisted!==void 0)K.is_unlisted=X.is_unlisted?1:0;await this.db.updateTable("private_registry_item").set(K).where("organization_id","=",$).where("id","=",Z).execute();let F=await this.findById($,Z);if(!F)throw Error(`Registry item not found after update: ${Z}`);return F}async delete($,Z){let X=await this.findById($,Z);if(!X)return null;return await this.db.deleteFrom("private_registry_item").where("organization_id","=",$).where("id","=",Z).execute(),X}async list($,Z={}){let X=this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",$);if(!Z.includeUnlisted)X=X.where("is_unlisted","=",0);let Q=kQ(Z.tags);if(Q.length>0)X=X.where(B50("tags",Q));let Y=kQ(Z.categories);if(Y.length>0)X=X.where(B50("categories",Y));if(Z.where)X=X.where(Zu0(Z.where));let W=(await this.db.selectFrom(X.as("filtered")).select(q$`count(*)::int`.as("count")).executeTakeFirst())?.count??0;X=X.orderBy(Am1()).orderBy("created_at","desc");let F=H50(Z.cursor)??Z.offset??0,H=Z.limit??24;X=X.limit(H).offset(F);let U=(await X.execute()).map((L)=>this.deserialize(L)),B=F+H<W,O=B?F50(F+H):void 0;return{items:U,totalCount:W,hasMore:B,nextCursor:O}}async listPublic($,Z={}){let X=this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",$).where("is_public","=",1).where("is_unlisted","=",0),Q=kQ(Z.tags);if(Q.length>0)X=X.where(B50("tags",Q));let Y=kQ(Z.categories);if(Y.length>0)X=X.where(B50("categories",Y));if(Z.where)X=X.where(Zu0(Z.where));let W=(await this.db.selectFrom(X.as("filtered")).select(q$`count(*)::int`.as("count")).executeTakeFirst())?.count??0;X=X.orderBy(Am1()).orderBy("created_at","desc");let F=H50(Z.cursor)??Z.offset??0,H=Z.limit??24;X=X.limit(H).offset(F);let U=(await X.execute()).map((L)=>this.deserialize(L)),B=F+H<W,O=B?F50(F+H):void 0;return{items:U,totalCount:W,hasMore:B,nextCursor:O}}async getFilters($,Z){let X=this.db.selectFrom("private_registry_item").select(["tags","categories"]).where("organization_id","=",$);if(Z?.publicOnly)X=X.where("is_public","=",1);if(!Z?.includeUnlisted)X=X.where("is_unlisted","=",0);let Q=await X.execute(),Y=new Map,G=new Map;for(let W of Q){for(let K of pw(W.tags))Y.set(K,(Y.get(K)??0)+1);for(let K of pw(W.categories))G.set(K,(G.get(K)??0)+1)}let J=(W)=>Array.from(W.entries()).map(([K,F])=>({value:K,count:F})).sort((K,F)=>K.value.localeCompare(F.value));return{tags:J(Y),categories:J(G)}}async search($,Z={},X){let Q=this.db.selectFrom("private_registry_item").select(["id","title","description","meta_json","server_json","tags","categories","is_public","is_unlisted"]).where("organization_id","=",$).orderBy("created_at","desc");if(X?.publicOnly)Q=Q.where("is_public","=",1);if(!X?.includeUnlisted)Q=Q.where("is_unlisted","=",0);let Y=await Q.execute(),G=Z.query?.trim().toLowerCase(),J=kQ(Z.tags),W=kQ(Z.categories),K=Y.filter((w)=>{if(G){let E=N50(w.server_json,{}),j=N50(w.meta_json,{}),z=O50(j).short_description??"";if(![w.id,w.title,w.description??"",E.name??"",E.description??"",z].join(" ").toLowerCase().includes(G))return!1}if(J.length>0){let E=kQ(pw(w.tags));if(!J.every((j)=>E.includes(j)))return!1}if(W.length>0){let E=kQ(pw(w.categories));if(!W.every((j)=>E.includes(j)))return!1}return!0}),H=H50(Z.cursor)??0,N=Z.limit??20,U=K.slice(H,H+N),B=H+N<K.length,O=B?F50(H+N):void 0;return{items:U.map((w)=>({id:w.id,title:w.title,tags:pw(w.tags),categories:pw(w.categories),is_public:w.is_public===1,is_unlisted:w.is_unlisted===1})),totalCount:K.length,hasMore:B,nextCursor:O}}deserialize($){let Z=N50($.server_json,{}),X=N50($.meta_json,{});return{id:$.id,name:typeof Z.name==="string"?Z.name:void 0,title:$.title,description:$.description,_meta:X,server:Z,is_public:$.is_public===1,is_unlisted:$.is_unlisted===1,created_at:$.created_at,updated_at:$.updated_at,...$.created_by?{created_by:$.created_by}:{}}}}var im8,pm8,nm8;var Xu0=D(()=>{im8=new Set(["id","title","description","is_public","is_unlisted","created_at","updated_at","created_by"]),pm8=new Set(["is_public","is_unlisted"]),nm8={_meta:"meta_json",server:"server_json"}});import{randomUUID as rm8}from"crypto";function Tm1($,Z){if(!$)return Z;try{return JSON.parse($)}catch{return Z}}function Rm1($){if(!$)return null;let Z=$K($);return JSON.stringify(Z?K50($,Z):$)}class Cx{db;constructor($){this.db=$}async createOrUpdate($){let Z=new Date().toISOString(),X=await this.findPendingByRequestedId($.organization_id,$.requested_id);if(X){let J={title:$.title,description:$.description??null,server_json:JSON.stringify($.server),meta_json:Rm1($._meta),requester_name:$.requester_name??null,requester_email:$.requester_email??null,updated_at:Z};await this.db.updateTable("private_registry_publish_request").set(J).where("organization_id","=",$.organization_id).where("id","=",X.id).execute();let W=await this.findById($.organization_id,X.id);if(!W)throw Error("Failed to update publish request");return W}let Q=rm8(),Y={id:Q,organization_id:$.organization_id,requested_id:$.requested_id,status:"pending",title:$.title,description:$.description??null,server_json:JSON.stringify($.server),meta_json:Rm1($._meta),requester_name:$.requester_name??null,requester_email:$.requester_email??null,reviewer_notes:null,created_at:Z,updated_at:Z};await this.db.insertInto("private_registry_publish_request").values(Y).execute();let G=await this.findById($.organization_id,Q);if(!G)throw Error("Failed to create publish request");return G}async findPendingByRequestedId($,Z){let X=await this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",$).where("requested_id","=",Z).where("status","=","pending").executeTakeFirst();return X?this.deserialize(X):null}async findById($,Z){let X=await this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async list($,Z={}){let X=this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",$),Q=this.db.selectFrom("private_registry_publish_request").select((F)=>F.fn.countAll().as("count")).where("organization_id","=",$);if(Z.status)X=X.where("status","=",Z.status),Q=Q.where("status","=",Z.status);let Y=await Q.executeTakeFirst(),G=Number(Y?.count??0),J=Z.sortBy??"created_at",W=Z.sortDirection??"desc";if(J==="title")X=X.orderBy("title",W);else X=X.orderBy("created_at",W);return{items:(await X.limit(Z.limit??24).offset(Z.offset??0).execute()).map((F)=>this.deserialize(F)),totalCount:G}}async updateStatus($,Z,X,Q){let Y={status:X,updated_at:new Date().toISOString(),reviewer_notes:Q??null};await this.db.updateTable("private_registry_publish_request").set(Y).where("organization_id","=",$).where("id","=",Z).execute();let G=await this.findById($,Z);if(!G)throw Error(`Publish request not found: ${Z}`);return G}async countPending($){let Z=await this.db.selectFrom("private_registry_publish_request").select((X)=>X.fn.countAll().as("count")).where("organization_id","=",$).where("status","=","pending").executeTakeFirst();return Number(Z?.count??0)}async delete($,Z){let X=await this.findById($,Z);if(!X)return null;return await this.db.deleteFrom("private_registry_publish_request").where("organization_id","=",$).where("id","=",Z).execute(),X}deserialize($){return{id:$.id,organization_id:$.organization_id,requested_id:$.requested_id??null,status:$.status,title:$.title,description:$.description,_meta:Tm1($.meta_json,{}),server:Tm1($.server_json,{name:""}),requester_name:$.requester_name,requester_email:$.requester_email,reviewer_notes:$.reviewer_notes,created_at:$.created_at,updated_at:$.updated_at}}}var Qu0=()=>{};import{createHash as am8,randomBytes as sm8,randomUUID as em8}from"crypto";function Im1($){return am8("sha256").update($).digest("hex")}function $i8(){return`prk_${sm8(32).toString("hex")}`}class _x{db;constructor($){this.db=$}async generate($,Z){let X=em8(),Q=$i8(),Y=await Im1(Q),G=Q.slice(0,12),J=new Date().toISOString();return await this.db.insertInto("private_registry_publish_api_key").values({id:X,organization_id:$,name:Z,key_hash:Y,prefix:G,created_at:J}).execute(),{entity:{id:X,organization_id:$,name:Z,prefix:G,created_at:J},key:Q}}async list($){return await this.db.selectFrom("private_registry_publish_api_key").select(["id","organization_id","name","prefix","created_at"]).where("organization_id","=",$).orderBy("created_at","desc").execute()}async revoke($,Z){return(await this.db.deleteFrom("private_registry_publish_api_key").where("organization_id","=",$).where("id","=",Z).execute()).length>0}async validate($,Z){let X=await Im1(Z),Q=await this.db.selectFrom("private_registry_publish_api_key").select(["id"]).where("organization_id","=",$).where("key_hash","=",X).executeTakeFirst();return Boolean(Q)}async hasKeys($){let Z=await this.db.selectFrom("private_registry_publish_api_key").select((X)=>X.fn.countAll().as("count")).where("organization_id","=",$).executeTakeFirst();return Number(Z?.count??0)>0}}var Yu0=()=>{};import{randomUUID as qm1}from"crypto";function Mm1($,Z){if(!$)return Z;try{return JSON.parse($)}catch{return Z}}class D50{db;constructor($){this.db=$}async create($){let Z=qm1(),X=new Date().toISOString(),Q={id:Z,organization_id:$.organization_id,status:$.status??"pending",config_snapshot:$.config_snapshot?JSON.stringify($.config_snapshot):null,total_items:$.total_items??0,tested_items:0,passed_items:0,failed_items:0,skipped_items:0,current_item_id:null,started_at:$.started_at??null,finished_at:null,created_at:X};await this.db.insertInto("private_registry_monitor_run").values(Q).execute();let Y=await this.findById($.organization_id,Z);if(!Y)throw Error(`Failed to create monitor run ${Z}`);return Y}async findById($,Z){let X=await this.db.selectFrom("private_registry_monitor_run").selectAll().where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return X?this.deserializeRun(X):null}async list($,Z={}){let X=this.db.selectFrom("private_registry_monitor_run").selectAll().where("organization_id","=",$),Q=this.db.selectFrom("private_registry_monitor_run").select((W)=>W.fn.countAll().as("count")).where("organization_id","=",$);if(Z.status)X=X.where("status","=",Z.status),Q=Q.where("status","=",Z.status);let Y=await Q.executeTakeFirst(),G=Number(Y?.count??0);return{items:(await X.orderBy("created_at","desc").limit(Z.limit??24).offset(Z.offset??0).execute()).map((W)=>this.deserializeRun(W)),totalCount:G}}async update($,Z,X){let Q={};if(X.total_items!==void 0)Q.total_items=X.total_items;if(X.status!==void 0)Q.status=X.status;if(X.tested_items!==void 0)Q.tested_items=X.tested_items;if(X.passed_items!==void 0)Q.passed_items=X.passed_items;if(X.failed_items!==void 0)Q.failed_items=X.failed_items;if(X.skipped_items!==void 0)Q.skipped_items=X.skipped_items;if(X.current_item_id!==void 0)Q.current_item_id=X.current_item_id;if(X.started_at!==void 0)Q.started_at=X.started_at;if(X.finished_at!==void 0)Q.finished_at=X.finished_at;await this.db.updateTable("private_registry_monitor_run").set(Q).where("organization_id","=",$).where("id","=",Z).execute();let Y=await this.findById($,Z);if(!Y)throw Error(`Monitor run not found: ${Z}`);return Y}deserializeRun($){return{id:$.id,organization_id:$.organization_id,status:$.status,config_snapshot:Mm1($.config_snapshot,null),total_items:Number($.total_items??0),tested_items:Number($.tested_items??0),passed_items:Number($.passed_items??0),failed_items:Number($.failed_items??0),skipped_items:Number($.skipped_items??0),current_item_id:$.current_item_id,started_at:$.started_at,finished_at:$.finished_at,created_at:$.created_at}}}class L50{db;constructor($){this.db=$}async create($){let Z=qm1(),X=new Date().toISOString(),Q={id:Z,run_id:$.run_id,organization_id:$.organization_id,item_id:$.item_id,item_title:$.item_title,status:$.status,error_message:$.error_message??null,connection_ok:$.connection_ok?1:0,tools_listed:$.tools_listed?1:0,tool_results:$.tool_results?JSON.stringify($.tool_results):null,agent_summary:$.agent_summary??null,duration_ms:$.duration_ms??0,action_taken:$.action_taken??"none",tested_at:X};await this.db.insertInto("private_registry_monitor_result").values(Q).execute();let Y=await this.findById($.organization_id,Z);if(!Y)throw Error("Failed to create test result");return Y}async findById($,Z){let X=await this.db.selectFrom("private_registry_monitor_result").selectAll().where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async listByRun($,Z,X={}){let Q=this.db.selectFrom("private_registry_monitor_result").selectAll().where("organization_id","=",$).where("run_id","=",Z),Y=this.db.selectFrom("private_registry_monitor_result").select((K)=>K.fn.countAll().as("count")).where("organization_id","=",$).where("run_id","=",Z);if(X.status)Q=Q.where("status","=",X.status),Y=Y.where("status","=",X.status);let G=await Y.executeTakeFirst(),J=Number(G?.count??0);return{items:(await Q.orderBy("tested_at","desc").limit(X.limit??50).offset(X.offset??0).execute()).map((K)=>this.deserialize(K)),totalCount:J}}async update($,Z,X){let Q={};if(X.status!==void 0)Q.status=X.status;if(X.error_message!==void 0)Q.error_message=X.error_message;if(X.connection_ok!==void 0)Q.connection_ok=X.connection_ok?1:0;if(X.tools_listed!==void 0)Q.tools_listed=X.tools_listed?1:0;if(X.tool_results!==void 0)Q.tool_results=JSON.stringify(X.tool_results);if(X.agent_summary!==void 0)Q.agent_summary=X.agent_summary;if(X.duration_ms!==void 0)Q.duration_ms=X.duration_ms;if(X.action_taken!==void 0)Q.action_taken=X.action_taken;await this.db.updateTable("private_registry_monitor_result").set(Q).where("organization_id","=",$).where("id","=",Z).execute();let Y=await this.findById($,Z);if(!Y)throw Error(`Monitor result not found: ${Z}`);return Y}deserialize($){return{id:$.id,run_id:$.run_id,organization_id:$.organization_id,item_id:$.item_id,item_title:$.item_title,status:$.status,error_message:$.error_message,connection_ok:$.connection_ok===1,tools_listed:$.tools_listed===1,tool_results:Mm1($.tool_results,[]),agent_summary:$.agent_summary,duration_ms:Number($.duration_ms??0),action_taken:$.action_taken,tested_at:$.tested_at}}}var km1=()=>{};import{randomUUID as Zi8}from"crypto";class w50{db;constructor($){this.db=$}async findByItemId($,Z){let X=await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",$).where("item_id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async list($){return(await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",$).orderBy("updated_at","desc").execute()).map((X)=>this.deserialize(X))}async findByConnectionId($,Z){let X=await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",$).where("connection_id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async upsert($){let Z=await this.findByItemId($.organization_id,$.item_id),X=new Date().toISOString();if(!Z){let Y={id:Zi8(),organization_id:$.organization_id,item_id:$.item_id,connection_id:$.connection_id,auth_status:$.auth_status??"none",created_at:X,updated_at:X};await this.db.insertInto("private_registry_monitor_connection").values(Y).execute()}else{let Y={connection_id:$.connection_id,auth_status:$.auth_status??Z.auth_status,updated_at:X};await this.db.updateTable("private_registry_monitor_connection").set(Y).where("organization_id","=",$.organization_id).where("item_id","=",$.item_id).execute()}let Q=await this.findByItemId($.organization_id,$.item_id);if(!Q)throw Error("Failed to save monitor connection");return Q}async updateAuthStatus($,Z,X){return await this.db.updateTable("private_registry_monitor_connection").set({auth_status:X,updated_at:new Date().toISOString()}).where("organization_id","=",$).where("item_id","=",Z).execute(),this.findByItemId($,Z)}deserialize($){return{id:$.id,organization_id:$.organization_id,item_id:$.item_id,connection_id:$.connection_id,auth_status:$.auth_status,created_at:$.created_at,updated_at:$.updated_at}}}var Vm1=()=>{};var Sm1=D(()=>{Xu0();Qu0();Yu0();km1();Vm1()});class Ui{db;constructor($){this.db=$}async listOrgTags($){return(await this.db.selectFrom("organization_tags").selectAll().where("organization_id","=",$).orderBy("name","asc").execute()).map((X)=>this.tagFromDbRow(X))}async getTag($){let Z=await this.db.selectFrom("organization_tags").selectAll().where("id","=",$).executeTakeFirst();return Z?this.tagFromDbRow(Z):null}async getTagsByIds($){if($.length===0)return[];return(await this.db.selectFrom("organization_tags").selectAll().where("id","in",$).execute()).map((X)=>this.tagFromDbRow(X))}async getTagByName($,Z){let X=await this.db.selectFrom("organization_tags").selectAll().where("organization_id","=",$).where("name","=",Z).executeTakeFirst();return X?this.tagFromDbRow(X):null}async createTag($,Z,X){let Q=p$("tag"),Y=new Date().toISOString();await this.db.insertInto("organization_tags").values({id:Q,organization_id:$,name:Z,color:X??null,created_at:Y}).onConflict((J)=>J.columns(["organization_id","name"]).doNothing()).execute();let G=await this.getTagByName($,Z);if(!G)throw Error(`Failed to create or retrieve tag: ${Z}`);return G}async deleteTag($){await this.db.deleteFrom("organization_tags").where("id","=",$).execute()}async getMemberTags($){return(await this.db.selectFrom("member_tags").innerJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["organization_tags.id","organization_tags.organization_id","organization_tags.name","organization_tags.color","organization_tags.created_at"]).where("member_tags.member_id","=",$).orderBy("organization_tags.name","asc").execute()).map((X)=>this.tagFromDbRow(X))}async setMemberTags($,Z){await this.db.transaction().execute(async(X)=>{if(await X.deleteFrom("member_tags").where("member_id","=",$).execute(),Z.length>0){let Q=new Date().toISOString();await X.insertInto("member_tags").values(Z.map((Y)=>({id:p$("mtag"),member_id:$,tag_id:Y,created_at:Q}))).execute()}})}async addMemberTag($,Z){let X=new Date().toISOString();await this.db.insertInto("member_tags").values({id:p$("mtag"),member_id:$,tag_id:Z,created_at:X}).onConflict((Q)=>Q.columns(["member_id","tag_id"]).doNothing()).execute()}async removeMemberTag($,Z){await this.db.deleteFrom("member_tags").where("member_id","=",$).where("tag_id","=",Z).execute()}async verifyMemberOrg($,Z){return await this.db.selectFrom("member").select("id").where("id","=",$).where("organizationId","=",Z).executeTakeFirst()!==void 0}async getUserTagsInOrg($,Z){return(await this.db.selectFrom("member").innerJoin("member_tags","member_tags.member_id","member.id").innerJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["organization_tags.id","organization_tags.organization_id","organization_tags.name","organization_tags.color","organization_tags.created_at"]).where("member.userId","=",$).where("member.organizationId","=",Z).orderBy("organization_tags.name","asc").execute()).map((Q)=>this.tagFromDbRow(Q))}async getMembersWithTags($){let Z=await this.db.selectFrom("member").leftJoin("member_tags","member_tags.member_id","member.id").leftJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["member.id as memberId","organization_tags.name as tagName"]).where("member.organizationId","=",$).execute(),X=new Map;for(let Q of Z){if(!X.has(Q.memberId))X.set(Q.memberId,[]);if(Q.tagName)X.get(Q.memberId).push(Q.tagName)}return X}tagFromDbRow($){return{id:$.id,organizationId:$.organization_id,name:$.name,color:$.color??null,createdAt:$.created_at}}}var Gu0=D(()=>{CZ()});import{sql as Xi8}from"kysely";function Cm1($){return{organizationId:$.organization_id,status:$.status,stripeCustomerId:$.stripe_customer_id,stripeSubscriptionId:$.stripe_subscription_id,currentPeriodEnd:$.current_period_end,lastStripeEventAt:$.last_stripe_event_at,freeTaskExecutions:$.free_task_executions,monthlyTaskExecutions:$.monthly_task_executions}}class ZK{db;constructor($){this.db=$}async getBilling($){let Z=await this.db.selectFrom("organization_billing").selectAll().where("organization_id","=",$).executeTakeFirst();return Z?Cm1(Z):null}async getBillingByStripeSubscriptionId($){let Z=await this.db.selectFrom("organization_billing").selectAll().where("stripe_subscription_id","=",$).executeTakeFirst();return Z?Cm1(Z):null}async updateStripeState($,Z){return((await this.db.updateTable("organization_billing").set({...Z.stripeCustomerId!==void 0&&{stripe_customer_id:Z.stripeCustomerId},...Z.stripeSubscriptionId!==void 0&&{stripe_subscription_id:Z.stripeSubscriptionId},...Z.status!==void 0&&{status:Z.status},...Z.currentPeriodEnd!==void 0&&{current_period_end:Z.currentPeriodEnd},...Z.lastStripeEventAt!==void 0&&{last_stripe_event_at:Z.lastStripeEventAt},updated_at:new Date}).where("organization_id","=",$).executeTakeFirst()).numUpdatedRows??0n)>0n}async taskClaim($){let Z=await this.db.selectFrom("task_quota_claims").select(["run_count","state"]).where("task_board_item_id","=",$).executeTakeFirst();return Z?{runCount:Z.run_count,state:Z.state}:null}static liveClaimCount($,Z,X){return $.selectFrom("task_quota_claims").select((Q)=>Q.fn.countAll().as("count")).where("organization_id","=",Z).where("period_key","=",X).where("state","<>","released").executeTakeFirst().then((Q)=>Number(Q?.count??0))}async countTaskClaims($,Z){return await ZK.liveClaimCount(this.db,$,Z)}async claimTaskUnderLimit($,Z,X,Q,Y){return await this.db.transaction().execute(async(G)=>{await G.insertInto("organization_billing").values({organization_id:$}).onConflict((K)=>K.column("organization_id").doNothing()).execute(),await G.selectFrom("organization_billing").select("organization_id").where("organization_id","=",$).forUpdate().executeTakeFirstOrThrow();let J=await G.selectFrom("task_quota_claims").select(["run_count","state"]).where("task_board_item_id","=",Z).executeTakeFirst();if(J&&J.run_count>=Y)return"runs_exhausted";let W=()=>ZK.liveClaimCount(G,$,X);if(J&&J.state!=="released")return await G.updateTable("task_quota_claims").set({run_count:J.run_count+1}).where("task_board_item_id","=",Z).execute(),"rerun";if(await W()>=Q)return"exhausted";if(J)return await G.updateTable("task_quota_claims").set({state:"held",period_key:X,run_count:J.run_count+1}).where("task_board_item_id","=",Z).execute(),"claimed";return await G.insertInto("task_quota_claims").values({task_board_item_id:Z,organization_id:$,period_key:X,state:"held"}).execute(),"claimed"})}async releaseTaskClaim($,Z){return((await this.db.updateTable("task_quota_claims").set({state:"released"}).where("organization_id","=",$).where("task_board_item_id","=",Z).where("state","=","held").executeTakeFirst()).numUpdatedRows??0n)>0n}async rollbackTaskClaim($,Z,{releaseSlot:X}){await this.db.updateTable("task_quota_claims").set(()=>({...X?{state:"released"}:{},run_count:Xi8`greatest(run_count - 1, 0)`})).where("organization_id","=",$).where("task_board_item_id","=",Z).where("state","=","held").execute()}}var E50=()=>{};class Ju0{db;constructor($){this.db=$}async findById($,Z){let X=await this.db.selectFrom("user").select(["user.id","user.name","user.email","user.image","user.createdAt","user.updatedAt"]).where("user.id","=",$).where((Q)=>Q.exists(Q.selectFrom("member as m1").innerJoin("member as m2","m1.organizationId","m2.organizationId").select("m1.id").where("m1.userId","=",$).where("m2.userId","=",Z))).executeTakeFirst();if(!X)return null;return{id:X.id,name:X.name,email:X.email,role:"",createdAt:X.createdAt,updatedAt:X.updatedAt,image:X.image??void 0}}}function vm1(){let $={};for(let Z of j50){if(Z.id==="basic-usage")continue;$[Z.id]=!0}return $}function Ku0($){let Z=(G)=>{let J=$[G];return Array.isArray(J)?J:[]},X=Z("*").includes("*")||Z("self").includes("*"),Q=new Set;if(!X)for(let G of Object.values($)){if(!Array.isArray(G))continue;for(let J of G)Q.add(J)}let Y={};for(let G of j50){if(G.id==="basic-usage")continue;Y[G.id]=X||G.tools.every((J)=>Q.has(J))}return Y}function nw(){let $={Organizations:[],Connections:[],"Virtual MCPs":[],Threads:[],Monitoring:[],Users:[],"API Keys":[],Tags:[],"AI Providers":[],Secrets:[],"File Configs":[],Automations:[],"Object Storage":[],Registry:[],GitHub:[],VM:[],Search:[],"Task Board":[],Jira:[]};for(let Z of Wu0)$[Z.category].push(Z);return $}var Wu0,j50,_m1,Qi8,z50;var vx=D(()=>{Wu0=[{name:"ORGANIZATION_CREATE",description:"Create a new organization",category:"Organizations"},{name:"ORGANIZATION_LIST",description:"List organizations",category:"Organizations"},{name:"ORGANIZATION_GET",description:"View organization details",category:"Organizations"},{name:"ORGANIZATION_UPDATE",description:"Update organization",category:"Organizations"},{name:"ORGANIZATION_DELETE",description:"Delete organization",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_SETTINGS_GET",description:"View organization settings",category:"Organizations"},{name:"ORGANIZATION_SETTINGS_UPDATE",description:"Update organization settings",category:"Organizations"},{name:"BRAND_CONTEXT_LIST",description:"List brand contexts",category:"Organizations"},{name:"BRAND_CONTEXT_GET",description:"View brand context",category:"Organizations"},{name:"BRAND_CONTEXT_CREATE",description:"Create brand context",category:"Organizations"},{name:"BRAND_CONTEXT_UPDATE",description:"Update brand context",category:"Organizations"},{name:"BRAND_CONTEXT_DELETE",description:"Delete brand context",category:"Organizations",dangerous:!0},{name:"BRAND_CONTEXT_EXTRACT",description:"Extract brand context from website",category:"Organizations"},{name:"BRAND_GET",description:"Get brand (binding)",category:"Organizations"},{name:"BRAND_LIST",description:"List brands (binding)",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_LIST",description:"List organization domain claims",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_ADD",description:"Claim an email domain for the organization",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_UPDATE",description:"Set a domain's join mode",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_VERIFY",description:"Verify a domain via DNS TXT record",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_REMOVE",description:"Remove an organization domain claim",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_JOIN_REQUEST_LIST",description:"List pending requests to join the organization",category:"Organizations"},{name:"ORGANIZATION_JOIN_REQUEST_APPROVE",description:"Approve a request to join the organization",category:"Organizations"},{name:"ORGANIZATION_JOIN_REQUEST_DENY",description:"Deny a request to join the organization",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_MEMBER_ADD",description:"Add members",category:"Organizations"},{name:"ORGANIZATION_MEMBER_REMOVE",description:"Remove members",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_MEMBER_LIST",description:"List members",category:"Organizations"},{name:"ORGANIZATION_MEMBER_UPDATE_ROLE",description:"Update member roles",category:"Organizations"},{name:"ORGANIZATION_BILLING_CHECKOUT_START",description:"Start the org subscription checkout",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_BILLING_PORTAL",description:"Open the Stripe billing portal",category:"Organizations"},{name:"ORGANIZATION_TASK_QUOTA_GET",description:"Get the org's auto-task quota usage",category:"Organizations"},{name:"INFRA_BILLING_SITES_LIST",description:"List the legacy deco.cx sites the org owns",category:"Organizations"},{name:"INFRA_BILLING_GET",description:"Get infra usage, plan and invoices for an owned site",category:"Organizations"},{name:"INFRA_BILLING_PORTAL",description:"Open the Stripe billing portal for an owned site",category:"Organizations"},{name:"COLLECTION_CONNECTIONS_CREATE",description:"Create connections",category:"Connections"},{name:"COLLECTION_CONNECTIONS_LIST",description:"List connections",category:"Connections"},{name:"COLLECTION_CONNECTIONS_GET",description:"View connection details",category:"Connections"},{name:"COLLECTION_CONNECTIONS_UPDATE",description:"Update connections",category:"Connections"},{name:"COLLECTION_CONNECTIONS_DELETE",description:"Delete connections",category:"Connections",dangerous:!0},{name:"CONNECTION_TEST",description:"Test connections",category:"Connections"},{name:"COMMERCE_DISCOVERY_SETUP",description:"Set up Commerce Discovery",category:"Connections"},{name:"COMMERCE_DISCOVERY_RUN",description:"Run Commerce Discovery",category:"Connections"},{name:"COMMERCE_DISCOVERY_BIND",description:"Bind Commerce Discovery data source",category:"Connections"},{name:"COMMERCE_DISCOVERY_CONNECTION_STATUS",description:"Read Commerce Discovery connection status",category:"Connections"},{name:"DATABASES_RUN_SQL",description:"Run SQL queries",category:"Connections",dangerous:!0},{name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create virtual MCPs",category:"Virtual MCPs"},{name:"COLLECTION_VIRTUAL_MCP_LIST",description:"List virtual MCPs",category:"Virtual MCPs"},{name:"COLLECTION_VIRTUAL_MCP_GET",description:"View virtual MCP details",category:"Virtual MCPs"},{name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update virtual MCPs",category:"Virtual MCPs"},{name:"COLLECTION_VIRTUAL_MCP_DELETE",description:"Delete virtual MCPs",category:"Virtual MCPs",dangerous:!0},{name:"MONITORING_HEATMAP",description:"View tool-call volume by agent and tool",category:"Monitoring"},{name:"MONITORING_LOG_GET",description:"View monitoring log details",category:"Monitoring"},{name:"MONITORING_LOGS_LIST",description:"List monitoring logs",category:"Monitoring"},{name:"MONITORING_STATS",description:"View monitoring statistics",category:"Monitoring"},{name:"MONITORING_THREAD_USAGE",description:"View per-thread token usage and cost",category:"Monitoring"},{name:"API_KEY_CREATE",description:"Create API key",category:"API Keys"},{name:"API_KEY_LIST",description:"List API keys",category:"API Keys"},{name:"API_KEY_UPDATE",description:"Update API key",category:"API Keys"},{name:"API_KEY_DELETE",description:"Delete API key",category:"API Keys",dangerous:!0},{name:"USER_GET",description:"Get a user by id",category:"Users"},{name:"USER_MODEL_PREFERENCES_GET",description:"Get the calling user's chat tier \u2192 model overrides",category:"Users"},{name:"USER_MODEL_PREFERENCES_UPDATE",description:"Set the calling user's chat tier \u2192 model overrides",category:"Users"},{name:"COLLECTION_THREADS_CREATE",description:"Create threads",category:"Threads"},{name:"COLLECTION_THREADS_LIST",description:"List threads",category:"Threads"},{name:"COLLECTION_THREADS_GET",description:"View thread details",category:"Threads"},{name:"COLLECTION_THREADS_UPDATE",description:"Update threads",category:"Threads"},{name:"COLLECTION_THREADS_DELETE",description:"Delete threads",category:"Threads",dangerous:!0},{name:"COLLECTION_THREAD_MESSAGES_LIST",description:"List thread messages",category:"Threads"},{name:"TAGS_LIST",description:"List organization tags",category:"Tags"},{name:"TAGS_CREATE",description:"Create organization tag",category:"Tags"},{name:"TAGS_DELETE",description:"Delete organization tag",category:"Tags",dangerous:!0},{name:"MEMBER_TAGS_GET",description:"Get member tags",category:"Tags"},{name:"MEMBER_TAGS_SET",description:"Set member tags",category:"Tags"},{name:"AUTOMATION_CREATE",description:"Create automation",category:"Automations"},{name:"AUTOMATION_GET",description:"View automation details",category:"Automations"},{name:"AUTOMATION_LIST",description:"List automations",category:"Automations"},{name:"AUTOMATION_UPDATE",description:"Update automation",category:"Automations"},{name:"AUTOMATION_DELETE",description:"Delete automation",category:"Automations",dangerous:!0},{name:"AUTOMATION_TRIGGER_ADD",description:"Add trigger to automation",category:"Automations"},{name:"AUTOMATION_TRIGGER_REMOVE",description:"Remove trigger from automation",category:"Automations"},{name:"AUTOMATION_TRIGGER_ROTATE_TOKEN",description:"Rotate the secret token for a webhook automation trigger",category:"Automations"},{name:"AUTOMATION_RUN",description:"Manually trigger an automation run",category:"Automations"},{name:"AUTOMATION_RUN_STATS",description:"View aggregated run counts and token/cost for an automation",category:"Automations"},{name:"VIRTUAL_MCP_PLUGIN_CONFIG_GET",description:"View virtual MCP plugin configuration",category:"Virtual MCPs"},{name:"VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE",description:"Update virtual MCP plugin configuration",category:"Virtual MCPs"},{name:"VIRTUAL_MCP_PINNED_VIEWS_UPDATE",description:"Update virtual MCP pinned sidebar views",category:"Virtual MCPs"},{name:"VIRTUAL_MCP_LAST_USED_LIST",description:"Get last-used info for one or more virtual MCPs",category:"Virtual MCPs"},{name:"AI_PROVIDERS_LIST",description:"List available AI providers",category:"AI Providers"},{name:"AI_PROVIDERS_LIST_MODELS",description:"List AI provider models",category:"AI Providers"},{name:"AI_PROVIDERS_ACTIVE",description:"List active AI providers",category:"AI Providers"},{name:"AI_PROVIDER_KEY_CREATE",description:"Store AI provider API key",category:"AI Providers"},{name:"AI_PROVIDER_KEY_LIST",description:"List AI provider API keys",category:"AI Providers"},{name:"AI_PROVIDER_KEY_DELETE",description:"Delete AI provider API key",category:"AI Providers",dangerous:!0},{name:"AI_PROVIDER_KEY_UPDATE",description:"Update AI provider API key label or credential",category:"AI Providers"},{name:"AI_PROVIDER_KEY_PREVIEW",description:"Get masked preview of AI provider API key",category:"AI Providers"},{name:"AI_PROVIDER_OAUTH_URL",description:"Get OAuth URL for provider",category:"AI Providers"},{name:"AI_PROVIDER_OAUTH_EXCHANGE",description:"Exchange OAuth code for API key",category:"AI Providers"},{name:"AI_PROVIDER_PROVISION_KEY",description:"Auto-provision API key for a provider",category:"AI Providers"},{name:"AI_PROVIDER_TOPUP_URL",description:"Get checkout URL to top up provider credits",category:"AI Providers"},{name:"CLAUDE_SUBSCRIPTION_CONNECT",description:"Link your own Claude subscription with a setup token",category:"AI Providers"},{name:"CLAUDE_SUBSCRIPTION_STATUS",description:"Whether your Claude subscription is linked, and since when",category:"AI Providers"},{name:"CLAUDE_SUBSCRIPTION_DISCONNECT",description:"Unlink your Claude subscription",category:"AI Providers"},{name:"AI_PROVIDER_CREDITS",description:"Get current credit balance for a provider",category:"AI Providers"},{name:"SECRET_CREATE",description:"Create a secret in the credential vault",category:"Secrets"},{name:"SECRET_LIST",description:"List secrets visible to the caller (no values returned)",category:"Secrets"},{name:"FILE_CONFIG_CREATE",description:"Create an S3-compatible bucket configuration for the org",category:"File Configs"},{name:"FILE_CONFIG_LIST",description:"List S3 bucket configurations for the org (no creds returned)",category:"File Configs"},{name:"ORG_FS_PUBLIC_SETS_SYNC",description:"Re-sync the shared public skill-set volumes from their GitHub sources",category:"File Configs"},{name:"ORG_REPO_SYNC_CREATE",description:"Keep a GitHub repository mirrored into a new org-fs volume",category:"File Configs"},{name:"ORG_REPO_SYNC_LIST",description:"List the org's synced repositories and their sync status",category:"File Configs"},{name:"ORG_REPO_SYNC_UPDATE",description:"Update a synced repository's ref, paths, or enabled flag",category:"File Configs"},{name:"ORG_REPO_SYNC_DELETE",description:"Stop syncing a repository (already-synced files are kept)",category:"File Configs"},{name:"ORG_REPO_SYNC_RUN",description:"Sync a repository into its volume right now",category:"File Configs"},{name:"JIRA_INTEGRATION_GET",description:"Get the org's Jira integration config and last sync status",category:"Jira"},{name:"JIRA_INTEGRATION_UPSERT",description:"Connect or update the org's Jira integration",category:"Jira"},{name:"JIRA_INTEGRATION_DELETE",description:"Disconnect Jira (already-synced cards are kept)",category:"Jira"},{name:"JIRA_BOARDS_LIST",description:"List Jira boards visible to the connected credentials",category:"Jira"},{name:"JIRA_BOARD_COLUMNS_LIST",description:"List a Jira board's columns and statuses for the mapping",category:"Jira"},{name:"JIRA_SYNC_RUN",description:"Pull from Jira into the task board right now",category:"Jira"},{name:"JIRA_RESYNC_REQUEST",description:"Mark the whole Jira board to be re-read on the next scheduled sync",category:"Jira"},{name:"FILE_CONFIG_UPDATE",description:"Update an S3 bucket configuration, optionally rotating credentials",category:"File Configs"},{name:"FILE_CONFIG_DELETE",description:"Delete an S3 bucket configuration",category:"File Configs"},{name:"FILE_OBJECTS_LIST",description:"List existing objects in a configured bucket",category:"File Configs"},{name:"FILE_OBJECT_DELETE",description:"Delete an object from a configured bucket",category:"File Configs"},{name:"LIST_OBJECTS",description:"List objects in storage",category:"Object Storage"},{name:"GET_OBJECT_METADATA",description:"Get object metadata",category:"Object Storage"},{name:"GET_PRESIGNED_URL",description:"Generate download URL",category:"Object Storage"},{name:"PUT_PRESIGNED_URL",description:"Generate upload URL",category:"Object Storage"},{name:"DELETE_OBJECT",description:"Delete object",category:"Object Storage",dangerous:!0},{name:"DELETE_OBJECTS",description:"Delete multiple objects",category:"Object Storage",dangerous:!0},{name:"COLLECTION_REGISTRY_APP_LIST",description:"List registry apps",category:"Registry"},{name:"COLLECTION_REGISTRY_APP_GET",description:"Get registry app details",category:"Registry"},{name:"COLLECTION_REGISTRY_APP_VERSIONS",description:"List registry app versions",category:"Registry"},{name:"COLLECTION_REGISTRY_APP_FILTERS",description:"Get registry app filters",category:"Registry"},{name:"REGISTRY_ITEM_LIST",description:"List private registry items",category:"Registry"},{name:"REGISTRY_ITEM_SEARCH",description:"Search registry items",category:"Registry"},{name:"REGISTRY_ITEM_GET",description:"Get registry item details",category:"Registry"},{name:"REGISTRY_ITEM_VERSIONS",description:"List registry item versions",category:"Registry"},{name:"REGISTRY_ITEM_CREATE",description:"Create registry item",category:"Registry"},{name:"REGISTRY_ITEM_BULK_CREATE",description:"Bulk create registry items",category:"Registry"},{name:"REGISTRY_ITEM_UPDATE",description:"Update registry item",category:"Registry"},{name:"REGISTRY_ITEM_DELETE",description:"Delete registry item",category:"Registry",dangerous:!0},{name:"REGISTRY_ITEM_FILTERS",description:"Get registry item filters",category:"Registry"},{name:"REGISTRY_DISCOVER_TOOLS",description:"Discover tools from MCP server",category:"Registry"},{name:"REGISTRY_AI_GENERATE",description:"AI-generate registry content",category:"Registry"},{name:"REGISTRY_PUBLISH_REQUEST_LIST",description:"List publish requests",category:"Registry"},{name:"REGISTRY_PUBLISH_REQUEST_REVIEW",description:"Review publish request",category:"Registry"},{name:"REGISTRY_PUBLISH_REQUEST_COUNT",description:"Count pending publish requests",category:"Registry"},{name:"REGISTRY_PUBLISH_REQUEST_DELETE",description:"Delete publish request",category:"Registry",dangerous:!0},{name:"REGISTRY_PUBLISH_API_KEY_GENERATE",description:"Generate publish API key",category:"Registry"},{name:"REGISTRY_PUBLISH_API_KEY_LIST",description:"List publish API keys",category:"Registry"},{name:"REGISTRY_PUBLISH_API_KEY_REVOKE",description:"Revoke publish API key",category:"Registry",dangerous:!0},{name:"REGISTRY_MONITOR_RUN_START",description:"Start monitor run",category:"Registry"},{name:"REGISTRY_MONITOR_RUN_LIST",description:"List monitor runs",category:"Registry"},{name:"REGISTRY_MONITOR_RUN_GET",description:"Get monitor run details",category:"Registry"},{name:"REGISTRY_MONITOR_RUN_CANCEL",description:"Cancel monitor run",category:"Registry"},{name:"REGISTRY_MONITOR_RESULT_LIST",description:"List monitor results",category:"Registry"},{name:"REGISTRY_MONITOR_CONNECTION_LIST",description:"List monitor connections",category:"Registry"},{name:"REGISTRY_MONITOR_CONNECTION_SYNC",description:"Sync monitor connections",category:"Registry"},{name:"REGISTRY_MONITOR_CONNECTION_UPDATE_AUTH",description:"Update monitor connection auth",category:"Registry"},{name:"SANDBOX_START",description:"Start a sandbox VM with dev server preview",category:"VM"},{name:"SANDBOX_DELETE",description:"Stop and delete a sandbox VM",category:"VM"},{name:"GITHUB_LIST_USER_ORGS",description:"List GitHub user's personal account and organizations",category:"GitHub"},{name:"GITHUB_SEARCH_BRANCHES",description:"Search a repository's branches by name substring",category:"GitHub"},{name:"GITHUB_PR_STATE",description:"Read a branch's pull request with its checks, review state and comments",category:"GitHub"},{name:"GITHUB_LAST_PUBLISHED_PR",description:"Read the most recently merged pull request into a base branch",category:"GitHub"},{name:"GLOBAL_SEARCH",description:"Search across organization resources (currently threads). Returns a typed union of matches.",category:"Search"},{name:"TASK_BOARD_ITEM_CREATE",description:"Create task board item",category:"Task Board"},{name:"TASK_BOARD_ITEM_LIST",description:"List task board items",category:"Task Board"},{name:"TASK_BOARD_ITEM_UPDATE",description:"Update task board item",category:"Task Board"},{name:"TASK_BOARD_ITEM_DELETE",description:"Delete task board item",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_AUTOMATION_LIST",description:"List what the board runs when a card lands in each column",category:"Task Board"},{name:"TASK_BOARD_AUTOMATION_UPSERT",description:"Run the agent on cards landing in a board column",category:"Task Board"},{name:"TASK_BOARD_AUTOMATION_DELETE",description:"Stop running the agent on cards landing in a board column",category:"Task Board"},{name:"TASK_BOARD_COLUMN_ROLE_SET",description:"Say what one of the board's columns means to Studio",category:"Task Board"},{name:"TASK_BOARD_ITEM_PRS_GET",description:"Get a task board item's linked pull requests with live state",category:"Task Board"},{name:"TASK_BOARD_ITEM_PR_LINK",description:"Link a pull request a task run opened to its task board item",category:"Task Board"},{name:"TASK_BOARD_ITEM_RERUN",description:"Re-run a task with the Super Agent, failing any run still holding it open",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_RESOLVE_CONFLICT",description:"Hand a task's conflicting pull request back to the Super Agent to resolve the merge conflict",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_REVIEW_DECISION",description:"Record a reviewer's decision (approve or request changes) for a task under review",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_PROMOTE_TO_PRODUCTION",description:"Merge a reviewed task's pull request and move the task to Done",category:"Task Board",dangerous:!0},{name:"NOTIFICATION_LIST",description:"List your unread notifications in this organization",category:"Task Board"},{name:"NOTIFICATION_MARK_READ",description:"Mark your notifications read",category:"Task Board"},{name:"NOTIFICATION_SUBSCRIPTION_SET",description:"Follow or unfollow a task board item",category:"Task Board"},{name:"NOTIFICATION_SUBSCRIPTION_LIST",description:"List the users following a task board item",category:"Task Board"},{name:"TASK_BOARD_ACTIVITY_LIST",description:"List a task board item's change history",category:"Task Board"},{name:"TASK_BOARD_COMMENT_LIST",description:"List a task board item's comment threads",category:"Task Board"},{name:"TASK_BOARD_COMMENT_CREATE",description:"Post a comment or a reply on a task board item",category:"Task Board"},{name:"TASK_BOARD_COMMENT_UPDATE",description:"Edit a comment, or resolve/unresolve a comment thread",category:"Task Board"},{name:"TASK_BOARD_COMMENT_DELETE",description:"Delete a comment (a thread root takes its replies)",category:"Task Board"},{name:"TASK_BOARD_DISMISSED_LIST",description:"List diagnostic findings dismissed by deleting their task board cards",category:"Task Board"},{name:"TASK_BOARD_DISMISSED_RESTORE",description:"Un-dismiss diagnostic findings so the next report import pushes them again",category:"Task Board"},{name:"TASK_ADD_REPO",description:"Clone an organization repository into the sandbox of the task run calling it",category:"Task Board"}],j50=[{id:"basic-usage",label:"Basic Usage",description:"Tools all org members can access by default",section:"Basic Usage",tools:["COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET","CONNECTION_TEST","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","VIRTUAL_MCP_PLUGIN_CONFIG_GET","VIRTUAL_MCP_LAST_USED_LIST","AUTOMATION_GET","AUTOMATION_LIST","AUTOMATION_RUN_STATS","AI_PROVIDERS_LIST","AI_PROVIDERS_LIST_MODELS","AI_PROVIDERS_ACTIVE","AI_PROVIDER_KEY_LIST","AI_PROVIDER_CREDITS","AI_PROVIDER_TOPUP_URL","LIST_OBJECTS","GET_OBJECT_METADATA","GET_PRESIGNED_URL","PUT_PRESIGNED_URL","FILE_OBJECTS_LIST","ORG_REPO_SYNC_LIST","SANDBOX_START","SANDBOX_DELETE","GITHUB_SEARCH_BRANCHES","GITHUB_PR_STATE","GITHUB_LAST_PUBLISHED_PR","GLOBAL_SEARCH","ORGANIZATION_SETTINGS_GET","USER_GET","BRAND_CONTEXT_LIST","COLLECTION_THREADS_CREATE","COLLECTION_THREADS_LIST","COLLECTION_THREADS_GET","COLLECTION_THREADS_UPDATE","COLLECTION_THREADS_DELETE","COLLECTION_THREAD_MESSAGES_LIST","TASK_BOARD_ITEM_CREATE","TASK_BOARD_ITEM_LIST","TASK_BOARD_ITEM_UPDATE","TASK_BOARD_ITEM_DELETE","TASK_BOARD_AUTOMATION_LIST","TASK_BOARD_AUTOMATION_UPSERT","TASK_BOARD_AUTOMATION_DELETE","TASK_BOARD_COLUMN_ROLE_SET","TASK_BOARD_ITEM_PRS_GET","TASK_BOARD_ITEM_PR_LINK","TASK_BOARD_ITEM_RERUN","TASK_BOARD_REVIEW_DECISION","TASK_BOARD_PROMOTE_TO_PRODUCTION","TASK_BOARD_ACTIVITY_LIST","TASK_BOARD_COMMENT_LIST","TASK_BOARD_COMMENT_CREATE","TASK_BOARD_COMMENT_UPDATE","TASK_BOARD_COMMENT_DELETE","TASK_BOARD_DISMISSED_LIST","TASK_BOARD_DISMISSED_RESTORE","NOTIFICATION_LIST","NOTIFICATION_MARK_READ","NOTIFICATION_SUBSCRIPTION_SET","NOTIFICATION_SUBSCRIPTION_LIST"]},{id:"org:manage",label:"Manage organization",description:"Edit organization settings, brand context, and domain configuration",section:"Organization",tools:["ORGANIZATION_GET","ORGANIZATION_LIST","ORGANIZATION_UPDATE","ORGANIZATION_SETTINGS_GET","ORGANIZATION_SETTINGS_UPDATE","BRAND_CONTEXT_LIST","BRAND_CONTEXT_GET","BRAND_CONTEXT_CREATE","BRAND_CONTEXT_UPDATE","BRAND_CONTEXT_DELETE","BRAND_CONTEXT_EXTRACT","BRAND_GET","BRAND_LIST","ORGANIZATION_DOMAIN_LIST","ORGANIZATION_DOMAIN_ADD","ORGANIZATION_DOMAIN_UPDATE","ORGANIZATION_DOMAIN_VERIFY","ORGANIZATION_DOMAIN_REMOVE","JIRA_INTEGRATION_GET","JIRA_INTEGRATION_UPSERT","JIRA_INTEGRATION_DELETE","JIRA_BOARDS_LIST","JIRA_BOARD_COLUMNS_LIST","JIRA_SYNC_RUN","JIRA_RESYNC_REQUEST"]},{id:"members:manage",label:"Manage members",description:"Invite members, remove them, and change their roles",section:"Organization",tools:["ORGANIZATION_MEMBER_LIST","ORGANIZATION_MEMBER_ADD","ORGANIZATION_MEMBER_REMOVE","ORGANIZATION_MEMBER_UPDATE_ROLE","ORGANIZATION_BILLING_CHECKOUT_START","ORGANIZATION_BILLING_PORTAL","ORGANIZATION_TASK_QUOTA_GET","INFRA_BILLING_SITES_LIST","INFRA_BILLING_GET","INFRA_BILLING_PORTAL","ORGANIZATION_JOIN_REQUEST_LIST","ORGANIZATION_JOIN_REQUEST_APPROVE","ORGANIZATION_JOIN_REQUEST_DENY"],dangerous:!0},{id:"connections:manage",label:"Manage connections",description:"Create, update, and delete connections",section:"Connections & Agents",tools:["COLLECTION_CONNECTIONS_CREATE","COLLECTION_CONNECTIONS_UPDATE","COLLECTION_CONNECTIONS_DELETE","COMMERCE_DISCOVERY_SETUP","COMMERCE_DISCOVERY_RUN","COMMERCE_DISCOVERY_BIND","COMMERCE_DISCOVERY_CONNECTION_STATUS"],dangerous:!0},{id:"agents:manage",label:"Manage agents",description:"Create, configure, and delete agents",section:"Connections & Agents",tools:["COLLECTION_VIRTUAL_MCP_CREATE","COLLECTION_VIRTUAL_MCP_UPDATE","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE","VIRTUAL_MCP_PINNED_VIEWS_UPDATE"],dangerous:!0},{id:"automations:manage",label:"Manage automations",description:"Create, update, run, and delete automations",section:"Automations",tools:["AUTOMATION_CREATE","AUTOMATION_UPDATE","AUTOMATION_DELETE","AUTOMATION_TRIGGER_ADD","AUTOMATION_TRIGGER_REMOVE","AUTOMATION_TRIGGER_ROTATE_TOKEN","AUTOMATION_RUN"],dangerous:!0},{id:"monitoring:view",label:"View monitoring",description:"Access logs and usage statistics",section:"Monitoring",tools:["MONITORING_HEATMAP","MONITORING_LOG_GET","MONITORING_LOGS_LIST","MONITORING_STATS","MONITORING_THREAD_USAGE"]},{id:"secrets:manage",label:"Manage secrets",description:"Create and list secrets stored in the credential vault",section:"Organization",tools:["SECRET_CREATE","SECRET_LIST"]},{id:"file-configs:manage",label:"Manage file configs",description:"Create, list, update and delete S3 bucket configurations and synced GitHub repositories",section:"Organization",tools:["FILE_CONFIG_CREATE","FILE_CONFIG_LIST","FILE_CONFIG_UPDATE","FILE_CONFIG_DELETE","FILE_OBJECTS_LIST","FILE_OBJECT_DELETE","ORG_REPO_SYNC_CREATE","ORG_REPO_SYNC_LIST","ORG_REPO_SYNC_UPDATE","ORG_REPO_SYNC_DELETE","ORG_REPO_SYNC_RUN"]},{id:"ai-providers:manage",label:"Manage AI providers",description:"Add or remove API keys and provision provider credentials",section:"AI Providers",tools:["AI_PROVIDER_KEY_CREATE","AI_PROVIDER_KEY_LIST","AI_PROVIDER_KEY_DELETE","AI_PROVIDER_KEY_UPDATE","AI_PROVIDER_KEY_PREVIEW","AI_PROVIDER_OAUTH_URL","AI_PROVIDER_OAUTH_EXCHANGE","AI_PROVIDER_PROVISION_KEY","AI_PROVIDER_TOPUP_URL","AI_PROVIDER_CREDITS","CLAUDE_SUBSCRIPTION_CONNECT","CLAUDE_SUBSCRIPTION_STATUS","CLAUDE_SUBSCRIPTION_DISCONNECT"]},{id:"tags:manage",label:"Manage tags",description:"Create, assign, and delete organization tags",section:"Organization",tools:["TAGS_LIST","TAGS_CREATE","TAGS_DELETE","MEMBER_TAGS_GET","MEMBER_TAGS_SET"]},{id:"registry:manage",label:"Manage registry",description:"Browse, publish, and manage items in the registry",section:"Store & Registry",tools:["COLLECTION_REGISTRY_APP_LIST","COLLECTION_REGISTRY_APP_GET","COLLECTION_REGISTRY_APP_VERSIONS","COLLECTION_REGISTRY_APP_FILTERS","REGISTRY_ITEM_LIST","REGISTRY_ITEM_SEARCH","REGISTRY_ITEM_GET","REGISTRY_ITEM_VERSIONS","REGISTRY_ITEM_FILTERS","REGISTRY_DISCOVER_TOOLS","REGISTRY_ITEM_CREATE","REGISTRY_ITEM_BULK_CREATE","REGISTRY_ITEM_UPDATE","REGISTRY_ITEM_DELETE","REGISTRY_AI_GENERATE","REGISTRY_PUBLISH_REQUEST_LIST","REGISTRY_PUBLISH_REQUEST_REVIEW","REGISTRY_PUBLISH_REQUEST_COUNT","REGISTRY_PUBLISH_REQUEST_DELETE","REGISTRY_PUBLISH_API_KEY_GENERATE","REGISTRY_PUBLISH_API_KEY_LIST","REGISTRY_PUBLISH_API_KEY_REVOKE"],dangerous:!0},{id:"registry:monitor",label:"Monitor registry health",description:"Run health checks on registry connections and view results",section:"Store & Registry",tools:["REGISTRY_MONITOR_RUN_START","REGISTRY_MONITOR_RUN_LIST","REGISTRY_MONITOR_RUN_GET","REGISTRY_MONITOR_RUN_CANCEL","REGISTRY_MONITOR_RESULT_LIST","REGISTRY_MONITOR_CONNECTION_LIST","REGISTRY_MONITOR_CONNECTION_SYNC","REGISTRY_MONITOR_CONNECTION_UPDATE_AUTH"]},{id:"api-keys:manage",label:"Manage API keys",description:"Create, update, and revoke API keys",section:"Developer",tools:["API_KEY_CREATE","API_KEY_LIST","API_KEY_UPDATE","API_KEY_DELETE"]},{id:"storage:delete",label:"Delete from storage",description:"Permanently delete files from object storage",section:"Developer",tools:["DELETE_OBJECT","DELETE_OBJECTS"],dangerous:!0},{id:"connections:sql",label:"Run SQL queries",description:"Execute raw SQL against connected databases",section:"Developer",tools:["DATABASES_RUN_SQL"],dangerous:!0}],_m1=new Set([...j50.find(($)=>$.id==="basic-usage")?.tools??[],"ORG_FS_READ","ORG_FS_WRITE"]),Qi8=["agents:manage","connections:manage"],z50=new Set(j50.filter(($)=>Qi8.includes($.id)).flatMap(($)=>$.tools))});function o7($){if(!$)return!1;return $.split(",").some((X)=>Bi.includes(X))}function P50($,Z){let X=Array.isArray(Z)?Z:[Z];if(X.length===0)return!1;let Q=$?$.split(","):[];if(Q.includes("owner"))return!0;if(Q.includes("admin"))return X.every((Y)=>Y!=="owner");return!1}var fx,Bi;var VQ=D(()=>{fx=["owner","admin","user"],Bi=["owner","admin"]});class tw{userId;toolName;boundAuth;role;connectionId;getToolMeta;organizationId;trustPublicPrefix;_granted=!1;constructor($,Z,X,Q,Y="self",G,J,W=!0){this.userId=$;this.toolName=Z;this.boundAuth=X;this.role=Q;this.connectionId=Y;this.getToolMeta=G;this.organizationId=J;this.trustPublicPrefix=W}setToolName($){this.toolName=$}setOrganizationId($){this.organizationId=$}getOrganizationId(){return this.organizationId}setRole($){this.role=$}getRole(){return this.role}grant(){this._granted=!0}async check(...$){if(this._granted)return;if(this.trustPublicPrefix&&(this.toolName?.startsWith("STUDIO_PUBLIC_")||this.toolName?.startsWith("MESH_PUBLIC_"))){this.grant();return}if(!this.userId&&!this.boundAuth){if(this.getToolMeta&&await this.isToolPublic()){this.grant();return}throw new bx("Authentication required. Please provide a valid OAuth token or API key.")}let Z=$.length>0?$:this.toolName?[this.toolName]:[];if(Z.length===0)throw new AH("No resources specified for access check");for(let X of Z)if(await this.checkResource(X)){this.grant();return}throw new AH(`Access denied to: ${Z.join(", ")}`)}async checkResource($){if(!this.userId&&!this.boundAuth)return!1;return this.boundAuth?.isApiKeyPrincipal?this.checkApiKeyAccess($):this.checkMemberAccess($)}async checkApiKeyAccess($){if(!this.boundAuth)return!1;return this.boundAuth.hasPermission({[this.connectionId]:[$]})}async checkMemberAccess($){if(this.userId&&this.role&&_m1.has($))return!0;if(o7(this.role))return!0;if(!this.boundAuth)return!1;return this.boundAuth.hasPermission({[this.connectionId]:[$]},{organizationId:this.organizationId,role:this.role})}async isToolPublic(){if(this.trustPublicPrefix&&(this.toolName?.startsWith("STUDIO_PUBLIC_")||this.toolName?.startsWith("MESH_PUBLIC_")))return!0;if(!this.getToolMeta)return!1;try{let $=await this.getToolMeta();if(!$)return!1;let X=$K($)?.public_tool;return X===!0||X==="true"}catch{return!1}}granted(){return this._granted}}var bx,AH;var ow=D(()=>{vx();VQ();bx=class bx extends Error{constructor($){super($);this.name="UnauthorizedError"}};AH=class AH extends Error{constructor($){super($);this.name="ForbiddenError"}}});function fm1($){let Z={};for(let X of Object.keys($))Z[X]=["*"];return Z}function fZ($){let Z=$?.metadata;if(!Z)return!1;try{return(typeof Z==="string"?JSON.parse(Z):Z).archived===!0}catch{return!1}}function A50($,Z){return $.get(bm1[Z])??$.get(xm1[Z])}function Fu0($,Z,X){$[bm1[Z]]=X,$[xm1[Z]]=X}var bm1,xm1;var Hu0=D(()=>{bm1={token:"x-studio-token",client:"x-studio-client",properties:"x-studio-properties",runMetadata:"x-studio-run-metadata"},xm1={token:"x-mesh-token",client:"x-mesh-client",properties:"x-mesh-properties",runMetadata:"x-mesh-run-metadata"}});function T50($){let Z=fB.get($);if(!Z||Z.state==="CLOSED")return;if(Z.state==="HALF_OPEN"){if(Z.halfOpenInFlight){if(Date.now()-Z.halfOpenStartedAt<Fh1)throw new xx($,0)}Z.halfOpenInFlight=!0,Z.halfOpenStartedAt=Date.now();return}let X=Date.now()-Z.lastFailureTime;if(X>=sy0){Z.state="HALF_OPEN",Z.halfOpenInFlight=!0,Z.halfOpenStartedAt=Date.now();return}throw new xx($,sy0-X)}function R50($){fB.delete($)}function I50($){let Z=fB.get($);if(!Z){Yi8(),fB.set($,{state:1>=ay0?"OPEN":"CLOSED",consecutiveFailures:1,lastFailureTime:Date.now(),halfOpenInFlight:!1,halfOpenStartedAt:0});return}if(Z.consecutiveFailures++,Z.lastFailureTime=Date.now(),Z.halfOpenInFlight=!1,Z.consecutiveFailures>=ay0)Z.state="OPEN"}function Yi8(){if(fB.size<Y60)return;let $=null,Z=1/0;for(let[X,Q]of fB)if(Q.lastFailureTime<Z)Z=Q.lastFailureTime,$=X;if($)fB.delete($)}var fB,xx;var Nu0=D(()=>{I6();fB=new Map;w$.createObservableGauge("mcp_circuit_breaker.circuits",{description:"MCP connection circuits by state (open, half_open)",unit:"{circuits}"}).addCallback(($)=>{let Z=0,X=0;for(let Q of fB.values())if(Q.state==="OPEN")Z++;else if(Q.state==="HALF_OPEN")X++;$.observe(Z,{state:"open"}),$.observe(X,{state:"half_open"})});xx=class xx extends Error{cooldownRemainingMs;constructor($,Z){super(`Connection ${$} circuit breaker is open \u2014 downstream server unreachable. `+`Retry in ${Math.ceil(Z/1000)}s.`);this.name="CircuitOpenError",this.cooldownRemainingMs=Z}}});var Oi=($,Z)=>{if(Z===null||Z===void 0)return;let X=$.replace(/\[(\w+)\]/g,".$1").split(".").filter(Boolean),Q=Z;for(let Y of X){if(Q===null||Q===void 0||typeof Q!=="object")return;Q=Q[Y]}return Q};function q50($){let Z=$.split("::");if(Z.length!==2||!Z[0]||!Z[1])throw Error(`Invalid scope format: ${$}. Expected format: "KEY::SCOPE"`);return Z}function Gi8($){try{return q50($)}catch{return null}}function Ji8($){if(typeof $==="object"&&$!==null&&"value"in $){let Z=$.value;if(typeof Z==="string")return Z}return null}function Uu0($,Z){let X={};if(!$||!Z)return X;for(let Q of Z){if(Q==="*"){X["*"]=["*"];continue}let Y=Gi8(Q);if(!Y)continue;let[G,J]=Y,W=Oi(G,$),K=Ji8(W);if(K){if(!X[K])X[K]=[];X[K].push(J)}}return X}function ym1($,Z){let X=Uu0($,Z);return new Set(Object.keys(X).filter((Q)=>Q!=="*"))}var Bu0=()=>{};async function gm1($){if(!$.refreshToken)return{success:!1,permanent:!1,error:"No refresh token available"};if(!$.tokenEndpoint)return{success:!1,permanent:!1,error:"No token endpoint available"};if(!$.clientId)return{success:!1,permanent:!1,error:"No client ID available"};try{let Z=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refreshToken,client_id:$.clientId});if($.clientSecret)Z.set("client_secret",$.clientSecret);if($.scope)Z.set("scope",$.scope);let X=await fetch($.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:Z.toString(),signal:AbortSignal.timeout(1e4)});if(!X.ok){let G=await X.text(),J,W;try{let F=JSON.parse(G);if(typeof F.error==="string")J=F.error;if(typeof F.error_description==="string")W=F.error_description}catch{}let K=X.status===400&&!!J&&Wi8.has(J);return(K?console.error:console.warn)("[TokenRefresh] refresh failed",{connectionId:$.connectionId,tokenEndpoint:$.tokenEndpoint,status:X.status,errorCode:J,errorDescription:W,permanent:K}),{success:!1,permanent:K,status:X.status,errorCode:J,error:W||J||`Token refresh failed: ${X.status}`}}let Q=await X.json();if(typeof Q.access_token!=="string"||!Q.access_token)return console.warn("[TokenRefresh] 200 response missing access_token",{connectionId:$.connectionId,tokenEndpoint:$.tokenEndpoint}),{success:!1,permanent:!1,status:X.status,error:"Token endpoint returned no access_token"};let Y;if(Q.expires_in!==void 0){let G=Number(Q.expires_in);if(Number.isFinite(G)&&G>=0&&G<=3153600000)Y=G;else console.warn("[TokenRefresh] ignoring malformed expires_in",{connectionId:$.connectionId,tokenEndpoint:$.tokenEndpoint,expiresIn:Q.expires_in})}return{success:!0,accessToken:Q.access_token,refreshToken:typeof Q.refresh_token==="string"&&Q.refresh_token?Q.refresh_token:$.refreshToken,expiresIn:Y,scope:typeof Q.scope==="string"?Q.scope:void 0}}catch(Z){return console.warn("[TokenRefresh] network/parse error",{connectionId:$.connectionId,tokenEndpoint:$.tokenEndpoint,message:Z instanceof Error?Z.message:String(Z)}),{success:!1,permanent:!1,error:Z instanceof Error?Z.message:"Token refresh failed"}}}var Wi8;var hm1=D(()=>{Wi8=new Set(["invalid_grant","bad_refresh_token"])});var Ou0=($,Z,X)=>{return(Q,Y)=>{let G=-1;return J(0);async function J(W){if(W<=G)throw Error("next() called multiple times");G=W;let K,F=!1,H;if($[W])H=$[W][0][0],Q.req.routeIndex=W;else H=W===$.length&&Y||void 0;if(H)try{K=await H(Q,()=>J(W+1))}catch(N){if(N instanceof Error&&Z)Q.error=N,K=await Z(N,Q),F=!0;else throw N}else if(Q.finalized===!1&&X)K=await X(Q);if(K&&(Q.finalized===!1||F))Q.res=K;return Q}}};var um1=()=>{};var Z$;var P3=D(()=>{Z$=class extends Error{res;status;constructor($=500,Z){super(Z?.message,{cause:Z?.cause});this.res=Z?.res,this.status=$}getResponse(){if(this.res)return new Response(this.res.body,{status:this.status,headers:this.res.headers});return new Response(this.message,{status:this.status})}}});var cm1;var lm1=D(()=>{cm1=Symbol()});async function Ki8($,Z){let X=await $.formData();if(X)return Fi8(X,Z);return{}}function Fi8($,Z){let X=Object.create(null);if($.forEach((Q,Y)=>{if(!(Z.all||Y.endsWith("[]")))X[Y]=Q;else Hi8(X,Y,Q)}),Z.dot)Object.entries(X).forEach(([Q,Y])=>{if(Q.includes("."))Ni8(X,Q,Y),delete X[Q]});return X}var dm1=async($,Z=Object.create(null))=>{let{all:X=!1,dot:Q=!1}=Z,G=($ instanceof M50?$.raw.headers:$.headers).get("Content-Type");if(G?.startsWith("multipart/form-data")||G?.startsWith("application/x-www-form-urlencoded"))return Ki8($,{all:X,dot:Q});return{}},Hi8=($,Z,X)=>{if($[Z]!==void 0)if(Array.isArray($[Z]))$[Z].push(X);else $[Z]=[$[Z],X];else if(!Z.endsWith("[]"))$[Z]=X;else $[Z]=[X]},Ni8=($,Z,X)=>{if(/(?:^|\.)__proto__\./.test(Z))return;let Q=$,Y=Z.split(".");Y.forEach((G,J)=>{if(J===Y.length-1)Q[G]=X;else{if(!Q[G]||typeof Q[G]!=="object"||Array.isArray(Q[G])||Q[G]instanceof File)Q[G]=Object.create(null);Q=Q[G]}})};var mm1=D(()=>{Du0()});var wu0=($)=>{let Z=$.split("/");if(Z[0]==="")Z.shift();return Z},im1=($)=>{let{groups:Z,path:X}=Ui8($),Q=wu0(X);return Bi8(Q,Z)},Ui8=($)=>{let Z=[];return $=$.replace(/\{[^}]+\}/g,(X,Q)=>{let Y=`@${Q}`;return Z.push([Y,X]),Y}),{groups:Z,path:$}},Bi8=($,Z)=>{for(let X=Z.length-1;X>=0;X--){let[Q]=Z[X];for(let Y=$.length-1;Y>=0;Y--)if($[Y].includes(Q)){$[Y]=$[Y].replace(Q,Z[X][1]);break}}return $},k50,pm1=($,Z)=>{if($==="*")return"*";let X=$.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(X){let Q=`${$}#${Z}`;if(!k50[Q])if(X[2])k50[Q]=Z&&Z[0]!==":"&&Z[0]!=="*"?[Q,X[1],new RegExp(`^${X[2]}(?=/${Z})`)]:[$,X[1],new RegExp(`^${X[2]}$`)];else k50[Q]=[$,X[1],!0];return k50[Q]}return null},yx=($,Z)=>{try{return Z($)}catch{return $.replace(/(?:%[0-9A-Fa-f]{2})+/g,(X)=>{try{return Z(X)}catch{return X}})}},nm1=($)=>yx($,decodeURI),Eu0=($)=>{let Z=$.url,X=Z.indexOf("/",Z.indexOf(":")+4),Q=X;for(;Q<Z.length;Q++){let Y=Z.charCodeAt(Q);if(Y===37){let G=Z.indexOf("?",Q),J=Z.indexOf("#",Q),W=G===-1?J===-1?void 0:J:J===-1?G:Math.min(G,J),K=Z.slice(X,W);return nm1(K.includes("%25")?K.replace(/%25/g,"%2525"):K)}else if(Y===63||Y===35)break}return Z.slice(X,Q)},tm1=($)=>{let Z=Eu0($);return Z.length>1&&Z.at(-1)==="/"?Z.slice(0,-1):Z},rw=($,Z,...X)=>{if(X.length)Z=rw(Z,...X);return`${$?.[0]==="/"?"":"/"}${$}${Z==="/"?"":`${$?.at(-1)==="/"?"":"/"}${Z?.[0]==="/"?Z.slice(1):Z}`}`},V50=($)=>{if($.charCodeAt($.length-1)!==63||!$.includes(":"))return null;let Z=$.split("/"),X=[],Q="";return Z.forEach((Y)=>{if(Y!==""&&!/\:/.test(Y))Q+="/"+Y;else if(/\:/.test(Y))if(/\?/.test(Y)){if(X.length===0&&Q==="")X.push("/");else X.push(Q);let G=Y.replace("?","");Q+="/"+G,X.push(Q)}else Q+="/"+Y}),X.filter((Y,G,J)=>J.indexOf(Y)===G)},Lu0=($)=>{if(!/[%+]/.test($))return $;if($.indexOf("+")!==-1)$=$.replace(/\+/g," ");return $.indexOf("%")!==-1?yx($,Di):$},om1=($,Z,X)=>{let Q;if(!X&&Z&&!/[%+]/.test(Z)){let J=$.indexOf("?",8);if(J===-1)return;if(!$.startsWith(Z,J+1))J=$.indexOf(`&${Z}`,J+1);while(J!==-1){let W=$.charCodeAt(J+Z.length+1);if(W===61){let K=J+Z.length+2,F=$.indexOf("&",K);return Lu0($.slice(K,F===-1?void 0:F))}else if(W==38||isNaN(W))return"";J=$.indexOf(`&${Z}`,J+1)}if(Q=/[%+]/.test($),!Q)return}let Y={};Q??=/[%+]/.test($);let G=$.indexOf("?",8);while(G!==-1){let J=$.indexOf("&",G+1),W=$.indexOf("=",G);if(W>J&&J!==-1)W=-1;let K=$.slice(G+1,W===-1?J===-1?void 0:J:W);if(Q)K=Lu0(K);if(G=J,K==="")continue;let F;if(W===-1)F="";else if(F=$.slice(W+1,J===-1?void 0:J),Q)F=Lu0(F);if(X){if(!(Y[K]&&Array.isArray(Y[K])))Y[K]=[];Y[K].push(F)}else Y[K]??=F}return Z?Y[Z]:Y},rm1,am1=($,Z)=>{return om1($,Z,!0)},Di;var bB=D(()=>{k50={},rm1=om1,Di=decodeURIComponent});var sm1=($)=>yx($,Di),M50;var Du0=D(()=>{P3();lm1();mm1();bB();M50=class{raw;#$;#Z;routeIndex=0;path;bodyCache={};constructor($,Z="/",X=[[]]){this.raw=$,this.path=Z,this.#Z=X,this.#$={}}param($){return $?this.#X($):this.#G()}#X($){let Z=this.#Z[0][this.routeIndex][1][$],X=this.#Y(Z);return X&&/\%/.test(X)?sm1(X):X}#G(){let $={},Z=Object.keys(this.#Z[0][this.routeIndex][1]);for(let X of Z){let Q=this.#Y(this.#Z[0][this.routeIndex][1][X]);if(Q!==void 0)$[X]=/\%/.test(Q)?sm1(Q):Q}return $}#Y($){return this.#Z[1]?this.#Z[1][$]:$}query($){return rm1(this.url,$)}queries($){return am1(this.url,$)}header($){if($)return this.raw.headers.get($)??void 0;let Z={};return this.raw.headers.forEach((X,Q)=>{Z[Q]=X}),Z}async parseBody($){return dm1(this,$)}#Q=($)=>{let{bodyCache:Z,raw:X}=this,Q=Z[$];if(Q)return Q;let Y=Object.keys(Z)[0];if(Y)return Z[Y].then((G)=>{if(Y==="json")G=JSON.stringify(G);return new Response(G)[$]()});return Z[$]=X[$]()};json(){return this.#Q("text").then(($)=>JSON.parse($))}text(){return this.#Q("text")}arrayBuffer(){return this.#Q("arrayBuffer")}blob(){return this.#Q("blob")}formData(){return this.#Q("formData")}addValidatedData($,Z){this.#$[$]=Z}valid($){return this.#$[$]}get url(){return this.raw.url}get method(){return this.raw.method}get[cm1](){return this.#Z}get matchedRoutes(){return this.#Z[0].map(([[,$]])=>$)}get routePath(){return this.#Z[0].map(([[,$]])=>$)[this.routeIndex].path}}});var S50,em1=($,Z)=>{let X=new String($);return X.isEscaped=!0,X.callbacks=Z,X},Li=async($,Z,X,Q,Y)=>{if(typeof $==="object"&&!($ instanceof String)){if(!($ instanceof Promise))$=$.toString();if($ instanceof Promise)$=await $}let G=$.callbacks;if(!G?.length)return Promise.resolve($);if(Y)Y[0]+=$;else Y=[$];let J=Promise.all(G.map((W)=>W({phase:Z,buffer:Y,context:Q}))).then((W)=>Promise.all(W.filter(Boolean).map((K)=>Li(K,Z,!1,Q,Y))).then(()=>Y[0]));if(X)return em1(await J,G);else return J};var C50=D(()=>{S50={Stringify:1,BeforeStream:2,Stream:3}});var $i1="text/plain; charset=UTF-8",ju0=($,Z)=>{return{"Content-Type":$,...Z}},wi=($,Z)=>new Response($,Z),Zi1=class{#$;#Z;env={};#X;finalized=!1;error;#G;#Y;#Q;#J;#W;#K;#H;#N;#U;constructor($,Z){if(this.#$=$,Z)this.#Y=Z.executionCtx,this.env=Z.env,this.#K=Z.notFoundHandler,this.#U=Z.path,this.#N=Z.matchResult}get req(){return this.#Z??=new M50(this.#$,this.#U,this.#N),this.#Z}get event(){if(this.#Y&&"respondWith"in this.#Y)return this.#Y;else throw Error("This context has no FetchEvent")}get executionCtx(){if(this.#Y)return this.#Y;else throw Error("This context has no ExecutionContext")}get res(){return this.#Q||=wi(null,{headers:this.#H??=new Headers})}set res($){if(this.#Q&&$){$=wi($.body,$);for(let[Z,X]of this.#Q.headers.entries()){if(Z==="content-type")continue;if(Z==="set-cookie"){let Q=this.#Q.headers.getSetCookie();$.headers.delete("set-cookie");for(let Y of Q)$.headers.append("set-cookie",Y)}else $.headers.set(Z,X)}}this.#Q=$,this.finalized=!0}render=(...$)=>{return this.#W??=(Z)=>this.html(Z),this.#W(...$)};setLayout=($)=>this.#J=$;getLayout=()=>this.#J;setRenderer=($)=>{this.#W=$};header=($,Z,X)=>{if(this.finalized)this.#Q=wi(this.#Q.body,this.#Q);let Q=this.#Q?this.#Q.headers:this.#H??=new Headers;if(Z===void 0)Q.delete($);else if(X?.append)Q.append($,Z);else Q.set($,Z)};status=($)=>{this.#G=$};set=($,Z)=>{this.#X??=new Map,this.#X.set($,Z)};get=($)=>{return this.#X?this.#X.get($):void 0};get var(){if(!this.#X)return{};return Object.fromEntries(this.#X)}#F($,Z,X){let Q=this.#Q?new Headers(this.#Q.headers):this.#H??new Headers;if(typeof Z==="object"&&"headers"in Z){let G=Z.headers instanceof Headers?Z.headers:new Headers(Z.headers);for(let[J,W]of G)if(J.toLowerCase()==="set-cookie")Q.append(J,W);else Q.set(J,W)}if(X)for(let[G,J]of Object.entries(X))if(typeof J==="string")Q.set(G,J);else{Q.delete(G);for(let W of J)Q.append(G,W)}let Y=typeof Z==="number"?Z:Z?.status??this.#G;return wi($,{status:Y,headers:Q})}newResponse=(...$)=>this.#F(...$);body=($,Z,X)=>this.#F($,Z,X);text=($,Z,X)=>{return!this.#H&&!this.#G&&!Z&&!X&&!this.finalized?new Response($):this.#F($,Z,ju0($i1,X))};json=($,Z,X)=>{return this.#F(JSON.stringify($),Z,ju0("application/json",X))};html=($,Z,X)=>{let Q=(Y)=>this.#F(Y,Z,ju0("text/html; charset=UTF-8",X));return typeof $==="object"?Li($,S50.Stringify,!1,{}).then(Q):Q($)};redirect=($,Z)=>{let X=String($);return this.header("Location",!/[^\x00-\xFF]/.test(X)?X:encodeURI(X)),this.newResponse(null,Z??302)};notFound=()=>{return this.#K??=()=>wi(),this.#K(this)}};var _50=D(()=>{Du0();C50()});var k6="ALL",Xi1="all",Qi1,v50="Can not add a route since the matcher is already built.",f50;var xB=D(()=>{Qi1=["get","post","put","delete","options","patch"],f50=class extends Error{}});var zu0="__COMPOSED_HANDLER";var Pu0=()=>{};var Oi8=($)=>{return $.text("404 Not Found",404)},Yi1=($,Z)=>{if("getResponse"in $){let X=$.getResponse();return Z.newResponse(X.body,X)}return console.error($),Z.text("Internal Server Error",500)},Gi1=class ${get;post;put;delete;options;patch;all;on;use;router;getPath;_basePath="/";#$="/";routes=[];constructor(Z={}){[...Qi1,Xi1].forEach((G)=>{this[G]=(J,...W)=>{if(typeof J==="string")this.#$=J;else this.#G(G,this.#$,J);return W.forEach((K)=>{this.#G(G,this.#$,K)}),this}}),this.on=(G,J,...W)=>{for(let K of[J].flat()){this.#$=K;for(let F of[G].flat())W.map((H)=>{this.#G(F.toUpperCase(),this.#$,H)})}return this},this.use=(G,...J)=>{if(typeof G==="string")this.#$=G;else this.#$="*",J.unshift(G);return J.forEach((W)=>{this.#G(k6,this.#$,W)}),this};let{strict:Q,...Y}=Z;Object.assign(this,Y),this.getPath=Q??!0?Z.getPath??Eu0:tm1}#Z(){let Z=new $({router:this.router,getPath:this.getPath});return Z.errorHandler=this.errorHandler,Z.#X=this.#X,Z.routes=this.routes,Z}#X=Oi8;errorHandler=Yi1;route(Z,X){let Q=this.basePath(Z);return X.routes.map((Y)=>{let G;if(X.errorHandler===Yi1)G=Y.handler;else G=async(J,W)=>(await Ou0([],X.errorHandler)(J,()=>Y.handler(J,W))).res,G[zu0]=Y.handler;Q.#G(Y.method,Y.path,G)}),this}basePath(Z){let X=this.#Z();return X._basePath=rw(this._basePath,Z),X}onError=(Z)=>{return this.errorHandler=Z,this};notFound=(Z)=>{return this.#X=Z,this};mount(Z,X,Q){let Y,G;if(Q)if(typeof Q==="function")G=Q;else if(G=Q.optionHandler,Q.replaceRequest===!1)Y=(K)=>K;else Y=Q.replaceRequest;let J=G?(K)=>{let F=G(K);return Array.isArray(F)?F:[F]}:(K)=>{let F=void 0;try{F=K.executionCtx}catch{}return[K.env,F]};Y||=(()=>{let K=rw(this._basePath,Z),F=K==="/"?0:K.length;return(H)=>{let N=new URL(H.url);return N.pathname=N.pathname.slice(F)||"/",new Request(N,H)}})();let W=async(K,F)=>{let H=await X(Y(K.req.raw),...J(K));if(H)return H;await F()};return this.#G(k6,rw(Z,"*"),W),this}#G(Z,X,Q){Z=Z.toUpperCase(),X=rw(this._basePath,X);let Y={basePath:this._basePath,path:X,method:Z,handler:Q};this.router.add(Z,X,[Q,Y]),this.routes.push(Y)}#Y(Z,X){if(Z instanceof Error)return this.errorHandler(Z,X);throw Z}#Q(Z,X,Q,Y){if(Y==="HEAD")return(async()=>new Response(null,await this.#Q(Z,X,Q,"GET")))();let G=this.getPath(Z,{env:Q}),J=this.router.match(Y,G),W=new Zi1(Z,{path:G,matchResult:J,env:Q,executionCtx:X,notFoundHandler:this.#X});if(J[0].length===1){let F;try{F=J[0][0][0][0](W,async()=>{W.res=await this.#X(W)})}catch(H){return this.#Y(H,W)}return F instanceof Promise?F.then((H)=>H||(W.finalized?W.res:this.#X(W))).catch((H)=>this.#Y(H,W)):F??this.#X(W)}let K=Ou0(J[0],this.errorHandler,this.#X);return(async()=>{try{let F=await K(W);if(!F.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return F.res}catch(F){return this.#Y(F,W)}})()}fetch=(Z,...X)=>{return this.#Q(Z,X[1],X[0],Z.method)};request=(Z,X,Q,Y)=>{if(Z instanceof Request)return this.fetch(X?new Request(Z,X):Z,Q,Y);return Z=Z.toString(),this.fetch(new Request(/^https?:\/\//.test(Z)?Z:`http://localhost${rw("/",Z)}`,X),Q,Y)};fire=()=>{addEventListener("fetch",(Z)=>{Z.respondWith(this.#Q(Z.request,Z,void 0,Z.request.method))})}};var Ji1=D(()=>{um1();_50();xB();Pu0();bB()});function b50($,Z){let X=this.buildAllMatchers(),Q=(Y,G)=>{let J=X[Y]||X[k6],W=J[2][G];if(W)return W;let K=G.match(J[0]);if(!K)return[[],Ei];let F=K.indexOf("",1);return[J[1][F],K]};return this.match=Q,Q($,Z)}var Ei;var Au0=D(()=>{xB();Ei=[]});function Li8($,Z){if($.length===1)return Z.length===1?$<Z?-1:1:-1;if(Z.length===1)return 1;if($===ji||$===zi)return 1;else if(Z===ji||Z===zi)return-1;if($===x50)return 1;else if(Z===x50)return-1;return $.length===Z.length?$<Z?-1:1:Z.length-$.length}var x50="[^/]+",ji=".*",zi="(?:|/.*)",aw,Di8,Wi1=class ${#$;#Z;#X=Object.create(null);insert(Z,X,Q,Y,G){if(Z.length===0){if(this.#$!==void 0)throw aw;if(G)return;this.#$=X;return}let[J,...W]=Z,K=J==="*"?W.length===0?["","",ji]:["","",x50]:J==="/*"?["","",zi]:J.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),F;if(K){let H=K[1],N=K[2]||x50;if(H&&K[2]){if(N===".*")throw aw;if(N=N.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(N))throw aw}if(F=this.#X[N],!F){if(Object.keys(this.#X).some((U)=>U!==ji&&U!==zi))throw aw;if(G)return;if(F=this.#X[N]=new $,H!=="")F.#Z=Y.varIndex++}if(!G&&H!=="")Q.push([H,F.#Z])}else if(F=this.#X[J],!F){if(Object.keys(this.#X).some((H)=>H.length>1&&H!==ji&&H!==zi))throw aw;if(G)return;F=this.#X[J]=new $}F.insert(W,X,Q,Y,G)}buildRegExpStr(){let X=Object.keys(this.#X).sort(Li8).map((Q)=>{let Y=this.#X[Q];return(typeof Y.#Z==="number"?`(${Q})@${Y.#Z}`:Di8.has(Q)?`\\${Q}`:Q)+Y.buildRegExpStr()});if(typeof this.#$==="number")X.unshift(`#${this.#$}`);if(X.length===0)return"";if(X.length===1)return X[0];return"(?:"+X.join("|")+")"}};var Tu0=D(()=>{aw=Symbol(),Di8=new Set(".\\+*[^]$()")});var Ki1=class{#$={varIndex:0};#Z=new Wi1;insert($,Z,X){let Q=[],Y=[];for(let J=0;;){let W=!1;if($=$.replace(/\{[^}]+\}/g,(K)=>{let F=`@\\${J}`;return Y[J]=[F,K],J++,W=!0,F}),!W)break}let G=$.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let J=Y.length-1;J>=0;J--){let[W]=Y[J];for(let K=G.length-1;K>=0;K--)if(G[K].indexOf(W)!==-1){G[K]=G[K].replace(W,Y[J][1]);break}}return this.#Z.insert(G,Z,Q,this.#$,X),Q}buildRegExp(){let $=this.#Z.buildRegExpStr();if($==="")return[/^$/,[],[]];let Z=0,X=[],Q=[];return $=$.replace(/#(\d+)|@(\d+)|\.\*\$/g,(Y,G,J)=>{if(G!==void 0)return X[++Z]=Number(G),"$()";if(J!==void 0)return Q[Number(J)]=++Z,"";return""}),[new RegExp(`^${$}`),X,Q]}};var Fi1=D(()=>{Tu0()});function Ni1($){return Hi1[$]??=new RegExp($==="*"?"":`^${$.replace(/\/\*$|([.\\+*[^\]$()])/g,(Z,X)=>X?`\\${X}`:"(?:|/.*)")}$`)}function Ei8(){Hi1=Object.create(null)}function ji8($){let Z=new Ki1,X=[];if($.length===0)return wi8;let Q=$.map((F)=>[!/\*|\/:/.test(F[0]),...F]).sort(([F,H],[N,U])=>F?1:N?-1:H.length-U.length),Y=Object.create(null);for(let F=0,H=-1,N=Q.length;F<N;F++){let[U,B,O]=Q[F];if(U)Y[B]=[O.map(([w])=>[w,Object.create(null)]),Ei];else H++;let L;try{L=Z.insert(B,H,U)}catch(w){throw w===aw?new f50(B):w}if(U)continue;X[H]=O.map(([w,E])=>{let j=Object.create(null);E-=1;for(;E>=0;E--){let[z,A]=L[E];j[z]=A}return[w,j]})}let[G,J,W]=Z.buildRegExp();for(let F=0,H=X.length;F<H;F++)for(let N=0,U=X[F].length;N<U;N++){let B=X[F][N]?.[1];if(!B)continue;let O=Object.keys(B);for(let L=0,w=O.length;L<w;L++)B[O[L]]=W[B[O[L]]]}let K=[];for(let F in J)K[F]=X[J[F]];return[G,K,Y]}function gx($,Z){if(!$)return;for(let X of Object.keys($).sort((Q,Y)=>Y.length-Q.length))if(Ni1(X).test(Z))return[...$[X]];return}var wi8,Hi1,y50=class{name="RegExpRouter";#$;#Z;constructor(){this.#$={[k6]:Object.create(null)},this.#Z={[k6]:Object.create(null)}}add($,Z,X){let Q=this.#$,Y=this.#Z;if(!Q||!Y)throw Error(v50);if(!Q[$])[Q,Y].forEach((W)=>{W[$]=Object.create(null),Object.keys(W[k6]).forEach((K)=>{W[$][K]=[...W[k6][K]]})});if(Z==="/*")Z="*";let G=(Z.match(/\/:/g)||[]).length;if(/\*$/.test(Z)){let W=Ni1(Z);if($===k6)Object.keys(Q).forEach((K)=>{Q[K][Z]||=gx(Q[K],Z)||gx(Q[k6],Z)||[]});else Q[$][Z]||=gx(Q[$],Z)||gx(Q[k6],Z)||[];Object.keys(Q).forEach((K)=>{if($===k6||$===K)Object.keys(Q[K]).forEach((F)=>{W.test(F)&&Q[K][F].push([X,G])})}),Object.keys(Y).forEach((K)=>{if($===k6||$===K)Object.keys(Y[K]).forEach((F)=>W.test(F)&&Y[K][F].push([X,G]))});return}let J=V50(Z)||[Z];for(let W=0,K=J.length;W<K;W++){let F=J[W];Object.keys(Y).forEach((H)=>{if($===k6||$===H)Y[H][F]||=[...gx(Q[H],F)||gx(Q[k6],F)||[]],Y[H][F].push([X,G-K+W+1])})}}match=b50;buildAllMatchers(){let $=Object.create(null);return Object.keys(this.#Z).concat(Object.keys(this.#$)).forEach((Z)=>{$[Z]||=this.#X(Z)}),this.#$=this.#Z=void 0,Ei8(),$}#X($){let Z=[],X=$===k6;if([this.#$,this.#Z].forEach((Q)=>{let Y=Q[$]?Object.keys(Q[$]).map((G)=>[G,Q[$][G]]):[];if(Y.length!==0)X||=!0,Z.push(...Y);else if($!==k6)Z.push(...Object.keys(Q[k6]).map((G)=>[G,Q[k6][G]]))}),!X)return null;else return ji8(Z)}};var Ru0=D(()=>{xB();bB();Au0();Tu0();Fi1();wi8=[/^$/,[],Object.create(null)],Hi1=Object.create(null)});var zi8=class{name="PreparedRegExpRouter";#$;#Z;constructor($,Z){this.#$=$,this.#Z=Z}#X($,Z){let X=this.#$[$];X[1].forEach((Q)=>Q&&Q.push(Z)),Object.values(X[2]).forEach((Q)=>Q[0].push(Z))}#G($,Z,X,Q,Y){let G=this.#$[$];if(!Y)G[2][Z][0].push([X,{}]);else Q.forEach((J)=>{if(typeof J==="number")G[1][J].push([X,Y]);else G[2][J||Z][0].push([X,Y])})}add($,Z,X){if(!this.#$[$]){let Y=this.#$[k6],G={};for(let J in Y[2])G[J]=[Y[2][J][0].slice(),Ei];this.#$[$]=[Y[0],Y[1].map((J)=>Array.isArray(J)?J.slice():0),G]}if(Z==="/*"||Z==="*"){let Y=[X,{}];if($===k6)for(let G in this.#$)this.#X(G,Y);else this.#X($,Y);return}let Q=this.#Z[Z];if(!Q)throw Error(`Path ${Z} is not registered`);for(let[Y,G]of Q)if($===k6)for(let J in this.#$)this.#G(J,Z,X,Y,G);else this.#G($,Z,X,Y,G)}buildAllMatchers(){return this.#$}match=b50};var Ui1=D(()=>{xB();Au0();Ru0()});var Bi1=D(()=>{Ru0();Ui1()});var Iu0=class{name="SmartRouter";#$=[];#Z=[];constructor($){this.#$=$.routers}add($,Z,X){if(!this.#Z)throw Error(v50);this.#Z.push([$,Z,X])}match($,Z){if(!this.#Z)throw Error("Fatal error");let X=this.#$,Q=this.#Z,Y=X.length,G=0,J;for(;G<Y;G++){let W=X[G];try{for(let K=0,F=Q.length;K<F;K++)W.add(...Q[K]);J=W.match($,Z)}catch(K){if(K instanceof f50)continue;throw K}this.match=W.match.bind(W),this.#$=[W],this.#Z=void 0;break}if(G===Y)throw Error("Fatal error");return this.name=`SmartRouter + ${this.activeRouter.name}`,J}get activeRouter(){if(this.#Z||this.#$.length!==1)throw Error("No active router has been determined yet.");return this.#$[0]}};var Oi1=D(()=>{xB()});var Di1=D(()=>{Oi1()});var Pi,Pi8=($)=>{for(let Z in $)return!0;return!1},Li1=class ${#$;#Z;#X;#G=0;#Y=Pi;constructor(Z,X,Q){if(this.#Z=Q||Object.create(null),this.#$=[],Z&&X){let Y=Object.create(null);Y[Z]={handler:X,possibleKeys:[],score:0},this.#$=[Y]}this.#X=[]}insert(Z,X,Q){this.#G=++this.#G;let Y=this,G=im1(X),J=[];for(let W=0,K=G.length;W<K;W++){let F=G[W],H=G[W+1],N=pm1(F,H),U=Array.isArray(N)?N[0]:F;if(U in Y.#Z){if(Y=Y.#Z[U],N)J.push(N[1]);continue}if(Y.#Z[U]=new $,N)Y.#X.push(N),J.push(N[1]);Y=Y.#Z[U]}return Y.#$.push({[Z]:{handler:Q,possibleKeys:J.filter((W,K,F)=>F.indexOf(W)===K),score:this.#G}}),Y}#Q(Z,X,Q,Y,G){for(let J=0,W=X.#$.length;J<W;J++){let K=X.#$[J],F=K[Q]||K[k6],H={};if(F!==void 0){if(F.params=Object.create(null),Z.push(F),Y!==Pi||G&&G!==Pi)for(let N=0,U=F.possibleKeys.length;N<U;N++){let B=F.possibleKeys[N],O=H[F.score];F.params[B]=G?.[B]&&!O?G[B]:Y[B]??G?.[B],H[F.score]=!0}}}}search(Z,X){let Q=[];this.#Y=Pi;let G=[this],J=wu0(X),W=[],K=J.length,F=null;for(let H=0;H<K;H++){let N=J[H],U=H===K-1,B=[];for(let L=0,w=G.length;L<w;L++){let E=G[L],j=E.#Z[N];if(j)if(j.#Y=E.#Y,U){if(j.#Z["*"])this.#Q(Q,j.#Z["*"],Z,E.#Y);this.#Q(Q,j,Z,E.#Y)}else B.push(j);for(let z=0,A=E.#X.length;z<A;z++){let P=E.#X[z],I=E.#Y===Pi?{}:{...E.#Y};if(P==="*"){let f=E.#Z["*"];if(f)this.#Q(Q,f,Z,E.#Y),f.#Y=I,B.push(f);continue}let[k,M,S]=P;if(!N&&!(S instanceof RegExp))continue;let m=E.#Z[k];if(S instanceof RegExp){if(F===null){F=Array(K);let i=X[0]==="/"?1:0;for(let c=0;c<K;c++)F[c]=i,i+=J[c].length+1}let f=X.substring(F[H]),b=S.exec(f);if(b){if(I[M]=b[0],this.#Q(Q,m,Z,E.#Y,I),Pi8(m.#Z)){m.#Y=I;let i=b[0].match(/\//)?.length??0;(W[i]||=[]).push(m)}continue}}if(S===!0||S.test(N))if(I[M]=N,U){if(this.#Q(Q,m,Z,I,E.#Y),m.#Z["*"])this.#Q(Q,m.#Z["*"],Z,I,E.#Y)}else m.#Y=I,B.push(m)}}let O=W.shift();G=O?B.concat(O):B}if(Q.length>1)Q.sort((H,N)=>{return H.score-N.score});return[Q.map(({handler:H,params:N})=>[H,N])]}};var wi1=D(()=>{xB();bB();Pi=Object.create(null)});var qu0=class{name="TrieRouter";#$;constructor(){this.#$=new Li1}add($,Z,X){let Q=V50(Z);if(Q){for(let Y=0,G=Q.length;Y<G;Y++)this.#$.insert($,Q[Y],X);return}this.#$.insert($,Z,X)}match($,Z){return this.#$.search($,Z)}};var Ei1=D(()=>{bB();wi1()});var ji1=D(()=>{Ei1()});var H1;var Mu0=D(()=>{Ji1();Bi1();Di1();ji1();H1=class extends Gi1{constructor($={}){super($);this.router=$.router??new Iu0({routers:[new y50,new qu0]})}}});var U8=D(()=>{Mu0()});import{z as e4}from"zod";function zi1(){return Ti8.parse(process.env)}var ku0=($)=>e4.enum(["true","false","1","0"]).optional().transform((Z)=>Z===void 0?$:Z==="true"||Z==="1"),Ai8=($)=>e4.string().optional().transform((Z)=>Z?Z.split(",").map((X)=>X.trim()):$),Ti8;var Pi1=D(()=>{Ti8=e4.object({AUTH_EMAIL_PASSWORD_ENABLED:ku0(!0),AUTH_GOOGLE_CLIENT_ID:e4.string().optional(),AUTH_GOOGLE_CLIENT_SECRET:e4.string().optional(),AUTH_GITHUB_CLIENT_ID:e4.string().optional(),AUTH_GITHUB_CLIENT_SECRET:e4.string().optional(),AUTH_RESEND_API_KEY:e4.string().optional(),AUTH_RESEND_FROM_EMAIL:e4.string().optional(),AUTH_SENDGRID_API_KEY:e4.string().optional(),AUTH_SENDGRID_FROM_EMAIL:e4.string().optional(),AUTH_INVITE_EMAIL_PROVIDER:e4.enum(["resend","sendgrid"]).optional(),AUTH_RESET_PASSWORD_EMAIL_PROVIDER:e4.enum(["resend","sendgrid"]).optional(),AUTH_MAGIC_LINK_ENABLED:ku0(!1),AUTH_MAGIC_LINK_EMAIL_PROVIDER:e4.enum(["resend","sendgrid"]).optional(),AUTH_EMAIL_OTP_ENABLED:ku0(!1),AUTH_EMAIL_OTP_EMAIL_PROVIDER:e4.enum(["resend","sendgrid"]).optional(),AUTH_EMAIL_OTP_LENGTH:e4.coerce.number().optional(),AUTH_EMAIL_OTP_EXPIRES_IN:e4.coerce.number().optional(),AUTH_SSO_DOMAIN:e4.string().optional(),AUTH_SSO_MS_TENANT_ID:e4.string().optional(),AUTH_SSO_MS_CLIENT_ID:e4.string().optional(),AUTH_SSO_MS_CLIENT_SECRET:e4.string().optional(),AUTH_SSO_SCOPES:Ai8(["openid","email","profile"]),AUTH_SSO_GOOGLE_CLIENT_ID:e4.string().optional(),AUTH_SSO_GOOGLE_CLIENT_SECRET:e4.string().optional()}).superRefine(($,Z)=>{let X=new Set;if($.AUTH_RESEND_API_KEY)X.add("resend");if($.AUTH_SENDGRID_API_KEY)X.add("sendgrid");let Q=["AUTH_INVITE_EMAIL_PROVIDER","AUTH_RESET_PASSWORD_EMAIL_PROVIDER","AUTH_MAGIC_LINK_EMAIL_PROVIDER","AUTH_EMAIL_OTP_EMAIL_PROVIDER"];for(let Y of Q){let G=$[Y];if(G&&!X.has(G)){let J=G==="resend"?"AUTH_RESEND_API_KEY":"AUTH_SENDGRID_API_KEY";Z.addIssue({code:e4.ZodIssueCode.custom,path:[Y],message:`${Y}="${G}" but ${J} is not set`})}}if($.AUTH_MAGIC_LINK_ENABLED&&X.size===0)Z.addIssue({code:e4.ZodIssueCode.custom,path:["AUTH_MAGIC_LINK_ENABLED"],message:"AUTH_MAGIC_LINK_ENABLED=true requires AUTH_RESEND_API_KEY or AUTH_SENDGRID_API_KEY to be set"});if($.AUTH_EMAIL_OTP_ENABLED&&X.size===0)Z.addIssue({code:e4.ZodIssueCode.custom,path:["AUTH_EMAIL_OTP_ENABLED"],message:"AUTH_EMAIL_OTP_ENABLED=true requires AUTH_RESEND_API_KEY or AUTH_SENDGRID_API_KEY to be set"});if($.AUTH_SSO_MS_CLIENT_ID&&$.AUTH_SSO_DOMAIN){if(!$.AUTH_SSO_MS_CLIENT_SECRET)Z.addIssue({code:e4.ZodIssueCode.custom,path:["AUTH_SSO_MS_CLIENT_SECRET"],message:"AUTH_SSO_MS_CLIENT_ID and AUTH_SSO_DOMAIN are set but AUTH_SSO_MS_CLIENT_SECRET is not"});if(!$.AUTH_SSO_MS_TENANT_ID)Z.addIssue({code:e4.ZodIssueCode.custom,path:["AUTH_SSO_MS_TENANT_ID"],message:"AUTH_SSO_MS_CLIENT_ID and AUTH_SSO_DOMAIN are set but AUTH_SSO_MS_TENANT_ID is not"})}if($.AUTH_SSO_GOOGLE_CLIENT_ID&&$.AUTH_SSO_DOMAIN&&!$.AUTH_SSO_GOOGLE_CLIENT_SECRET)Z.addIssue({code:e4.ZodIssueCode.custom,path:["AUTH_SSO_GOOGLE_CLIENT_SECRET"],message:"AUTH_SSO_GOOGLE_CLIENT_ID and AUTH_SSO_DOMAIN are set but AUTH_SSO_GOOGLE_CLIENT_SECRET is not"});if($.AUTH_EMAIL_OTP_LENGTH!==void 0&&(!Number.isInteger($.AUTH_EMAIL_OTP_LENGTH)||$.AUTH_EMAIL_OTP_LENGTH<1))Z.addIssue({code:e4.ZodIssueCode.custom,path:["AUTH_EMAIL_OTP_LENGTH"],message:"AUTH_EMAIL_OTP_LENGTH must be a positive integer"});if($.AUTH_EMAIL_OTP_EXPIRES_IN!==void 0&&(!Number.isInteger($.AUTH_EMAIL_OTP_EXPIRES_IN)||$.AUTH_EMAIL_OTP_EXPIRES_IN<1))Z.addIssue({code:e4.ZodIssueCode.custom,path:["AUTH_EMAIL_OTP_EXPIRES_IN"],message:"AUTH_EMAIL_OTP_EXPIRES_IN must be a positive integer"})}).transform(($)=>{let Z={};if($.AUTH_GOOGLE_CLIENT_ID)Z.google={clientId:$.AUTH_GOOGLE_CLIENT_ID,clientSecret:$.AUTH_GOOGLE_CLIENT_SECRET??""};if($.AUTH_GITHUB_CLIENT_ID)Z.github={clientId:$.AUTH_GITHUB_CLIENT_ID,clientSecret:$.AUTH_GITHUB_CLIENT_SECRET??""};let X=[];if($.AUTH_RESEND_API_KEY)X.push({id:"resend",provider:"resend",config:{apiKey:$.AUTH_RESEND_API_KEY,fromEmail:$.AUTH_RESEND_FROM_EMAIL??"noreply@example.com"}});if($.AUTH_SENDGRID_API_KEY)X.push({id:"sendgrid",provider:"sendgrid",config:{apiKey:$.AUTH_SENDGRID_API_KEY,fromEmail:$.AUTH_SENDGRID_FROM_EMAIL??"noreply@example.com"}});let Q=X[0]?.id,Y;if($.AUTH_SSO_MS_CLIENT_ID&&$.AUTH_SSO_DOMAIN)Y={providerId:"microsoft",domain:$.AUTH_SSO_DOMAIN,MS_TENANT_ID:$.AUTH_SSO_MS_TENANT_ID??"",MS_CLIENT_ID:$.AUTH_SSO_MS_CLIENT_ID,MS_CLIENT_SECRET:$.AUTH_SSO_MS_CLIENT_SECRET??"",scopes:$.AUTH_SSO_SCOPES};else if($.AUTH_SSO_GOOGLE_CLIENT_ID&&$.AUTH_SSO_DOMAIN)Y={providerId:"google",domain:$.AUTH_SSO_DOMAIN,GOOGLE_CLIENT_ID:$.AUTH_SSO_GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET:$.AUTH_SSO_GOOGLE_CLIENT_SECRET??"",scopes:$.AUTH_SSO_SCOPES};let G;if($.AUTH_MAGIC_LINK_ENABLED)G={enabled:!0,emailProviderId:$.AUTH_MAGIC_LINK_EMAIL_PROVIDER??Q??""};let J;if($.AUTH_EMAIL_OTP_ENABLED)J={enabled:!0,emailProviderId:$.AUTH_EMAIL_OTP_EMAIL_PROVIDER??Q??"",...$.AUTH_EMAIL_OTP_LENGTH!==void 0&&{otpLength:$.AUTH_EMAIL_OTP_LENGTH},...$.AUTH_EMAIL_OTP_EXPIRES_IN!==void 0&&{expiresIn:$.AUTH_EMAIL_OTP_EXPIRES_IN}};return{emailAndPassword:{enabled:$.AUTH_EMAIL_PASSWORD_ENABLED},socialProviders:Object.keys(Z).length>0?Z:void 0,emailProviders:X.length>0?X:void 0,inviteEmailProviderId:$.AUTH_INVITE_EMAIL_PROVIDER,resetPasswordEmailProviderId:$.AUTH_RESET_PASSWORD_EMAIL_PROVIDER,ssoConfig:Y,magicLinkConfig:G,emailOtpConfig:J}})});var g50;var Ai1=D(()=>{g50={enabled:!0,batchSize:250,flushIntervalMs:300,maxQueueSize:1e4,redactor:"regex"}});import{existsSync as Ri8,readFileSync as Ii8}from"fs";function qi8(){let $=zi1(),Z=b0().configPath;if(!Ri8(Z))return{auth:$,monitoring:g50};try{let X=JSON.parse(Ii8(Z,"utf-8"));if(X.auth)console.warn("[config] DEPRECATION: 'auth' key found in config.json. Auth is now configured via AUTH_* environment variables. The 'auth' key will be ignored.");return{auth:$,monitoring:X.monitoring??g50,theme:X.theme,logo:X.logo,autoCreateOrganizationOnSignup:X.autoCreateOrganizationOnSignup}}catch{return{auth:$,monitoring:g50}}}function TH(){if(!Vu0)Vu0=qi8();return Vu0}function Ti1(){return TH().theme}var Vu0=null;var h50=D(()=>{Pi1();Ai1();R$()});import{dirname as Mi8,posix as ki8,sep as Vi8}from"path";function Ii1(){let $=Si8();return async(Z)=>{for(let X of Z)X.module=$(X.filename);return Z}}function Si8($=process.argv[1]?Mi8(process.argv[1]):process.cwd(),Z=Vi8==="\\"){let X=Z?Ri1($):$;return(Q)=>{if(!Q)return;let Y=Z?Ri1(Q):Q,{dir:G,base:J,ext:W}=ki8.parse(Y);if(W===".js"||W===".mjs"||W===".cjs")J=J.slice(0,-1*W.length);let K=decodeURIComponent(J);if(!G)G=".";let F=G.lastIndexOf("/node_modules");if(F>-1)return`${G.slice(F+14).replace(/\//g,".")}:${K}`;if(G.startsWith(X)){let H=G.slice(X.length+1).replace(/\//g,".");return H?`${H}:${K}`:K}return K}}function Ri1($){return $.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var qi1=()=>{};function Ci8($,Z,X){return{key:$,enabled:typeof Z=="string"?!0:Z,variant:typeof Z=="string"?Z:void 0,reason:void 0,metadata:{id:void 0,version:void 0,payload:X?JSON.stringify(X):void 0,description:void 0}}}var Su0=($)=>{if("flags"in $){let Z=Mi1($.flags),X=ki1($.flags);return{...$,featureFlags:Z,featureFlagPayloads:X}}{let Z=$.featureFlags??{},X=Object.fromEntries(Object.entries($.featureFlagPayloads||{}).map(([Y,G])=>[Y,Cu0(G)])),Q=Object.fromEntries(Object.entries(Z).map(([Y,G])=>[Y,Ci8(Y,G,X[Y])]));return{...$,featureFlags:Z,featureFlagPayloads:X,flags:Q}}},Mi1=($)=>Object.fromEntries(Object.entries($??{}).map(([Z,X])=>[Z,Ai(X)]).filter(([,Z])=>Z!==void 0)),ki1=($)=>{let Z=$??{};return Object.fromEntries(Object.keys(Z).filter((X)=>{let Q=Z[X];return Q.enabled&&Q.metadata&&Q.metadata.payload!==void 0}).map((X)=>{let Q=Z[X].metadata?.payload;return[X,Q?Cu0(Q):void 0]}))},Ai=($)=>$===void 0?void 0:$.variant??$.enabled,Cu0=($)=>{if(typeof $!="string")return $;try{return JSON.parse($)}catch{return $}};var u50=()=>{};function Vi1(){return"CompressionStream"in globalThis&&"TextEncoder"in globalThis&&"Response"in globalThis&&typeof Response.prototype.blob=="function"}async function c50($,Z=!0,X){try{let Q=new CompressionStream("gzip"),Y=Q.writable.getWriter(),G=Y.write(new TextEncoder().encode($)).then(()=>Y.close()).catch(async(K)=>{try{await Y.abort(K)}catch{}throw K}),J=new Response(Q.readable).blob(),[W]=await Promise.all([J,G]);return W}catch(Q){if(X?.rethrow)throw Q;if(Z)console.error("Failed to gzip compress data",Q);return null}}var _u0=()=>{};var _i8,Si1=function($,Z=[]){if(!$)return!1;let X=$.toLowerCase();return _i8.concat(Z).some((Q)=>{let Y=Q.toLowerCase();return X.indexOf(Y)!==-1})};var Ci1=D(()=>{_i8=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterest","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"]});var r7;var sw=D(()=>{r7=function($){return $.AnonymousId="anonymous_id",$.DistinctId="distinct_id",$.Props="props",$.EnablePersonProcessing="enable_person_processing",$.PersonMode="person_mode",$.FeatureFlagDetails="feature_flag_details",$.FeatureFlags="feature_flags",$.FeatureFlagPayloads="feature_flag_payloads",$.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",$.BootstrapFeatureFlags="bootstrap_feature_flags",$.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",$.OverrideFeatureFlags="override_feature_flags",$.Queue="queue",$.LogsQueue="logs_queue",$.OptedOut="opted_out",$.SessionId="session_id",$.SessionStartTimestamp="session_start_timestamp",$.SessionLastTimestamp="session_timestamp",$.PersonProperties="person_properties",$.GroupProperties="group_properties",$.InstalledAppBuild="installed_app_build",$.InstalledAppVersion="installed_app_version",$.SessionReplay="session_replay",$.SurveyLastSeenDate="survey_last_seen_date",$.SurveysSeen="surveys_seen",$.Surveys="surveys",$.RemoteConfig="remote_config",$.FlagsEndpointWasHit="flags_endpoint_was_hit",$.DeviceId="device_id",$}({})});var l50=()=>{};function m50($){return $===null||typeof $!="object"}function ew($,Z){return Object.prototype.toString.call($)===`[object ${Z}]`}function fi1($){return ew($,"ErrorEvent")}function ux($){return typeof Event<"u"&&bi8($,Event)}function bi1($){return ew($,"Object")}function bi8($,Z){try{return $ instanceof Z}catch{return!1}}var fi8,_i1,L15,vu0,d50,Ti=($)=>$===Object($)&&!d50($),hx=($)=>$===void 0,yB=($)=>vu0.call($)=="[object String]",vi1=($)=>yB($)&&$.trim().length===0,Ri=($)=>vu0.call($)=="[object Number]"&&$===$,fu0=($)=>$ instanceof Error;var Ii=D(()=>{sw();l50();fi8=Array.isArray,_i1=Object.prototype,L15=_i1.hasOwnProperty,vu0=_i1.toString,d50=fi8||function($){return vu0.call($)==="[object Array]"}});function qi($,Z,X,Q,Y){if(Z>X)Q.warn("min cannot be greater than max."),Z=X;if(Ri($))if($>X)return Q.warn(" cannot be greater than max: "+X+". Using max value instead."),X;else{if(!($<Z))return $;return Q.warn(" cannot be less than min: "+Z+". Using min value instead."),Z}return Q.warn(" must be a number. using max or fallback. max: "+X+", fallback: "+Y),qi(Y||X,Z,X,Q)}var bu0=D(()=>{Ii()});class xu0{constructor($){this._buckets={},this._onBucketRateLimited=$._onBucketRateLimited,this._bucketSize=qi($.bucketSize,0,100,$._logger),this._refillRate=qi($.refillRate,0,this._bucketSize,$._logger),this._refillInterval=qi($.refillInterval,0,xi8,$._logger)}_applyRefill($,Z){let X=Z-$.lastAccess,Q=Math.floor(X/this._refillInterval);if(Q>0){let Y=Q*this._refillRate;$.tokens=Math.min($.tokens+Y,this._bucketSize),$.lastAccess=$.lastAccess+Q*this._refillInterval}}consumeRateLimit($){let Z=Date.now(),X=String($),Q=this._buckets[X];if(Q)this._applyRefill(Q,Z);else Q={tokens:this._bucketSize,lastAccess:Z},this._buckets[X]=Q;if(Q.tokens===0)return!0;if(Q.tokens--,Q.tokens===0)this._onBucketRateLimited?.($);return Q.tokens===0}stop(){this._buckets={}}}var xi8=86400000;var xi1=D(()=>{bu0()});class $E{constructor($){this.bytes=$}static ofInner($){if($.length===16)return new $E($);throw TypeError("not 128-bit length")}static fromFieldsV7($,Z,X,Q){if(!Number.isInteger($)||!Number.isInteger(Z)||!Number.isInteger(X)||!Number.isInteger(Q)||$<0||Z<0||X<0||Q<0||$>281474976710655||Z>4095||X>1073741823||Q>4294967295)throw RangeError("invalid field value");let Y=new Uint8Array(16);return Y[0]=$/1099511627776,Y[1]=$/4294967296,Y[2]=$/16777216,Y[3]=$/65536,Y[4]=$/256,Y[5]=$,Y[6]=112|Z>>>8,Y[7]=Z,Y[8]=128|X>>>24,Y[9]=X>>>16,Y[10]=X>>>8,Y[11]=X,Y[12]=Q>>>24,Y[13]=Q>>>16,Y[14]=Q>>>8,Y[15]=Q,new $E(Y)}static parse($){let Z;switch($.length){case 32:Z=/^[0-9a-f]{32}$/i.exec($)?.[0];break;case 36:Z=/^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec($)?.slice(1,6).join("");break;case 38:Z=/^\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\}$/i.exec($)?.slice(1,6).join("");break;case 45:Z=/^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec($)?.slice(1,6).join("");break;default:break}if(Z){let X=new Uint8Array(16);for(let Q=0;Q<16;Q+=4){let Y=parseInt(Z.substring(2*Q,2*Q+8),16);X[Q+0]=Y>>>24,X[Q+1]=Y>>>16,X[Q+2]=Y>>>8,X[Q+3]=Y}return new $E(X)}throw SyntaxError("could not parse UUID string")}toString(){let $="";for(let Z=0;Z<this.bytes.length;Z++)if($+="0123456789abcdef".charAt(this.bytes[Z]>>>4),$+="0123456789abcdef".charAt(15&this.bytes[Z]),Z===3||Z===5||Z===7||Z===9)$+="-";return $}toHex(){let $="";for(let Z=0;Z<this.bytes.length;Z++)$+="0123456789abcdef".charAt(this.bytes[Z]>>>4),$+="0123456789abcdef".charAt(15&this.bytes[Z]);return $}toJSON(){return this.toString()}getVariant(){let $=this.bytes[8]>>>4;if($<0)throw Error("unreachable");if($<=7)return this.bytes.every((Z)=>Z===0)?"NIL":"VAR_0";if($<=11)return"VAR_10";if($<=13)return"VAR_110";if($<=15)return this.bytes.every((Z)=>Z===255)?"MAX":"VAR_RESERVED";else throw Error("unreachable")}getVersion(){return this.getVariant()==="VAR_10"?this.bytes[6]>>>4:void 0}clone(){return new $E(this.bytes.slice(0))}equals($){return this.compareTo($)===0}compareTo($){for(let Z=0;Z<16;Z++){let X=this.bytes[Z]-$.bytes[Z];if(X!==0)return Math.sign(X)}return 0}}class gi1{constructor($){this.timestamp=0,this.counter=0,this.random=$??yi8()}generate(){return this.generateOrResetCore(Date.now(),1e4)}generateOrAbort(){return this.generateOrAbortCore(Date.now(),1e4)}generateOrResetCore($,Z){let X=this.generateOrAbortCore($,Z);if(X===void 0)this.timestamp=0,X=this.generateOrAbortCore($,Z);return X}generateOrAbortCore($,Z){if(!Number.isInteger($)||$<1||$>281474976710655)throw RangeError("`unixTsMs` must be a 48-bit positive integer");if(Z<0||Z>281474976710655)throw RangeError("`rollbackAllowance` out of reasonable range");if($>this.timestamp)this.timestamp=$,this.resetCounter();else{if(!($+Z>=this.timestamp))return;if(this.counter++,this.counter>4398046511103)this.timestamp++,this.resetCounter()}return $E.fromFieldsV7(this.timestamp,Math.trunc(this.counter/1073741824),this.counter&1073741823,this.random.nextUint32())}resetCounter(){this.counter=1024*this.random.nextUint32()+(1023&this.random.nextUint32())}generateV4(){let $=new Uint8Array(Uint32Array.of(this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32()).buffer);return $[6]=64|$[6]>>>4,$[8]=128|$[8]>>>2,$E.ofInner($)}}var yi8=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())}),yi1,gB=()=>gi8().toString(),gi8=()=>(yi1||(yi1=new gi1)).generate();var Mi=D(()=>{/*! For license information please see uuidv7.mjs.LICENSE.txt */});class yu0{add($){let Z=gB();return this.promiseByIds[Z]=$,$.catch(()=>{}).finally(()=>{delete this.promiseByIds[Z]}),$}async join(){let $=Object.values(this.promiseByIds),Z=$.length;while(Z>0)await Promise.all($),$=Object.values(this.promiseByIds),Z=$.length}get length(){return Object.keys(this.promiseByIds).length}constructor(){this.promiseByIds={}}}var hi1=D(()=>{Mi()});function hi8($=console){return{log:$.log.bind($),warn:$.warn.bind($),error:$.error.bind($),debug:$.debug.bind($)}}function ci1($,Z=ui8){return ui1($,Z,hi8())}var ui1=($,Z,X)=>{function Q(G,...J){Z(()=>{let W=X[G];W($,...J)})}return{info:(...G)=>{Q("log",...G)},warn:(...G)=>{Q("warn",...G)},error:(...G)=>{Q("error",...G)},critical:(...G)=>{X.error($,...G)},createLogger:(G)=>ui1(`${$} ${G}`,Z,X)}},ui8=($)=>$();var li1=()=>{};var lx="Mobile",p50="iOS",cx="Android",di1="Tablet",k15,li8="Apple",V15,mi1="Safari",n50="BlackBerry",ii1="Samsung",di8,mi8,t50="Chrome",ii8,pi8,pi1="Internet Explorer",ni8,hu0="Opera",S15,ni1="Edge",ti8,uu0="Firefox",oi8,cu0="Nintendo",lu0="PlayStation",i50="Xbox",ri8,ai8,ki="Windows",si8,ti1="Generic",C15,_15,ei8="Konqueror",cX="(\\d+(\\.\\d+)?)",gu0,v15,f15,b15,$p8,Zp8,x15,y15;var oi1=D(()=>{l50();Ii();k15=cx+" "+di1,V15=li8+" Watch",di8=ii1+"Browser",mi8=ii1+" Internet",ii8=t50+" OS",pi8=t50+" "+p50,ni8=pi1+" "+lx,S15=hu0+" Mini",ti8="Microsoft "+ni1,oi8=uu0+" "+p50,ri8=cx+" "+lx,ai8=lx+" "+mi1,si8=ki+" Phone",C15=ti1+" "+lx.toLowerCase(),_15=ti1+" "+di1.toLowerCase(),gu0=new RegExp("Version/"+cX),v15=new RegExp(i50,"i"),f15=new RegExp(lu0+" \\w+","i"),b15=new RegExp(cu0+" \\w+","i"),$p8=new RegExp(n50+"|PlayBook|BB10","i"),Zp8={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000","5.1":"XP","5.2":"XP","6.0":"Vista","6.1":"7","6.2":"8","6.3":"8.1","6.4":"10","10.0":"10"},x15={[ni8]:[new RegExp("rv:"+cX)],[ti8]:[new RegExp(ni1+"?\\/"+cX)],[t50]:[new RegExp("("+t50+"|CrMo)\\/"+cX)],[pi8]:[new RegExp("CriOS\\/"+cX)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+cX)],[mi1]:[gu0],[ai8]:[gu0],[hu0]:[new RegExp("("+hu0+"|OPR)\\/"+cX)],[uu0]:[new RegExp(uu0+"\\/"+cX)],[oi8]:[new RegExp("FxiOS\\/"+cX)],[ei8]:[new RegExp("Konqueror[:/]?"+cX,"i")],[n50]:[new RegExp(n50+" "+cX),gu0],[ri8]:[new RegExp("android\\s"+cX,"i")],[mi8]:[new RegExp(di8+"\\/"+cX)],[pi1]:[new RegExp("(rv:|MSIE )"+cX)],Mozilla:[new RegExp("rv:"+cX)]},y15=[[new RegExp(i50+"; "+i50+" (.*?)[);]","i"),($)=>[i50,$&&$[1]||""]],[new RegExp(cu0,"i"),[cu0,""]],[new RegExp(lu0,"i"),[lu0,""]],[$p8,[n50,""]],[new RegExp(ki,"i"),($,Z)=>{if(/Phone/.test(Z)||/WPDesktop/.test(Z))return[si8,""];if(new RegExp(lx).test(Z)&&!/IEMobile\b/.test(Z))return[ki+" "+lx,""];let X=/Windows NT ([0-9.]+)/i.exec(Z);if(X&&X[1]){let Q=X[1],Y=Zp8[Q]||"";if(/arm/i.test(Z))Y="RT";return[ki,Y]}return[ki,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,($)=>{if($&&$[3]){let Z=[$[3],$[4],$[5]||"0"];return[p50,Z.join(".")]}return[p50,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,($)=>{let Z="";if($&&$.length>=3)Z=hx($[2])?$[3]:$[2];return["watchOS",Z]}],[new RegExp("("+cx+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+cx+")","i"),($)=>{if($&&$[2]){let Z=[$[2],$[3],$[4]||"0"];return[cx,Z.join(".")]}return[cx,""]}],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,($)=>{let Z=["Mac OS X",""];if($&&$[1]){let X=[$[1],$[2],$[3]||"0"];Z[1]=X.join(".")}return Z}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[ii8,""]],[/Linux|debian/i,["Linux",""]]]});function ai1($){return $?.replace(/\/+$/,"")}async function si1($,Z){let X=null;for(let Q=0;Q<Z.retryCount+1;Q++){if(Q>0)await new Promise((Y)=>setTimeout(Y,Z.retryDelay));try{return await $()}catch(Y){if(X=Y,!Z.retryCheck(Y))throw Y}}throw X}function o50(){return new Date().toISOString()}function RH($,Z){let X=setTimeout($,Z);return X?.unref&&X?.unref(),X}function du0($){return Promise.all($.map((Z)=>(Z??Promise.resolve()).then((X)=>({status:"fulfilled",value:X}),(X)=>({status:"rejected",reason:X}))))}var ri1="utf8",ei1=($)=>$ instanceof Error;var lX=D(()=>{Ci1();xi1();bu0();l50();Ii();hi1();li1();oi1()});var Xp8,a15;var mu0=D(()=>{lX();Xp8={trace:{text:"TRACE",number:1},debug:{text:"DEBUG",number:5},info:{text:"INFO",number:9},warn:{text:"WARN",number:13},error:{text:"ERROR",number:17},fatal:{text:"FATAL",number:21}},a15=Xp8.info});var $p1=D(()=>{mu0();sw()});var Zp1=D(()=>{sw()});class iu0{constructor(){this.events={},this.events={}}on($,Z){if(!this.events[$])this.events[$]=[];return this.events[$].push(Z),()=>{this.events[$]=this.events[$].filter((X)=>X!==Z)}}emit($,Z){for(let X of this.events[$]||[])X(Z);for(let X of this.events["*"]||[])X($,Z)}}var Xp1=()=>{};async function Qp1($){if($ instanceof dx){let Z="";try{Z=await $.text}catch{}console.error(`Error while flushing PostHog: message=${$.message}, response body=${Z}`,$)}else console.error("Error while flushing PostHog",$);return Promise.resolve()}function pu0($){return typeof $=="object"&&($ instanceof dx||$ instanceof Vi)}function Yp1($){return typeof $=="object"&&$ instanceof dx&&$.status===413}class r50{constructor($,Z={}){this.flushPromise=null,this.shutdownPromise=null,this.promiseQueue=new yu0,this._events=new iu0,this._isInitialized=!1;let X=typeof $=="string"?$.trim():"",Q=typeof Z.host=="string"?Z.host.trim():"",Y=!X;if(this._logger=ci1("[PostHog]",this.logMsgIfDebug.bind(this)),Y)this._logger.error("You must pass your PostHog project's api key. The client will be disabled.");if(this.apiKey=X,this.host=ai1(Q||"https://us.i.posthog.com"),this.flushAt=Z.flushAt?Math.max(Z.flushAt,1):20,this.maxBatchSize=Math.max(this.flushAt,Z.maxBatchSize??100),this.maxQueueSize=Math.max(this.flushAt,Z.maxQueueSize??1000),this.flushInterval=Z.flushInterval??1e4,this.preloadFeatureFlags=Z.preloadFeatureFlags??!0,this.defaultOptIn=Z.defaultOptIn??!0,this.disableSurveys=Z.disableSurveys??!1,this._retryOptions={retryCount:Z.fetchRetryCount??3,retryDelay:Z.fetchRetryDelay??3000,retryCheck:pu0},this.requestTimeout=Z.requestTimeout??1e4,this.featureFlagsRequestTimeoutMs=Z.featureFlagsRequestTimeoutMs??3000,this.remoteConfigRequestTimeoutMs=Z.remoteConfigRequestTimeoutMs??3000,this.disableGeoip=Z.disableGeoip??!0,this.disabled=(Z.disabled??!1)||Y,this.historicalMigration=Z?.historicalMigration??!1,this._initPromise=Promise.resolve(),this._isInitialized=!0,this.evaluationContexts=Z?.evaluationContexts??Z?.evaluationEnvironments,Z?.evaluationEnvironments&&!Z?.evaluationContexts)this._logger.warn("evaluationEnvironments is deprecated. Use evaluationContexts instead. This property will be removed in a future version.");this.disableCompression=!Vi1()||(Z?.disableCompression??!1)}logMsgIfDebug($){if(this.isDebug)$()}wrap($){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized)return $();this._initPromise.then(()=>$())}getCommonEventProperties(){return{$lib:this.getLibraryId(),$lib_version:this.getLibraryVersion()}}get optedOut(){return this.getPersistedProperty(r7.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(r7.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(r7.OptedOut,!0)})}on($,Z){return this._events.on($,Z)}debug($=!0){if(this.removeDebugCallback?.(),$){let Z=this.on("*",(X,Q)=>this._logger.info(X,Q));this.removeDebugCallback=()=>{Z(),this.removeDebugCallback=void 0}}}get isDebug(){return!!this.removeDebugCallback}get isDisabled(){return this.disabled}buildPayload($){return{distinct_id:$.distinct_id,event:$.event,properties:{...$.properties||{},...this.getCommonEventProperties()}}}addPendingPromise($){return this.promiseQueue.add($)}identifyStateless($,Z,X){this.wrap(()=>{let Q={...this.buildPayload({distinct_id:$,event:"$identify",properties:Z})};this.enqueue("identify",Q,X)})}async identifyStatelessImmediate($,Z,X){let Q={...this.buildPayload({distinct_id:$,event:"$identify",properties:Z})};await this.sendImmediate("identify",Q,X)}captureStateless($,Z,X,Q){this.wrap(()=>{let Y=this.buildPayload({distinct_id:$,event:Z,properties:X});this.enqueue("capture",Y,Q)})}async captureStatelessImmediate($,Z,X,Q){let Y=this.buildPayload({distinct_id:$,event:Z,properties:X});await this.sendImmediate("capture",Y,Q)}aliasStateless($,Z,X,Q){this.wrap(()=>{let Y=this.buildPayload({event:"$create_alias",distinct_id:Z,properties:{...X||{},distinct_id:Z,alias:$}});this.enqueue("alias",Y,Q)})}async aliasStatelessImmediate($,Z,X,Q){let Y=this.buildPayload({event:"$create_alias",distinct_id:Z,properties:{...X||{},distinct_id:Z,alias:$}});await this.sendImmediate("alias",Y,Q)}groupIdentifyStateless($,Z,X,Q,Y,G){this.wrap(()=>{let J=this.buildPayload({distinct_id:Y||`$${$}_${Z}`,event:"$groupidentify",properties:{$group_type:$,$group_key:Z,$group_set:X||{},...G||{}}});this.enqueue("capture",J,Q)})}async getRemoteConfig(){await this._initPromise;let $=this.host;if($==="https://us.i.posthog.com")$="https://us-assets.i.posthog.com";else if($==="https://eu.i.posthog.com")$="https://eu-assets.i.posthog.com";let Z=`${$}/array/${this.apiKey}/config`,X={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}};return this.fetchWithRetry(Z,X,{retryCount:0},this.remoteConfigRequestTimeoutMs).then((Q)=>Q.json()).catch((Q)=>{this._logger.error("Remote config could not be loaded",Q),this._events.emit("error",Q)})}async getFlags($,Z={},X={},Q={},Y={},G=!1){await this._initPromise;let J=G?"&config=true":"",W=`${this.host}/flags/?v=2${J}`,K={token:this.apiKey,distinct_id:$,groups:Z,person_properties:X,group_properties:Q,...Y};if(X.$device_id)K.$device_id=X.$device_id;if(this.evaluationContexts&&this.evaluationContexts.length>0)K.evaluation_contexts=this.evaluationContexts;let F={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(K)};return this._logger.info("Flags URL",W),this.fetchWithRetry(W,F,{retryCount:0},this.featureFlagsRequestTimeoutMs).then((H)=>H.json()).then((H)=>({success:!0,response:Su0(H)})).catch((H)=>{return this._events.emit("error",H),{success:!1,error:this.categorizeRequestError(H)}})}categorizeRequestError($){if($ instanceof dx)return{type:"api_error",statusCode:$.status};if($ instanceof Vi){let Z=$.error;if(Z instanceof Error&&(Z.name==="AbortError"||Z.name==="TimeoutError"))return{type:"timeout"};return{type:"connection_error"}}return{type:"unknown_error"}}async getFeatureFlagStateless($,Z,X={},Q={},Y={},G){await this._initPromise;let J=await this.getFeatureFlagDetailStateless($,Z,X,Q,Y,G);if(J===void 0)return{response:void 0,requestId:void 0};let W=Ai(J.response);if(W===void 0)W=!1;return{response:W,requestId:J.requestId}}async getFeatureFlagDetailStateless($,Z,X={},Q={},Y={},G){await this._initPromise;let J=await this.getFeatureFlagDetailsStateless(Z,X,Q,Y,G,[$]);if(J===void 0)return;return{response:J.flags[$],requestId:J.requestId,evaluatedAt:J.evaluatedAt}}async getFeatureFlagPayloadStateless($,Z,X={},Q={},Y={},G){await this._initPromise;let J=await this.getFeatureFlagPayloadsStateless(Z,X,Q,Y,G,[$]);if(!J)return;let W=J[$];if(W===void 0)return null;return W}async getFeatureFlagPayloadsStateless($,Z={},X={},Q={},Y,G){return await this._initPromise,(await this.getFeatureFlagsAndPayloadsStateless($,Z,X,Q,Y,G)).payloads}async getFeatureFlagsStateless($,Z={},X={},Q={},Y,G){return await this._initPromise,await this.getFeatureFlagsAndPayloadsStateless($,Z,X,Q,Y,G)}async getFeatureFlagsAndPayloadsStateless($,Z={},X={},Q={},Y,G){await this._initPromise;let J=await this.getFeatureFlagDetailsStateless($,Z,X,Q,Y,G);if(!J)return{flags:void 0,payloads:void 0,requestId:void 0};return{flags:J.featureFlags,payloads:J.featureFlagPayloads,requestId:J.requestId}}async getFeatureFlagDetailsStateless($,Z={},X={},Q={},Y,G){await this._initPromise;let J={};if(Y??this.disableGeoip)J.geoip_disable=!0;if(G)J.flag_keys_to_evaluate=G;let W=await this.getFlags($,Z,X,Q,J);if(!W.success)return;let K=W.response;if(K.errorsWhileComputingFlags)console.error("[FEATURE FLAGS] Error while computing feature flags, some flags may be missing or incorrect. Learn more at https://posthog.com/docs/feature-flags/best-practices");if(K.quotaLimited?.includes("feature_flags"))return console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - feature flags unavailable. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),{flags:{},featureFlags:{},featureFlagPayloads:{},requestId:K?.requestId,quotaLimited:K.quotaLimited};return K}async getSurveysStateless(){if(await this._initPromise,this.disableSurveys===!0)return this._logger.info("Loading surveys is disabled."),[];let $=`${this.host}/api/surveys/?token=${this.apiKey}`,Z={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}},Q=(await this.fetchWithRetry($,Z).then((Y)=>{if(Y.status!==200||!Y.json){let G=`Surveys API could not be loaded: ${Y.status}`,J=Error(G);this._logger.error(J),this._events.emit("error",Error(G));return}return Y.json()}).catch((Y)=>{this._logger.error("Surveys API could not be loaded",Y),this._events.emit("error",Y)}))?.surveys;if(Q)this._logger.info("Surveys fetched from API: ",JSON.stringify(Q));return Q??[]}get props(){if(!this._props)this._props=this.getPersistedProperty(r7.Props);return this._props||{}}set props($){this._props=$}async register($){this.wrap(()=>{this.props={...this.props,...$},this.setPersistedProperty(r7.Props,this.props)})}async unregister($){this.wrap(()=>{delete this.props[$],this.setPersistedProperty(r7.Props,this.props)})}processBeforeEnqueue($){return $}async flushStorage(){}enqueue($,Z,X){this.wrap(()=>{if(this.optedOut)return void this._events.emit($,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let Q=this.prepareMessage($,Z,X);if(Q=this.processBeforeEnqueue(Q),Q===null)return;let Y=this.getPersistedProperty(r7.Queue)||[];if(Y.length>=this.maxQueueSize)Y.shift(),this._logger.info("Queue is full, the oldest event is dropped.");if(Y.push({message:Q}),this.setPersistedProperty(r7.Queue,Y),this._events.emit($,Q),Y.length>=this.flushAt)this.flushBackground();if(this.flushInterval&&!this._flushTimer)this._flushTimer=RH(()=>this.flushBackground(),this.flushInterval)})}async sendImmediate($,Z,X){if(this.disabled)return void this._logger.warn("The client is disabled");if(!this._isInitialized)await this._initPromise;if(this.optedOut)return void this._events.emit($,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let Q=this.prepareMessage($,Z,X);if(Q=this.processBeforeEnqueue(Q),Q===null)return;let Y={api_key:this.apiKey,batch:[Q],sent_at:o50()};if(this.historicalMigration)Y.historical_migration=!0;let G=JSON.stringify(Y),J=`${this.host}/batch/`,W=this.disableCompression?null:await c50(G,this.isDebug),K={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...W!==null&&{"Content-Encoding":"gzip"}},body:W||G};try{await this.fetchWithRetry(J,K)}catch(F){this._events.emit("error",F)}}prepareMessage($,Z,X){let Q={...Z,type:$,library:this.getLibraryId(),library_version:this.getLibraryVersion(),timestamp:X?.timestamp?X?.timestamp:o50(),uuid:X?.uuid?X.uuid:gB()};if(X?.disableGeoip??this.disableGeoip){if(!Q.properties)Q.properties={};Q.properties.$geoip_disable=!0}if(Q.distinctId)Q.distinct_id=Q.distinctId,delete Q.distinctId;return Q}clearFlushTimer(){if(this._flushTimer)clearTimeout(this._flushTimer),this._flushTimer=void 0}flushBackground(){this.flush().catch(async($)=>{await Qp1($)})}async flush(){let $=du0([this.flushPromise]).then(()=>this._flush());return this.flushPromise=$,this.addPendingPromise($),du0([$]).then(()=>{if(this.flushPromise===$)this.flushPromise=null}),$}getCustomHeaders(){let $=this.getCustomUserAgent(),Z={};if($&&$!=="")Z["User-Agent"]=$;return Z}async _flush(){this.clearFlushTimer(),await this._initPromise;let $=this.getPersistedProperty(r7.Queue)||[];if(!$.length)return;let Z=[],X=$.length;while($.length>0&&Z.length<X){let Q=$.slice(0,this.maxBatchSize),Y=Q.map((U)=>U.message),G=async()=>{let B=(this.getPersistedProperty(r7.Queue)||[]).slice(Q.length);this.setPersistedProperty(r7.Queue,B),$=B,await this.flushStorage()},J={api_key:this.apiKey,batch:Y,sent_at:o50()};if(this.historicalMigration)J.historical_migration=!0;let W=JSON.stringify(J),K=`${this.host}/batch/`,F=this.disableCompression?null:await c50(W,this.isDebug),H={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...F!==null&&{"Content-Encoding":"gzip"}},body:F||W},N={retryCheck:(U)=>{if(Yp1(U))return!1;return pu0(U)}};try{await this.fetchWithRetry(K,H,N)}catch(U){if(Yp1(U)&&Y.length>1){this.maxBatchSize=Math.max(1,Math.floor(Y.length/2)),this._logger.warn(`Received 413 when sending batch of size ${Y.length}, reducing batch size to ${this.maxBatchSize}`);continue}if(!(U instanceof Vi))await G();throw this._events.emit("error",U),U}await G(),Z.push(...Y)}this._events.emit("flush",Z)}async fetchWithRetry($,Z,X,Q){let Y=Z.body?Z.body:"",G=-1;try{G=Y instanceof Blob?Y.size:Buffer.byteLength(Y,ri1)}catch{if(Y instanceof Blob)G=Y.size;else G=new TextEncoder().encode(Y).length}return await si1(async()=>{let J=new AbortController,W=Q??this.requestTimeout,K=RH(()=>J.abort(),W),F=null;try{F=await this.fetch($,{signal:J.signal,...Z})}catch(N){throw new Vi(N)}finally{clearTimeout(K)}if(Z.mode!=="no-cors"&&(F.status<200||F.status>=400))throw new dx(F,G);return F},{...this._retryOptions,...X})}async _shutdown($=30000){await this._initPromise;let Z=!1;this.clearFlushTimer();let X=async()=>{try{await this.promiseQueue.join();while(!0){if((this.getPersistedProperty(r7.Queue)||[]).length===0)break;if(await this.flush(),Z)break}}catch(Y){if(!pu0(Y))throw Y;await Qp1(Y)}},Q;try{return await Promise.race([new Promise((Y,G)=>{Q=RH(()=>{this._logger.error("Timed out while shutting down PostHog"),Z=!0,G("Timeout while shutting down PostHog. Some events may not have been sent.")},$)}),X()])}finally{clearTimeout(Q)}}async shutdown($=30000){if(this.shutdownPromise)this._logger.warn("shutdown() called while already shutting down. shutdown() is meant to be called once before process exit - use flush() for per-request cleanup");else this.shutdownPromise=this._shutdown($).finally(()=>{this.shutdownPromise=null});return this.shutdownPromise}}var dx,Vi;var nu0=D(()=>{Xp1();u50();_u0();sw();lX();Mi();dx=class dx extends Error{constructor($,Z){super("HTTP error while fetching PostHog: status="+$.status+", reqByteLength="+Z),this.response=$,this.reqByteLength=Z,this.name="PostHogFetchHttpError"}get status(){return this.response.status}get text(){return this.response.text()}get json(){return this.response.json()}};Vi=class Vi extends Error{constructor($){super("Network error while fetching PostHog",$ instanceof Error?{cause:$}:{}),this.error=$,this.name="PostHogFetchNetworkError"}}});var Gp1=D(()=>{u50();sw();nu0();Mi();lX()});var Jp1=D(()=>{Ii()});function Kp1($){let Z=globalThis._posthogChunkIds;if(!Z)return;let X=Object.keys(Z);if(s50&&X.length===Wp1)return s50;return Wp1=X.length,s50=X.reduce((Q,Y)=>{if(!a50)a50={};let G=a50[Y];if(G)Q[G[0]]=G[1];else{let J=$(Y);for(let W=J.length-1;W>=0;W--){let F=J[W]?.filename,H=Z[Y];if(F&&H){Q[F]=H,a50[Y]=[F,H];break}}}return Q},{}),s50}var a50,Wp1,s50;var Fp1=()=>{};class Hp1{constructor($,Z,X=[]){this.coercers=$,this.stackParser=Z,this.modifiers=X}buildFromUnknown($,Z={}){let Q=Z&&Z.mechanism||{handled:!0,type:"generic"},G=this.buildCoercingContext(Q,Z,0).apply($),J=this.buildParsingContext(Z),W=this.parseStacktrace(G,J);return{$exception_list:this.convertToExceptionList(W,Q),$exception_level:"error"}}async modifyFrames($){for(let Z of $)if(Z.stacktrace&&Z.stacktrace.frames&&d50(Z.stacktrace.frames))Z.stacktrace.frames=await this.applyModifiers(Z.stacktrace.frames);return $}coerceFallback($){return{type:"Error",value:"Unknown error",stack:$.syntheticException?.stack,synthetic:!0}}parseStacktrace($,Z){let X;if($.cause!=null)X=this.parseStacktrace($.cause,Z);let Q;if($.stack!=""&&$.stack!=null)Q=this.applyChunkIds(this.stackParser($.stack,$.synthetic?Z.skipFirstLines:0),Z.chunkIdMap);return{...$,cause:X,stack:Q}}applyChunkIds($,Z){return $.map((X)=>{if(X.filename&&Z)X.chunk_id=Z[X.filename];return X})}applyCoercers($,Z){for(let X of this.coercers)if(X.match($))return X.coerce($,Z);return this.coerceFallback(Z)}async applyModifiers($){let Z=$;for(let X of this.modifiers)Z=await X(Z);return Z}convertToExceptionList($,Z){let X={type:$.type,value:$.value,mechanism:{type:Z.type??"generic",handled:Z.handled??!0,synthetic:$.synthetic??!1}};if($.stack)X.stacktrace={type:"raw",frames:$.stack};let Q=[X];if($.cause!=null)Q.push(...this.convertToExceptionList($.cause,{...Z,handled:!0}));return Q}buildParsingContext($){return{chunkIdMap:Kp1(this.stackParser),skipFirstLines:$.skipFirstLines??1}}buildCoercingContext($,Z,X=0){let Q=(G,J)=>{if(!(J<=Gp8))return;{let W=this.buildCoercingContext($,Z,J);return this.applyCoercers(G,W)}};return{...Z,syntheticException:X==0?Z.syntheticException:void 0,mechanism:$,apply:(G)=>Q(G,X),next:(G)=>Q(G,X+1)}}}var Gp8=4;var Np1=D(()=>{lX();Fp1()});function XK($,Z,X,Q,Y){let G={platform:$,filename:Z,function:X==="<anonymous>"?U7:X,in_app:!0};if(!hx(Q))G.lineno=Q;if(!hx(Y))G.colno=Y;return G}var U7="?";var hB=D(()=>{lX()});var e50=($,Z)=>{let X=$.indexOf("safari-extension")!==-1,Q=$.indexOf("safari-web-extension")!==-1;return X||Q?[$.indexOf("@")!==-1?$.split("@")[0]:U7,X?`safari-extension:${Z}`:`safari-web-extension:${Z}`]:[$,Z]};var tu0=D(()=>{hB()});var Jp8,Wp8,Kp8,ou0=($,Z)=>{let X=Jp8.exec($);if(X){let[,Y,G,J]=X;return XK(Z,Y,U7,+G,+J)}let Q=Wp8.exec($);if(Q){if(Q[2]&&Q[2].indexOf("eval")===0){let W=Kp8.exec(Q[2]);if(W)Q[2]=W[1],Q[3]=W[2],Q[4]=W[3]}let[G,J]=e50(Q[1]||U7,Q[2]);return XK(Z,J,G,Q[3]?+Q[3]:void 0,Q[4]?+Q[4]:void 0)}};var Up1=D(()=>{hB();tu0();Jp8=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Wp8=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Kp8=/\((\S*)(?::(\d+))(?::(\d+))\)/});var Fp8,Hp8,ru0=($,Z)=>{let X=Fp8.exec($);if(X){if(X[3]&&X[3].indexOf(" > eval")>-1){let J=Hp8.exec(X[3]);if(J)X[1]=X[1]||"eval",X[3]=J[1],X[4]=J[2],X[5]=""}let Y=X[3],G=X[1]||U7;return[G,Y]=e50(G,Y),XK(Z,Y,G,X[4]?+X[4]:void 0,X[5]?+X[5]:void 0)}};var Bp1=D(()=>{hB();tu0();Fp8=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Hp8=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i});var Np8,Op1=($,Z)=>{let X=Np8.exec($);return X?XK(Z,X[2],X[1]||U7,+X[3],X[4]?+X[4]:void 0):void 0};var Dp1=D(()=>{hB();Np8=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i});var Up8,Lp1=($,Z)=>{let X=Up8.exec($);return X?XK(Z,X[2],X[3]||U7,+X[1]):void 0},Bp8,wp1=($,Z)=>{let X=Bp8.exec($);return X?XK(Z,X[5],X[3]||X[4]||U7,+X[1],+X[2]):void 0};var Ep1=D(()=>{hB();Up8=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,Bp8=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i});function Lp8($,Z=!1){return!(Z||$&&!$.startsWith("/")&&!$.match(/^[A-Z]:/)&&!$.startsWith(".")&&!$.match(/^[a-zA-Z]([a-zA-Z0-9.\-+])*:\/\//))&&$!==void 0&&!$.includes("node_modules/")}function jp1($){return parseInt($||"",10)||void 0}var Op8,Dp8,zp1=($,Z)=>{let X=$.match(Dp8);if(X){let Q,Y,G,J,W;if(X[1]){G=X[1];let H=G.lastIndexOf(".");if(G[H-1]===".")H--;if(H>0){Q=G.slice(0,H),Y=G.slice(H+1);let N=Q.indexOf(".Module");if(N>0)G=G.slice(N+1),Q=Q.slice(0,N)}J=void 0}if(Y)J=Q,W=Y;if(Y==="<anonymous>")W=void 0,G=void 0;if(G===void 0)W=W||U7,G=J?`${J}.${W}`:W;let K=X[2]?.startsWith("file://")?X[2].slice(7):X[2],F=X[5]==="native";if(K?.match(/\/[A-Z]:/))K=K.slice(1);if(!K&&X[5]&&!F)K=X[5];return{filename:K?decodeURI(K):void 0,module:void 0,function:G,lineno:jp1(X[3]),colno:jp1(X[4]),in_app:Lp8(K||"",F),platform:Z}}if($.match(Op8))return{filename:$,platform:Z}};var Pp1=D(()=>{hB();Op8=/^\s*[-]{4,}$/,Dp8=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/});function Rp1($){if(!$.length)return[];let Z=Array.from($);return Z.reverse(),Z.slice(0,Tp1).map((X)=>({...X,filename:X.filename||wp8(Z).filename,function:X.function||U7}))}function wp8($){return $[$.length-1]||{}}function Ep8(){return Ip1("web:javascript",ou0,ru0)}function Ip1($,...Z){return(X,Q=0)=>{let Y=[],G=X.split(`
|
|
365
365
|
`);for(let J=Q;J<G.length;J++){let W=G[J];if(W.length>1024)continue;let K=Ap1.test(W)?W.replace(Ap1,"$1"):W;if(!K.match(/\S*Error: /)){for(let F of Z){let H=F(K,$);if(H){Y.push(H);break}}if(Y.length>=Tp1)break}}return Rp1(Y)}}var Ap1,Tp1=50;var qp1=D(()=>{hB();Up1();Bp1();Dp1();Ep1();Pp1();Ap1=/\(error: (.*)\)/});class Mp1{match($){return this.isDOMException($)||this.isDOMError($)}coerce($,Z){let X=yB($.stack);return{type:this.getType($),value:this.getValue($),stack:X?$.stack:void 0,cause:$.cause?Z.next($.cause):void 0,synthetic:!1}}getType($){return this.isDOMError($)?"DOMError":"DOMException"}getValue($){let Z=$.name||(this.isDOMError($)?"DOMError":"DOMException");return $.message?`${Z}: ${$.message}`:Z}isDOMException($){return ew($,"DOMException")}isDOMError($){return ew($,"DOMError")}}var kp1=D(()=>{lX()});class Vp1{match($){return fu0($)}coerce($,Z){return{type:this.getType($),value:this.getMessage($,Z),stack:this.getStack($),cause:$.cause?Z.next($.cause):void 0,synthetic:!1}}getType($){return $.name||$.constructor.name}getMessage($,Z){let X=$.message;if(X.error&&typeof X.error.message=="string")return String(X.error.message);return String(X)}getStack($){return $.stacktrace||$.stack||void 0}}var Sp1=D(()=>{lX()});class Cp1{constructor(){}match($){return fi1($)&&$.error!=null}coerce($,Z){let X=Z.apply($.error);if(!X)return{type:"ErrorEvent",value:$.message,stack:Z.syntheticException?.stack,synthetic:!0};return X}}var _p1=D(()=>{lX()});class vp1{match($){return typeof $=="string"}coerce($,Z){let[X,Q]=this.getInfos($);return{type:X??"Error",value:Q??$,stack:Z.syntheticException?.stack,synthetic:!0}}getInfos($){let Z="Error",X=$,Q=$.match(jp8);if(Q)Z=Q[1],X=Q[2];return[Z,X]}}var jp8;var fp1=D(()=>{jp8=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i});var bp1;var xp1=D(()=>{bp1=["fatal","error","warning","log","info","debug"]});function $90($,Z=40){let X=Object.keys($);if(X.sort(),!X.length)return"[object has no keys]";for(let Q=X.length;Q>0;Q--){let Y=X.slice(0,Q).join(", ");if(!(Y.length>Z)){if(Q===X.length)return Y;return Y.length<=Z?Y:`${Y.slice(0,Z)}...`}}return""}var au0=()=>{};class yp1{match($){return typeof $=="object"&&$!==null}coerce($,Z){let X=this.getErrorPropertyFromObject($);if(X)return Z.apply(X);return{type:this.getType($),value:this.getValue($),stack:Z.syntheticException?.stack,level:this.isSeverityLevel($.level)?$.level:"error",synthetic:!0}}getType($){return ux($)?$.constructor.name:"Error"}getValue($){if("name"in $&&typeof $.name=="string"){let Q=`'${$.name}' captured as exception`;if("message"in $&&typeof $.message=="string")Q+=` with message: '${$.message}'`;return Q}if("message"in $&&typeof $.message=="string")return $.message;let Z=this.getObjectClassName($),X=$90($);return`${Z&&Z!=="Object"?`'${Z}'`:"Object"} captured as exception with keys: ${X}`}isSeverityLevel($){return yB($)&&!vi1($)&&bp1.indexOf($)>=0}getErrorPropertyFromObject($){for(let Z in $)if(Object.prototype.hasOwnProperty.call($,Z)){let X=$[Z];if(ei1(X))return X}}getObjectClassName($){try{let Z=Object.getPrototypeOf($);return Z?Z.constructor.name:void 0}catch(Z){return}}}var gp1=D(()=>{lX();xp1();au0()});class hp1{match($){return ux($)}coerce($,Z){let X=$.constructor.name;return{type:X,value:`${X} captured as exception with keys: ${$90($)}`,stack:Z.syntheticException?.stack,synthetic:!0}}}var up1=D(()=>{lX();au0()});class cp1{match($){return m50($)}coerce($,Z){return{type:"Error",value:`Primitive value captured as exception: ${String($)}`,stack:Z.syntheticException?.stack,synthetic:!0}}}var lp1=D(()=>{lX()});class dp1{match($){return ew($,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection($)}isCustomEventWrappingRejection($){if(!ux($))return!1;try{let Z=$.detail;return Z!=null&&typeof Z=="object"&&"reason"in Z}catch{return!1}}coerce($,Z){let X=this.getUnhandledRejectionReason($);if(m50(X))return{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(X)}`,stack:Z.syntheticException?.stack,synthetic:!0};return Z.apply(X)}getUnhandledRejectionReason($){try{if("reason"in $)return $.reason;if("detail"in $&&$.detail!=null&&typeof $.detail=="object"&&"reason"in $.detail)return $.detail.reason}catch{}return $}}var mp1=D(()=>{lX()});var ip1=D(()=>{kp1();Sp1();_p1();fp1();gp1();up1();lp1();mp1()});class pp1{constructor($){this._maxSize=$,this._cache=new Map}get($){let Z=this._cache.get($);if(Z===void 0)return;return this._cache.delete($),this._cache.set($,Z),Z}set($,Z){this._cache.set($,Z)}reduce(){while(this._cache.size>=this._maxSize){let $=this._cache.keys().next().value;if($)this._cache.delete($)}}}var np1=()=>{};function su0($){if(!$)return{...Z90};return{enabled:$.enabled??Z90.enabled,max_bytes:Ap8($.max_bytes,Z90.max_bytes)}}function Pp8($){if(!$)return{sanitizedProperties:{},droppedKeys:[]};let Z=[];return{sanitizedProperties:Object.keys($).reduce((Q,Y)=>{if(zp8.has(Y))return Z.push(Y),Q;return Q[Y]=$[Y],Q},{}),droppedKeys:Z}}class tp1{constructor($){this._entries=[],this._totalBytes=0,this._config=su0($)}setConfig($){this._config=su0($),this._trimToMaxBytes()}add($){let Z=Tp8($);if(!Z)return;let X=op1(Z.json);if(X>this._config.max_bytes)return;this._entries.push({step:Z.step,bytes:X}),this._totalBytes+=X,this._trimToMaxBytes()}getAttachable(){return this._entries.map(($)=>$.step)}clear(){this._entries=[],this._totalBytes=0}size(){return this._entries.length}_trimToMaxBytes(){while(this._totalBytes>this._config.max_bytes&&this._entries.length>0){let $=this._entries.shift();if($)this._totalBytes-=$.bytes}}}function Ap8($,Z){if(!Ri($)||$===1/0||$===-1/0)return Z;let X=Math.floor($);if(X<0)return Z;return X}function Tp8($){let Z=Rp8($);if(!Z)return;try{let X=JSON.parse(Z);if(!Ti(X))return;let Q=X,Y=Q[Si.MESSAGE],G=Q[Si.TIMESTAMP];if(!yB(Y)||Y.trim().length===0)return;if(!yB(G)&&!Ri(G))return;return{step:Q,json:Z}}catch{return}}function Rp8($){let Z=new WeakSet;try{return JSON.stringify($,(X,Q)=>{if(typeof Q=="bigint")return Q.toString();if(typeof Q=="function"||typeof Q=="symbol")return;if(Q instanceof Date)return Q.toISOString();if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};if(Q&&typeof Q=="object"){if(Z.has(Q))return"[Circular]";Z.add(Q)}return Q})}catch{return}}function op1($){if(typeof TextEncoder<"u")return new TextEncoder().encode($).length;let Z=encodeURIComponent($),X=0;for(let Q=0;Q<Z.length;Q++)if(Z[Q]==="%")X+=1,Q+=2;else X+=1;return X}var Si,zp8,Z90;var rp1=D(()=>{lX();Si={MESSAGE:"$message",TIMESTAMP:"$timestamp"},zp8=new Set([Si.MESSAGE,Si.TIMESTAMP]),Z90={enabled:!0,max_bytes:32768}});var SQ={};J4(SQ,{winjsStackLineParser:()=>Op1,stripReservedExceptionStepFields:()=>Pp8,reverseAndStripFrames:()=>Rp1,resolveExceptionStepsConfig:()=>su0,opera11StackLineParser:()=>wp1,opera10StackLineParser:()=>Lp1,nodeStackLineParser:()=>zp1,getUtf8ByteLength:()=>op1,geckoStackLineParser:()=>ru0,createStackParser:()=>Ip1,createDefaultStackParser:()=>Ep8,chromeStackLineParser:()=>ou0,StringCoercer:()=>vp1,ReduceableCache:()=>pp1,PromiseRejectionEventCoercer:()=>dp1,PrimitiveCoercer:()=>cp1,ObjectCoercer:()=>yp1,ExceptionStepsBuffer:()=>tp1,EventCoercer:()=>hp1,ErrorPropertiesBuilder:()=>Hp1,ErrorEventCoercer:()=>Cp1,ErrorCoercer:()=>Vp1,EXCEPTION_STEP_INTERNAL_FIELDS:()=>Si,DOMExceptionCoercer:()=>Mp1,DEFAULT_EXCEPTION_STEPS_CONFIG:()=>Z90});var ap1=D(()=>{Np1();qp1();ip1();np1();rp1()});var ZE=D(()=>{u50();_u0();mu0();$p1();Mi();Zp1();ap1();lX();Gp1();nu0();Jp1();sw()});import{createReadStream as Ip8}from"fs";import{createInterface as qp8}from"readline";async function Zn1($){let Z={};for(let Y=$.length-1;Y>=0;Y--){let G=$[Y],J=G?.filename;if(!G||typeof J!="string"||typeof G.lineno!="number"||_p8(J)||vp8(G))continue;if(!Z[J])Z[J]=[];Z[J].push(G.lineno)}let X=Object.keys(Z);if(X.length==0)return $;let Q=[];for(let Y of X){if($n1.get(Y))continue;let G=Z[Y];if(!G)continue;G.sort((K,F)=>K-F);let J=bp8(G);if(J.every((K)=>fp8(Y,K)))continue;let W=xp8(X90,Y,{});Q.push(Vp8(Y,J,W))}if(await Promise.all(Q).catch(()=>{}),$&&$.length>0)Sp8($,X90);return X90.reduce(),$}function Vp8($,Z,X){return new Promise((Q)=>{let Y=Ip8($),G=qp8({input:Y});function J(){Y.destroy(),Q()}let W=0,K=0,F=Z[K];if(F===void 0)return void J();let H=F[0],N=F[1];function U(){$n1.set($,1),G.close(),G.removeAllListeners(),J()}Y.on("error",U),G.on("error",U),G.on("close",J),G.on("line",(B)=>{if(W++,W<H)return;if(X[W]=yp8(B,0),W>=N){if(K===Z.length-1){G.close(),G.removeAllListeners();return}K++;let O=Z[K];if(O===void 0){G.close(),G.removeAllListeners();return}H=O[0],N=O[1]}})})}function Sp8($,Z){for(let X of $)if(X.filename&&X.context_line===void 0&&typeof X.lineno=="number"){let Q=Z.get(X.filename);if(Q===void 0)continue;Cp8(X.lineno,X,Q)}}function Cp8($,Z,X){if(Z.lineno===void 0||X===void 0)return;Z.pre_context=[];for(let Y=Xn1($);Y<$;Y++){let G=X[Y];if(G===void 0)return void sp1(Z);Z.pre_context.push(G)}if(X[$]===void 0)return void sp1(Z);Z.context_line=X[$];let Q=Qn1($);Z.post_context=[];for(let Y=$+1;Y<=Q;Y++){let G=X[Y];if(G===void 0)break;Z.post_context.push(G)}}function sp1($){delete $.pre_context,delete $.context_line,delete $.post_context}function _p8($){return $.startsWith("node:")||$.endsWith(".min.js")||$.endsWith(".min.cjs")||$.endsWith(".min.mjs")||$.startsWith("data:")}function vp8($){if($.lineno!==void 0&&$.lineno>kp8)return!0;if($.colno!==void 0&&$.colno>Mp8)return!0;return!1}function fp8($,Z){let X=X90.get($);if(X===void 0)return!1;for(let Q=Z[0];Q<=Z[1];Q++)if(X[Q]===void 0)return!1;return!0}function bp8($){if(!$.length)return[];let Z=0,X=$[0];if(typeof X!="number")return[];let Q=ep1(X),Y=[];while(!0){if(Z===$.length-1){Y.push(Q);break}let G=$[Z+1];if(typeof G!="number")break;if(G<=Q[1])Q[1]=G+eu0;else Y.push(Q),Q=ep1(G);Z++}return Y}function ep1($){return[Xn1($),Qn1($)]}function Xn1($){return Math.max(1,$-eu0)}function Qn1($){return $+eu0}function xp8($,Z,X){let Q=$.get(Z);if(Q===void 0)return $.set(Z,X),X;return Q}function yp8($,Z){let X=$,Q=X.length;if(Q<=150)return X;if(Z>Q)Z=Q;let Y=Math.max(Z-60,0);if(Y<5)Y=0;let G=Math.min(Y+140,Q);if(G>Q-5)G=Q;if(G===Q)Y=Math.max(G-140,0);if(X=X.slice(Y,G),Y>0)X=`...${X}`;if(G<Q)X+="...";return X}var X90,$n1,eu0=7,Mp8=1000,kp8=1e4;var Yn1=D(()=>{ZE();X90=new SQ.ReduceableCache(25),$n1=new SQ.ReduceableCache(20)});import{isAbsolute as gp8,relative as hp8,sep as up8}from"path";function Gn1($=process.cwd()){let Z=up8==="\\",X=(Y)=>Z?Y.replace(/\\/g,"/"):Y,Q=X($);return async(Y)=>{for(let G of Y)if(!(!G.filename||G.filename.startsWith("node:")||G.filename.startsWith("data:"))){if(gp8(G.filename))G.filename=X(hp8(Q,X(G.filename)))}return Y}}var Jn1=()=>{};function cp8($,Z){let X=!1;return Object.assign((Q)=>{let G=global.process.listeners("uncaughtException").filter((J)=>J.name!=="domainUncaughtExceptionClear"&&J._posthogErrorHandler!==!0).length===0;if($(Q,{mechanism:{type:"onuncaughtexception",handled:!1}}),!X&&G)X=!0,Z(Q)},{_posthogErrorHandler:!0})}function Wn1($,Z){globalThis.process?.on("uncaughtException",cp8($,Z))}function Kn1($){globalThis.process?.on("unhandledRejection",(Z)=>$(Z,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var Fn1=()=>{};class dG{constructor($,Z,X){this.client=$,this._exceptionAutocaptureEnabled=Z.enableExceptionAutocapture||!1,this._logger=X,this._rateLimiter=new xu0({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError($){return Ti($)&&"__posthog_previously_captured_error"in $&&$.__posthog_previously_captured_error===!0}static async buildEventMessage($,Z,X,Q){let Y={...Q},G=this.errorPropertiesBuilder.buildFromUnknown($,Z);return G.$exception_list=await this.errorPropertiesBuilder.modifyFrames(G.$exception_list),{event:"$exception",distinctId:X,properties:{...G,...Y},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){if(this.isEnabled())Wn1(this.onException.bind(this),this.onFatalError.bind(this)),Kn1(this.onException.bind(this))}onException($,Z){this.client.addPendingPromise((async()=>{if(!dG.isPreviouslyCapturedError($)){let X=await dG.buildEventMessage($,Z),Y=X.properties?.$exception_list[0]?.type??"Exception";if(this._rateLimiter.consumeRateLimit(Y))return void this._logger.info("Skipping exception capture because of client rate limiting.",{exception:Y});return this.client.capture(X)}})())}async onFatalError($){console.error($),await this.client.shutdown(lp8),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}}var lp8=2000;var Q90=D(()=>{Fn1();ZE()});var Hn1="5.30.6";var Nn1=()=>{};var Ci;var $c0=D(()=>{Ci={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"}});async function Un1($){let Z=globalThis.crypto?.subtle;if(!Z)throw Error("SubtleCrypto API not available");let X=await Z.digest("SHA-1",new TextEncoder().encode($));return Array.from(new Uint8Array(X)).map((Y)=>Y.toString(16).padStart(2,"0")).join("")}var Bn1=()=>{};class Zc0{constructor({pollingInterval:$,personalApiKey:Z,projectApiKey:X,timeout:Q,host:Y,customHeaders:G,...J}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollingInterval=$,this.personalApiKey=Z,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=Q,this.projectApiKey=X,this.host=Y,this.poller=void 0,this.fetch=J.fetch||fetch,this.onError=J.onError,this.customHeaders=G,this.onLoad=J.onLoad,this.cacheProvider=J.cacheProvider,this.strictLocalEvaluation=J.strictLocalEvaluation??!1,this.loadFeatureFlags()}debug($=!0){this.debugMode=$}logMsgIfDebug($){if(this.debugMode)$()}createEvaluationContext($,Z={},X={},Q={},Y={}){return{distinctId:$,groups:Z,personProperties:X,groupProperties:Q,evaluationCache:Y}}async getFeatureFlag($,Z,X={},Q={},Y={}){await this.loadFeatureFlags();let G,J;if(!this.loadedSuccessfullyOnce)return G;if(J=this.featureFlagsByKey[$],J!==void 0){let W=this.createEvaluationContext(Z,X,Q,Y);try{G=(await this.computeFlagAndPayloadLocally(J,W)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${$} -> ${G}`))}catch(K){if(K instanceof QK||K instanceof V4)this.logMsgIfDebug(()=>console.debug(`${K.name} when computing flag locally: ${$}: ${K.message}`));else if(K instanceof Error)this.onError?.(Error(`Error computing flag locally: ${$}: ${K}`))}}return G}async getAllFlagsAndPayloads($,Z){await this.loadFeatureFlags();let X={},Q={},Y=this.featureFlags.length==0,G=Z?Z.map((W)=>this.featureFlagsByKey[W]).filter(Boolean):this.featureFlags,J={...$,evaluationCache:$.evaluationCache??{}};return await Promise.all(G.map(async(W)=>{try{let{value:K,payload:F}=await this.computeFlagAndPayloadLocally(W,J);if(X[W.key]=K,F)Q[W.key]=F}catch(K){if(K instanceof QK||K instanceof V4)this.logMsgIfDebug(()=>console.debug(`${K.name} when computing flag locally: ${W.key}: ${K.message}`));else if(K instanceof Error)this.onError?.(Error(`Error computing flag locally: ${W.key}: ${K}`));Y=!0}})),{response:X,payloads:Q,fallbackToFlags:Y}}async computeFlagAndPayloadLocally($,Z,X={}){let{matchValue:Q,skipLoadCheck:Y=!1}=X;if(!Y)await this.loadFeatureFlags();if(!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let G;G=Q!==void 0?Q:await this.computeFlagValueLocally($,Z);let J=this.getFeatureFlagPayload($.key,G);return{value:G,payload:J}}async computeFlagValueLocally($,Z){let{distinctId:X,groups:Q,personProperties:Y,groupProperties:G}=Z;if($.ensure_experience_continuity)throw new V4("Flag has experience continuity enabled");if(!$.active)return!1;let W=($.filters||{}).aggregation_group_type_index;if(W!=null){let K=this.groupTypeMapping[String(W)];if(!K)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${W} for feature flag ${$.key}`)),new V4("Flag has unknown group type index");if(!(K in Q))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${$.key} without group names passed in`)),!1;if($.bucketing_identifier==="device_id"&&(Y?.$device_id===void 0||Y?.$device_id===null||Y?.$device_id===""))this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${$.key}`));let F=G[K];return await this.matchFeatureFlagProperties($,Q[K],F,Z)}{let K=this.getBucketingValueForFlag($,X,Y);if(K===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${$.key} without $device_id, falling back to server evaluation`)),new V4(`Can't compute feature flag: ${$.key} without $device_id`);return await this.matchFeatureFlagProperties($,K,Y,Z)}}getBucketingValueForFlag($,Z,X){if($.filters?.aggregation_group_type_index!=null)return Z;if($.bucketing_identifier==="device_id"){let Q=X?.$device_id;if(Q==null||Q==="")return;return Q}return Z}getFeatureFlagPayload($,Z){let X=null;if(Z!==!1&&Z!=null){if(typeof Z=="boolean")X=this.featureFlagsByKey?.[$]?.filters?.payloads?.[Z.toString()]||null;else if(typeof Z=="string")X=this.featureFlagsByKey?.[$]?.filters?.payloads?.[Z]||null;if(X!=null){if(typeof X=="object")return X;if(typeof X=="string")try{return JSON.parse(X)}catch{}return X}}return null}async evaluateFlagDependency($,Z,X){let{evaluationCache:Q}=X,Y=$.key;if(!this.featureFlagsByKey)throw new V4("Feature flags not available for dependency evaluation");if(!("dependency_chain"in $))throw new V4(`Flag dependency property for '${Y}' is missing required 'dependency_chain' field`);let G=$.dependency_chain;if(!Array.isArray(G))throw new V4(`Flag dependency property for '${Y}' has an invalid 'dependency_chain' (expected array, got ${typeof G})`);if(G.length===0)throw new V4(`Circular dependency detected for flag '${Y}' (empty dependency chain)`);for(let W of G){if(!(W in Q)){let F=this.featureFlagsByKey[W];if(F)if(F.active)try{let H=await this.computeFlagValueLocally(F,X);Q[W]=H}catch(H){throw new V4(`Error evaluating flag dependency '${W}' for flag '${Y}': ${H}`)}else Q[W]=!1;else throw new V4(`Missing flag dependency '${W}' for flag '${Y}'`)}if(Q[W]==null)throw new V4(`Dependency '${W}' could not be evaluated`)}let J=Q[Y];return this.flagEvaluatesToExpectedValue($.value,J)}flagEvaluatesToExpectedValue($,Z){if(typeof $=="boolean")return $===Z||typeof Z=="string"&&Z!==""&&$===!0;if(typeof $=="string")return Z===$;return!1}async matchFeatureFlagProperties($,Z,X,Q){let Y=$.filters||{},G=Y.groups||[],J=!1,W;for(let K of G)try{if(await this.isConditionMatch($,Z,K,X,Q)){let F=K.variant,H=Y.multivariate?.variants||[];W=F&&H.some((N)=>N.key===F)?F:await this.getMatchingVariant($,Z)||!0;break}}catch(F){if(F instanceof QK)throw F;if(F instanceof V4)J=!0;else throw F}if(W!==void 0)return W;if(J)throw new V4("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch($,Z,X,Q,Y){let G=X.rollout_percentage,J=(W)=>{this.logMsgIfDebug(()=>console.warn(W))};if((X.properties||[]).length>0){for(let W of X.properties){let K=W.type,F=!1;if(F=K==="cohort"?En1(W,Q,this.cohorts,this.debugMode):K==="flag"?await this.evaluateFlagDependency(W,Q,Y):wn1(W,Q,J),!F)return!1}if(G==null)return!0}if(G!=null&&await On1($.key,Z)>G/100)return!1;return!0}async getMatchingVariant($,Z){let X=await On1($.key,Z,"variant"),Q=this.variantLookupTable($).find((Y)=>X>=Y.valueMin&&X<Y.valueMax);if(Q)return Q.key}variantLookupTable($){let Z=[],X=0,Q=0;return(($.filters||{}).multivariate?.variants||[]).forEach((J)=>{Q=X+J.rollout_percentage/100,Z.push({valueMin:X,valueMax:Q,key:J.key}),X=Q}),Z}updateFlagState($){this.featureFlags=$.flags,this.featureFlagsByKey=$.flags.reduce((Z,X)=>(Z[X.key]=X,Z),{}),this.groupTypeMapping=$.groupTypeMapping,this.cohorts=$.cohorts,this.loadedSuccessfullyOnce=!0}warnAboutExperienceContinuityFlags($){if(this.strictLocalEvaluation)return;let Z=$.filter((X)=>X.ensure_experience_continuity);if(Z.length>0)console.warn(`[PostHog] You are using local evaluation but ${Z.length} flag(s) have experience continuity enabled: ${Z.map((X)=>X.key).join(", ")}. Experience continuity is incompatible with local evaluation and will cause a server request on every flag evaluation, negating local evaluation cost savings. To avoid server requests and unexpected costs, either disable experience continuity on these flags in PostHog, use strictLocalEvaluation: true in client init, or pass onlyEvaluateLocally: true per flag call (flags that cannot be evaluated locally will return undefined).`)}async loadFromCache($){if(!this.cacheProvider)return!1;try{let Z=await this.cacheProvider.getFlagDefinitions();if(Z)return this.updateFlagState(Z),this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] ${$} (${Z.flags.length} flags)`)),this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(Z.flags),!0;return!1}catch(Z){return this.onError?.(Error(`Failed to load from cache: ${Z}`)),!1}}async loadFeatureFlags($=!1){if(this.loadedSuccessfullyOnce&&!$)return;if(!$&&this.nextFetchAllowedAt&&Date.now()<this.nextFetchAllowedAt)return void this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Skipping fetch, in backoff period"));if(!this.loadingPromise)this.loadingPromise=this._loadFeatureFlags().catch((Z)=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${Z}`))).finally(()=>{this.loadingPromise=void 0});return this.loadingPromise}isLocalEvaluationReady(){return(this.loadedSuccessfullyOnce??!1)&&(this.featureFlags?.length??0)>0}getFlagDefinitionsLoadedAt(){return this.flagDefinitionsLoadedAt}getPollingInterval(){if(!this.shouldBeginExponentialBackoff)return this.pollingInterval;return Math.min(dp8,this.pollingInterval*2**this.backOffCount)}beginBackoff(){this.shouldBeginExponentialBackoff=!0,this.backOffCount+=1,this.nextFetchAllowedAt=Date.now()+this.getPollingInterval()}clearBackoff(){this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.nextFetchAllowedAt=void 0}async _loadFeatureFlags(){if(this.poller)clearTimeout(this.poller),this.poller=void 0;this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval());try{let $=!0;if(this.cacheProvider)try{$=await this.cacheProvider.shouldFetchFlagDefinitions()}catch(X){this.onError?.(Error(`Error in shouldFetchFlagDefinitions: ${X}`))}if(!$){if(await this.loadFromCache("Loaded flags from cache (skipped fetch)"))return;if(this.loadedSuccessfullyOnce)return}let Z=await this._requestFeatureFlagDefinitions();if(!Z)return;switch(Z.status){case 304:this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Flags not modified (304), using cached data")),this.flagsEtag=Z.headers?.get("ETag")??this.flagsEtag,this.loadedSuccessfullyOnce=!0,this.clearBackoff();return;case 401:throw this.beginBackoff(),new mx(`Your project key or personal API key is invalid. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 402:console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all local flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={};return;case 403:throw this.beginBackoff(),new mx(`Your personal API key does not have permission to fetch feature flag definitions for local evaluation. Setting next polling interval to ${this.getPollingInterval()}ms. Are you sure you're using the correct personal and Project API key pair? More information: https://posthog.com/docs/api/overview`);case 429:throw this.beginBackoff(),new mx(`You are being rate limited. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 200:{let X=await Z.json()??{};if(!("flags"in X))return void this.onError?.(Error(`Invalid response when getting feature flags: ${JSON.stringify(X)}`));this.flagsEtag=Z.headers?.get("ETag")??void 0;let Q={flags:X.flags??[],groupTypeMapping:X.group_type_mapping||{},cohorts:X.cohorts||{}};if(this.updateFlagState(Q),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&$)try{await this.cacheProvider.onFlagDefinitionsReceived(Q)}catch(Y){this.onError?.(Error(`Failed to store in cache: ${Y}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(Q.flags);break}default:return}}catch($){if($ instanceof mx)this.onError?.($)}}getPersonalApiKeyRequestOptions($="GET",Z){let X={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};if(Z)X["If-None-Match"]=Z;return{method:$,headers:X}}_requestFeatureFlagDefinitions(){let $=`${this.host}/flags/definitions?token=${this.projectApiKey}&send_cohorts`,Z=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),X=null;if(this.timeout&&typeof this.timeout=="number"){let Q=new AbortController;X=RH(()=>{Q.abort()},this.timeout),Z.signal=Q.signal}try{let Q=this.fetch;return Q($,Z)}finally{clearTimeout(X)}}async stopPoller($=30000){if(clearTimeout(this.poller),this.cacheProvider)try{let Z=this.cacheProvider.shutdown();if(Z instanceof Promise)await Promise.race([Z,new Promise((X,Q)=>setTimeout(()=>Q(Error(`Cache shutdown timeout after ${$}ms`)),$))])}catch(Z){this.onError?.(Error(`Error during cache shutdown: ${Z}`))}}}async function On1($,Z,X=""){let Q=await Un1(`${$}.${Z}${X}`);return parseInt(Q.slice(0,15),16)/mp8}function wn1($,Z,X){let{key:Q,value:Y}=$,G=$.operator||"exact";if(Q in Z){if(G==="is_not_set")throw new V4("Operator is_not_set is not supported")}else throw new V4(`Property ${Q} not found in propertyValues`);let J=Z[Q];if(J==null&&!ip8.includes(G)){if(X)X(`Property ${Q} cannot have a value of null/undefined with the ${G} operator`);return!1}function W(F,H){if(Array.isArray(F))return F.map((N)=>String(N).toLowerCase()).includes(String(H).toLowerCase());return String(F).toLowerCase()===String(H).toLowerCase()}function K(F,H,N){if(N==="gt")return F>H;if(N==="gte")return F>=H;if(N==="lt")return F<H;if(N==="lte")return F<=H;throw Error(`Invalid operator: ${N}`)}switch(G){case"exact":return W(Y,J);case"is_not":return!W(Y,J);case"is_set":return Q in Z;case"icontains":return String(J).toLowerCase().includes(String(Y).toLowerCase());case"not_icontains":return!String(J).toLowerCase().includes(String(Y).toLowerCase());case"regex":return Dn1(String(Y))&&String(J).match(String(Y))!==null;case"not_regex":return Dn1(String(Y))&&String(J).match(String(Y))===null;case"gt":case"gte":case"lt":case"lte":{let F=typeof Y=="number"?Y:null;if(typeof Y=="string")try{F=parseFloat(Y)}catch(H){}if(F==null||J==null)return K(String(J),String(Y),G);if(typeof J=="string")return K(J,String(Y),G);return K(J,F,G)}case"is_date_after":case"is_date_before":{if(typeof Y=="boolean")throw new V4("Date operations cannot be performed on boolean values");let F=rp8(String(Y));if(F==null)F=Ln1(Y);if(F==null)throw new V4(`Invalid date: ${Y}`);let H=Ln1(J);if(["is_date_before"].includes(G))return H<F;return H>F}case"semver_eq":return mG(B7(String(J)),B7(String(Y)))===0;case"semver_neq":return mG(B7(String(J)),B7(String(Y)))!==0;case"semver_gt":return mG(B7(String(J)),B7(String(Y)))>0;case"semver_gte":return mG(B7(String(J)),B7(String(Y)))>=0;case"semver_lt":return mG(B7(String(J)),B7(String(Y)))<0;case"semver_lte":return mG(B7(String(J)),B7(String(Y)))<=0;case"semver_tilde":{let F=B7(String(J)),{lower:H,upper:N}=np8(String(Y));return mG(F,H)>=0&&mG(F,N)<0}case"semver_caret":{let F=B7(String(J)),{lower:H,upper:N}=tp8(String(Y));return mG(F,H)>=0&&mG(F,N)<0}case"semver_wildcard":{let F=B7(String(J)),{lower:H,upper:N}=op8(String(Y));return mG(F,H)>=0&&mG(F,N)<0}default:throw new V4(`Unknown operator: ${G}`)}}function pp8($,Z){if(!($ in Z))throw new QK(`cohort ${$} not found in local cohorts - likely a static cohort that requires server evaluation`)}function En1($,Z,X,Q=!1){let Y=String($.value);pp8(Y,X);let G=X[Y];return jn1(G,Z,X,Q)}function jn1($,Z,X,Q=!1){if(!$)return!0;let{type:Y,values:G}=$;if(!G||G.length===0)return!0;let J=!1;if("values"in G[0]){for(let W of G)try{let K=jn1(W,Z,X,Q);if(Y==="AND"){if(!K)return!1}else if(K)return!0}catch(K){if(K instanceof QK)throw K;if(K instanceof V4){if(Q)console.debug(`Failed to compute property ${W} locally: ${K}`);J=!0}else throw K}if(J)throw new V4("Can't match cohort without a given cohort property value");return Y==="AND"}for(let W of G)try{let K;if(W.type==="cohort")K=En1(W,Z,X,Q);else if(W.type==="flag"){if(Q)console.warn(`[FEATURE FLAGS] Flag dependency filters are not supported in local evaluation. Skipping condition with dependency on flag '${W.key||"unknown"}'`);continue}else K=wn1(W,Z);let F=W.negation||!1;if(Y==="AND"){if(!K&&!F)return!1;if(K&&F)return!1}else{if(K&&!F)return!0;if(!K&&F)return!0}}catch(K){if(K instanceof QK)throw K;if(K instanceof V4){if(Q)console.debug(`Failed to compute property ${W} locally: ${K}`);J=!0}else throw K}if(J)throw new V4("can't match cohort without a given cohort property value");return Y==="AND"}function Dn1($){try{return new RegExp($),!0}catch(Z){return!1}}function B7($){let X=String($).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!X||X.startsWith("."))throw new V4(`Invalid semver: ${$}`);let Q=X.split("."),Y=(K)=>{if(K===void 0||K==="")return 0;if(!/^\d+$/.test(K))throw new V4(`Invalid semver: ${$}`);return parseInt(K,10)},G=Y(Q[0]),J=Y(Q[1]),W=Y(Q[2]);return[G,J,W]}function mG($,Z){for(let X=0;X<3;X++){if($[X]<Z[X])return-1;if($[X]>Z[X])return 1}return 0}function np8($){let Z=B7($),X=[Z[0],Z[1],Z[2]],Q=[Z[0],Z[1]+1,0];return{lower:X,upper:Q}}function tp8($){let Z=B7($),[X,Q,Y]=Z,G=[X,Q,Y],J;return J=X>0?[X+1,0,0]:Q>0?[0,Q+1,0]:[0,0,Y+1],{lower:G,upper:J}}function op8($){let X=String($).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!X)throw new V4(`Invalid wildcard semver: ${$}`);let Q=X.split("."),Y=parseInt(Q[0],10);if(isNaN(Y))throw new V4(`Invalid wildcard semver: ${$}`);let G,J;if(Q.length===1)G=[Y,0,0],J=[Y+1,0,0];else{let W=parseInt(Q[1],10);if(isNaN(W))throw new V4(`Invalid wildcard semver: ${$}`);G=[Y,W,0],J=[Y,W+1,0]}return{lower:G,upper:J}}function Ln1($){if($ instanceof Date)return $;if(typeof $=="string"||typeof $=="number"){let Z=new Date($);if(!isNaN(Z.valueOf()))return Z;throw new V4(`${$} is in an invalid date format`)}throw new V4(`The date provided ${$} must be a string, number, or date object`)}function rp8($){let Z=/^-?(?<number>[0-9]+)(?<interval>[a-z])$/,X=$.match(Z),Q=new Date(new Date().toISOString());if(!X)return null;{if(!X.groups)return null;let Y=parseInt(X.groups.number);if(Y>=1e4)return null;let G=X.groups.interval;if(G=="h")Q.setUTCHours(Q.getUTCHours()-Y);else if(G=="d")Q.setUTCDate(Q.getUTCDate()-Y);else if(G=="w")Q.setUTCDate(Q.getUTCDate()-7*Y);else if(G=="m")Q.setUTCMonth(Q.getUTCMonth()-Y);else{if(G!="y")return null;Q.setUTCFullYear(Q.getUTCFullYear()-Y)}return Q}}var dp8=60000,mp8=1152921504606847000,ip8,mx,V4,QK;var zn1=D(()=>{ZE();Bn1();ip8=["is_not"];mx=class mx extends Error{constructor($){super();Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=$,Object.setPrototypeOf(this,mx.prototype)}};V4=class V4 extends Error{constructor($){super($);this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,V4.prototype)}};QK=class QK extends Error{constructor($){super($);this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,QK.prototype)}}});class Xc0{getProperty($){return this._memoryStorage[$]}setProperty($,Z){this._memoryStorage[$]=Z!==null?Z:void 0}constructor(){this._memoryStorage={}}}var Pn1=()=>{};function Xn8($){return typeof $=="string"?$.trim():""}function Qn8($){return(typeof $=="string"?$.trim():"")||void 0}function Yn8($){return(typeof $=="string"?$.trim():"")||Zn8}var ap8=100,An1=30000,sp8=50000,ep8=50,$n8=500,Zn8="https://us.i.posthog.com",Qc0;var Tn1=D(()=>{Nn1();ZE();$c0();zn1();Q90();Pn1();Qc0=class Qc0 extends r50{constructor($,Z={}){let X=Xn8($),Q={...Z,host:Yn8(Z.host),personalApiKey:Qn8(Z.personalApiKey)};if(super(X,Q),this._memoryStorage=new Xc0,this.options=Q,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof Q.featureFlagsPollingInterval=="number"?Math.max(Q.featureFlagsPollingInterval,ap8):An1,typeof Q.waitUntilDebounceMs=="number")this.options.waitUntilDebounceMs=Math.max(Q.waitUntilDebounceMs,0);if(typeof Q.waitUntilMaxWaitMs=="number")this.options.waitUntilMaxWaitMs=Math.max(Q.waitUntilMaxWaitMs,0);if(Q.personalApiKey){if(Q.personalApiKey.includes("phc_"))throw Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');if(Q.enableLocalEvaluation!==!1)this.featureFlagsPoller=new Zc0({pollingInterval:this.options.featureFlagsPollingInterval,personalApiKey:Q.personalApiKey,projectApiKey:X,timeout:Q.requestTimeout??1e4,host:this.host,fetch:Q.fetch,onError:(G)=>{this._events.emit("error",G)},onLoad:(G)=>{this._events.emit("localEvaluationFlagsLoaded",G)},customHeaders:this.getCustomHeaders(),cacheProvider:Q.flagDefinitionCacheProvider,strictLocalEvaluation:Q.strictLocalEvaluation})}this.errorTracking=new dG(this,Q,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=Q.maxCacheSize||sp8}enqueue($,Z,X){super.enqueue($,Z,X),this.scheduleDebouncedFlush()}async flush(){let $=super.flush(),Z=this.options.waitUntil;if(Z&&!this._waitUntilCycle)try{Z($.catch(()=>{}))}catch{}return $}scheduleDebouncedFlush(){let $=this.options.waitUntil;if(!$)return;if(this.disabled||this.optedOut)return;if(!this._waitUntilCycle){let G,J=new Promise((W)=>{G=W});try{$(J)}catch{return}this._waitUntilCycle={resolve:G,startedAt:Date.now(),timer:void 0}}let Z=Date.now()-this._waitUntilCycle.startedAt,X=this.options.waitUntilMaxWaitMs??$n8,Q=Z>=X;if(this._waitUntilCycle.timer!==void 0)clearTimeout(this._waitUntilCycle.timer);if(Q)return void this.resolveWaitUntilFlush();let Y=this.options.waitUntilDebounceMs??ep8;this._waitUntilCycle.timer=RH(()=>{this.resolveWaitUntilFlush()},Y)}_consumeWaitUntilCycle(){let $=this._waitUntilCycle;if($)clearTimeout($.timer),this._waitUntilCycle=void 0;return $?.resolve}async resolveWaitUntilFlush(){let $=this._consumeWaitUntilCycle();try{await super.flush()}catch{}finally{$?.()}}getPersistedProperty($){return this._memoryStorage.getProperty($)}setPersistedProperty($,Z){return this._memoryStorage.setProperty($,Z)}fetch($,Z){return this.options.fetch?this.options.fetch($,Z):fetch($,Z)}getLibraryVersion(){return Hn1}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}enable(){return super.optIn()}disable(){return super.optOut()}debug($=!0){super.debug($),this.featureFlagsPoller?.debug($)}capture($){if(typeof $=="string")this._logger.warn("Called capture() with a string as the first argument when an object was expected.");if($.event==="$exception"&&!$._originatedFromCaptureException)this._logger.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically.");this.addPendingPromise(this.prepareEventMessage($).then(({distinctId:Z,event:X,properties:Q,options:Y})=>super.captureStateless(Z,X,Q,{timestamp:Y.timestamp,disableGeoip:Y.disableGeoip,uuid:Y.uuid})).catch((Z)=>{if(Z)console.error(Z)}))}async captureImmediate($){if(typeof $=="string")this._logger.warn("Called captureImmediate() with a string as the first argument when an object was expected.");if($.event==="$exception"&&!$._originatedFromCaptureException)this._logger.warn("Capturing a `$exception` event via `posthog.captureImmediate('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureExceptionImmediate(error)` instead, which attaches this metadata by default.");return this.addPendingPromise(this.prepareEventMessage($).then(({distinctId:Z,event:X,properties:Q,options:Y})=>super.captureStatelessImmediate(Z,X,Q,{timestamp:Y.timestamp,disableGeoip:Y.disableGeoip,uuid:Y.uuid})).catch((Z)=>{if(Z)console.error(Z)}))}identify({distinctId:$,properties:Z={},disableGeoip:X}){let{$set:Q,$set_once:Y,$anon_distinct_id:G,...J}=Z,F={$set:Q||J,$set_once:Y||{},$anon_distinct_id:G??void 0};super.identifyStateless($,F,{disableGeoip:X})}async identifyImmediate({distinctId:$,properties:Z={},disableGeoip:X}){let{$set:Q,$set_once:Y,$anon_distinct_id:G,...J}=Z,F={$set:Q||J,$set_once:Y||{},$anon_distinct_id:G??void 0};super.identifyStatelessImmediate($,F,{disableGeoip:X})}alias($){super.aliasStateless($.alias,$.distinctId,void 0,{disableGeoip:$.disableGeoip})}async aliasImmediate($){await super.aliasStatelessImmediate($.alias,$.distinctId,void 0,{disableGeoip:$.disableGeoip})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}async waitForLocalEvaluationReady($=An1){if(this.isLocalEvaluationReady())return!0;if(this.featureFlagsPoller===void 0)return!1;return new Promise((Z)=>{let X=setTimeout(()=>{Q(),Z(!1)},$),Q=this._events.on("localEvaluationFlagsLoaded",(Y)=>{clearTimeout(X),Q(),Z(Y>0)})})}_resolveDistinctId($,Z){if(typeof $=="string")return{distinctId:$,options:Z};return{distinctId:this.context?.get()?.distinctId,options:$}}async _getFeatureFlagResult($,Z,X={},Q){let Y=X.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&$ in this._flagOverrides){let P=this._flagOverrides[$];if(P===void 0)return;let I=this._payloadOverrides?.[$];return{key:$,enabled:P!==!1,variant:typeof P=="string"?P:void 0,payload:I}}let{groups:G,disableGeoip:J}=X,{onlyEvaluateLocally:W,personProperties:K,groupProperties:F}=X,H=this.addLocalPersonAndGroupProperties(Z,G,K,F);K=H.allPersonProperties,F=H.allGroupProperties;let N=this.createFeatureFlagEvaluationContext(Z,G,K,F);if(W==null)W=this.options.strictLocalEvaluation??!1;let U,B=!1,O,L,w,E,j,z;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let P=this.featureFlagsPoller?.featureFlagsByKey[$];if(P)try{let I=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(P,N,{matchValue:Q});if(I){B=!0;let k=I.value;E=P.id,z="Evaluated locally",U={key:$,enabled:k!==!1,variant:typeof k=="string"?k:void 0,payload:I.payload??void 0}}}catch(I){if(I instanceof QK||I instanceof V4)this._logger?.info(`${I.name} when computing flag locally: ${$}: ${I.message}`);else throw I}}if(!B&&!W){let P=await super.getFeatureFlagDetailsStateless(N.distinctId,N.groups,N.personProperties,N.groupProperties,J,[$]);if(P===void 0)w=Ci.UNKNOWN_ERROR;else{O=P.requestId,L=P.evaluatedAt;let I=[];if(P.errorsWhileComputingFlags)I.push(Ci.ERRORS_WHILE_COMPUTING);if(P.quotaLimited?.includes("feature_flags"))I.push(Ci.QUOTA_LIMITED);let k=P.flags[$];if(k===void 0)I.push(Ci.FLAG_MISSING);else{E=k.metadata?.id,j=k.metadata?.version,z=k.reason?.description??k.reason?.code;let M;if(k.metadata?.payload!==void 0)try{M=JSON.parse(k.metadata.payload)}catch{M=k.metadata.payload}U={key:$,enabled:k.enabled,variant:k.variant,payload:M}}if(I.length>0)w=I.join(",")}}if(Y){let P=U===void 0?void 0:U.enabled===!1?!1:U.variant??!0,I=`${$}_${P}`;if(!(Z in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[Z].includes(I)){if(Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize)this.distinctIdHasSentFlagCalls={};if(Array.isArray(this.distinctIdHasSentFlagCalls[Z]))this.distinctIdHasSentFlagCalls[Z].push(I);else this.distinctIdHasSentFlagCalls[Z]=[I];let k={$feature_flag:$,$feature_flag_response:P,$feature_flag_id:E,$feature_flag_version:j,$feature_flag_reason:z,locally_evaluated:B,[`$feature/${$}`]:P,$feature_flag_request_id:O,$feature_flag_evaluated_at:B?Date.now():L};if(B&&this.featureFlagsPoller){let M=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();if(M!==void 0)k.$feature_flag_definitions_loaded_at=M}if(w)k.$feature_flag_error=w;this.capture({distinctId:Z,event:"$feature_flag_called",properties:k,groups:G,disableGeoip:J})}}if(U!==void 0&&this._payloadOverrides!==void 0&&$ in this._payloadOverrides)U={...U,payload:this._payloadOverrides[$]};return U}async getFeatureFlag($,Z,X){let Q=await this._getFeatureFlagResult($,Z,{...X,sendFeatureFlagEvents:X?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(Q===void 0)return;if(Q.enabled===!1)return!1;return Q.variant??!0}async getFeatureFlagPayload($,Z,X,Q){if(this._payloadOverrides!==void 0&&$ in this._payloadOverrides)return this._payloadOverrides[$];let Y=await this._getFeatureFlagResult($,Z,{...Q,sendFeatureFlagEvents:!1},X);if(Y===void 0)return;return Y.payload??null}async getFeatureFlagResult($,Z,X){let{distinctId:Q,options:Y}=this._resolveDistinctId(Z,X);if(!Q)return void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()");return this._getFeatureFlagResult($,Q,{...Y,sendFeatureFlagEvents:Y?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0})}async getRemoteConfigPayload($){if(!this.options.personalApiKey)throw Error("Personal API key is required for remote config payload decryption");let Z=await this._requestRemoteConfigPayload($);if(!Z)return;let X=await Z.json();if(typeof X=="string")try{return JSON.parse(X)}catch(Q){}return X}async isFeatureEnabled($,Z,X){let Q=await this.getFeatureFlag($,Z,X);if(Q===void 0)return;return!!Q||!1}async getAllFlags($,Z){let{distinctId:X,options:Q}=this._resolveDistinctId($,Z);if(!X)return this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{};return(await this.getAllFlagsAndPayloads(X,Q)).featureFlags||{}}async getAllFlagsAndPayloads($,Z){let{distinctId:X,options:Q}=this._resolveDistinctId($,Z);if(!X)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};let{groups:Y,disableGeoip:G,flagKeys:J}=Q||{},{onlyEvaluateLocally:W,personProperties:K,groupProperties:F}=Q||{},H=this.addLocalPersonAndGroupProperties(X,Y,K,F);K=H.allPersonProperties,F=H.allGroupProperties;let N=this.createFeatureFlagEvaluationContext(X,Y,K,F);if(W==null)W=this.options.strictLocalEvaluation??!1;let U=await this.featureFlagsPoller?.getAllFlagsAndPayloads(N,J),B={},O={},L=!0;if(U)B=U.response,O=U.payloads,L=U.fallbackToFlags;if(L&&!W){let w=await super.getFeatureFlagsAndPayloadsStateless(N.distinctId,N.groups,N.personProperties,N.groupProperties,G,J);B={...B,...w.flags||{}},O={...O,...w.payloads||{}}}if(this._flagOverrides!==void 0)B={...B,...this._flagOverrides};if(this._payloadOverrides!==void 0)O={...O,...this._payloadOverrides};return{featureFlags:B,featureFlagPayloads:O}}groupIdentify({groupType:$,groupKey:Z,properties:X,distinctId:Q,disableGeoip:Y}){super.groupIdentifyStateless($,Z,X,{disableGeoip:Y},Q)}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags($){let Z=(X)=>Object.fromEntries(X.map((Q)=>[Q,!0]));if($===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray($)){this._flagOverrides=Z($);return}if(this._isFeatureFlagOverrideOptions($)){if("flags"in $){if($.flags===!1)this._flagOverrides=void 0;else if(Array.isArray($.flags))this._flagOverrides=Z($.flags);else if($.flags!==void 0)this._flagOverrides={...$.flags}}if("payloads"in $){if($.payloads===!1)this._payloadOverrides=void 0;else if($.payloads!==void 0)this._payloadOverrides={...$.payloads}}return}this._flagOverrides={...$}}_isFeatureFlagOverrideOptions($){if(typeof $!="object"||$===null||Array.isArray($))return!1;let Z=$;if("flags"in Z){let X=Z.flags;if(X===!1||Array.isArray(X)||typeof X=="object"&&X!==null)return!0}if("payloads"in Z){let X=Z.payloads;if(X===!1||typeof X=="object"&&X!==null)return!0}return!1}withContext($,Z,X){if(!this.context)return Z();return this.context.run($,Z,X)}getContext(){return this.context?.get()}enterContext($,Z){this.context?.enter($,Z)}async _shutdown($){let Z=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller($),this.errorTracking.shutdown();try{return await super._shutdown($)}finally{Z?.()}}async _requestRemoteConfigPayload($){if(!this.options.personalApiKey)return;let Z=`${this.host}/api/projects/@current/feature_flags/${$}/remote_config?token=${encodeURIComponent(this.apiKey)}`,X={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},Q=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let Y=new AbortController;Q=RH(()=>{Y.abort()},this.options.requestTimeout),X.signal=Y.signal}try{return await this.fetch(Z,X)}catch(Y){this._events.emit("error",Y);return}finally{if(Q)clearTimeout(Q)}}extractPropertiesFromEvent($,Z){if(!$)return{personProperties:{},groupProperties:{}};let X={},Q={};for(let[Y,G]of Object.entries($))if(bi1(G)&&Z&&Y in Z){let J={};for(let[W,K]of Object.entries(G))J[String(W)]=String(K);Q[String(Y)]=J}else X[String(Y)]=String(G);return{personProperties:X,groupProperties:Q}}async getFeatureFlagsForEvent($,Z,X,Q){let Y=Q?.personProperties||{},G=Q?.groupProperties||{},J=Q?.flagKeys;if(Q?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if(!((this.featureFlagsPoller?.featureFlags?.length||0)>0))return{};else{let K={};for(let[F,H]of Object.entries(Z||{}))K[F]=String(H);return await this.getAllFlags($,{groups:K,personProperties:Y,groupProperties:G,disableGeoip:X,onlyEvaluateLocally:!0,flagKeys:J})}if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let K={};for(let[F,H]of Object.entries(Z||{}))K[F]=String(H);return await this.getAllFlags($,{groups:K,personProperties:Y,groupProperties:G,disableGeoip:X,onlyEvaluateLocally:!0,flagKeys:J})}return(await super.getFeatureFlagsStateless($,Z,Y,G,X)).flags}addLocalPersonAndGroupProperties($,Z,X,Q){let Y={distinct_id:$,...X||{}},G={};if(Z)for(let J of Object.keys(Z))G[J]={$group_key:Z[J],...Q?.[J]||{}};return{allPersonProperties:Y,allGroupProperties:G}}createFeatureFlagEvaluationContext($,Z,X,Q){return{distinctId:$,groups:Z||{},personProperties:X||{},groupProperties:Q||{},evaluationCache:{}}}captureException($,Z,X,Q){if(!dG.isPreviouslyCapturedError($)){let Y=Error("PostHog syntheticException");this.addPendingPromise(dG.buildEventMessage($,{syntheticException:Y},Z,X).then((G)=>this.capture({...G,uuid:Q})))}}async captureExceptionImmediate($,Z,X){if(!dG.isPreviouslyCapturedError($)){let Q=Error("PostHog syntheticException");return this.addPendingPromise(dG.buildEventMessage($,{syntheticException:Q},Z,X).then((Y)=>this.captureImmediate(Y)))}}async prepareEventMessage($){let{distinctId:Z,event:X,properties:Q,groups:Y,sendFeatureFlags:G,timestamp:J,disableGeoip:W,uuid:K}=$,F=this.context?.get(),H=Z||F?.distinctId,N={...this.props,...F?.properties||{},...Q||{}};if(!H)H=gB(),N.$process_person_profile=!1;if(F?.sessionId&&!N.$session_id)N.$session_id=F.sessionId;let U=this._runBeforeSend({distinctId:H,event:X,properties:N,groups:Y,sendFeatureFlags:G,timestamp:J,disableGeoip:W,uuid:K});if(!U)return Promise.reject(null);let B=await Promise.resolve().then(async()=>{if(G){let O=typeof G=="object"?G:void 0;return await this.getFeatureFlagsForEvent(U.distinctId,Y,W,O)}return U.event,{}}).then((O)=>{let L={};if(O)for(let[E,j]of Object.entries(O))L[`$feature/${E}`]=j;let w=Object.keys(O||{}).filter((E)=>O?.[E]!==!1).sort();if(w.length>0)L.$active_feature_flags=w;return L}).catch(()=>({})).then((O)=>{return{...O,...U.properties||{},$groups:U.groups||Y}});if(U.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof B.$raw_user_agent=="string"){if(Si1(B.$raw_user_agent,this.options.custom_blocked_useragents||[]))U.event="$bot_pageview",B.$browser_type="bot"}return{distinctId:U.distinctId,event:U.event,properties:B,options:{timestamp:U.timestamp,disableGeoip:U.disableGeoip,uuid:U.uuid}}}_runBeforeSend($){let Z=this.options.before_send;if(!Z)return $;let X=Array.isArray(Z)?Z:[Z],Q=$;for(let Y of X){if(Q=Y(Q),!Q)return this._logger.info(`Event '${$.event}' was rejected in beforeSend function`),null;if(!Q.properties||Object.keys(Q.properties).length===0){let G=`Event '${Q.event}' has no properties after beforeSend function, this is likely an error.`;this._logger.warn(G)}}return Q}}});import{AsyncLocalStorage as Gn8}from"async_hooks";class Yc0{constructor(){this.storage=new Gn8}get(){return this.storage.getStore()}run($,Z,X){return this.storage.run(this.resolve($,X),Z)}enter($,Z){this.storage.enterWith(this.resolve($,Z))}resolve($,Z){if(Z?.fresh===!0)return $;let X=this.get()||{};return{distinctId:$.distinctId??X.distinctId,sessionId:$.sessionId??X.sessionId,properties:{...X.properties||{},...$.properties||{}}}}}var Rn1=()=>{};function Jn8($,{organization:Z,projectId:X,prefix:Q,severityAllowList:Y=["error"],sendExceptionsToPostHog:G=!0}={}){return(J)=>{if(!(Y==="*"||Y.includes(J.level)))return J;if(!J.tags)J.tags={};let K=J.tags[In1.POSTHOG_ID_TAG];if(K===void 0)return J;let F=$.options.host??"https://us.i.posthog.com",H=new URL(`/project/${$.apiKey}/person/${K}`,F).toString();J.tags["PostHog Person URL"]=H;let N=J.exception?.values||[],U=N.map((O)=>({...O,stacktrace:O.stacktrace?{...O.stacktrace,type:"raw",frames:(O.stacktrace.frames||[]).map((L)=>({...L,platform:"node:javascript"}))}:void 0})),B={$exception_message:N[0]?.value||J.message,$exception_type:N[0]?.type,$exception_level:J.level,$exception_list:U,$sentry_event_id:J.event_id,$sentry_exception:J.exception,$sentry_exception_message:N[0]?.value||J.message,$sentry_exception_type:N[0]?.type,$sentry_tags:J.tags};if(Z&&X)B.$sentry_url=(Q||"https://sentry.io/organizations/")+Z+"/issues/?project="+X+"&query="+J.event_id;if(G)$.capture({event:"$exception",distinctId:K,properties:B});return J}}var In1;var qn1=D(()=>{In1=class In1{static#$=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor($,Z,X,Q,Y){this.name="posthog-node",this.name="posthog-node",this.setupOnce=function(G,J){let W=J()?.getClient()?.getDsn()?.projectId;G(Jn8($,{organization:Z,projectId:W,prefix:X,severityAllowList:Q,sendExceptionsToPostHog:Y??!0}))}}}});var Mn1=D(()=>{Q90()});var kn1=D(()=>{ZE();qn1();Mn1();$c0()});var Gc0;var Vn1=D(()=>{qi1();Yn1();Jn1();Q90();Tn1();ZE();Rn1();kn1();dG.errorPropertiesBuilder=new SQ.ErrorPropertiesBuilder([new SQ.EventCoercer,new SQ.ErrorCoercer,new SQ.ObjectCoercer,new SQ.StringCoercer,new SQ.PrimitiveCoercer],SQ.createStackParser("node:javascript",SQ.nodeStackLineParser),[Ii1(),Zn1,Gn1()]);Gc0=class Gc0 extends Qc0{getLibraryId(){return"posthog-node"}initializeContext(){return new Yc0}}});import{createHash as Wn8}from"crypto";function Kn8(){return{capture:()=>{},identify:()=>{},captureException:()=>{},groupIdentify:()=>{},shutdown:async()=>{}}}function Cn1($){let Z=Wn8("sha256").update($).digest();Z[6]=(Z[6]??0)&15|64,Z[8]=(Z[8]??0)&63|128;let X=Z.subarray(0,16).toString("hex");return`${X.slice(0,8)}-${X.slice(8,12)}-${X.slice(12,16)}-${X.slice(16,20)}-${X.slice(20,32)}`}function xY($){x1.capture({distinctId:$.userId??`org:${$.organizationId}`,event:$.event,groups:{organization:$.organizationId},...$.uuid?{uuid:$.uuid}:{},...$.timestamp?{timestamp:$.timestamp}:{},properties:{organization_id:$.organizationId,...$.userId?{}:{$process_person_profile:!1},...$.properties}})}var Jc0,Sn1,x1;var S4=D(()=>{Vn1();Jc0=process.env.POSTHOG_KEY,Sn1=process.env.POSTHOG_HOST;x1=Jc0?new Gc0(Jc0,{...Sn1?{host:Sn1}:{},enableExceptionAutocapture:!0,flushAt:1,flushInterval:0}):Kn8();if(Jc0){let $=()=>{x1.shutdown().catch(()=>{})};process.on("SIGTERM",$),process.on("SIGINT",$)}});import{Kysely as Fn8,PostgresDialect as fn1}from"kysely";import{Pool as bn1}from"pg";function Bn8($){let Z=$.connect.bind($);return $.connect=(X)=>{if(typeof X==="function")return Z(X);let Q=performance.now(),Y=Y90(),G=$.idleCount===0&&$.totalCount>=Y,J=$.idleCount;return Z().then((W)=>{let K=performance.now()-Q;if(_n1().record(K,{"db.pool.outcome":G?"contended":"available"}),K>Nn8)if(G)console.error("Slow db pool acquire \u2014 pool saturated:",{waitMs:K,total:$.totalCount,idle:$.idleCount,waiting:$.waitingCount,max:Y});else console.warn("Slow db pool acquire \u2014 event-loop lag (not pool):",{waitMs:K,idleAtStart:J,total:$.totalCount,max:Y});return W},(W)=>{throw _n1().record(performance.now()-Q,{"db.pool.outcome":"error"}),W})},$}function yn1(){try{return b0().databasePgSsl}catch{return!1}}function Y90(){try{return b0().databasePoolMax}catch{return 10}}function On8($){let Z=Bn8(new bn1({connectionString:$,max:Y90(),ssl:yn1(),...xn1})),X=new fn1({pool:Z});return{type:"postgres",db:new Fn8({dialect:X,log:Un8(Z)}),pool:Z}}function vi(){return b0().databaseUrl}function gn1($,Z){if(!Z)return $;let X=new URL($);if(!X.searchParams.has("sslmode"))X.searchParams.set("sslmode","verify-full");return X.toString()}function hn1($){let Z=$||vi();return new fn1({pool:new bn1({connectionString:Z,max:Y90(),ssl:yn1(),...xn1})})}function Dn8($){let Z=$||vi();return On8(Z)}async function un1($){if(await $.db.destroy(),!$.pool.ended)await $.pool.end();if($===_i)_i=null}function r8(){if(!_i)_i=Dn8(vi());return _i}var Hn8=()=>w$.createHistogram("db.query.duration",{description:"Database query execution duration in milliseconds",unit:"ms"}),_n1=()=>w$.createHistogram("db.pool.acquire.duration",{description:"Time spent waiting to acquire a connection from the pool",unit:"ms"}),vn1=400,Nn8=100,Un8=($)=>(Z)=>{let X={"db.statement":Z.query.sql,"db.status":Z.level==="error"?"error":"success"};if(Z.queryDurationMillis>vn1){let Q=$Q1(),Y=Q>vn1/2;console.error(Y?"Slow query measurement \u2014 likely event-loop lag, not slow SQL:":"Slow query detected:",{durationMs:Z.queryDurationMillis,eventLoopLagMs:Math.round(Q),sql:Z.query.sql,pool:{total:$.totalCount,idle:$.idleCount,waiting:$.waitingCount,max:Y90()}})}if(Hn8().record(Z.queryDurationMillis,X),Z.level==="error")console.error("Query failed:",{durationMs:Z.queryDurationMillis,error:Z.error,sql:Z.query.sql})},xn1,_i=null;var iG=D(()=>{R$();I6();sT0();xn1={keepAlive:!0,keepAliveInitialDelayMillis:1e4,idleTimeoutMillis:300000,connectionTimeoutMillis:30000,allowExitOnIdle:!0}});class Wc0{apiKey;constructor($){this.apiKey=$}async sendEmail({to:$,from:Z,subject:X,html:Q}){let Y=await fetch("https://api.resend.com/emails",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({to:$,from:Z,subject:X,html:Q})});if(!Y.ok)throw Error(`Failed to send email: ${Y.statusText}`)}}class Kc0{apiKey;constructor($){this.apiKey=$}async sendEmail({to:$,from:Z,subject:X,html:Q}){let Y=await fetch("https://api.sendgrid.com/v3/mail/send",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({personalizations:[{to:[{email:$}]}],from:{email:Z},subject:X,content:[{type:"text/html",value:Q}]})});if(!Y.ok){let G=await Y.text();throw Error(`Failed to send email via SendGrid: ${Y.statusText} - ${G}`)}}}function A3($){switch($.provider){case"resend":{let Z=new Wc0($.config.apiKey);return({to:X,subject:Q,html:Y})=>Z.sendEmail({to:X,from:$.config.fromEmail,subject:Q,html:Y})}case"sendgrid":{let Z=new Kc0($.config.apiKey);return({to:X,subject:Q,html:Y})=>Z.sendEmail({to:X,from:$.config.fromEmail,subject:Q,html:Y})}}}function T3($,Z){return $.find((X)=>X.id===Z)}var ix=()=>{};function R3({preheader:$="",heading:Z,subheading:X,body:Q,footnote:Y}){return`<!DOCTYPE html>
|
|
366
366
|
<html lang="en">
|
|
367
367
|
<head>
|
|
@@ -887,7 +887,7 @@ You are the Usage Manager. You analyze how this workspace is actually used \u201
|
|
|
887
887
|
c. MONITORING_LOG_GET on specific log ids for full input/output when the error message isn't enough.
|
|
888
888
|
d. Report the failing tool/connection, error pattern, and suggest the fix or owner.
|
|
889
889
|
</workflows>`,gr1={id:"studio-usage-manager",title:"Usage Manager",icon:"icon://BarChart10?color=blue",description:"Analyze usage, costs, and clean up idle agents and connections",selectedTools:["MONITORING_STATS","MONITORING_LOGS_LIST","MONITORING_LOG_GET","MONITORING_THREAD_USAGE","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_LAST_USED_LIST","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET","COLLECTION_CONNECTIONS_DELETE","ORGANIZATION_MEMBER_LIST"],selectedConnections:null,selectedPrompts:[],instructions:lr8,getId:qQ.USAGE_MANAGER}});function ic0($){return FE.find((Z)=>$.startsWith(`${Z.id}_`))??null}async function mr8($,Z){if("resolveRuntime"in $)return $.resolveRuntime(Z);return{instructions:$.instructions,selectedTools:$.selectedTools}}async function R90({virtualMcp:$,agentId:Z=$.id,organizationId:X,ctx:Q}){let Y=ic0(Z);if(!Y)return $;let G=await mr8(Y,{orgId:X,ctx:Q}),J=G.selectedTools?[...G.selectedTools]:null;return{...$,metadata:{...$.metadata??{},instructions:G.instructions},connections:$.connections.map((W)=>({...W,selected_tools:J}))}}async function I90($,Z){if(!("checklist"in $))return[];return Promise.all($.checklist.map(async(X)=>({label:X.label,activeForm:X.activeForm,action:X.action,completed:await X.isCompleted(Z),alwaysSuggest:X.alwaysSuggest})))}async function ur1($,Z,X){let Q={self:C8.SELF($),registry:C8.REGISTRY($),"community-registry":C8.COMMUNITY_REGISTRY($)};await Promise.all(dr8.map((Y)=>X.delete(`${Y}${$}`))),await Promise.all(FE.map(async(Y)=>{let G=Y.getId($),J=await X.findById(G,$),K=(Y.selectedConnections??["self"]).map((F)=>Q[F]);if(J){await X.update(G,Z,{metadata:{...J.metadata??{},instructions:Y.instructions},connections:K.map((F)=>{let H=J.connections.find((N)=>N.connection_id===F);return{connection_id:F,selected_tools:Y.selectedTools?[...Y.selectedTools]:null,selected_resources:H?.selected_resources??null,selected_prompts:H?.selected_prompts??null}})});return}await X.create($,Z,{title:Y.title,description:Y.description,icon:Y.icon,status:"active",pinned:!1,metadata:{instructions:Y.instructions},connections:K.map((F)=>({connection_id:F,selected_tools:Y.selectedTools?[...Y.selectedTools]:null,selected_resources:null,selected_prompts:Y.selectedPrompts?[...Y.selectedPrompts]:null}))},{id:G})}))}var dr8,FE;var rx=D(()=>{_8();Rr1();qr1();kr1();vr1();br1();yr1();hr1();dr8=["studio-task-manager_"],FE=[_r1,Tr1,Mr1,fr1,Ir1,xr1,gr1]});import{DBOS as q90}from"@dbos-inc/dbos-sdk";async function ir8($){let Z=r8(),X=new Cb(Z.db);await ur1($.orgId,$.createdBy,X)}async function pr8($){let Z=r8(),X=new Cb(Z.db);for(let Q of FE){let Y=Q.getId($.orgId),G=await X.findById(Y,$.orgId);if(!G)continue;let J=Q.selectedPrompts?[...Q.selectedPrompts]:null;if(G.connections.every((K)=>{let F=K.selected_prompts;if(J===null)return F===null;if(F===null)return!1;if(F.length!==J.length)return!1;return F.every((H,N)=>H===J[N])}))continue;await X.update(Y,$.createdBy,{connections:G.connections.map((K)=>({connection_id:K.connection_id,selected_tools:K.selected_tools,selected_resources:K.selected_resources,selected_prompts:J}))})}}async function nr8($){await q90.runStep(()=>ir8($),{name:"installStudioPack"}),await q90.runStep(()=>pr8($),{name:"backfillSelectedPrompts"})}async function pc0($){await q90.startWorkflow(tr8,{workflowID:`install-studio-pack:${or8}:${$.orgId}`})($)}async function cr1(){let Z=await r8().db.selectFrom("member").select(["organizationId","userId"]).orderBy("createdAt","asc").execute(),X=new Map;for(let Q of Z)if(!X.has(Q.organizationId))X.set(Q.organizationId,Q.userId);await T90(Array.from(X),10,async([Q,Y])=>{try{await pc0({orgId:Q,createdBy:Y})}catch(G){console.error("[studio-pack-backfill] enqueue failed",{orgId:Q},G)}})}var tr8,or8="v6";var M90=D(()=>{iG();Gg0();rx();tr8=q90.registerWorkflow(nr8,{name:"installStudioPackWorkflow"})});class di{constructor(){this._messageQueue=[]}static createLinkedPair(){let $=new di,Z=new di;return $._otherTransport=Z,Z._otherTransport=$,[$,Z]}async start(){while(this._messageQueue.length>0){let $=this._messageQueue.shift();this.onmessage?.($.message,$.extra)}}async close(){let $=this._otherTransport;this._otherTransport=void 0,await $?.close(),this.onclose?.()}async send($,Z){if(!this._otherTransport)throw Error("Not connected");if(this._otherTransport.onmessage)this._otherTransport.onmessage($,{authInfo:Z?.authInfo});else this._otherTransport._messageQueue.push({message:$,extra:{authInfo:Z?.authInfo}})}}import{z as R8}from"zod";var dr1,lr1=1000,rr8=500,mr1,ir1,pr1,nr1,tr1,or1,rr1,ar1,sr1,er1;var ax=D(()=>{dr1=R8.record(R8.string(),R8.array(R8.string())),mr1=R8.record(R8.string(),R8.array(R8.string()).max(rr8)).refine(($)=>Object.keys($).length<=lr1,{message:`Permissions cannot grant more than ${lr1} resources`}),ir1=R8.object({id:R8.string().describe("Unique identifier for the API key"),name:R8.string().describe("Human-readable name for the API key"),userId:R8.string().describe("ID of the user who owns this API key"),permissions:dr1.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Example: { "self": ["API_KEY_CREATE"], "conn_abc123": ["SEND_MESSAGE"] }'),expiresAt:R8.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:R8.string().datetime().describe("When the API key was created (ISO 8601)")}),pr1=R8.object({name:R8.string().min(1).max(64).describe("Human-readable name for the API key"),permissions:mr1.describe(`Permissions to grant (REQUIRED \u2014 there is no implicit default). Format: { resource: [actions] }. Resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names (e.g., ["ORGANIZATION_GET"]) or ["*"] for all. Example: { "self": ["ORGANIZATION_GET", "COLLECTION_CONNECTIONS_LIST"] }. The key is authorized solely by this allowlist; the creator's role does not widen it.`),expiresIn:R8.number().positive().optional().describe("Expiration time in seconds. If not provided, key never expires."),metadata:R8.record(R8.string(),R8.unknown()).optional().describe("Additional metadata to store with the API key")}),nr1=R8.object({id:R8.string().describe("Unique identifier for the API key"),name:R8.string().describe("Human-readable name for the API key"),key:R8.string().describe("The actual API key value. STORE THIS SECURELY - it will not be shown again!"),permissions:dr1.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools'),expiresAt:R8.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:R8.string().datetime().describe("When the API key was created (ISO 8601)")}),tr1=R8.object({}),or1=R8.object({items:R8.array(ir1).describe("List of API keys (without key values)")}),rr1=R8.object({keyId:R8.string().describe("ID of the API key to update"),name:R8.string().min(1).max(64).optional().describe("New name for the API key"),permissions:mr1.optional().describe('New permissions. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names or "*" for all. Example: { "self": ["API_KEY_CREATE"] }. Replaces existing permissions.'),metadata:R8.record(R8.string(),R8.unknown()).optional().describe("New metadata. Replaces existing metadata.")}),ar1=R8.object({item:ir1.describe("The updated API key (without key value)")}),sr1=R8.object({keyId:R8.string().describe("ID of the API key to delete")}),er1=R8.object({success:R8.boolean().describe("Whether the deletion was successful"),keyId:R8.string().describe("ID of the deleted API key")})});var nc0;var $a1=D(()=>{S4();M0();ax();nc0=u({name:"API_KEY_CREATE",description:"Create an API key with scoped permissions. The key value is returned only once \u2014 store it immediately.",annotations:{title:"Create API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:pr1,outputSchema:nr1,handler:async($,Z)=>{t(Z),await Z.access.check();let X=await Z.boundAuth.apiKey.create({name:$.name,permissions:$.permissions,expiresIn:$.expiresIn,metadata:{...$.metadata,organization:Z.organization}}),Q=X.expiresAt?X.expiresAt instanceof Date?X.expiresAt.toISOString():X.expiresAt:null,Y=X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt,G=o0(Z);if(G)x1.capture({distinctId:G,event:"api_key_created",...Z.organization?.id?{groups:{organization:Z.organization.id}}:{},properties:{key_id:X.id,key_name:X.name??$.name,organization_id:Z.organization?.id,has_expiry:!!Q}});return{id:X.id,name:X.name??$.name,key:X.key,permissions:X.permissions??{},expiresAt:Q,createdAt:Y}}})});var tc0;var Za1=D(()=>{S4();M0();ax();tc0=u({name:"API_KEY_DELETE",description:"Delete and instantly revoke an API key. Cannot be undone.",annotations:{title:"Delete API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:sr1,outputSchema:er1,handler:async($,Z)=>{t(Z),await Z.access.check();let X=o0(Z);if(!X)throw Error("User ID required to delete API key");let Y=(await Z.boundAuth.apiKey.list())?.find((K)=>K.id===$.keyId);if(!Y)throw Error("API key not found");let J=Y.metadata?.organization?.id,W=Z.organization?.id;if(J!==W)throw Error("Cannot delete API key from another organization");if(await Z.boundAuth.apiKey.delete($.keyId),W)x1.capture({distinctId:X,event:"api_key_deleted",groups:{organization:W},properties:{key_id:$.keyId,organization_id:W}});return{success:!0,keyId:$.keyId}}})});var oc0;var Xa1=D(()=>{M0();ax();oc0=u({name:"API_KEY_LIST",description:"List API keys for the current user in the current organization. Returns metadata only \u2014 key values are never shown after creation.",annotations:{title:"List API Keys",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:tr1,outputSchema:or1,handler:async($,Z)=>{t(Z),await Z.access.check();let X=await Z.boundAuth.apiKey.list(),Q=Z.organization?.id;return{items:(X??[]).filter((G)=>{return G.metadata?.organization?.id===Q}).map((G)=>({id:G.id,name:G.name??"Unnamed Key",userId:G.userId,permissions:G.permissions??{},expiresAt:G.expiresAt?G.expiresAt instanceof Date?G.expiresAt.toISOString():G.expiresAt:null,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}}})});var rc0;var Qa1=D(()=>{M0();ax();rc0=u({name:"API_KEY_UPDATE",description:"Update an API key's name, permissions, or metadata. The key value cannot be changed or retrieved.",annotations:{title:"Update API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:rr1,outputSchema:ar1,handler:async($,Z)=>{if(t(Z),await Z.access.check(),!o0(Z))throw Error("User ID required to update API key");let Y=(await Z.boundAuth.apiKey.list())?.find((F)=>F.id===$.keyId);if(!Y)throw Error(`API key not found: ${$.keyId}`);let J=Y.metadata?.organization?.id,W=Z.organization?.id;if(J!==W)throw Error("Cannot update API key from another organization");let K=await Z.boundAuth.apiKey.update({keyId:$.keyId,name:$.name,permissions:$.permissions,metadata:{...$.metadata,organization:Z.organization}});if(!K)throw Error(`Failed to update API key: ${$.keyId}`);return{item:{id:K.id,name:K.name??$.name??"Unnamed Key",userId:K.userId,permissions:K.permissions??{},expiresAt:K.expiresAt?K.expiresAt instanceof Date?K.expiresAt.toISOString():K.expiresAt:null,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():K.createdAt}}}})});var Ya1=D(()=>{$a1();Za1();Xa1();Qa1();ax()});function pB($){let Z=$.trim();if(!Z)return{ok:!1,error:"Enter a website URL."};let X=sr8.test(Z),Q=er8.test(Z),Y=$a8.test(Z);if(X&&!Q&&!Y)return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let G=Q?Z:`https://${Z}`,J;try{J=new URL(G)}catch{return{ok:!1,error:"Enter a valid website URL."}}if(J.protocol!=="http:"&&J.protocol!=="https:")return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let W=J.hostname.split(".");if(W.length<2||W.some((K)=>!K||!Za8.test(K)))return{ok:!1,error:"Enter a valid website URL."};return J.protocol="https:",{ok:!0,value:J.origin}}var sr8,er8,$a8,Za8;var mi=D(()=>{sr8=/^[a-zA-Z][a-zA-Z\d+.-]*:/,er8=/^[a-zA-Z][a-zA-Z\d+.-]*:\/\//,$a8=/^[^\s/:?#]+\.[^\s/:?#]+:\d+(?:[/?#]|$)/,Za8=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i});import{z as iX}from"zod";function GK($){if($.baseUrl)return $.baseUrl.replace(/\/+$/,"");return(($.settings??b0()).reportsInternalApiUrl??Xa8).replace(/\/+$/,"")}function Ja1($={}){return`${GK($)}/api/v2/mcp`}function HE($){let Z=$.apiKey??($.settings??b0()).reportsInternalApiKey;if(!Z)throw Error("REPORTS_INTERNAL_API_KEY (or the legacy COMMERCE_DISCOVERY_INTERNAL_API_KEY) is required to set up reports.");return Z}function k90($){return new URL($).hostname}function Ya8($){return $==="ownership_unverified"||$==="already_claimed_by_other_org"}function Ga8($,Z={}){switch($){case"ownership_unverified":{let X=Z.email?`O e-mail ${Z.email}`:"Este e-mail",Q=Z.domain?` ${Z.domain}`:" este site";return`${X} n\xE3o tem permiss\xE3o para reivindicar${Q}. Use um e-mail do dom\xEDnio do site ou pe\xE7a ao suporte para autorizar seu dom\xEDnio.`}case"already_claimed_by_other_org":return"Este site j\xE1 pertence a outra organiza\xE7\xE3o. Fale com o suporte para transferir o acesso.";case"unknown":return"N\xE3o foi poss\xEDvel configurar o Commerce Discovery. Tente novamente ou fale com o suporte.";default:return $}}async function Ja8($){let Z=await ii($);return Ya8(Z?.error)?Z.error:"unknown"}async function ii($){let Z=await $.text().catch(()=>"");if(!Z)return;try{return JSON.parse(Z)}catch{return}}async function ac0($){let Z=`Commerce Discovery auth failed with status ${$.status}.`,X=await $.text().catch(()=>"");if(!X)return Z;try{let Q=JSON.parse(X),Y=typeof Q.error==="string"?Q.error:typeof Q.message==="string"?Q.message:null;return Y?`Commerce Discovery auth failed: ${Y}.`:Z}catch{return Z}}async function Ka1($,Z={}){let X=GK(Z),Q=HE(Z),Y=Z.fetchImpl??fetch,G=k90($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/upgrade`,W=await Y(J,{method:"POST",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,...$.orgName?{name:$.orgName}:{},...$.email?{email:$.email}:{},...$.reportUrl?{report_url:$.reportUrl}:{}})});if(!W.ok){let F=await Ja8(W);throw new Wa1(F,{email:$.email,domain:G})}let K=Qa8.safeParse(await ii(W));if(!K.success)throw Error("Commerce Discovery auth response did not include a token.");return{authorizationToken:K.data.token}}async function Fa1($,Z={}){let X=GK(Z),Q=HE(Z),Y=Z.fetchImpl??fetch,G=k90($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/bindings`,W=await Y(J,{method:"POST",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,provider:$.provider,resource_id:$.resourceId})});if(W.status===409)return{ok:!1,reason:"resource_already_bound",detail:"Este recurso j\xE1 est\xE1 vinculado a outra loja. Se ele \xE9 seu, fale com o suporte para revis\xE3o manual."};if(W.status===422){let F=Ga1.safeParse(await ii(W));return{ok:!1,reason:F.success?F.data.reason??"verification_failed":"verification_failed",detail:(F.success?F.data.detail:void 0)??"N\xE3o foi poss\xEDvel verificar o acesso a este recurso."}}if(!W.ok)throw Error(await ac0(W));let K=Ga1.safeParse(await ii(W));if(!K.success||!K.data.binding)throw Error("Commerce Discovery bind response did not include a binding.");return{ok:!0,resourceId:K.data.binding.resource_id,evidence:K.data.binding.evidence}}async function Ha1($,Z={}){let X=GK(Z),Q=HE(Z),Y=Z.fetchImpl??fetch,G=k90($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/run`,W=await Y(J,{method:"POST",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,...$.githubRepo?{github_repo:$.githubRepo}:{}})});if(W.status===409)return{triggered:!1,reason:"not_upgraded"};if(!W.ok)throw Error(await ac0(W));return{triggered:!0}}async function Na1($,Z={}){let X=GK(Z),Q=HE(Z),Y=Z.fetchImpl??fetch,G=k90($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/connections/status?org_id=${encodeURIComponent($.orgId)}`,W=await Y(J,{method:"GET",headers:{Authorization:`Bearer ${Q}`}});if(W.status===404||W.status===409)return{providers:{},claimed:!1};if(!W.ok)throw Error(await ac0(W));let K=Wa8.safeParse(await ii(W));return{providers:K.success?K.data.providers:{},claimed:!0}}var Xa8,Qa8,Ga1,Wa1,Wa8;var NE=D(()=>{_8();R$();Xa8=new URL(ug1).origin,Qa8=iX.object({token:iX.string().min(1)}),Ga1=iX.object({binding:iX.object({resource_id:iX.string(),evidence:iX.string()}).optional(),reason:iX.string().optional(),detail:iX.string().optional()});Wa1=class Wa1 extends Error{code;constructor($,Z={}){super(Ga8($,Z));this.name="CommerceDiscoveryClaimError",this.code=$}};Wa8=iX.object({providers:iX.record(iX.string(),iX.object({connected:iX.boolean(),via:iX.enum(["oauth","sa"]).nullable(),resource:iX.string().nullable()}))})});import{z as gY}from"zod";var Ka8,Fa8,sc0;var Ua1=D(()=>{mi();M0();NE();Ka8=gY.object({siteUrl:gY.string().min(1).describe("Website URL of the store being bound."),provider:gY.enum(["ga4","gsc"]).describe("Which Google source to bind: ga4 (Analytics) or gsc (Search Console)."),resourceId:gY.string().min(1).describe("The resource id the client typed: GA4 numeric property id, or GSC site (sc-domain:example.com or https://example.com/).")}),Fa8=gY.discriminatedUnion("ok",[gY.object({ok:gY.literal(!0),resourceId:gY.string(),evidence:gY.string()}),gY.object({ok:gY.literal(!1),reason:gY.string(),detail:gY.string()})]),sc0=u({name:"COMMERCE_DISCOVERY_BIND",description:"Bind a GA4 property or GSC site to the org's store via the shared service account (consent-free lane). The client grants deco-reader@\u2026 access to the resource and provides its id; Commerce Discovery verifies the resource belongs to this domain before persisting. Returns ok:false with an actionable pt-BR detail when verification fails or the resource is already bound elsewhere.",annotations:{title:"Bind Commerce Discovery Data Source",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Ka8,outputSchema:Fa8,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=pB($.siteUrl);if(!Q.ok)throw Error(Q.error);return Fa1({siteUrl:Q.value,orgId:X.id,provider:$.provider,resourceId:$.resourceId.trim()})}})});import{z as JK}from"zod";var Ha8,Na8,ec0;var Ba1=D(()=>{mi();M0();NE();Ha8=JK.object({siteUrl:JK.string().min(1).describe("Website URL of the store to inspect.")}),Na8=JK.object({providers:JK.record(JK.string(),JK.object({connected:JK.boolean(),via:JK.enum(["oauth","sa"]).nullable(),resource:JK.string().nullable()})),claimed:JK.boolean().describe("False when the site isn't claimed/upgraded for this org \u2014 providers is then empty because the status is unreadable, NOT because nothing is connected. The UI must warn instead of rendering existing bindings as disconnected.")}),ec0=u({name:"COMMERCE_DISCOVERY_CONNECTION_STATUS",description:"Read per-provider connection status (ga4/gsc/vtex) for the org's store \u2014 { connected, via: oauth|sa, resource }. The single source of truth for whether a data source is connected, unifying the OAuth (Studio vault) and shared-SA binding lanes. Read-only.",annotations:{title:"Commerce Discovery Connection Status",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Ha8,outputSchema:Na8,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=pB($.siteUrl);if(!Q.ok)throw Error(Q.error);return Na1({siteUrl:Q.value,orgId:X.id})}})});import{z as pi}from"zod";var Ua8,Ba8,$l0;var Oa1=D(()=>{_8();mi();M0();NE();Ua8=pi.object({siteUrl:pi.string().min(1).describe("Website URL to run the diagnostic for.")}),Ba8=pi.object({triggered:pi.boolean(),reason:pi.string().optional()}),$l0=u({name:"COMMERCE_DISCOVERY_RUN",description:"Trigger the Commerce Discovery diagnostic run for the current organization's store. Call once the data sources (GA4/GSC/VTEX) are connected \u2014 this run resolves credentials and produces the enriched report.",annotations:{title:"Run Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Ua8,outputSchema:Ba8,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=pB($.siteUrl);if(!Q.ok)throw Error(Q.error);let Y=C8.COMMERCE_DISCOVERY(X.id),J=(await Z.storage.connections.findById(Y,X.id))?.configuration_state,W=J&&typeof J==="object"&&typeof J.github_repo==="string"&&J.github_repo.length>0?J.github_repo:void 0;return Ha1({siteUrl:Q.value,orgId:X.id,githubRepo:W})}})});var nB=D(()=>{C80()});import{z as WK}from"zod";async function wa8($,Z,X,Q){let Y=await $.storage.connections.findById(Z,X);if(Y)return Y;throw Q}async function Ea8($,Z,X,Q){let Y=await $.storage.virtualMcps.findById(Z,X);if(Y)return Y;throw Q}var Zl0,Oa8=3600000,Da8,La8,Xl0;var Da1=D(()=>{_8();mi();M0();hW();nB();NE();Zl0=a40,Da8=WK.object({siteUrl:WK.string().min(1).describe("Website URL to configure.")}),La8=WK.object({connection:l7,virtualMcp:d7,reportApp:WK.object({connectionId:WK.string(),virtualMcpId:WK.string(),toolName:WK.literal(Zl0)}),created:WK.object({connection:WK.boolean(),virtualMcp:WK.boolean()})});Xl0=u({name:"COMMERCE_DISCOVERY_SETUP",description:"Create or return the Commerce Discovery connection and virtual MCP for the current organization.",annotations:{title:"Set Up Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Da8,outputSchema:La8,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check("COLLECTION_CONNECTIONS_CREATE");let Q=o0(Z);if(!Q)throw Error("User ID required to set up Commerce Discovery");let Y=pB($.siteUrl);if(!Y.ok)throw Error(Y.error);let G=C8.COMMERCE_DISCOVERY(X.id),J=e40(X.id),W=new URLSearchParams({connection:G,tool:Zl0}),K={email:Z.auth.user?.email,reportUrl:`${Z.baseUrl}/${encodeURIComponent(X.slug??X.id)}/agents/${J}/app?${W.toString()}`},F=await Z.storage.connections.findById(G,X.id),H={connection:!1,virtualMcp:!1},N=await Ka1({siteUrl:Y.value,orgId:X.id,orgName:X.name,...K}),U=Ja1();if(F)console.log("[commerce-discovery] syncing connection to claimed site",{orgId:X.id,siteUrl:Y.value,connectionId:G}),F=await Z.storage.connections.update(F.id,{connection_url:U,connection_token:N.authorizationToken,metadata:{...F.metadata??{},siteUrl:Y.value}});else{console.log("[commerce-discovery] creating connection",{orgId:X.id,siteUrl:Y.value,connectionId:G});try{let w=eg1(X.id,N.authorizationToken,U);F=await Z.storage.connections.create({...w,metadata:{...w.metadata??{},siteUrl:Y.value},organization_id:X.id,created_by:Q}),H.connection=!0}catch(w){F=await wa8(Z,G,X.id,w)}}let B=await Z.storage.virtualMcps.findById(J,X.id);if(!B){console.log("[commerce-discovery] creating virtual MCP",{orgId:X.id,siteUrl:Y.value,connectionId:F.id,virtualMcpId:J});try{B=await Z.storage.virtualMcps.create(X.id,Q,$h1(X.id,F.id),{id:J}),H.virtualMcp=!0}catch(w){B=await Ea8(Z,J,X.id,w)}}if(!B.pinned)B=await Z.storage.virtualMcps.update(B.id,Q,{pinned:!0});let O=await Z.db.selectFrom("organization").select(["createdAt"]).where("id","=",X.id).executeTakeFirst();if((O?Date.now()-new Date(O.createdAt).getTime():Number.POSITIVE_INFINITY)<Oa8){let E=(await Z.storage.organizationSettings.get(X.id))?.flags,j={};if(E?.reports_only==null)j.reports_only=!0;if(Object.keys(j).length>0)await Z.storage.organizationSettings.upsert(X.id,{flags:j})}return{connection:F,virtualMcp:B,reportApp:{connectionId:F.id,virtualMcpId:B.id,toolName:Zl0},created:H}}})});var La1=D(()=>{Ua1();Ba1();Oa1();Da1()});var Ql0=_((wa1)=>{Object.defineProperty(wa1,"__esModule",{value:!0});wa1.kvPrefix=wa1.KvWatchInclude=void 0;wa1.KvWatchInclude={LastValue:"",AllHistory:"history",UpdatesOnly:"updates"};wa1.kvPrefix="KV_"});var Va1=_((Ma1)=>{Object.defineProperty(Ma1,"__esModule",{value:!0});Ma1.KvStatusImpl=Ma1.Bucket=Ma1.Kvm=Ma1.kvOperationHdr=void 0;Ma1.Base64KeyCodec=Pa8;Ma1.NoopKvCodecs=Yl0;Ma1.defaultBucketOpts=za1;Ma1.validateKey=Pa1;Ma1.validateSearchKey=Aa1;Ma1.hasWildcards=Ta1;Ma1.validateBucket=V90;var g5=PY(),Q5=Pe(),y5=Ql0();function Pa8(){let $=(Z,X)=>{let Q=[];for(let Y of Z.split("."))switch(Y){case">":case"*":Q.push(Y);break;default:Q.push(X(Y));break}return Q.join(".")};return{encode(Z){return $(Z,btoa)},decode(Z){return $(Z,atob)}}}function Yl0(){return{key:{encode($){return $},decode($){return $}},value:{encode($){return typeof $==="string"?new TextEncoder().encode($):$},decode($){return $}}}}function za1(){return{replicas:1,history:1,timeout:2000,max_bytes:-1,maxValueSize:-1,codec:Yl0(),storage:Q5.StorageType.File}}Ma1.kvOperationHdr="KV-Operation";var ja1="$KV",Aa8=/^[-/=.\w]+$/,Ta8=/^[-/=.>*\w]+$/,Ra8=/^[-\w]+$/;function Pa1($){if($.startsWith(".")||$.endsWith(".")||!Aa8.test($))throw Error(`invalid key: ${$}`)}function Aa1($){if($.startsWith(".")||$.endsWith(".")||$.includes("..")||!Ta8.test($))throw Error(`invalid key: ${$}`)}function Ta1($){if($.startsWith(".")||$.endsWith("."))throw Error(`invalid key: ${$}`);let Z=$.split("."),X=!1;for(let Q=0;Q<Z.length;Q++)switch(Z[Q]){case"*":X=!0;break;case">":if(Q!==Z.length-1)throw Error(`invalid key: ${$}`);X=!0;break;default:}return X}function V90($){if(!Ra8.test($))throw Error(`invalid bucket name: ${$}`)}class Ra1{js;constructor($){this.js=(0,Q5.toJetStreamClient)($)}create($,Z={}){return this.#$($,Z)}open($,Z={}){return Z.bindOnly=!0,this.#$($,Z)}#$($,Z={}){let{ok:X,min:Q}=this.js.nc.features.get(g5.Feature.JS_KV);if(!X)return Promise.reject(Error(`kv is only supported on servers ${Q} or better`));if(Z.bindOnly)return sx.bind(this.js,$,Z);return sx.create(this.js,$,Z)}list(){let $=(X)=>{let Y=X.streams.filter((J)=>{return J.config.name.startsWith(y5.kvPrefix)});Y.forEach((J)=>{J.config.sealed=J.config.sealed||!1,J.config.deny_delete=J.config.deny_delete||!1,J.config.deny_purge=J.config.deny_purge||!1,J.config.allow_rollup_hdrs=J.config.allow_rollup_hdrs||!1});let G="";if(Y.length)G=this.js.nc.info?.cluster??"";return Y.map((J)=>{return new S90(J,G)})},Z=`${this.js.prefix}.STREAM.LIST`;return new Q5.ListerImpl(Z,$,this.js)}}Ma1.Kvm=Ra1;class sx{js;jsm;stream;bucket;direct;codec;prefix;editPrefix;useJsPrefix;_prefixLen;constructor($,Z,X){V90($),this.js=Z,this.jsm=X,this.bucket=$,this.prefix=ja1,this.editPrefix="",this.useJsPrefix=!1,this._prefixLen=0}static async create($,Z,X={}){V90(Z);let Q=await $.jetstreamManager(),Y=new sx(Z,$,Q);return await Y.init(X),Y}static async bind($,Z,X={}){let Q=$.getOptions()?.checkAPI||X.bindOnly===!1,Y=await $.jetstreamManager(Q),G={config:{allow_direct:X.allow_direct}};V90(Z);let J=new sx(Z,$,Y);return G.config.name=X.streamName??J.bucketName(),Object.assign(J,G),J.stream=G.config.name,J.codec=X.codec||Yl0(),J.direct=G.config.allow_direct??!1,J.initializePrefixes(G),J}async init($={}){let Z=Object.assign(za1(),$);this.codec=Z.codec;let X={};if(this.stream=X.name=$.streamName??this.bucketName(),X.retention=Q5.RetentionPolicy.Limits,X.max_msgs_per_subject=Z.history,Z.max_bytes)X.max_bytes=Z.max_bytes;if(X.max_msg_size=Z.maxValueSize,X.storage=Z.storage,$.placement)X.placement=$.placement;if($.republish)X.republish=$.republish;if($.description)X.description=$.description;if($.markerTTL)X.allow_msg_ttl=!0,X.subject_delete_marker_ttl=(0,g5.nanos)(Z.markerTTL);if($.mirror){let F=Object.assign({},$.mirror);if(!F.name.startsWith(y5.kvPrefix))F.name=`${y5.kvPrefix}${F.name}`;X.mirror=F,X.mirror_direct=!0}else if($.sources){let F=$.sources.map((H)=>{let N=Object.assign({},H),U=N.name.startsWith(y5.kvPrefix)?N.name.substring(y5.kvPrefix.length):N.name;if(!N.name.startsWith(y5.kvPrefix))N.name=`${y5.kvPrefix}${N.name}`;if(!H.external&&U!==this.bucket)N.subject_transforms=[{src:`$KV.${U}.>`,dest:`$KV.${this.bucket}.>`}];return N});X.sources=F,X.subjects=[this.subjectForBucket()]}else X.subjects=[this.subjectForBucket()];if($.metadata)X.metadata=$.metadata;if(typeof $.compression==="boolean")X.compression=$.compression?Q5.StoreCompression.S2:Q5.StoreCompression.None;let Q=this.js.nc,Y=Q.getServerVersion(),G=Y?(0,g5.compare)(Y,(0,g5.parseSemVer)("2.7.2"))>=0:!1;X.discard=G?Q5.DiscardPolicy.New:Q5.DiscardPolicy.Old;let{ok:J,min:W}=Q.features.get(g5.Feature.JS_ALLOW_DIRECT);if(!J&&$.allow_direct===!0){let F=Y?`${Y.major}.${Y.minor}.${Y.micro}`:"unknown";return Promise.reject(Error(`allow_direct is not available on server version ${F} - requires ${W}`))}if($.allow_direct=typeof $.allow_direct==="boolean"?$.allow_direct:J,X.allow_direct=$.allow_direct,this.direct=X.allow_direct,X.num_replicas=Z.replicas,Z.ttl)X.max_age=(0,g5.nanos)(Z.ttl);X.allow_rollup_hdrs=!0;let K;try{if(K=await this.jsm.streams.info(X.name),!K.config.allow_direct&&this.direct===!0)this.direct=!1}catch(F){if(F.message==="stream not found")K=await this.jsm.streams.add(X);else throw F}this.initializePrefixes(K)}initializePrefixes($){this._prefixLen=0,this.prefix=`$KV.${this.bucket}`,this.useJsPrefix=this.js.apiPrefix!=="$JS.API";let{mirror:Z}=$.config;if(Z){let X=Z.name;if(X.startsWith(y5.kvPrefix))X=X.substring(y5.kvPrefix.length);if(Z.external&&Z.external.api!==""){let Q=Z.name.substring(y5.kvPrefix.length);this.useJsPrefix=!1,this.prefix=`$KV.${Q}`,this.editPrefix=`${Z.external.api}.$KV.${X}`}else this.editPrefix=this.prefix}}bucketName(){return this.stream??`${y5.kvPrefix}${this.bucket}`}subjectForBucket(){return`${this.prefix}.${this.bucket}.>`}subjectForKey($,Z=!1){let X=[];if(Z){if(this.useJsPrefix)X.push(this.js.apiPrefix);if(this.editPrefix!=="")X.push(this.editPrefix);else X.push(this.prefix)}else if(this.prefix)X.push(this.prefix);return X.push($),X.join(".")}fullKeyName($){if(this.prefix!=="")return`${this.prefix}.${$}`;return`${ja1}.${this.bucket}.${$}`}get prefixLen(){if(this._prefixLen===0)this._prefixLen=this.prefix.length+1;return this._prefixLen}encodeKey($){let Z=[];for(let X of $.split("."))switch(X){case">":case"*":Z.push(X);break;default:Z.push(this.codec.key.encode(X));break}return Z.join(".")}decodeKey($){let Z=[];for(let X of $.split("."))switch(X){case">":case"*":Z.push(X);break;default:Z.push(this.codec.key.decode(X));break}return Z.join(".")}validateKey=Pa1;validateSearchKey=Aa1;hasWildcards=Ta1;close(){return Promise.resolve()}dataLen($,Z){let X=Z?Z.get(Q5.JsHeaders.MessageSizeHdr)||"":"";if(X!=="")return parseInt(X,10);return $.length}smToEntry($){return new Ia1(this.bucket,this.prefixLen,$,this.codec)}jmToWatchEntry($,Z){return new qa1(this.bucket,this.prefixLen,$,Z,this.codec)}async create($,Z,X){let Q;try{let G={previousSeq:0},J=await this._put($,Z,G,X);return Promise.resolve(J)}catch(G){if(Q=G,G instanceof Q5.JetStreamApiError){let J=G;if(J.code!==Q5.JetStreamApiCodes.StreamWrongLastSequence&&J.code!==Q5.JetStreamApiCodes.StreamWrongLastSequenceUnknown)return Promise.reject(G)}}let Y=0;try{let G=await this.get($);if(G?.operation==="DEL"||G?.operation==="PURGE")return Y=G!==null?G.revision:0,this._put($,Z,{previousSeq:Y},X);else return Promise.reject(Q)}catch(G){return Promise.reject(G)}}update($,Z,X,Q){if(X<=0)throw Error("version must be greater than 0");return this.put($,Z,{previousSeq:X,timeout:Q})}async _put($,Z,X={},Q){let Y=this.encodeKey($);this.validateKey(Y),Z=this.codec.value.encode(Z);let G={timeout:X?.timeout};if(X.previousSeq!==void 0){let J=(0,g5.headers)();G.headers=J,J.set(Q5.PubHeaders.ExpectedLastSubjectSequenceHdr,`${X.previousSeq}`)}if(Q)(G.headers||(0,g5.headers)()).set(Q5.PubHeaders.MessageTTL,Q);try{return(await this.js.publish(this.subjectForKey(Y,!0),Z,G)).seq}catch(J){return Promise.reject(J)}}put($,Z,X={}){return this._put($,Z,X)}async get($,Z){let X=this.encodeKey($);this.validateKey(X);let Q={last_by_subj:this.subjectForKey(X)};if(Z&&Z.revision>0)Q={seq:Z.revision};let Y=null;try{if(this.direct)Y=await this.jsm.direct.getMessage(this.bucketName(),Q);else Y=await this.jsm.streams.getMessage(this.bucketName(),Q);if(Y===null)return null;let G=this.smToEntry(Y);if(G.rawKey!==X)return null;return G}catch(G){throw G}}purge($,Z){return this._deleteOrPurge($,"PURGE",Z)}delete($,Z){return this._deleteOrPurge($,"DEL",Z)}async purgeDeletes($=1800000){let Z=[],X=await this.history({key:">"});await(async()=>{for await(let J of X)if(J.operation==="DEL"||J.operation==="PURGE")Z.push(J)})().then(),X.stop();let Q=Date.now()-$,Y=Z.map((J)=>{let W=this.subjectForKey(J.key);if(J.created.getTime()>=Q)return this.jsm.streams.purge(this.stream,{filter:W,keep:1});else return this.jsm.streams.purge(this.stream,{filter:W,keep:0})}),G=await Promise.all(Y);return G.unshift({success:!0,purged:0}),G.reduce((J,W)=>{return J.purged+=W.purged,J})}async _deleteOrPurge($,Z,X){if(!this.hasWildcards($))return this._doDeleteOrPurge($,Z,X);let Q=await this.keys($),Y=[];for await(let G of Q)if(Y.push(this._doDeleteOrPurge(G,Z)),Y.length===100)await Promise.all(Y),Y.length=0;if(Y.length>0)await Promise.all(Y)}async _doDeleteOrPurge($,Z,X){let Q=this.encodeKey($);this.validateKey(Q);let Y=(0,g5.headers)();if(Y.set(Ma1.kvOperationHdr,Z),Z==="PURGE"){let G=X;if(Y.set(Q5.JsHeaders.RollupHdr,Q5.JsHeaders.RollupValueSubject),typeof G?.ttl==="string"&&G.ttl!=="")Y.set(Q5.PubHeaders.MessageTTL,`${G.ttl}`)}if(X?.previousSeq)Y.set(Q5.PubHeaders.ExpectedLastSubjectSequenceHdr,`${X.previousSeq}`);await this.js.publish(this.subjectForKey(Q,!0),g5.Empty,{headers:Y})}_buildCC($,Z,X={}){let Y=(!Array.isArray($)?[$]:$).map((W)=>{let K=this.encodeKey(W);return this.validateSearchKey(W),this.fullKeyName(K)}),G=Q5.DeliverPolicy.LastPerSubject;if(Z===y5.KvWatchInclude.AllHistory)G=Q5.DeliverPolicy.All;if(Z===y5.KvWatchInclude.UpdatesOnly)G=Q5.DeliverPolicy.New;let J=void 0;if(Y.length===1)J=Y[0],Y=void 0;return Object.assign({deliver_policy:G,ack_policy:Q5.AckPolicy.None,filter_subjects:Y,filter_subject:J,flow_control:!0,idle_heartbeat:(0,g5.nanos)(5000)},X)}remove($){return this.purge($)}async history($={}){let Z=$.key??">",X={};X.headers_only=$.headers_only||!1;let Q=new g5.QueuedIteratorImpl,Y=()=>{Q.stop()},G=this._buildCC(Z,y5.KvWatchInclude.AllHistory,X),J=await this.js.consumers.getPushConsumer(this.stream,G);if(Q._data=J,(await J.info(!0)).num_pending===0)return Q.push(Y),Q;let K=await J.consume({callback:(F)=>{let H=this.jmToWatchEntry(F,!1);if(Q.push(H),Q.received++,F.info.pending===0)Q.push(Y)}});return K.closed().then(()=>{Q.push(Y)}),(async()=>{for await(let F of K.status())switch(F.type){case"heartbeat":Q.push(()=>{Q.stop()});break}})().then(),Q.iterClosed.then(()=>{K.stop()}),Q}canSetWatcherName(){let $=this.js.nc,{ok:Z}=$.features.get(g5.Feature.JS_NEW_CONSUMER_CREATE_API);return Z}async watch($={}){let Z=$.key??">",X=new g5.QueuedIteratorImpl,Q={};Q.headers_only=$.headers_only||!1;let Y=y5.KvWatchInclude.LastValue;if($.include===y5.KvWatchInclude.AllHistory)Y=y5.KvWatchInclude.AllHistory;else if($.include===y5.KvWatchInclude.UpdatesOnly)Y=y5.KvWatchInclude.UpdatesOnly;let G=$.ignoreDeletes===!0,J=this._buildCC(Z,Y,Q);if(J.name=`KV_WATCHER_${g5.nuid.next()}`,$.resumeFromRevision&&$.resumeFromRevision>0)J.deliver_policy=Q5.DeliverPolicy.StartSequence,J.opt_start_seq=$.resumeFromRevision;let W=await this.js.consumers.getPushConsumer(this.stream,J),F=(await W.info(!0)).num_pending,H=Y===y5.KvWatchInclude.UpdatesOnly||F===0;X._data=W;let N=0,U=await W.consume({callback:(B)=>{if(!H)N++,H=N>=F;let O=this.jmToWatchEntry(B,H);if(G&&O.operation==="DEL")return;X.push(O),X.received++}});return X.iterClosed.then(()=>{U.stop()}),U.closed().then(()=>{X.push(()=>{X.stop()})}),X}async keys($=">"){let Z=new g5.QueuedIteratorImpl,X=this._buildCC($,y5.KvWatchInclude.LastValue,{headers_only:!0}),Q=await this.js.consumers.getPushConsumer(this.stream,X);if((await Q.info()).num_pending===0)return Z.stop(),Z;Z._data=Q;let G=await Q.consume({callback:(J)=>{let W=J.headers?.get(Ma1.kvOperationHdr);if(W!=="DEL"&&W!=="PURGE"){let K=this.decodeKey(J.subject.substring(this.prefixLen));Z.push(K)}if(J.info.pending===0)G.stop()}});return(async()=>{for await(let J of G.status())switch(J.type){case"heartbeat":Z.push(()=>{Z.stop()});break}})().then(),G.closed().then(()=>{Z.push(()=>{Z.stop()})}),Z.iterClosed.then(()=>{G.stop()}),Z}purgeBucket($){return this.jsm.streams.purge(this.bucketName(),$)}destroy(){return this.jsm.streams.delete(this.bucketName())}async status(){let Z=this.js.nc.info?.cluster??"",X=this.bucketName(),Q=await this.jsm.streams.info(X);return new S90(Q,Z)}}Ma1.Bucket=sx;class S90{si;cluster;constructor($,Z=""){this.si=$,this.cluster=Z}get bucket(){return this.si.config.name.startsWith(y5.kvPrefix)?this.si.config.name.substring(y5.kvPrefix.length):this.si.config.name}get values(){return this.si.state.messages}get history(){return this.si.config.max_msgs_per_subject}get ttl(){return(0,g5.millis)(this.si.config.max_age)}get markerTTL(){if(typeof this.si.config.subject_delete_marker_ttl==="number")return(0,g5.millis)(this.si.config.subject_delete_marker_ttl);return 0}get bucket_location(){return this.cluster}get backingStore(){return this.si.config.storage}get storage(){return this.si.config.storage}get replicas(){return this.si.config.num_replicas}get description(){return this.si.config.description??""}get maxBucketSize(){return this.si.config.max_bytes}get maxValueSize(){return this.si.config.max_msg_size}get max_bytes(){return this.si.config.max_bytes}get placement(){return this.si.config.placement||{cluster:"",tags:[]}}get placementCluster(){return this.si.config.placement?.cluster??""}get republish(){return this.si.config.republish??{src:"",dest:""}}get streamInfo(){return this.si}get size(){return this.si.state.bytes}get metadata(){return this.si.config.metadata??{}}get compression(){if(this.si.config.compression)return this.si.config.compression!==Q5.StoreCompression.None;return!1}}Ma1.KvStatusImpl=S90;class Ia1{bucket;sm;prefixLen;codec;constructor($,Z,X,Q){this.bucket=$,this.prefixLen=Z,this.sm=X,this.codec=Q}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get delta(){return 0}get created(){return this.sm.time}get revision(){return this.sm.seq}get operation(){if(this.sm.header?.has("Nats-Marker-Reason")){if(this.sm.header?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.header?.get(Ma1.kvOperationHdr)||"PUT"}get length(){let $=this.sm.header.get(Q5.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}json($){return JSON.parse(g5.TD.decode(this.value),$)}string(){return g5.TD.decode(this.value)}}class qa1{bucket;sm;prefixLen;update;codec;constructor($,Z,X,Q,Y){this.bucket=$,this.prefixLen=Z,this.sm=X,this.update=Q,this.codec=Y}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get created(){return new Date((0,g5.millis)(this.sm.info.timestampNanos))}get revision(){return this.sm.seq}get operation(){if(this.sm.headers?.has("Nats-Marker-Reason")){if(this.sm.headers?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.headers?.get(Ma1.kvOperationHdr)||"PUT"}get delta(){return this.sm.info.pending}get length(){let $=this.sm.headers?.get(Q5.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}get isUpdate(){return this.update}json($){return JSON.parse(g5.TD.decode(this.value),$)}string(){return g5.TD.decode(this.value)}}});var Gl0=_((M3)=>{Object.defineProperty(M3,"__esModule",{value:!0});M3.validateKey=M3.validateBucket=M3.NoopKvCodecs=M3.Kvm=M3.defaultBucketOpts=M3.Bucket=M3.Base64KeyCodec=M3.KvWatchInclude=M3.kvPrefix=void 0;var Sa1=Ql0();Object.defineProperty(M3,"kvPrefix",{enumerable:!0,get:function(){return Sa1.kvPrefix}});Object.defineProperty(M3,"KvWatchInclude",{enumerable:!0,get:function(){return Sa1.KvWatchInclude}});var UE=Va1();Object.defineProperty(M3,"Base64KeyCodec",{enumerable:!0,get:function(){return UE.Base64KeyCodec}});Object.defineProperty(M3,"Bucket",{enumerable:!0,get:function(){return UE.Bucket}});Object.defineProperty(M3,"defaultBucketOpts",{enumerable:!0,get:function(){return UE.defaultBucketOpts}});Object.defineProperty(M3,"Kvm",{enumerable:!0,get:function(){return UE.Kvm}});Object.defineProperty(M3,"NoopKvCodecs",{enumerable:!0,get:function(){return UE.NoopKvCodecs}});Object.defineProperty(M3,"validateBucket",{enumerable:!0,get:function(){return UE.validateBucket}});Object.defineProperty(M3,"validateKey",{enumerable:!0,get:function(){return UE.validateKey}})});var Jl0=_((tB)=>{Object.defineProperty(tB,"__esModule",{value:!0});tB.NoopKvCodecs=tB.Kvm=tB.defaultBucketOpts=tB.Bucket=tB.Base64KeyCodec=tB.KvWatchInclude=void 0;var ba8=Gl0();Object.defineProperty(tB,"KvWatchInclude",{enumerable:!0,get:function(){return ba8.KvWatchInclude}});var ti=Gl0();Object.defineProperty(tB,"Base64KeyCodec",{enumerable:!0,get:function(){return ti.Base64KeyCodec}});Object.defineProperty(tB,"Bucket",{enumerable:!0,get:function(){return ti.Bucket}});Object.defineProperty(tB,"defaultBucketOpts",{enumerable:!0,get:function(){return ti.defaultBucketOpts}});Object.defineProperty(tB,"Kvm",{enumerable:!0,get:function(){return ti.Kvm}});Object.defineProperty(tB,"NoopKvCodecs",{enumerable:!0,get:function(){return ti.NoopKvCodecs}})});function C90(){let $=new TextEncoder,Z=new TextDecoder;return{encode:(X)=>$.encode(JSON.stringify(X)),decode:(X)=>JSON.parse(Z.decode(X))}}class Wl0{options;kv=null;codec=C90();constructor($){this.options=$}async init(){let $=this.options.getJetStream();if(!$)return;this.kv=await new _a1.Kvm($).create(ya8,{storage:Ca1.StorageType.Memory})}async get($,Z){if(!this.kv)return null;try{let X=await this.kv.get(`${$}.${Z}`);if(!X?.value?.length)return null;if(X.operation==="DEL"||X.operation==="PURGE")return null;return this.codec.decode(X.value)}catch{return null}}async set($,Z,X){if(!this.kv)return;try{await this.kv.put(`${$}.${Z}`,this.codec.encode(X))}catch{}}async invalidate($){if(!this.kv)return;await Promise.all(["tools","resources","prompts"].map(async(X)=>{try{await this.kv.delete(`${X}.${$}`)}catch{}}))}teardown(){this.kv=null}}function ga8($,Z,X){if(X<=0)return!0;if($===void 0)return!0;return Z-$>=X}function va1($){let Z=["tools","resources","prompts"];for(let X of Z){let Q=`${X}:${$}`;v90.delete(Q),ri.delete(Q)}}function _90($){return $ instanceof L1&&$.code===I1.MethodNotFound}function ha8($){return $ instanceof L1&&$.code===-32000&&/connection closed/i.test($.message)}async function rB($,Z,X,Q,Y,G=0){if(!Q)try{return await X()}catch(F){if(_90(F))return[];return oi.add(1,{type:$,outcome:"error",stage:"no_cache"}),null}let J=`${$}:${Z}`,W=await Q.get($,Z);if(W===null)try{let F=await X();return Q.set($,Z,F).catch(()=>{}),v90.set(J,Date.now()),oi.add(1,{type:$,outcome:"miss",stage:"miss"}),F}catch(F){if(_90(F))return Q.set($,Z,[]).catch(()=>{}),[];return oi.add(1,{type:$,outcome:"error",stage:"miss"}),null}if(oi.add(1,{type:$,outcome:"hit",stage:"hit"}),ga8(v90.get(J),Date.now(),G)&&!ri.has(J)){ri.add(J),v90.set(J,Date.now());let F=X().then((H)=>Q.set($,Z,H)).catch((H)=>{if(_90(H)||ha8(H)){if(_90(H))Q.set($,Z,[]).catch(()=>{});return}oi.add(1,{type:$,outcome:"error",stage:"revalidation"})}).finally(()=>ri.delete(J));Y?.(F)}return W}function Kl0($){fa1=$}function Y9(){return fa1}var Ca1,_a1,oi,ya8="DECOCMS_MCP_LISTS",ri,v90,oB=30000,fa1=null;var CQ=D(()=>{X9();I6();Ca1=V(OL(),1),_a1=V(Jl0(),1),oi=w$.createCounter("mcp_list_cache.fetches",{description:"MCP list cache fetch outcomes (hit, miss, error)",unit:"{fetches}"});ri=new Set;w$.createObservableGauge("mcp_list_cache.pending_revalidations",{description:"In-flight background MCP list revalidations on this pod",unit:"{revalidations}"}).addCallback(($)=>$.observe(ri.size));v90=new Map});async function Fl0($,Z,X){let Q=new AbortController,Y,G=new Promise((W,K)=>{Y=setTimeout(()=>{Q.abort(),K(new ba1($.id,X))},X)}),J=(async()=>{let W=await U5($,Z,!0);try{return(await W.listTools(void 0,{timeout:X,signal:Q.signal})).tools}finally{await W.close().catch(()=>{})}})();J.catch(()=>{});try{return await Promise.race([J,G])}finally{if(Y)clearTimeout(Y)}}var ba1;var xa1=D(()=>{ai();ba1=class ba1 extends Error{constructor($,Z){super(`listTools timed out after ${Z}ms for connection ${$}`);this.name="ListToolsTimeoutError"}}});function f90($){return(Z)=>{if(Z instanceof L1&&Z.code===I1.MethodNotFound)return $;throw Z}}var ya1=D(()=>{X9()});function b90($,Z,X){let Q=aB($,Z,X,Y9()??void 0),Y=Lw(Q,{name:"studio-mcp-server",version:"1.0.0"},{capabilities:ua8,toolCallTimeoutMs:Vb});Y.server.setRequestHandler(lU,async()=>{return await Q.listResources().catch(f90({resources:[]}))}),Y.server.setRequestHandler(dU,async()=>{return await Q.listResourceTemplates().catch(f90({resourceTemplates:[]}))}),Y.server.setRequestHandler(mU,async()=>{return await Q.listPrompts().catch(f90({prompts:[]}))});let G=Y.close.bind(Y);return Y.close=async()=>{await G(),await Q.close().catch(()=>{})},Y}var ua8;var ga1=D(()=>{hX();X9();si();CQ();ya1();ua8={tools:{},resources:{},prompts:{}}});var qH=D(()=>{ai();xa1();ga1()});function ei($,Z,X){if(Z.some((Q)=>Q!=="*"&&Q.startsWith("SELF::"))&&$.SELF===void 0)$.SELF={value:`${X}_self`}}function $p($,Z){let X=new Map;for(let Q of Z){if(Q==="*")continue;let[Y,G]=q50(Q);if(!ca8.has(G))continue;let J=Oi(Y,$);if(typeof J!=="object"||J===null||!("value"in J))continue;let W=J.value;if(typeof W!=="string")continue;X.set(`${W}:${G}`,{targetConnectionId:W,scope:G})}return[...X.values()]}async function Zp($,Z,X,Q){for(let J of Z){if(J==="*")continue;let[W]=q50(J),K=Oi(W,$);if(K===void 0||K===null)throw Error(`Scope references key "${W}" but it's not present in state`)}let Y=ym1($,Z),G=`${X}_self`;for(let J of Y){if(J===G)continue;let W=await Q.storage.connections.findById(J);if(!W||W.organization_id!==X)throw Error(`Referenced connection not found: ${J}`);try{await Q.access.check(J)}catch(K){throw Error(`Access denied to referenced connection: ${J}. ${K.message}`)}}}var ca8;var Hl0=D(()=>{Bu0();W60();ca8=new Set([G60,J60])});import{z as ha1}from"zod";var la8,da8,Nl0;var ua1=D(()=>{S4();M0();R$();CQ();qH();Hl0();li();hW();la8=ha1.object({data:R80.describe("Data for the new connection (id is auto-generated if not provided)")}),da8=ha1.object({item:l7.describe("The created connection entity")}),Nl0=u({name:"COLLECTION_CONNECTIONS_CREATE",description:"Create a new MCP connection. Auto-fetches and caches the server's tool list.",annotations:{title:"Create Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:la8,outputSchema:da8,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=o0(Z);if(!Q)throw Error("User ID required to create connection");let Y={...$.data,organization_id:X.id,created_by:Q};if(Y.id){if((await Z.storage.connections.findById(Y.id))?.organization_id===X.id)throw Error("Connection already exists in organization");if(await Z.storage.connections.findBySanitizedId(Y.id))throw Error("Connection id conflicts with an existing connection's isolated database schema")}if(Y.connection_type==="VIRTUAL"){let N=of(Y.connection_url);if(!N)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let U=await Z.storage.virtualMcps.findById(N);if(!U)throw Error(`Virtual MCP not found: ${N}`);if(U.organization_id!==X.id)throw Error("Virtual MCP does not belong to the current organization");Y.connection_url=rf(N)}if(Y.connection_type==="STDIO"&&!b0().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let G=await iB({id:`pending-${Date.now()}`,title:Y.title,connection_type:Y.connection_type,connection_url:Y.connection_url,connection_token:Y.connection_token,connection_headers:Y.connection_headers}).catch(()=>null),J=G?.tools?.length?G.tools:null,W=G?.scopes?.length?G.scopes:Y.configuration_scopes??null,K=Y.configuration_state??null;if(K&&W?.length)ei(K,W,X.id),await Zp(K,W,X.id,Z);let F=await Z.storage.connections.createNew({...Y,tools:null,configuration_state:K,configuration_scopes:W}),H=K&&W?.length?$p(K,W):[];if(H.length>0){let N;try{await Z.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:X.id,subjectConnectionId:F.id,createdBy:Q,grants:H});let{plaintextToken:U,record:B}=await Z.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:X.id,subjectConnectionId:F.id});N=B.id,await(await U5(F,Z,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:K,scopes:W,firstRun:!0,vault:{baseUrl:Z.baseUrl,org:X.slug??X.id,subjectConnectionId:F.id,token:U}}})}catch(U){if(N)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:X.id,subjectConnectionId:F.id,tokenId:N});throw await Z.storage.connections.delete(F.id),U}}if(J)Y9()?.set("tools",F.id,J).catch(()=>{});return x1.capture({distinctId:Q,event:"connection_created",groups:{organization:X.id},properties:{connection_id:F.id,connection_type:F.connection_type,app_name:F.app_name??null,organization_id:X.id,tools_count:J?.length??0}}),{item:F}}})});import{z as nG}from"zod/v4";import{z as ca1}from"zod/v4";import{z as x90}from"zod/v4";import{z as KK}from"zod/v4";import{z as na8}from"zod/v4";import{z as BE}from"zod/v4";import{z as FK}from"zod/v4";import{z as xZ}from"zod/v4";import{z as la1}from"zod/v4";import{z as h90}from"zod/v4";import{z as Ls8}from"zod/v4";import{z as da1}from"zod/v4";import{z as y90}from"zod/v4";import{z as Is8}from"zod/v4";function Xp($,Z){if($===Z)return!0;if($==null||Z==null)return $===Z;if(typeof $!==typeof Z)return!1;if(Array.isArray($)&&Array.isArray(Z)){if($.length!==Z.length)return!1;return $.every((X,Q)=>Xp(X,Z[Q]))}if(typeof $==="object"&&typeof Z==="object"){let X=Object.keys($),Q=Object.keys(Z);if(X.length!==Q.length)return!1;return X.every((Y)=>Q.includes(Y)&&Xp($[Y],Z[Y]))}return!1}function Bs8(){return($)=>{if(!Array.isArray($))return!0;let Z=[];return $.every((X)=>{if(Z.some((Y)=>Xp(X,Y)))return!1;return Z.push(X),!0})}}function g90($,Z){return $.safeParse(Z).success}function O7($){if(typeof $==="boolean")return $?nG.any():nG.never();let Z={};for(let Y of Vs8)Y.apply(Z,$);let X=[];if(Z.string!==!1)X.push(Z.string||nG.string());if(Z.number!==!1)X.push(Z.number||nG.number());if(Z.boolean!==!1)X.push(Z.boolean||nG.boolean());if(Z.null!==!1)X.push(Z.null||nG.null());if(Z.array!==!1)X.push(Z.array||nG.array(nG.any()));if(Z.tuple!==!1&&Z.tuple!==void 0)X.push(Z.tuple);if(Z.object!==!1)if(Z.object)X.push(Z.object);else{let Y=nG.custom((G)=>{return typeof G==="object"&&G!==null&&!Array.isArray(G)},"Must be an object, not an array");X.push(Y)}if(Z.file!==!1&&Z.file!==void 0)X.push(Z.file);let Q;if(X.length===0)Q=nG.never();else if(X.length===1)Q=X[0];else if(!Object.keys($).some((G)=>G!=="$schema"&&G!=="title"&&G!=="description"))Q=nG.any();else Q=nG.union(X);for(let Y of Ss8)Q=Y.apply(Q,$);return Q}var ma8=class{apply($,Z){if(!Z.type)return;let X=Array.isArray(Z.type)?Z.type:[Z.type],Q=new Set(X);if(!Q.has("string"))$.string=!1;if(!Q.has("number")&&!Q.has("integer"))$.number=!1;if(!Q.has("boolean"))$.boolean=!1;if(!Q.has("null"))$.null=!1;if(!Q.has("array"))$.array=!1;if(!Q.has("object"))$.object=!1;if(Q.has("integer")&&$.number!==!1){let Y=$.number||ca1.number();if(Y instanceof ca1.ZodNumber)$.number=Y.int()}}},ia8=class{apply($,Z){if(Z.const===void 0)return;let X=Z.const;if($.string=!1,$.number=!1,$.boolean=!1,$.null=!1,$.array=!1,$.object=!1,typeof X==="string")$.string=x90.literal(X);else if(typeof X==="number")$.number=x90.literal(X);else if(typeof X==="boolean")$.boolean=x90.literal(X);else if(X===null)$.null=x90.null();else if(Array.isArray(X))$.array=void 0;else if(typeof X==="object")$.object=void 0}},pa8=class{apply($,Z){if(!Z.enum)return;if(Z.enum.length===0){if(!Z.type)$.string=!1,$.number=!1,$.boolean=!1,$.null=!1,$.array=!1,$.object=!1;return}let X={string:Z.enum.filter((Q)=>typeof Q==="string"),number:Z.enum.filter((Q)=>typeof Q==="number"),boolean:Z.enum.filter((Q)=>typeof Q==="boolean"),null:Z.enum.filter((Q)=>Q===null),array:Z.enum.filter((Q)=>Array.isArray(Q)),object:Z.enum.filter((Q)=>typeof Q==="object"&&Q!==null&&!Array.isArray(Q))};$.string=this.createTypeSchema(X.string,"string"),$.number=this.createTypeSchema(X.number,"number"),$.boolean=this.createTypeSchema(X.boolean,"boolean"),$.null=X.null.length>0?KK.null():!1,$.array=X.array.length>0?void 0:!1,$.object=X.object.length>0?void 0:!1}createTypeSchema($,Z){if($.length===0)return!1;if($.length===1)return KK.literal($[0]);if(Z==="string")return KK.enum($);if(Z==="number"){let[X,Q,...Y]=$;return KK.union([KK.literal(X),KK.literal(Q),...Y.map((G)=>KK.literal(G))])}if(Z==="boolean")return KK.union([KK.literal(!0),KK.literal(!1)]);return!1}},ta8=class{apply($,Z){let X=Z;if(X.type==="string"&&X.format==="binary"&&X.contentEncoding==="binary"){let Q=na8.file();if(X.minLength!==void 0)Q=Q.min(X.minLength);if(X.maxLength!==void 0)Q=Q.max(X.maxLength);if(X.contentMediaType!==void 0)Q=Q.mime(X.contentMediaType);$.file=Q,$.string=!1}}},oa8=class{apply($,Z){let X=Z;if(Z.type===void 0&&(X.minLength!==void 0||X.maxLength!==void 0||X.pattern!==void 0)){if($.string===void 0)$.string=BE.string()}}},ra8=class{apply($,Z){let X=Z;if(X.minLength===void 0)return;if($.string!==!1){let Q=$.string||BE.string();if(Q instanceof BE.ZodString)$.string=Q.refine((Y)=>{return Array.from(Y).length>=X.minLength},{message:`String must be at least ${X.minLength} characters long`})}}},aa8=class{apply($,Z){let X=Z;if(X.maxLength===void 0)return;if($.string!==!1){let Q=$.string||BE.string();if(Q instanceof BE.ZodString)$.string=Q.refine((Y)=>{return Array.from(Y).length<=X.maxLength},{message:`String must be at most ${X.maxLength} characters long`})}}},sa8=class{apply($,Z){let X=Z;if(!X.pattern)return;if($.string!==!1){let Q=$.string||BE.string();if(Q instanceof BE.ZodString){let Y=new RegExp(X.pattern);$.string=Q.regex(Y)}}}},ea8=class{apply($,Z){let X=Z;if(X.minimum===void 0)return;if($.number!==!1){let Q=$.number||FK.number();if(Q instanceof FK.ZodNumber)$.number=Q.min(X.minimum)}}},$s8=class{apply($,Z){let X=Z;if(X.maximum===void 0)return;if($.number!==!1){let Q=$.number||FK.number();if(Q instanceof FK.ZodNumber)$.number=Q.max(X.maximum)}}},Zs8=class{apply($,Z){let X=Z;if(X.exclusiveMinimum===void 0)return;if($.number!==!1){let Q=$.number||FK.number();if(Q instanceof FK.ZodNumber)if(typeof X.exclusiveMinimum==="number")$.number=Q.gt(X.exclusiveMinimum);else $.number=!1}}},Xs8=class{apply($,Z){let X=Z;if(X.exclusiveMaximum===void 0)return;if($.number!==!1){let Q=$.number||FK.number();if(Q instanceof FK.ZodNumber)if(typeof X.exclusiveMaximum==="number")$.number=Q.lt(X.exclusiveMaximum);else $.number=!1}}},Qs8=class{apply($,Z){let X=Z;if(X.multipleOf===void 0)return;if($.number!==!1){let Q=$.number||FK.number();if(Q instanceof FK.ZodNumber)$.number=Q.refine((Y)=>{if(X.multipleOf===0)return!1;let G=Y/X.multipleOf,J=Math.round(G),W=Math.min(Math.abs(Y)*Number.EPSILON*10,Math.abs(X.multipleOf)*Number.EPSILON*10);return Math.abs(G-J)<=W/Math.abs(X.multipleOf)},{message:`Must be a multiple of ${X.multipleOf}`})}}},Ys8=class{apply($,Z){let X=Z;if(Z.type===void 0&&(X.minItems!==void 0||X.maxItems!==void 0||X.items!==void 0||X.prefixItems!==void 0)){if($.array===void 0)$.array=xZ.array(xZ.any())}}},Gs8=class{apply($,Z){let X=Z;if(X.minItems===void 0)return;if($.array!==!1)$.array=($.array||xZ.array(xZ.any())).min(X.minItems)}},Js8=class{apply($,Z){let X=Z;if(X.maxItems===void 0)return;if($.array!==!1)$.array=($.array||xZ.array(xZ.any())).max(X.maxItems)}},Ws8=class{apply($,Z){let X=Z;if($.array===!1)return;if(Array.isArray(X.items))$.array=$.array||xZ.array(xZ.any());else if(X.items&&typeof X.items!=="boolean"&&!X.prefixItems){let Q=O7(X.items),Y=xZ.array(Q);if($.array&&$.array instanceof xZ.ZodArray){let G=$.array._def;if(G.checks)G.checks.forEach((J)=>{if(J._zod&&J._zod.def){let W=J._zod.def;if(W.check==="min_length"&&W.minimum!==void 0)Y=Y.min(W.minimum);else if(W.check==="max_length"&&W.maximum!==void 0)Y=Y.max(W.maximum)}})}$.array=Y}else if(typeof X.items==="boolean"&&X.items===!1)if(!X.prefixItems)$.array=xZ.array(xZ.any()).max(0);else $.array=$.array||xZ.array(xZ.any());else if(typeof X.items==="boolean"&&X.items===!0)$.array=$.array||xZ.array(xZ.any());else if(X.prefixItems)$.array=$.array||xZ.array(xZ.any())}},Ks8=class{apply($,Z){if(Z.type!=="array")return;let X=Z;if(!Array.isArray(X.items))return;if($.array===!1)return;let Q=X.items.map((G)=>O7(G)),Y;if(Q.length===0)Y=la1.tuple([]);else Y=la1.tuple(Q);if(X.minItems!==void 0&&X.minItems>Q.length)Y=!1;if(X.maxItems!==void 0&&X.maxItems<Q.length)Y=!1;$.tuple=Y,$.array=!1}},Fs8=class{apply($,Z){let X=Z;if($.object===!1)return;if(X.properties||X.required||X.additionalProperties!==void 0)$.object=$.object||h90.object({}).passthrough()}},Hs8=class{apply($,Z){let X=Z;if(Z.type===void 0&&(X.maxProperties!==void 0||X.minProperties!==void 0)){if($.object===void 0)$.object=h90.object({}).passthrough()}}},Ns8=class{apply($,Z){let X=Z;if(X.maxProperties===void 0)return;if($.object!==!1){let Q=$.object||h90.object({}).passthrough();$.object=Q.refine((Y)=>Object.keys(Y).length<=X.maxProperties,{message:`Object must have at most ${X.maxProperties} properties`})}}},Us8=class{apply($,Z){let X=Z;if(X.minProperties===void 0)return;if($.object!==!1){let Q=$.object||h90.object({}).passthrough();$.object=Q.refine((Y)=>Object.keys(Y).length>=X.minProperties,{message:`Object must have at least ${X.minProperties} properties`})}}},Os8=class{apply($,Z){if(!Z.not)return $;let X=O7(Z.not);return $.refine((Q)=>!g90(X,Q),{message:"Value must not match the 'not' schema"})}},Ds8=class{apply($,Z){if(Z.uniqueItems!==!0)return $;return $.refine(Bs8(),{message:"Array items must be unique"})}},ws8=class{apply($,Z){if(!Z.allOf||Z.allOf.length===0)return $;return Z.allOf.map((Q)=>O7(Q)).reduce((Q,Y)=>Ls8.intersection(Q,Y),$)}},Es8=class{apply($,Z){if(!Z.anyOf||Z.anyOf.length===0)return $;let X=Z.anyOf.length===1?O7(Z.anyOf[0]):da1.union([O7(Z.anyOf[0]),O7(Z.anyOf[1]),...Z.anyOf.slice(2).map((Q)=>O7(Q))]);return da1.intersection($,X)}},js8=class{apply($,Z){if(!Z.oneOf||Z.oneOf.length===0)return $;let X=Z.oneOf.map((Q)=>O7(Q));return $.refine((Q)=>{let Y=0;for(let G of X)if(G.safeParse(Q).success){if(Y++,Y>1)return!1}return Y===1},{message:"Value must match exactly one of the oneOf schemas"})}},zs8=class{apply($,Z){let X=Z;if(X.prefixItems&&Array.isArray(X.prefixItems)){let Y=X.prefixItems.map((G)=>O7(G));return $.refine((G)=>{if(!Array.isArray(G))return!0;for(let J=0;J<Math.min(G.length,Y.length);J++)if(!g90(Y[J],G[J]))return!1;if(G.length>Y.length){if(typeof X.items==="boolean"&&X.items===!1)return!1;else if(X.items&&typeof X.items==="object"&&!Array.isArray(X.items)){let J=O7(X.items);for(let W=Y.length;W<G.length;W++)if(!g90(J,G[W]))return!1}}return!0},{message:"Array does not match prefixItems schema"})}return $}},Ps8=class{apply($,Z){let X=Z;if(!X.properties&&!X.required&&X.additionalProperties!==!1)return $;if($ instanceof y90.ZodObject||$ instanceof y90.ZodRecord){let Q={};if(X.properties){for(let[Y,G]of Object.entries(X.properties))if(G!==void 0)Q[Y]=O7(G)}if(X.required&&Array.isArray(X.required)){let Y=new Set(X.required);for(let G of Object.keys(Q))if(!Y.has(G))Q[G]=Q[G].optional()}else for(let Y of Object.keys(Q))Q[Y]=Q[Y].optional();if(X.additionalProperties===!1)return y90.object(Q);else return y90.object(Q).passthrough()}return $.refine((Q)=>{if(typeof Q!=="object"||Q===null||Array.isArray(Q))return!0;if(X.properties){for(let[Y,G]of Object.entries(X.properties))if(G!==void 0){if(Object.getOwnPropertyDescriptor(Q,Y)!==void 0){if(!O7(G).safeParse(Q[Y]).success)return!1}}}if(X.required&&Array.isArray(X.required)){for(let Y of X.required)if(Object.getOwnPropertyDescriptor(Q,Y)===void 0)return!1}if(X.additionalProperties===!1&&X.properties){let Y=new Set(Object.keys(X.properties));for(let G in Q)if(!Y.has(G))return!1}return!0},{message:"Object constraints validation failed"})}},As8=class{apply($,Z){if(!Z.enum||Z.enum.length===0)return $;let X=Z.enum.filter((Q)=>Array.isArray(Q)||typeof Q==="object"&&Q!==null);if(X.length===0)return $;return $.refine((Q)=>{if(typeof Q!=="object"||Q===null)return!0;return X.some((Y)=>Xp(Q,Y))},{message:"Value must match one of the enum values"})}},Ts8=class{apply($,Z){if(Z.const===void 0)return $;let X=Z.const;if(typeof X!=="object"||X===null)return $;return $.refine((Q)=>Xp(Q,X),{message:"Value must equal the const value"})}},Rs8=class{apply($,Z){if(Z.description)$=$.describe(Z.description);return $}},qs8=class{apply($,Z){var X;let Q=Z;if(!((X=Q.required)==null?void 0:X.includes("__proto__"))||Z.type!==void 0)return $;return Is8.any().refine((Y)=>this.validateRequired(Y,Q.required),{message:"Missing required properties"})}validateRequired($,Z){if(typeof $!=="object"||$===null||Array.isArray($))return!0;return Z.every((X)=>Object.prototype.hasOwnProperty.call($,X))}},Ms8=class{apply($,Z){var X;let Q=Z;if(Q.contains===void 0)return $;let Y=O7(Q.contains),G=(X=Q.minContains)!=null?X:1,J=Q.maxContains;return $.refine((W)=>{if(!Array.isArray(W))return!0;let K=0;for(let F of W)if(g90(Y,F))K++;if(K<G)return!1;if(J!==void 0&&K>J)return!1;return!0},{message:"Array must contain required items matching the schema"})}},ks8=class{apply($,Z){let{default:X}=Z;if(X===void 0)return $;if(!$.safeParse(X).success)return $;return $.default(X)}},Vs8,Ss8;var ma1=D(()=>{Vs8=[new ia8,new pa8,new ma8,new ta8,new oa8,new Ys8,new Hs8,new ra8,new aa8,new sa8,new ea8,new $s8,new Zs8,new Xs8,new Qs8,new Ks8,new Gs8,new Js8,new Ws8,new Ns8,new Us8,new Fs8],Ss8=[new qs8,new As8,new Ts8,new ws8,new Es8,new js8,new zs8,new Ps8,new Ms8,new Os8,new Ds8,new ks8,new Rs8]});class Ul0{constructor($){this._url=$}start(){if(this._socket)throw Error("WebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise(($,Z)=>{this._socket=new WebSocket(this._url,Cs8),this._socket.onerror=(X)=>{let Q="error"in X?X.error:Error(`WebSocket error: ${JSON.stringify(X)}`);Z(Q),this.onerror?.(Q)},this._socket.onopen=()=>{$()},this._socket.onclose=()=>{this.onclose?.()},this._socket.onmessage=(X)=>{let Q;try{Q=_Y.parse(JSON.parse(X.data))}catch(Y){this.onerror?.(Y);return}this.onmessage?.(Q)}})}async close(){this._socket?.close()}send($){return new Promise((Z,X)=>{if(!this._socket){X(Error("Not connected"));return}this._socket?.send(JSON.stringify($)),Z()})}}var Cs8="mcp";var ia1=D(()=>{X9()});function _s8($){let Z=$;if(!Z||typeof Z!=="object"||!("method"in Z))return null;switch(Z.method){case"initialize":{let X=Z?.params?.protocolVersion;if(!X)return null;return{type:"emit",message:{result:{protocolVersion:X,capabilities:{tools:{}},serverInfo:{name:"deco-chat-server",version:"1.0.0"}},jsonrpc:Z.jsonrpc??"2.0",id:Z.id}}}case"notifications/roots/list_changed":case"notifications/initialized":case"notifications/cancelled":case"notifications/progress":return{type:"suppress"};default:return null}}var u90;var Bl0=D(()=>{jb();u90=class u90 extends pW{constructor($,Z){super($,Z)}send($,Z){let X=_s8($);if(X?.type==="emit")return this.onmessage?.(X.message),Promise.resolve();if(X?.type==="suppress")return Promise.resolve();return super.send($,Z)}}});var pa1,na1=async($,Z,X)=>{let Q=vs8($.connection,Z,X);if(!Q)throw Error("Unknown MCP connection type");let Y=new pa1({name:$?.name??"MCP Client",version:"1.0.0"});return await Y.connect(Q),{client:Y}},vs8=($,Z,X)=>{if($.type==="Websocket")return new Ul0(new URL($.url));if($.type!=="SSE"&&$.type!=="HTTP")return null;let Y={...$.token?{authorization:`Bearer ${$.token}`}:{},...X??{},..."headers"in $?$.headers||{}:{}};if($.type==="SSE"){let G={requestInit:{headers:Y,signal:Z}};if($.token)G.eventSourceInit={fetch:(J,W)=>{return fetch(J,{...W,headers:{...Y,Accept:"text/event-stream"},signal:Z})}};return new wH(new URL($.url),G)}return new u90(new URL($.url),{requestInit:{headers:Y,signal:Z,credentials:"include"}})};var ta1=D(()=>{mW();pd();ia1();X9();hX();Bl0();pa1=class pa1 extends y9{constructor($,Z){super($,{jsonSchemaValidator:N5,...Z})}async listTools($,Z){return await this.request({method:"tools/list",params:$},Wd,Z)}}});function bs8($,Z){if(OE.set($,Z),OE.size>fs8){let X=OE.keys().next().value;if(X!==void 0)OE.delete(X)}}function aa1($){let Z=(X)=>{if("connection"in $)return na1({connection:$.connection},void 0,X);return $.client};return new Proxy({},{get(X,Q){if(Q==="toJSON")return null;if(typeof Q!=="string")throw Error("Name must be a string");if(Q==="listTools")return W;async function Y(K,F=Q){let H=$?.debugId?.(),N=H?{"x-trace-debug-id":H}:void 0,{client:U}=await Z(N),{structuredContent:B,isError:O,content:L}=await U.callTool({name:String(F),arguments:K});if(O){let E=L?.[0]?.text,j=typeof E==="string"?oa1(E):null,z=j?.code&&typeof $?.getErrorByStatusCode==="function"?$.getErrorByStatusCode(j.code,j.message,j.traceId):null;if(z)throw z;throw Error(`Tool ${String(F)} returned an error: ${JSON.stringify(B??L)}`)}if(B!==void 0)return B;let w=L?.[0]?.text;return typeof w==="string"?oa1(w):void 0}async function G(){let{client:K}=await Z(),{tools:F}=await K.listTools();return F}async function J(){if(!("connection"in $))return G();let K=$.connection,F=JSON.stringify(K);try{if(!OE.has(F))bs8(F,G());return await OE.get(F)}catch(H){console.error("Failed to list tools",H),OE.delete(F);return}}async function W(){return(await J()??[]).map((F)=>ra1(F,Y))}return Y.asTool=async()=>{let F=(await J()??[]).find((H)=>H.name===Q);if(!F)throw Error(`Tool ${Q} not found`);return ra1(F,Y)},Y}})}var oa1=($)=>{try{return JSON.parse($)}catch{return $}},fs8=500,OE,ra1=($,Z)=>{return{...$,id:$.name,inputSchema:$.inputSchema?O7($.inputSchema):void 0,outputSchema:$.outputSchema?O7($.outputSchema):void 0,execute:(X)=>{return Z(X.context,$.name)}}};var sa1=D(()=>{ma1();ta1();OE=new Map});function sB($){return aa1($)}var ex;var Ol0=D(()=>{sa1();ex=new Proxy({},{get($,Z){if(Z==="toJSON")return null;if(Z==="forConnection")return(X)=>sB({connection:X});if(Z==="forClient")return(X)=>sB({client:X});return globalThis[Z]}})});function c90($){return{isImplementedBy:(Z)=>{for(let X of $){let Q=typeof X.name==="string"?new RegExp(`^${X.name}$`):X.name,Y=Z.find((G)=>Q.test(G.name));if(!Y&&X.opt)continue;if(!Y)return!1}return!0}}}var HK=($)=>{return{...c90($),forClient:(Z)=>{return sB({client:Z})},forConnection:(Z)=>{return sB({connection:Z})}}};var DE=D(()=>{Ol0()});import{z as h5}from"zod";var ea1,l90,$s1,d90,Zs1,xs8;var Xs1=D(()=>{DE();ea1=h5.object({specversion:h5.literal("1.0").describe("CloudEvents specification version"),id:h5.string().describe("Unique identifier for this event (UUID recommended)"),source:h5.string().describe("Connection ID of the event publisher"),type:h5.string().describe("Event type (e.g., 'order.created', 'user.signup')"),time:h5.string().datetime().optional().describe("Timestamp of when the event occurred (ISO 8601)"),subject:h5.string().optional().describe("Subject/resource identifier (e.g., order ID, user ID)"),datacontenttype:h5.string().optional().default("application/json").describe("Content type of the data attribute"),dataschema:h5.string().url().optional().describe("URI to the schema for the data attribute"),data:h5.unknown().optional().describe("Event payload (any JSON value)")}),l90=h5.object({events:h5.array(ea1).min(1).describe("Batch of CloudEvents to process")}),$s1=h5.object({success:h5.boolean().optional().describe("Whether this event was processed successfully"),error:h5.string().optional().describe("Error message for this event"),retryAfter:h5.number().int().positive().optional().describe("Re-deliver this event after this many ms")}),d90=h5.object({success:h5.boolean().optional().describe("Batch success - applies to events not in results"),error:h5.string().optional().describe("Batch error message - applies to events not in results"),processedCount:h5.number().int().min(0).optional().describe("Number of events successfully processed"),retryAfter:h5.number().int().positive().optional().describe("Batch retryAfter - applies to events not in results"),results:h5.record(h5.string(),$s1).optional().describe("Per-event results keyed by event ID")}),Zs1=[{name:"ON_EVENTS",inputSchema:l90,outputSchema:d90}],xs8=HK(Zs1)});import{z as u5}from"zod";var Qs1,Ys1,Gs1,Js1,Ws1,Ks1,m90,Dl0;var Ll0=D(()=>{DE();Qs1=u5.object({type:u5.literal("string"),enum:u5.array(u5.string()).optional(),description:u5.string().optional()}),Ys1=u5.object({type:u5.string(),description:u5.string(),paramsSchema:u5.record(u5.string(),Qs1)}),Gs1=u5.object({}),Js1=u5.object({triggers:u5.array(Ys1)}),Ws1=u5.object({type:u5.string(),params:u5.record(u5.string(),u5.string()),enabled:u5.boolean(),callbackUrl:u5.url().optional(),callbackToken:u5.string().min(1).optional()}),Ks1=u5.object({success:u5.boolean()}),m90=[{name:"TRIGGER_LIST",inputSchema:Gs1,outputSchema:Js1},{name:"TRIGGER_CONFIGURE",inputSchema:Ws1,outputSchema:Ks1}],Dl0=HK(m90)});import{z as M$}from"zod";var ys8,gs8,hs8,us8,cs8,ls8,ds8,ms8,is8,ps8,ns8,ts8,LE;var Qp=D(()=>{ys8=M$.object({prefix:M$.string().optional().describe("Filter objects by prefix (e.g., 'folder/' for folder contents)"),maxKeys:M$.number().optional().default(1000).describe("Maximum number of keys to return (default: 1000)"),continuationToken:M$.string().optional().describe("Token for pagination from previous response"),delimiter:M$.string().optional().describe("Delimiter for grouping keys (typically '/'). When set, commonPrefixes returns folder paths.")}),gs8=M$.object({objects:M$.array(M$.object({key:M$.string().describe("Object key/path"),size:M$.number().describe("Object size in bytes"),lastModified:M$.string().describe("Last modified timestamp"),etag:M$.string().describe("Entity tag for the object")})),nextContinuationToken:M$.string().optional().describe("Token for fetching next page of results"),isTruncated:M$.boolean().describe("Whether there are more results available"),commonPrefixes:M$.array(M$.string()).optional().describe("Folder paths when delimiter is used (e.g., ['photos/2024/', 'photos/2025/'])")}),hs8=M$.object({key:M$.string().describe("Object key/path to get metadata for")}),us8=M$.object({contentType:M$.string().optional().describe("MIME type of the object"),contentLength:M$.number().describe("Size of the object in bytes"),lastModified:M$.string().describe("Last modified timestamp"),etag:M$.string().describe("Entity tag for the object"),metadata:M$.record(M$.string(),M$.string()).optional().describe("Custom metadata key-value pairs")}),cs8=M$.object({key:M$.string().describe("Object key/path to generate URL for"),expiresIn:M$.number().optional().describe("URL expiration time in seconds (default: from state config or 3600)")}),ls8=M$.object({url:M$.string().describe("Presigned URL for downloading the object"),expiresIn:M$.number().describe("Expiration time in seconds that was used")}),ds8=M$.object({key:M$.string().describe("Object key/path for the upload"),expiresIn:M$.number().optional().describe("URL expiration time in seconds (default: from state config or 3600)"),contentType:M$.string().optional().describe("MIME type for the object being uploaded")}),ms8=M$.object({url:M$.string().describe("Presigned URL for uploading the object"),expiresIn:M$.number().describe("Expiration time in seconds that was used")}),is8=M$.object({key:M$.string().describe("Object key/path to delete")}),ps8=M$.object({success:M$.boolean().describe("Whether the deletion was successful"),key:M$.string().describe("The key that was deleted")}),ns8=M$.object({keys:M$.array(M$.string()).max(1000).describe("Array of object keys/paths to delete (max 1000)")}),ts8=M$.object({deleted:M$.array(M$.string()).describe("Array of successfully deleted keys"),errors:M$.array(M$.object({key:M$.string(),message:M$.string()})).describe("Array of errors for failed deletions")}),LE=[{name:"LIST_OBJECTS",inputSchema:ys8,outputSchema:gs8},{name:"GET_OBJECT_METADATA",inputSchema:hs8,outputSchema:us8},{name:"GET_PRESIGNED_URL",inputSchema:cs8,outputSchema:ls8},{name:"PUT_PRESIGNED_URL",inputSchema:ds8,outputSchema:ms8},{name:"DELETE_OBJECT",inputSchema:is8,outputSchema:ps8},{name:"DELETE_OBJECTS",inputSchema:ns8,outputSchema:ts8}]});import{z as w6}from"zod";var Fs1,Hs1,Ns1,Yp,i90,p90,n90,t90,os8;var wl0=D(()=>{DE();Fs1=w6.object({primary:w6.string().optional().describe("Primary brand color (hex)"),secondary:w6.string().optional().describe("Secondary brand color (hex)"),accent:w6.string().optional().describe("Accent / highlight color (hex)"),background:w6.string().optional().describe("Background color (hex)"),foreground:w6.string().optional().describe("Foreground / text color (hex)")}),Hs1=w6.object({heading:w6.string().optional().describe("Font family for headings"),body:w6.string().optional().describe("Font family for body text"),code:w6.string().optional().describe("Font family for code / monospace")}),Ns1=w6.object({logo:w6.string().optional().describe("Logo URL"),favicon:w6.string().optional().describe("Favicon URL"),ogImage:w6.string().optional().describe("Open Graph image URL")}),Yp=w6.object({id:w6.string(),name:w6.string().describe("Brand / company name"),domain:w6.string().optional().describe("Company domain (e.g. example.com)"),colors:Fs1.optional().describe("Semantic color palette"),fonts:Hs1.optional().describe("Font families by role"),assets:Ns1.optional().describe("Visual identity assets"),overview:w6.string().optional().describe("Company overview / description"),tagline:w6.string().optional().describe("Brand tagline"),tone:w6.string().optional().describe("Tone of voice description"),metadata:w6.record(w6.string(),w6.unknown()).optional().describe("Extra design tokens and metadata")}),i90=w6.object({id:w6.string().optional().describe("Brand ID. Omit to get the default brand.")}),p90=w6.object({}),n90=w6.object({items:w6.array(Yp)}),t90=[{name:"BRAND_GET",inputSchema:i90,outputSchema:Yp},{name:"BRAND_LIST",inputSchema:p90,outputSchema:n90,opt:!0}],os8=HK(t90)});var El0=D(()=>{DE();Xs1();Ll0();Qp();wl0()});import{z as E8}from"zod";function MH($){return E8.object({items:E8.array($).describe("Array of collection items"),totalCount:E8.number().int().min(0).optional().describe("Total number of matching items (if available)"),hasMore:E8.boolean().optional().describe("Whether there are more items available")})}function Jp($){return E8.object({item:$.nullable().describe("The retrieved item, or null if not found")})}function ss8($){return E8.object({data:$.partial().describe("Data for the new entity (id may be auto-generated)")})}function es8($){return E8.object({item:$.describe("The created entity with generated id")})}function $e8($){return E8.object({id:E8.string().describe("ID of the entity to update"),data:$.partial().describe("Partial entity data to update")})}function Ze8($){return E8.object({item:$.describe("The updated entity")})}function Kp($){return E8.object({item:$.describe("The deleted entity")})}function r90($,Z,X){let Q=$.toUpperCase(),Y=X?.readOnly??!1,G=[{name:`COLLECTION_${Q}_LIST`,inputSchema:k3,outputSchema:MH(Z)},{name:`COLLECTION_${Q}_GET`,inputSchema:Gp,outputSchema:Jp(Z)}];if(!Y)G.push({name:`COLLECTION_${Q}_CREATE`,inputSchema:ss8(Z),outputSchema:es8(Z),opt:!0},{name:`COLLECTION_${Q}_UPDATE`,inputSchema:$e8(Z),outputSchema:Ze8(Z),opt:!0},{name:`COLLECTION_${Q}_DELETE`,inputSchema:Wp,outputSchema:Kp(Z),opt:!0});return G}var o90,rs8,Us1,as8,k3,Gp,Wp;var tG=D(()=>{o90=E8.object({id:E8.string().describe("Unique identifier for the entity"),title:E8.string().describe("Human-readable title for the entity"),description:E8.string().nullish().describe("Description of the entity"),created_at:E8.string().datetime(),updated_at:E8.string().datetime(),created_by:E8.string().optional(),updated_by:E8.string().optional()}),rs8=E8.object({field:E8.array(E8.string()),operator:E8.enum(["eq","gt","gte","lt","lte","in","like","contains"]),value:E8.unknown()}),Us1=E8.lazy(()=>E8.union([rs8,E8.object({operator:E8.enum(["and","or","not"]),conditions:E8.array(Us1)})])),as8=E8.object({field:E8.array(E8.string()),direction:E8.enum(["asc","desc"]),nulls:E8.enum(["first","last"]).optional()}),k3=E8.object({where:Us1.optional().describe("Filter expression"),orderBy:E8.array(as8).optional().describe("Sort expressions"),limit:E8.number().int().min(1).max(1000).optional().describe("Maximum number of items to return"),offset:E8.number().int().min(0).optional().describe("Number of items to skip")});Gp=E8.object({id:E8.string().describe("ID of the entity to retrieve")});Wp=E8.object({id:E8.string().describe("ID of the entity to delete")})});import{z as $y}from"zod";var Xe8,Qe8,Bs1;var Os1=D(()=>{tG();Xe8=o90.extend({avatar:$y.string().describe("URL or data URI to the assistant's avatar image"),system_prompt:$y.string().describe("System prompt that defines the assistant's behavior"),virtual_mcp_id:$y.string().describe("Virtual MCP ID to use for this assistant"),model:$y.object({id:$y.string().describe("Model ID"),connectionId:$y.string().describe("Connection ID that provides the model")}).describe("Selected model reference for this assistant")}),Qe8=r90("assistant",Xe8),Bs1=[...Qe8]});import{z as F0}from"zod";var Fp,kH,Ls1,Ye8,Ge8,ws1,Je8,We8,Ke8,Fe8,He8,Ne8,Es1,Ue8,Be8,Oe8,De8,Le8,we8,Ee8,je8,ze8,Pe8,kQ5,Ae8,VQ5,Ds1,Te8,Re8,a90,SQ5;var js1=D(()=>{DE();tG();Fp=F0.lazy(()=>F0.union([F0.null(),F0.string(),F0.number(),F0.boolean(),F0.record(F0.string(),Fp),F0.array(Fp)])),kH=F0.record(F0.string(),F0.record(F0.string(),Fp)).optional().describe("Additional provider-specific options. Outer record keyed by provider name, inner by option key"),Ls1=F0.object({type:F0.literal("text"),text:F0.string().describe("The text content"),providerOptions:kH}),Ye8=F0.object({type:F0.literal("text"),text:F0.string().describe("The text content"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),Ge8=F0.string().describe("File data as URL string"),ws1=F0.object({type:F0.literal("file"),filename:F0.string().optional().describe("Optional filename of the file"),data:Ge8,mediaType:F0.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),providerOptions:kH}),Je8=F0.object({type:F0.literal("file"),mediaType:F0.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),data:F0.string().describe("Generated file data as base64 encoded string")}),We8=F0.object({type:F0.literal("reasoning"),text:F0.string().describe("The reasoning text"),providerOptions:kH}),Ke8=F0.object({type:F0.literal("reasoning"),text:F0.string().describe("The reasoning text"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),Fe8=F0.object({type:F0.literal("tool-call"),toolCallId:F0.string().describe("ID of the tool call, used to match with tool result"),toolName:F0.string().describe("Name of the tool being called"),input:F0.string().describe("Arguments of the tool call (JSON-serializable object matching tool input schema)"),providerExecuted:F0.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerOptions:kH}),He8=F0.object({type:F0.literal("tool-call"),toolCallId:F0.string().describe("ID of the tool call"),toolName:F0.string().describe("Name of the tool being called"),input:F0.string().describe("Stringified JSON object with the tool call arguments"),providerExecuted:F0.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),Ne8=F0.union([F0.object({type:F0.literal("text"),value:F0.string()}),F0.object({type:F0.literal("json"),value:Fp}),F0.object({type:F0.literal("error-text"),value:F0.string()}),F0.object({type:F0.literal("error-json"),value:Fp}),F0.object({type:F0.literal("content"),value:F0.array(F0.union([F0.object({type:F0.literal("text"),text:F0.string().describe("Text content")}),F0.object({type:F0.literal("media"),data:F0.string().describe("Base-64 encoded media data"),mediaType:F0.string().describe("IANA media type")})]))}),F0.object({type:F0.literal("execution-denied"),reason:F0.string().optional()}),F0.string().describe("Raw or JSON-serialized output (e.g. from AI SDK mapToolResultOutput)")]),Es1=F0.object({type:F0.literal("tool-result"),toolCallId:F0.string().describe("ID of the tool call that this result is associated with"),toolName:F0.string().describe("Name of the tool that generated this result"),output:Ne8.describe("Result of the tool call"),result:F0.unknown().describe("Unknown result of the tool call"),providerOptions:kH}),Ue8=F0.object({type:F0.literal("tool-result"),toolCallId:F0.string().describe("ID of the tool call that this result is associated with"),toolName:F0.string().describe("Name of the tool that generated this result"),result:F0.any().describe("Result of the tool call (JSON-serializable)"),isError:F0.boolean().optional().describe("Whether the result is an error or error message"),providerExecuted:F0.boolean().optional().describe("Whether the tool result was generated by the provider"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),Be8=F0.union([F0.object({type:F0.literal("source"),sourceType:F0.literal("url"),id:F0.string().describe("The ID of the source"),url:F0.string().describe("The URL of the source"),title:F0.string().optional().describe("The title of the source"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),F0.object({type:F0.literal("source"),sourceType:F0.literal("document"),id:F0.string().describe("The ID of the source"),mediaType:F0.string().describe("IANA media type of the document (e.g., application/pdf)"),title:F0.string().describe("The title of the document"),filename:F0.string().optional().describe("Optional filename of the document"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")})]),Oe8=F0.object({role:F0.literal("system"),content:F0.string().describe("System message content"),providerOptions:kH}),De8=F0.object({role:F0.literal("user"),content:F0.array(F0.union([Ls1,ws1])).describe("User message content parts (text or file)"),providerOptions:kH}),Le8=F0.object({role:F0.literal("assistant"),content:F0.array(F0.union([Ls1,ws1,We8,Fe8,Es1])).describe("Assistant message content parts (text, file, reasoning, tool-call, or tool-result)"),providerOptions:kH}),we8=F0.object({role:F0.literal("tool"),content:F0.array(Es1).describe("Tool message content (tool results)"),providerOptions:kH}),Ee8=F0.union([Oe8,De8,Le8,we8]),je8=F0.array(Ee8).describe("A list of messages forming the prompt"),ze8=F0.object({prompt:je8.describe("A language model prompt is a standardized prompt type (array of messages with roles: system, user, assistant, tool)"),maxOutputTokens:F0.number().optional().describe("Maximum number of tokens to generate"),temperature:F0.number().optional().describe("Temperature setting. The range depends on the provider and model"),topP:F0.number().optional().describe("Nucleus sampling parameter"),topK:F0.number().optional().describe("Only sample from the top K options for each subsequent token. Used to remove long tail low probability responses"),presencePenalty:F0.number().optional().describe("Presence penalty setting. It affects the likelihood of the model to repeat information that is already in the prompt"),frequencyPenalty:F0.number().optional().describe("Frequency penalty setting. It affects the likelihood of the model to repeatedly use the same words or phrases"),seed:F0.number().optional().describe("The seed (integer) to use for random sampling. If set and supported by the model, calls will generate deterministic results"),stopSequences:F0.array(F0.string()).optional().describe("Stop sequences. If set, the model will stop generating text when one of the stop sequences is generated"),responseFormat:F0.union([F0.object({type:F0.literal("text")}),F0.object({type:F0.literal("json"),schema:F0.any().optional().describe("JSON schema that the generated output should conform to"),name:F0.string().optional().describe("Name of output that should be generated"),description:F0.string().optional().describe("Description of the output that should be generated")})]).optional().describe("Response format. The output can either be text or JSON. Default is text"),tools:F0.array(F0.any()).optional().describe("The tools that are available for the model"),toolChoice:F0.any().optional().describe("Specifies how the tool should be selected. Defaults to 'auto'"),includeRawChunks:F0.boolean().optional().describe("Include raw chunks in the stream. Only applicable for streaming calls"),abortSignal:F0.any().optional().describe("Abort signal for cancelling the operation"),providerOptions:F0.any().optional().describe("Additional provider-specific options")}),Pe8=F0.object({content:F0.array(F0.union([Ye8,Je8,Ke8,He8,Ue8,Be8])).describe("Ordered content that the model has generated (text, tool-calls, reasoning, files, sources)"),finishReason:F0.enum(["stop","length","content-filter","tool-calls","error","other","unknown"]).describe("Reason why generation stopped"),usage:F0.looseObject({inputTokens:F0.number().optional(),outputTokens:F0.number().optional(),totalTokens:F0.number().optional(),reasoningTokens:F0.number().optional()}).describe("Usage information for the language model call"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata"),request:F0.object({body:F0.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:F0.object({id:F0.string().optional().describe("ID for the generated response"),timestamp:F0.iso.datetime().optional().describe("Timestamp for the start of the generated response"),modelId:F0.string().optional().describe("The ID of the response model that was used"),headers:F0.record(F0.string(),F0.string()).optional().describe("Response headers"),body:F0.any().optional().describe("Response HTTP body")}).optional().describe("Optional response information for telemetry and debugging"),warnings:F0.array(F0.any()).describe("Warnings for the call, e.g. unsupported settings")}),kQ5=F0.object({stream:F0.any().describe("ReadableStream of LanguageModelV2StreamPart"),request:F0.object({body:F0.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:F0.object({headers:F0.record(F0.string(),F0.string()).optional().describe("Response headers")}).optional().describe("Optional response data")}),Ae8=F0.object({supportedUrls:F0.record(F0.string(),F0.array(F0.string())).describe("Supported URL patterns by media type for the provider")}),VQ5=F0.object({modelId:F0.string().describe("The ID of the model"),logo:F0.string().nullable(),description:F0.string().nullable(),capabilities:F0.array(F0.string()),limits:F0.object({contextWindow:F0.number(),maxOutputTokens:F0.number()}).nullable(),costs:F0.object({input:F0.number(),output:F0.number()}).nullable(),provider:F0.enum(["openai","anthropic","google","x-ai","deepseek","openai-compatible","openrouter"]).nullable()}),Ds1=F0.object({modelId:F0.string().describe("The ID of the model"),callOptions:ze8}),Te8=o90.extend({logo:F0.string().nullable(),description:F0.string().nullable(),capabilities:F0.array(F0.string()),limits:F0.object({contextWindow:F0.number(),maxOutputTokens:F0.number()}).nullable(),costs:F0.object({input:F0.number(),output:F0.number()}).nullable(),provider:F0.enum(["openai","anthropic","google","xai","deepseek","openai-compatible","openrouter"]).nullable()}),Re8=r90("llm",Te8,{readOnly:!0}),a90=[{name:"LLM_METADATA",inputSchema:F0.object({modelId:F0.string().describe("The ID of the model")}),outputSchema:Ae8},{name:"LLM_DO_STREAM",inputSchema:Ds1},{name:"LLM_DO_GENERATE",inputSchema:Ds1,outputSchema:Pe8},...Re8],SQ5=HK(a90)});import{z as wE}from"zod";var Ie8,zs1;var Ps1=D(()=>{Ie8=wE.object({scopes:wE.array(wE.string()).describe("List of scopes available"),stateSchema:wE.record(wE.string(),wE.unknown()).describe("JSON Schema (draft-07) defining the state structure")}),zs1=[{name:"MCP_CONFIGURATION",inputSchema:wE.object({}),outputSchema:Ie8}]});import{z as c5}from"zod";var qe8,Me8,As1;var Ts1=D(()=>{qe8=c5.object({}).strict(),Me8=c5.object({billing:c5.object({mode:c5.enum(["prepaid","postpaid"]),limitPeriod:c5.enum(["daily","weekly","monthly"]).nullable()}),limit:c5.object({total:c5.number().nullable(),remaining:c5.number().nullable(),reset:c5.string().nullable()}),usage:c5.object({total:c5.number(),daily:c5.number(),weekly:c5.number(),monthly:c5.number()}),alert:c5.object({enabled:c5.boolean(),threshold_usd:c5.number(),email:c5.string().nullable()}),connectionId:c5.string()}),As1=[{name:"GATEWAY_USAGE",inputSchema:qe8,outputSchema:Me8},{name:"GATEWAY_SET_LIMIT",inputSchema:c5.object({}),outputSchema:c5.object({}),opt:!0},{name:"GATEWAY_SET_ALERT",inputSchema:c5.object({}),outputSchema:c5.object({}),opt:!0}]});import{z as Rs1}from"zod";function oG(){return VY()===null}function s90($,Z){return $===C8.DEV_ASSETS(Z)}function Zy($,Z){let X=mg1(Z,$),Q=new Date().toISOString();return{id:X.id??C8.DEV_ASSETS($),title:X.title,description:X.description??null,icon:X.icon??null,app_name:X.app_name??null,app_id:X.app_id??null,organization_id:$,created_by:"system",created_at:Q,updated_at:Q,connection_type:X.connection_type,connection_url:X.connection_url??null,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:X.metadata??null,tools:ke8,bindings:["OBJECT_STORAGE"],status:"active"}}var ke8;var Xy=D(()=>{Xw();Qp();_8();ke8=LE.map(($)=>({name:$.name,description:`${$.name} operation for local file storage`,inputSchema:Rs1.toJSONSchema($.inputSchema),outputSchema:Rs1.toJSONSchema($.outputSchema)}))});function Is1($,Z){return $||Z===0}function qs1($,Z,X,Q,Y){let G=Z?Y+1:Y,J=$.slice(0,X),W=Q+X<G;return{items:J,totalCount:G,hasMore:W}}function Ms1($,Z,X){if(!X)return{sqlOffset:$,sqlLimit:Z};if($===0)return{sqlOffset:0,sqlLimit:Math.max(Z-1,0)};return{sqlOffset:$-1,sqlLimit:Z}}function Ve8($,Z){if(Z.length===0)return;let[X,...Q]=Z,Y=X==="slug"?WB($):$[X];for(let G of Q){if(Y===null||typeof Y!=="object")return;Y=Y[G]}return Y}function Se8($){let X=$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,".*").replace(/_/g,".");return new RegExp(`^${X}$`,"i")}function Ce8($,Z,X){if($===void 0)return!0;switch(Z){case"eq":return X===null?$===null:$===X;case"gt":return $>X;case"gte":return $>=X;case"lt":return $<X;case"lte":return $<=X;case"in":return Array.isArray(X)&&X.includes($);case"like":return typeof $==="string"&&Se8(String(X)).test($);case"contains":return String($).toLowerCase().includes(String(X).toLowerCase());default:return!0}}function Hp($,Z){if(!Z)return!0;if("conditions"in Z){let{operator:Q,conditions:Y}=Z;if(Y.length===0)return!0;switch(Q){case"and":return Y.every((G)=>Hp($,G));case"or":return Y.some((G)=>Hp($,G));case"not":return!Y.every((G)=>Hp($,G));default:return!0}}let X=Ve8($,Z.field);return Ce8(X,Z.operator,Z.value)}var ks1=D(()=>{X60()});import{z as eB}from"zod";var _e8=8,ve8,fe8,be8,xe8,jl0;var Vs1=D(()=>{El0();Os1();tG();js1();Ps1();Qp();Ts1();_8();M0();Z9();CQ();qH();Xy();hW();X60();ks1();ve8=[{name:/^(COLLECTION_REGISTRY_APP_LIST|REGISTRY_ITEM_LIST)$/,inputSchema:eB.object({})}],fe8={LLM:a90,LLMS:a90,ASSISTANTS:Bs1,MCP:zs1,OBJECT_STORAGE:LE,AI_GATEWAY_BILLING:As1,TRIGGER:m90,REGISTRY:ve8,BRAND:t90},be8=k3.extend({binding:eB.union([eB.array(eB.object({}).passthrough()),eB.object({}).passthrough(),eB.string()]).optional(),include_virtual:eB.boolean().optional().describe("Whether to include VIRTUAL connections in the results. Defaults to false."),slug:eB.string().optional().describe("Filter by connection slug. Matches against app_name, or a slug derived from connection_url or title.")}),xe8=MH(l7),jl0=u({name:"COLLECTION_CONNECTIONS_LIST",description:"List all connections in the organization with filtering, sorting, and pagination",annotations:{title:"List Connections",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:be8,outputSchema:xe8,handler:async($,Z)=>{await Z.access.check();let X=o(Z),Q=$.binding?typeof $.binding==="string"?(()=>{let E=fe8[$.binding.toUpperCase()];if(!E)throw Error(`Unknown binding: ${$.binding}`);return E})():$.binding:void 0,Y=Q?c90(Q):void 0,G=!!Y,J=$.limit??100,W=$.offset??0,K=$9(),F=C8.DEV_ASSETS(X.id),H=Zy(X.id,K),N=(!$.slug||WB(H)===$.slug)&&Hp(H,$.where),U=oG()&&!G&&N,{sqlOffset:B,sqlLimit:O}=Ms1(W,J,U),{items:L,totalCount:w}=await Z.storage.connections.list(X.id,{includeVirtual:$.include_virtual??!1,slug:$.slug,where:$.where,orderBy:$.orderBy,limit:G?void 0:O,offset:G?void 0:B});if(Y){let E=Y9(),j=C8.SELF(X.id);await T90(L,_e8,async(z)=>{if(z.tools!==null)return;let A=z.id===j?async()=>{let{listManagementTools:I}=await Promise.resolve().then(() => ($O(),e90));return I(Z)}:()=>Fl0(z,Z,Q60),P=await rB("tools",z.id,A,E,(I)=>Z.pendingRevalidations.push(I),oB);if(P!==null)z.tools=P})}if(oG()&&Is1(G,W)&&N&&!L.some((E)=>E.id===F))L.unshift(H);if(G){let E=(await Promise.all(L.map(async(P)=>{if(!P.tools||P.tools.length===0)return null;return Y.isImplementedBy(P.tools.map((k)=>({name:k.name,inputSchema:k.inputSchema,outputSchema:k.outputSchema})))?P:null}))).filter((P)=>P!==null),j=E.length,z=E.slice(W,W+J),A=W+J<j;return{items:z,totalCount:j,hasMore:A}}return qs1(L,U,J,W,w)}})});var ye8,zl0;var Ss1=D(()=>{tG();_8();M0();Z9();CQ();qH();Xy();hW();ye8=Jp(l7),zl0=u({name:"COLLECTION_CONNECTIONS_GET",description:"Get a connection's configuration, tools list, and status by ID.",annotations:{title:"Get Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:["app"]}},inputSchema:Gp,outputSchema:ye8,handler:async($,Z)=>{let X=o(Z);if(await Z.access.check(),oG()&&s90($.id,X.id))return{item:Zy(X.id,$9())};let Q=await Z.storage.connections.findById($.id);if(!Q||Q.organization_id!==X.id)return{item:null};if(Q.tools===null){let Y=C8.SELF(X.id),G=Q.id===Y?async()=>{let{listManagementTools:W}=await Promise.resolve().then(() => ($O(),e90));return W(Z)}:async()=>{let W=await U5(Q,Z,!0);try{return(await W.listTools()).tools}finally{await W.close().catch(()=>{})}},J=await rB("tools",Q.id,G,Y9(),(W)=>Z.pendingRevalidations.push(W),oB);if(J!==null)Q.tools=J}return{item:Q}}})});class m6{db;vault;constructor($,Z){this.db=$;this.vault=Z}async get($){let Z=await this.db.selectFrom("downstream_tokens").selectAll().where("connectionId","=",$).executeTakeFirst();if(!Z)return null;return this.decryptToken(Z)}async upsert($){let Z=new Date().toISOString(),X=await this.vault.encrypt($.accessToken),Q=$.refreshToken?await this.vault.encrypt($.refreshToken):null,Y=$.clientSecret?await this.vault.encrypt($.clientSecret):null,G=$.expiresAt?.toISOString()??null,J=await this.db.insertInto("downstream_tokens").values({id:p$("dtok"),connectionId:$.connectionId,accessToken:X,refreshToken:Q,scope:$.scope,expiresAt:G,clientId:$.clientId,clientSecret:Y,tokenEndpoint:$.tokenEndpoint,createdAt:Z,updatedAt:Z}).onConflict((W)=>W.column("connectionId").doUpdateSet({accessToken:X,refreshToken:Q,scope:$.scope,expiresAt:G,clientId:$.clientId,clientSecret:Y,tokenEndpoint:$.tokenEndpoint,updatedAt:Z})).returning(["id","createdAt"]).executeTakeFirstOrThrow();return{id:J.id,connectionId:$.connectionId,accessToken:$.accessToken,refreshToken:$.refreshToken,scope:$.scope,expiresAt:$.expiresAt,createdAt:J.createdAt,updatedAt:Z,clientId:$.clientId,clientSecret:$.clientSecret,tokenEndpoint:$.tokenEndpoint}}async delete($){await this.db.deleteFrom("downstream_tokens").where("connectionId","=",$).execute()}isExpired($,Z=0){if(!$.expiresAt)return!1;let Q=($.expiresAt instanceof Date?$.expiresAt:new Date($.expiresAt)).getTime();if(Number.isNaN(Q))return!0;return Q-Z<Date.now()}async decryptToken($){let Z=await this.vault.decrypt($.accessToken),X=$.refreshToken?await this.vault.decrypt($.refreshToken):null,Q=$.clientSecret?await this.vault.decrypt($.clientSecret):null;return{id:$.id,connectionId:$.connectionId,accessToken:Z,refreshToken:X,scope:$.scope,expiresAt:$.expiresAt,createdAt:$.createdAt,updatedAt:$.updatedAt,clientId:$.clientId,clientSecret:Q,tokenEndpoint:$.tokenEndpoint}}}var rG=D(()=>{CZ()});function Qy(...$){if(ce8)console.log("[mcp-read-cache]",...$)}function le8($){return $.kind==="org"?"org":`u:${$.userId}`}function Pl0($){if($===null||typeof $!=="object")return JSON.stringify($)??"null";if(Array.isArray($))return`[${$.map(Pl0).join(",")}]`;return`{${Object.keys($).sort().map((X)=>`${JSON.stringify(X)}:${Pl0($[X])}`).join(",")}}`}class XZ0{config;maxEntries;now;maxTotalBytes;store=new Map;revalidating=new Set;totalBytes=0;constructor($=ge8,Z=he8,X=()=>Date.now(),Q=ue8){this.config=$;this.maxEntries=Z;this.now=X;this.maxTotalBytes=Q}stats(){return{entries:this.store.size,bytes:this.totalBytes}}deleteKey($){let Z=this.store.get($);if(Z)this.store.delete($),this.totalBytes-=Z.bytes}key($,Z,X,Q){return`${Z}:${le8(X)}:${$}:${Pl0(Q)}`}storeSet($,Z,X,Q){let Y;try{Y=JSON.stringify(Z).length}catch{Qy("SKIP non-serializable",$);return}if(Y>Q){Qy("SKIP oversize",$,`${Y}b > cap ${Q}b`);return}this.deleteKey($);while(this.store.size>0&&(this.store.size>=this.maxEntries||this.totalBytes+Y>this.maxTotalBytes)){let G=this.store.keys().next().value;if(G===void 0)break;this.deleteKey(G)}this.store.set($,{value:Z,storedAt:X,bytes:Y}),this.totalBytes+=Y}async fetch($){let{type:Z,connectionId:X,scope:Q,params:Y,fetchLive:G,shouldCache:J,onRevalidation:W}=$,K=this.config[Z],F=this.key(Z,X,Q,Y),H=this.now(),N=this.store.get(F),U=N?H-N.storedAt:1/0;if(!N||U>K.maxStaleMs){$Z0.add(1,{type:Z,outcome:"miss"}),Qy(N?"EXPIRED":"MISS",F);let B=await G();if(J?.(B)??!0)this.storeSet(F,B,this.now(),K.maxValueBytes);else Qy("NOT-CACHED (shouldCache=false)",F);return B}if(this.store.delete(F),this.store.set(F,N),U>K.revalidateAfterMs&&!this.revalidating.has(F)){$Z0.add(1,{type:Z,outcome:"stale"}),Qy("STALE \u2192 serve + revalidate",F,`age=${U}ms`),this.revalidating.add(F);let B=G().then((O)=>{if(J?.(O)??!0)this.storeSet(F,O,this.now(),K.maxValueBytes)}).catch(()=>{$Z0.add(1,{type:Z,outcome:"error"})}).finally(()=>this.revalidating.delete(F));W?.(B)}else $Z0.add(1,{type:Z,outcome:"hit"}),Qy("HIT",F,`age=${U}ms`);return N.value}invalidate($){let Z=`${$}:`;for(let X of[...this.store.keys()])if(X.startsWith(Z))this.deleteKey(X)}}function Tl0(){return b0().mcpCacheEnabled}function QZ0(){return Tl0()?Al0:null}var $Z0,ZZ0=1024,Cs1,ge8,he8=2000,ue8,ce8,Al0;var Np=D(()=>{I6();R$();$Z0=w$.createCounter("mcp_read_cache.fetches",{description:"MCP read cache outcomes (hit, stale, miss, error)",unit:"{fetches}"}),Cs1=ZZ0*ZZ0,ge8={"tools/call":{revalidateAfterMs:30000,maxStaleMs:300000,maxValueBytes:512*ZZ0},"resources/read":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:4*Cs1},"prompts/get":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:512*ZZ0}},ue8=256*Cs1,ce8=typeof process<"u"&&!!process.env?.MCP_CACHE_DEBUG;Al0=new XZ0;w$.createObservableGauge("mcp_read_cache.entries",{description:"Current entry count in the per-pod MCP read cache",unit:"{entries}"}).addCallback(($)=>$.observe(Al0.stats().entries));w$.createObservableGauge("mcp_read_cache.bytes",{description:"Approximate total bytes held in the per-pod MCP read cache",unit:"By"}).addCallback(($)=>$.observe(Al0.stats().bytes))});function fs1($){QZ0()?.invalidate($),va1($)}function Yy($){fs1($);let Z=Rl0?.();if(!Z)return;try{Z.publish(_s1,de8.encode(JSON.stringify({connectionId:$,originId:vs1})))}catch(X){console.warn("[McpCacheInvalidation] publish failed (non-critical):",X)}}function bs1($){if(Rl0=$,Up)return;let Z=$();if(!Z)return;Up=Z.subscribe(_s1),(async()=>{for await(let X of Up)try{let Q=JSON.parse(me8.decode(X.data));if(Q.originId===vs1)continue;fs1(Q.connectionId)}catch{}})().catch(console.error)}function xs1(){Up?.unsubscribe(),Up=null,Rl0=void 0}var _s1="studio.mcp-cache.invalidate",vs1,de8,me8,Rl0,Up=null;var Bp=D(()=>{Np();CQ();vs1=crypto.randomUUID(),de8=new TextEncoder,me8=new TextDecoder});import{z as Il0}from"zod";function pe8($){let Z={...$};for(let X of ie8)delete Z[X];return Z}function ne8($,Z){return $.connection_url!==void 0?$.connection_url:Z}function re8($,Z){return $.length===Z.length&&$.every((X,Q)=>X===Z[Q])}var ie8,te8,oe8,ql0;var ys1=D(()=>{qH();rG();M0();R$();CQ();Bp();Hl0();li();hW();ie8=["id","organization_id","created_by","created_at"];te8=Il0.object({id:Il0.string().describe("ID of the connection to update"),data:I80.describe("Partial connection data to update")}),oe8=Il0.object({item:l7.describe("The updated connection entity")});ql0=u({name:"COLLECTION_CONNECTIONS_UPDATE",description:"Update a connection's configuration. Re-fetches tools from the server on URL change.",annotations:{title:"Update Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:te8,outputSchema:oe8,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=o0(Z);if(!Q)throw Error("User ID required to update connection");let{id:Y}=$,G=pe8($.data),J=G.configuration_state!==void 0||G.configuration_scopes!==void 0,W=await Z.storage.connections.findById(Y);if(!W||W.organization_id!==X.id)throw Error("Connection not found in organization");let K=G.connection_type??W.connection_type,F=ne8(G,W.connection_url);if(K==="VIRTUAL"){let f=of(F);if(!f)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let b=await Z.storage.virtualMcps.findById(f);if(!b)throw Error(`Virtual MCP not found: ${f}`);if(b.organization_id!==X.id)throw Error("Virtual MCP does not belong to the current organization");F=rf(f)}let H=G.configuration_state??W.configuration_state??{},N=G.configuration_scopes??W.configuration_scopes??[];if(J){if(G.configuration_state!==void 0)H=G.configuration_state??{};else if(H===null||H===void 0)H={};if(G.configuration_scopes!==void 0)N=G.configuration_scopes??[];if(N.length>0){let f=H;ei(f,N,X.id),await Zp(f,N,X.id,Z)}}if(K==="STDIO"&&!b0().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let U=G.connection_token??W.connection_token;if(!U)try{let b=await new m6(Z.db,Z.vault).get(Y);if(b?.accessToken)U=b.accessToken}catch{}let B=await iB({id:W.id,title:G.title??W.title,connection_type:K,connection_url:F,connection_token:U,connection_headers:G.connection_headers??W.connection_headers}).catch(()=>null),O=B?.tools?.length?B.tools:null,L=!1;if(G.configuration_scopes===void 0&&B?.scopes?.length)L=!re8(N,B.scopes),N=B.scopes;if(ei(H,N,X.id),L&&N.length>0)await Zp(H,N,X.id,Z);let w=J||L,E=w?$p(H,N):[],j=w?$p(W.configuration_state??{},W.configuration_scopes??[]):[],z=W.configuration_state,A=z==null||Object.keys(z).length===0,P,I,k=async()=>{try{await Z.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:X.id,subjectConnectionId:Y,createdBy:Q,grants:j})}catch(f){console.error("Failed to restore credential grants after credential vault mutation failed",f)}},M={...G,connection_url:F,tools:null,configuration_state:H,configuration_scopes:N,updated_by:Q},S={...W,...M};if(w)try{if(await Z.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:X.id,subjectConnectionId:Y,createdBy:Q,grants:E}),E.length>0){if(!await Z.storage.connectionCredentialVault.findActiveWorkloadToken({organizationId:X.id,subjectConnectionId:Y})){let{plaintextToken:b,record:i}=await Z.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:X.id,subjectConnectionId:Y});I=i.id,P={baseUrl:Z.baseUrl,org:X.slug??X.id,subjectConnectionId:Y,token:b}}}}catch(f){if(I)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:X.id,subjectConnectionId:Y,tokenId:I});throw await k(),f}if(w&&H&&N)try{await(await U5(S,Z,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:H,scopes:N,firstRun:A,...P?{vault:P}:{}}})}catch(f){if(console.error("Failed to invoke ON_MCP_CONFIGURATION callback",f),I)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:X.id,subjectConnectionId:Y,tokenId:I});if(E.length>0)throw await k(),f}let m;try{m=await Z.storage.connections.update(Y,M)}catch(f){if(w){if(I)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:X.id,subjectConnectionId:Y,tokenId:I});await k()}throw f}if(O)Y9()?.set("tools",Y,O).catch(()=>{});return Yy(Y),{item:m}}})});import{z as ae8}from"zod";var se8,Ml0;var gs1=D(()=>{tG();S4();M0();CQ();Bp();hW();se8=Wp.extend({force:ae8.boolean().optional().describe("If true, removes this connection from all agents that reference it before deleting")}),Ml0=u({name:"COLLECTION_CONNECTIONS_DELETE",description:"Permanently delete a connection. Set force=true to auto-remove from referencing Virtual MCPs.",annotations:{title:"Delete Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:se8,outputSchema:Kp(l7),handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=await Z.storage.connections.findById($.id);if(!Q)throw Error(`Connection not found: ${$.id}`);if(Q.organization_id!==X.id)throw Error("Connection not found in organization");if(Q.metadata?.isFixed===!0)throw Error("This connection is a fixed system connection and cannot be deleted");let G=await Z.storage.virtualMcps.listByConnectionId(X.id,$.id);if(G.length>0)if($.force)await Z.storage.virtualMcps.removeConnectionReferences($.id);else throw Error(JSON.stringify({code:"CONNECTION_IN_USE",agentNames:G.map((K)=>K.title)}));await Z.storage.connections.delete($.id);let J=await Z.storage.organizationSettings.get(X.id);if(J?.registry_config){let{registries:K,blockedMcps:F}=J.registry_config;if($.id in K){let{[$.id]:H,...N}=K;await Z.storage.organizationSettings.upsert(X.id,{registry_config:{registries:N,blockedMcps:F}})}}Y9()?.invalidate($.id).catch(()=>{}),Yy($.id);let W=o0(Z);if(W)x1.capture({distinctId:W,event:"connection_deleted",groups:{organization:X.id},properties:{connection_id:Q.id,connection_type:Q.connection_type,app_name:Q.app_name??null,organization_id:X.id,forced:$.force??!1}});return{item:Q}}})});import{z as Gy}from"zod";var kl0;var hs1=D(()=>{M0();kl0=u({name:"CONNECTION_TEST",description:"Test connection health and latency",annotations:{title:"Test Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Gy.object({id:Gy.string()}),outputSchema:Gy.object({id:Gy.string(),healthy:Gy.boolean(),latencyMs:Gy.number()}),handler:async($,Z)=>{let X=o(Z);await Z.access.check();let Q=await Z.storage.connections.findById($.id);if(!Q||Q.organization_id!==X.id)throw Error("Connection not found");let Y=await Z.storage.connections.testConnection($.id);return{id:$.id,...Y}}})});var us1=D(()=>{ua1();Vs1();Ss1();ys1();gs1();hs1()});import{sql as C4}from"kysely";import{z as NK}from"zod";function cs1($){if($===null||$===void 0)return"NULL";if(typeof $==="number")return String($);if(typeof $==="boolean")return $?"TRUE":"FALSE";if(typeof $==="string")return`'${$.replace(/'/g,"''")}'`;if($ instanceof Date)return`'${$.toISOString()}'`;return`'${JSON.stringify($).replace(/'/g,"''")}'`}function Z04($,Z){let X="",Q=0,Y=!1,G=!1,J=null;for(let W=0;W<$.length;W++){let K=$[W];if(!Y&&!G&&J===null){if($.startsWith("--",W)){let F=$.indexOf(`
|
|
890
|
-
`,W),H=F===-1?$.slice(W):$.slice(W,F);X+=H,W+=H.length-1;continue}if($.startsWith("/*",W)){let F
|
|
890
|
+
`,W),H=F===-1?$.slice(W):$.slice(W,F);X+=H,W+=H.length-1;continue}if($.startsWith("/*",W)){let F=1,H=W+2;while(F>0&&H<$.length)if($.startsWith("/*",H))F++,H+=2;else if($.startsWith("*/",H))F--,H+=2;else H++;let N=$.slice(W,H);X+=N,W+=N.length-1;continue}}if(J!==null){let F=`$${J}$`;if($.startsWith(F,W))X+=F,W+=F.length-1,J=null;else X+=K;continue}if(!G&&K==="'"){Y=!Y,X+=K;continue}if(!Y&&K==='"'){G=!G,X+=K;continue}if(!Y&&!G&&K==="$"){let F=/^\$(\d+)/.exec($.slice(W)),H=F?Number(F[1])-1:-1;if(F&&H>=0&&H<Z.length){X+=cs1(Z[H]),W+=F[0].length-1;continue}let N=/^\$([A-Za-z_][A-Za-z0-9_]*)?\$/.exec($.slice(W));if(N){J=N[1]??"",X+=N[0],W+=N[0].length-1;continue}}else if(!Y&&!G&&K==="?"&&Q<Z.length){X+=cs1(Z[Q]),Q++;continue}X+=K}return X}function ls1($){return $.replace(/-/g,"_")}function Q04($){return`app_${ls1($)}`}function Y04($){return`app_role_${ls1($)}`}function G04($){if($ instanceof Error){let Z=$.message.toLowerCase(),X=$.code;return X==="3F000"||X==="42704"||X==="22023"||Z.includes("schema")&&Z.includes("does not exist")||Z.includes("role")&&Z.includes("does not exist")}return!1}async function J04($,Z,X){if(await C4`CREATE SCHEMA IF NOT EXISTS ${C4.id(Z)}`.execute($),!(await C4`
|
|
891
891
|
SELECT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = ${X}) as exists
|
|
892
892
|
`.execute($)).rows[0]?.exists)await C4`CREATE ROLE ${C4.id(X)} NOLOGIN`.execute($);await C4`GRANT ${C4.id(X)} TO CURRENT_USER`.execute($),await C4`GRANT USAGE, CREATE ON SCHEMA ${C4.id(Z)} TO ${C4.id(X)}`.execute($),await C4`GRANT ALL ON ALL TABLES IN SCHEMA ${C4.id(Z)} TO ${C4.id(X)}`.execute($),await C4`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${C4.id(Z)} TO ${C4.id(X)}`.execute($),await C4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${C4.id(Z)} GRANT ALL ON TABLES TO ${C4.id(X)}`.execute($),await C4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${C4.id(Z)} GRANT ALL ON SEQUENCES TO ${C4.id(X)}`.execute($),await C4`REVOKE ALL ON SCHEMA public FROM ${C4.id(X)}`.execute($)}async function W04($,Z,X,Q){try{return await $.transaction().execute(async(Y)=>{return await C4`SET LOCAL ROLE ${C4.id(X)}`.execute(Y),await C4`SET LOCAL search_path TO ${C4.id(Z)}`.execute(Y),await C4.raw(Q).execute(Y)})}catch(Y){if(G04(Y))return await J04($,Z,X),await $.transaction().execute(async(G)=>{return await C4`SET LOCAL ROLE ${C4.id(X)}`.execute(G),await C4`SET LOCAL search_path TO ${C4.id(Z)}`.execute(G),await C4.raw(Q).execute(G)});throw Y}}var $04,X04,ds1;var ms1=D(()=>{M0();$04=NK.object({results:NK.array(NK.unknown()).optional(),success:NK.boolean().optional()});X04=NK.object({sql:NK.string().describe("The SQL query to run"),params:NK.array(NK.unknown()).describe("The parameters to pass to the SQL query").optional()});ds1=u({name:"DATABASES_RUN_SQL",description:"Run a SQL query in a connection-scoped isolated schema. Supports SELECT, DDL, and DML.",annotations:{title:"Run SQL Query",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:X04,outputSchema:NK.object({result:NK.array($04)}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=Z04($.sql,$.params||[]);if(!Z.connectionId)throw Error("Connection context required for database access");console.warn("DATABASES_RUN_SQL invoked",{"tool.deprecation_probe":"DATABASES_RUN_SQL","connection.id":Z.connectionId,"organization.id":Z.organization?.id??null,"user.id":Z.auth.user?.id??null});let Q=Q04(Z.connectionId),Y=Y04(Z.connectionId);return{result:[{results:(await W04(Z.db,Q,Y,X)).rows,success:!0}]}}})});function YZ0($){let Z=$.access.getRole();if(!o7(Z))throw new AH("Only organization owners and admins can change org-wide pin status")}var Vl0=D(()=>{VQ();ow()});async function GZ0($,Z,X){let Q=[...new Set(X)],Y=await Promise.all(Q.map((J)=>$.storage.connections.findById(J,Z))),G=Q.filter((J,W)=>!Y[W]);if(G.length>0)throw Error(`Connection not found: ${G.join(", ")}`)}function VH($){return $.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function JZ0($){let Z=2166136261;for(let X=0;X<$.length;X++)Z=Math.imul(Z^$.charCodeAt(X),16777619);return`a${(Z>>>0).toString(36).padStart(6,"0").slice(-6)}`}function Op($){if($&&typeof $==="object"&&"gatewayClientId"in $&&typeof $.gatewayClientId==="string")return $.gatewayClientId;return}function Dp($,Z){if(!Z)return $;let X=`${JZ0(Z)}_`;return $.startsWith(X)?$.slice(X.length):$}function F04($){return $.split(/[-_]/).map((Z)=>Z?Z.charAt(0).toUpperCase()+Z.slice(1):Z).join(" ")}var Jy;var is1=D(()=>{mW();Jy=class Jy extends y9{static MAX_PAGES_PER_CLIENT=1000;clients;slugToKey=new Map;resolvedClients=new Map;toolsCache=null;resourcesCache=null;resourceTemplatesCache=null;promptsCache=null;resourceRouteMap=new Map;constructor($,Z){super(Z?.clientInfo??{name:"gateway-client",version:"1.0.0"},{capabilities:Z?.capabilities});this.clients=$;for(let X of Object.keys($)){let Q=JZ0(X);if(this.slugToKey.has(Q))throw Error(`GatewayClient: duplicate namespace code "${Q}" from keys "${this.slugToKey.get(Q)}" and "${X}"`);this.slugToKey.set(Q,X)}}namespace($,Z){return`${JZ0($)}_${Z}`}async resolveToolTarget($){let Z=$.indexOf("_");if(Z!==-1){let Q=$.slice(0,Z),Y=this.slugToKey.get(Q);if(Y)return[Y,$.slice(Z+1)]}let{tools:X}=await this.listTools();for(let Q of X){let Y=Op(Q._meta);if(!Y)continue;if(Dp(Q.name,Y)===$)return[Y,$]}if(Z===-1)throw Error(`GatewayClient: could not resolve tool "${$}" \u2014 no namespace prefix and not found in any client`);throw Error(`GatewayClient: unknown namespace "${$.slice(0,Z)}" in "${$}" and not found by original name in any client`)}async resolvePromptTarget($){let Z=$.indexOf("_");if(Z!==-1){let Q=$.slice(0,Z),Y=this.slugToKey.get(Q);if(Y)return[Y,$.slice(Z+1)]}let{prompts:X}=await this.listPrompts();for(let Q of X){let Y=Op(Q._meta);if(!Y)continue;if(Dp(Q.name,Y)===$)return[Y,$]}if(Z===-1)throw Error(`GatewayClient: could not resolve prompt "${$}" \u2014 no namespace prefix and not found in any client`);throw Error(`GatewayClient: unknown namespace "${$.slice(0,Z)}" in "${$}" and not found by original name in any client`)}resolveClient($){let Z=this.resolvedClients.get($);if(Z)return Z;let X=this.clients[$];if(!X)return Promise.reject(Error(`GatewayClient: unknown client key "${$}"`));let Q=X.client,Y;try{Y=typeof Q==="function"?Promise.resolve(Q()):Promise.resolve(Q)}catch(J){return Promise.reject(J)}let G=Y.catch((J)=>{throw this.resolvedClients.delete($),J});return this.resolvedClients.set($,G),G}getResolvedClient($){return this.resolveClient($)}async listFromClient($,Z,X){try{let Q=await this.resolveClient($);return await Z(Q)}catch(Q){return console.warn(`GatewayClient: skipping ${X} from client "${$}" \u2014 ${Q?.message??Q}`),[]}}async paginate($,Z,X){let Q=[],Y,G=0;do{let J=await X(Y);Q.push(...J.items),Y=J.nextCursor,G++}while(Y&&G<Jy.MAX_PAGES_PER_CLIENT);if(Y)console.warn(`GatewayClient: client "${$}" exceeded ${Jy.MAX_PAGES_PER_CLIENT} pages listing ${Z} \u2014 truncating`);return Q}fetchAllTools($,Z){return this.paginate(Z,"tools",async(X)=>{let Q=await $.listTools(X?{cursor:X}:void 0);return{items:Q.tools,nextCursor:Q.nextCursor}})}fetchAllResources($,Z){return this.paginate(Z,"resources",async(X)=>{let Q=await $.listResources(X?{cursor:X}:void 0);return{items:Q.resources,nextCursor:Q.nextCursor}})}fetchAllResourceTemplates($,Z){return this.paginate(Z,"resource templates",async(X)=>{let Q=await $.listResourceTemplates(X?{cursor:X}:void 0);return{items:Q.resourceTemplates,nextCursor:Q.nextCursor}})}fetchAllPrompts($,Z){return this.paginate(Z,"prompts",async(X)=>{let Q=await $.listPrompts(X?{cursor:X}:void 0);return{items:Q.prompts,nextCursor:Q.nextCursor}})}listTools($,Z){if(!this.toolsCache)this.toolsCache=this.aggregateTools();return this.toolsCache}async aggregateTools(){let $=[];for(let[Z,X]of Object.entries(this.clients)){let Q=await this.listFromClient(Z,(J)=>this.fetchAllTools(J,Z),"tools"),Y=X.tools,G=Y?new Set(Y):null;for(let J of Q){if(G&&!G.has(J.name))continue;$.push({...J,name:this.namespace(Z,J.name),_meta:{...J._meta??{},gatewayClientId:Z}})}}return{tools:$}}listResources($,Z){if(!this.resourcesCache)this.resourcesCache=this.aggregateResources();return this.resourcesCache}async aggregateResources(){let $=new Set,Z=[],X=new Map;for(let[Q,Y]of Object.entries(this.clients)){let G=await this.listFromClient(Q,(K)=>this.fetchAllResources(K,Q),"resources"),J=Y.resources,W=J?new Set(J):null;for(let K of G){if(W&&!W.has(K.uri)&&!(K.name&&W.has(K.name)))continue;if($.has(K.uri)){console.warn(`GatewayClient: duplicate resource "${K.uri}" from client "${Q}" \u2014 skipping`);continue}$.add(K.uri),X.set(K.uri,Q),Z.push({...K,_meta:{...K._meta??{},gatewayClientId:Q}})}}return this.resourceRouteMap=X,{resources:Z}}listResourceTemplates($,Z){if(!this.resourceTemplatesCache)this.resourceTemplatesCache=this.aggregateResourceTemplates();return this.resourceTemplatesCache}async aggregateResourceTemplates(){let $=new Set,Z=[];for(let[X,Q]of Object.entries(this.clients)){let Y=await this.listFromClient(X,(G)=>this.fetchAllResourceTemplates(G,X),"resource templates");for(let G of Y){if($.has(G.uriTemplate)){console.warn(`GatewayClient: duplicate resource template "${G.uriTemplate}" from client "${X}" \u2014 skipping`);continue}$.add(G.uriTemplate),Z.push({...G,_meta:{...G._meta??{},gatewayClientId:X}})}}return{resourceTemplates:Z}}listPrompts($,Z){if(!this.promptsCache)this.promptsCache=this.aggregatePrompts();return this.promptsCache}async aggregatePrompts(){let $=[];for(let[Z,X]of Object.entries(this.clients)){let Q=await this.listFromClient(Z,(J)=>this.fetchAllPrompts(J,Z),"prompts"),Y=X.prompts,G=Y?new Set(Y):null;for(let J of Q){if(G&&!G.has(J.name))continue;$.push({...J,name:this.namespace(Z,J.name),title:J.title??F04(J.name),_meta:{...J._meta??{},gatewayClientId:Z}})}}return{prompts:$}}async callTool($,Z,X){let[Q,Y]=await this.resolveToolTarget($.name);return(await this.resolveClient(Q)).callTool({...$,name:Y},Z,X)}async readResource($,Z){let X=await this.resolveResourceRoute($.uri);return(await this.resolveClient(X)).readResource($)}async getPrompt($,Z){let[X,Q]=await this.resolvePromptTarget($.name);return(await this.resolveClient(X)).getPrompt({...$,name:Q})}async resolveResourceRoute($){let Z=this.resourceRouteMap.get($);if(Z)return Z;if(this.resourcesCache=null,await this.listResources(),Z=this.resourceRouteMap.get($),Z)return Z;throw Error(`GatewayClient: resource "${$}" not found in any upstream client`)}getServerCapabilities(){return{tools:{},resources:{},prompts:{}}}getInstructions(){return}refresh(){this.toolsCache=null,this.resourcesCache=null,this.resourceTemplatesCache=null,this.promptsCache=null}async close(){let $=[...this.resolvedClients.values()].map((Z)=>Z.then((X)=>X.close()).catch(()=>{}));await Promise.allSettled($),await super.close()}}});var WZ0=D(()=>{is1()});function Cl0($){return VH($)}function N04($,Z){let X=VH(Z)||"prompt";return`${String($).padStart(H04,"0")}-${X}`}async function _l0($,Z,X){try{await $.delete(KZ0,Cl0(Z),{actor:X})}catch(Q){console.error("[agent-prompts] failed to delete prompts",{agentId:Z,err:Q})}}async function FZ0($,Z,X,Q){let Y=Cl0(Z);await _l0($,Z,X),await Promise.all(Q.slice(0,Sl0).map(async(G,J)=>{let W=N04(J,G.title),K={name:W,title:G.title,description:G.description,text:G.text};try{await $.write(KZ0,`${Y}/${W}.json`,JSON.stringify(K),{actor:X,contentType:"application/json"})}catch(F){console.error("[agent-prompts] failed to seed prompt",{agentId:Z,name:W,err:F})}}))}async function ps1($,Z){let X=Cl0(Z),Q;try{Q=await $.listDir(KZ0,X)}catch{return[]}let Y=Q.filter((J)=>J.kind==="file"&&J.path.endsWith(".json")).slice(0,Sl0),G=[];for(let J of Y)try{let W=await $.read(KZ0,J.path),K=JSON.parse(new TextDecoder().decode(W));if(K&&typeof K.name==="string"&&typeof K.title==="string"&&typeof K.text==="string")G.push(K)}catch{}return G}var KZ0="agent-prompts",Sl0=20,H04;var Lp=D(()=>{WZ0();H04=String(Sl0-1).length});function Wy($){if(!$)return $;let Z={...$};return delete Z.sandboxMap,Z}import{z as os1}from"zod";function U04(){let $=ns1[Math.floor(Math.random()*ns1.length)];return`icon://${ts1[Math.floor(Math.random()*ts1.length)]}?color=${$}`}var ns1,ts1,B04,O04,vl0;var rs1=D(()=>{M0();nB();Vl0();Lp();ns1=["red","orange","amber","yellow","lime","green","emerald","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],ts1=["Star01","Zap","Heart","Globe01","Compass03","Lightbulb02","Rocket01","Flag01","BookOpen01","Shield01","Key01","Diamond01","Cube01","Target04","Award01","Briefcase01","Coffee","Feather","Hexagon01","Layers3_01","Map01","Palette","Package","Terminal"];B04=os1.object({data:M80.describe("Data for the new virtual MCP")}),O04=os1.object({item:d7.describe("The created virtual MCP entity")}),vl0=u({name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create a Virtual MCP (agent) that aggregates tools from multiple connections into one endpoint. Pass `prompts` to seed the agent with kickstart prompts (conversation starters shown as icebreakers). Author them from the agent's role/instructions and the descriptions of the tools it will have, so the starters are coherent and immediately useful.",annotations:{title:"Create Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:B04,outputSchema:O04,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=o0(Z);if(!Q)throw Error("User ID required to create virtual MCP");if($.data.pinned===!0)YZ0(Z);let{prompts:Y,metadata:G,...J}=$.data,W=Wy(G);if(J.connections.length>0)await GZ0(Z,X.id,J.connections.map((H)=>H.connection_id));let K={...J,metadata:W,icon:J.icon??U04()},F=await Z.storage.virtualMcps.create(X.id,Q,K);if(Y?.length&&Z.orgFs&&F.id)await FZ0(Z.orgFs,F.id,Q,Y);return{item:F}}})});function D04($){let Z=[],X=0;while(X<$.length){let Q=$[X];if(Q==="%")Z.push(".*");else if(Q==="_")Z.push(".");else if(/[.*+?^${}()|[\]\\]/.test(Q))Z.push("\\"+Q);else Z.push(Q);X++}return Z.join("")}function ZO($){return typeof $==="string"||typeof $==="number"}function fl0($,Z){let X=Z.split("."),Q=$;for(let Y of X){if(Q==null||typeof Q!=="object")return;Q=Q[Y]}return Q}function L04($,Z){return $.connections.some((X)=>X.connection_id===Z)}function HZ0($,Z){if("conditions"in Z){let{operator:W,conditions:K}=Z;switch(W){case"and":return K.every((F)=>HZ0($,F));case"or":return K.some((F)=>HZ0($,F));case"not":return!K.every((F)=>HZ0($,F));default:return!0}}let{field:X,operator:Q,value:Y}=Z,G=X.join(".");if(G==="connection_id"){if(Q!=="eq"||typeof Y!=="string")return!1;return L04($,Y)}let J=fl0($,G);switch(Q){case"eq":return J===Y;case"gt":return ZO(J)&&ZO(Y)&&J>Y;case"gte":return ZO(J)&&ZO(Y)&&J>=Y;case"lt":return ZO(J)&&ZO(Y)&&J<Y;case"lte":return ZO(J)&&ZO(Y)&&J<=Y;case"in":return Array.isArray(Y)&&Y.includes(J);case"like":if(typeof J!=="string"||typeof Y!=="string")return!1;if(Y.length>100)return!1;let W=D04(Y);return new RegExp(`^${W}$`,"i").test(J);case"contains":if(typeof J!=="string"||typeof Y!=="string")return!1;return J.toLowerCase().includes(Y.toLowerCase());default:return!0}}function w04($,Z){return[...$].sort((X,Q)=>{for(let Y of Z){let G=Y.field.join("."),J=fl0(X,G),W=fl0(Q,G),K=0;if(J==null&&W==null)continue;if(J==null)K=Y.nulls==="first"?-1:1;else if(W==null)K=Y.nulls==="first"?1:-1;else if(typeof J==="string"&&typeof W==="string")K=J.localeCompare(W);else if(typeof J==="number"&&typeof W==="number")K=J-W;else K=String(J).localeCompare(String(W));if(K!==0)return Y.direction==="desc"?-K:K}return 0})}var E04,j04,bl0;var as1=D(()=>{tG();M0();nB();E04=k3,j04=MH(d7),bl0=u({name:"COLLECTION_VIRTUAL_MCP_LIST",description:"List all MCP virtual MCPs in the organization",annotations:{title:"List Virtual MCPs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:E04,outputSchema:j04,handler:async($,Z)=>{await Z.access.check();let X=o(Z),Q=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="connection_id"&&$.where.operator==="eq"&&typeof $.where.value==="string"?$.where.value:void 0,Y=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="pinned"&&$.where.operator==="eq"&&typeof $.where.value==="boolean"?$.where.value:void 0,J=Q?await Z.storage.virtualMcps.listByConnectionId(X.id,Q):await Z.storage.virtualMcps.list(X.id,Y!==void 0?{pinnedOnly:Y}:void 0);if($.where)J=J.filter((U)=>HZ0(U,$.where));if($.orderBy&&$.orderBy.length>0)J=w04(J,$.orderBy);let W=J.length,K=$.offset??0,F=$.limit??100,H=J.slice(K,K+F),N=K+F<W;return{items:H,totalCount:W,hasMore:N}}})});import{z as xl0}from"zod";var z04,P04,yl0;var ss1=D(()=>{M0();nB();z04=xl0.object({id:xl0.string().describe("ID of the virtual MCP to retrieve")}),P04=xl0.object({item:d7.nullable().describe("The retrieved virtual MCP, or null if not found")}),yl0=u({name:"COLLECTION_VIRTUAL_MCP_GET",description:"Get a Virtual MCP's configuration, connections, and virtual tools by ID.",annotations:{title:"Get Virtual MCP",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:z04,outputSchema:P04,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=await Z.storage.virtualMcps.findById($.id);if(Q&&Q.organization_id!==X.id)return{item:null};if(!Q)return{item:null};return{item:Q}}})});function aG($){return gl0.test($)}function es1($){let Z=(X)=>typeof X==="string"?X.trim().toLowerCase():"";return Z($?.metadata?.siteSlug)||Z($?.title)||null}var gl0;var XO=D(()=>{gl0=/^[a-z0-9][a-z0-9-]{0,59}$/});function $e1($){let{nextTitle:Z,currentTitle:X,currentSiteSlug:Q}=$;if(Q?.trim())return null;if(Z===void 0||Z===X)return null;let Y=X?.trim().toLowerCase()??"";return aG(Y)?Y:null}var Ze1=D(()=>{XO()});import{z as hl0}from"zod";var A04,T04,ul0;var Xe1=D(()=>{M0();Lp();nB();Vl0();Ze1();A04=hl0.object({id:hl0.string().describe("ID of the virtual MCP to update"),data:k80.describe("Partial virtual MCP data to update")}),T04=hl0.object({item:d7.describe("The updated virtual MCP entity")}),ul0=u({name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update a Virtual MCP's name, slug, connection list, or kickstart prompts. Pass `prompts` to replace the agent's conversation starters (full set; empty array clears them).",annotations:{title:"Update Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:A04,outputSchema:T04,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=o0(Z);if(!Q)throw Error("User ID required to update virtual MCP");let Y=await Z.storage.virtualMcps.findById($.id);if(!Y)throw Error(`Virtual MCP not found: ${$.id}`);if(Y.organization_id!==X.id)throw Error(`Virtual MCP not found: ${$.id}`);let{prompts:G,metadata:J,...W}=$.data,K=Wy(J);if(K&&Y.metadata)K={...Y.metadata,...K};else if(K===null&&Y.metadata?.sandboxMap)K={sandboxMap:Y.metadata.sandboxMap};let F={...W,...J!==void 0?{metadata:K}:{}},H=$e1({nextTitle:F.title,currentTitle:Y.title,currentSiteSlug:Y.metadata?.siteSlug});if(H)F.metadata={...Y.metadata,...F.metadata,siteSlug:H};if(F.pinned!==void 0&&F.pinned!==Y.pinned)YZ0(Z);if(F.connections?.length)await GZ0(Z,X.id,F.connections.map((U)=>U.connection_id));let N=await Z.storage.virtualMcps.update($.id,Q,F);if(G!==void 0&&Z.orgFs)await FZ0(Z.orgFs,$.id,Q,G);return{item:N}}})});function R04($){if(!$)return!1;let Z=ll0.join("|");return new RegExp(`permission\\s+"?(?:${Z})"?\\s+is not allowed`,"i").test($)||/permissions exceed what the github app/i.test($)}function Ye1($){let Z={...$};for(let X of ll0)Z[X]="read";return Z}async function Ge1($,Z){let X={...Z};for(;;){let Q=await $(X);if(!Q.isError)return{result:Q,grantedPermissions:X};let Y=Q.content?.find((K)=>K.type==="text")?.text,G=ll0.find((K)=>(K in X));if(!G||!R04(Y))return{result:Q,grantedPermissions:X};let{[G]:J,...W}=X;X=W}}function I04($){if(!$||typeof $!=="object"||Array.isArray($))return Qe1;let Z=$;if(Object.values(Z).some((X)=>typeof X!=="string"))return Qe1;return Z}function q04($){if(typeof $!=="number"||!Number.isFinite($)||!Number.isInteger($)||$<=0)return;return $}function k5($){let Z=$.metadata?.repoScope;if(!Z||typeof Z.installationId!=="number"||!Number.isFinite(Z.installationId)||!Number.isInteger(Z.installationId)||Z.installationId<=0||typeof Z.owner!=="string"||typeof Z.repo!=="string"||Z.owner.length===0||Z.repo.length===0)return null;let X=q04(Z.repositoryId);return{sourceConnectionId:typeof Z.sourceConnectionId==="string"?Z.sourceConnectionId:void 0,installationId:Z.installationId,repositoryId:X,owner:Z.owner,repo:Z.repo,permissions:I04(Z.permissions),grantProvider:Z.grantProvider==="github-mcp"?"github-mcp":void 0}}function EE($){return $.metadata?.orgShared===!0}function Je1($){let Z=new Set,X=[];for(let Q of $??[]){if(Q.status!=="active")continue;let Y=k5(Q);if(Y===null)continue;let G=cl0(Y.owner,Y.repo);if(Z.has(G))continue;Z.add(G),X.push(`${Y.owner}/${Y.repo}`)}return X}function NZ0($,Z,X){let Q=cl0(Z,X),Y=($??[]).filter((G)=>{if(G.status&&G.status!=="active")return!1;let J=k5(G);return J!==null&&cl0(J.owner,J.repo)===Q});return Y.find(EE)??Y[0]??null}var Qe1,ll0,cl0=($,Z)=>`${$}/${Z}`.toLowerCase();var _Q=D(()=>{Qe1={contents:"write",metadata:"read",pull_requests:"write",issues:"write",checks:"read",deployments:"read"},ll0=["deployments","checks"]});function We1($){return gG($)!==null||s40($)!==null}var Ke1=D(()=>{_8()});import{z as dl0}from"zod";var M04,k04,ml0;var Fe1=D(()=>{_Q();rG();M0();Lp();nB();Ke1();M04=dl0.object({id:dl0.string().describe("ID of the virtual MCP to delete")}),k04=dl0.object({item:d7.describe("The deleted virtual MCP entity")}),ml0=u({name:"COLLECTION_VIRTUAL_MCP_DELETE",description:"Permanently delete a Virtual MCP and its virtual tools.",annotations:{title:"Delete Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:M04,outputSchema:k04,handler:async($,Z)=>{t(Z);let X=o(Z);if(await Z.access.check(),We1($.id))throw Error(`Virtual MCP not found: ${$.id}`);let Q=await Z.storage.virtualMcps.findById($.id);if(!Q)throw Error(`Virtual MCP not found: ${$.id}`);if(Q.organization_id!==X.id)throw Error(`Virtual MCP not found: ${$.id}`);await Z.storage.virtualMcps.delete($.id);try{if((await Z.storage.organizationSettings.get(X.id))?.main_agent_id===$.id)await Z.storage.organizationSettings.upsert(X.id,{main_agent_id:null})}catch(G){console.error("[VIRTUAL_MCP_DELETE] failed to clear main agent pointer",{id:$.id,error:G.message})}if(Z.orgFs)await _l0(Z.orgFs,$.id,o0(Z)??"system");let Y=Q.metadata?.githubRepo?.connectionId;if(Y)try{let G=await Z.storage.connections.findById(Y,X.id),J=G&&(EE(G)||(await Z.storage.virtualMcps.listByConnectionId(X.id,Y)).length>0||await Z.storage.connections.isReferencedByThread(Y));if(G&&k5(G)&&!J){let K=await new m6(Z.db,Z.vault).get(Y);if(K?.accessToken)try{await fetch("https://api.github.com/installation/token",{method:"DELETE",headers:{Authorization:`Bearer ${K.accessToken}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(5000)})}catch{}await Z.storage.connections.delete(Y)}}catch(G){console.error("[VIRTUAL_MCP_DELETE] failed to tear down repo-scoped connection",{childConnectionId:Y,error:G.message})}return{item:Q}}})});import{z as vQ}from"zod";var V04,il0;var He1=D(()=>{M0();V04=vQ.object({id:vQ.string(),virtualMcpId:vQ.string(),pluginId:vQ.string(),connectionId:vQ.string().nullable(),settings:vQ.record(vQ.string(),vQ.unknown()).nullable(),createdAt:vQ.string(),updatedAt:vQ.string()}),il0=u({name:"VIRTUAL_MCP_PLUGIN_CONFIG_GET",description:"Get a plugin's current configuration for a specific virtual MCP.",annotations:{title:"Get Virtual MCP Plugin Config",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:vQ.object({virtualMcpId:vQ.string().describe("Virtual MCP ID"),pluginId:vQ.string().describe("Plugin ID")}),outputSchema:vQ.object({config:V04.nullable()}),handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let{virtualMcpId:Q,pluginId:Y}=$,G=await Z.storage.connections.findById(Q);if(!G||G.organization_id!==X.id)return{config:null};if(G.connection_type!=="VIRTUAL")return{config:null};let J=await Z.storage.virtualMcpPluginConfigs.get(Q,Y);if(!J)return{config:null};return{config:{id:J.id,virtualMcpId:J.virtualMcpId,pluginId:J.pluginId,connectionId:J.connectionId,settings:J.settings,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}})});import{z as yZ}from"zod";var S04,pl0;var Ne1=D(()=>{M0();Xy();Z9();S04=yZ.object({id:yZ.string(),virtualMcpId:yZ.string(),pluginId:yZ.string(),connectionId:yZ.string().nullable(),settings:yZ.record(yZ.string(),yZ.unknown()).nullable(),createdAt:yZ.string(),updatedAt:yZ.string()}),pl0=u({name:"VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE",description:"Set or update a plugin's configuration for a specific virtual MCP.",annotations:{title:"Update Virtual MCP Plugin Config",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:yZ.object({virtualMcpId:yZ.string().describe("Virtual MCP ID"),pluginId:yZ.string().describe("Plugin ID"),connectionId:yZ.string().nullable().optional().describe("MCP connection to bind"),settings:yZ.record(yZ.string(),yZ.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:yZ.object({config:S04}),handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let{virtualMcpId:Q,pluginId:Y,connectionId:G,settings:J}=$,W=o0(Z),K=await Z.storage.connections.findById(Q);if(!K)throw Error(`Connection not found: ${Q}`);if(K.organization_id!==X.id)throw Error(`Connection not found: ${Q}`);if(K.connection_type!=="VIRTUAL")throw Error(`Connection not found: ${Q}`);let F=G?await Z.storage.connections.findById(G):null;if(G&&F&&F.organization_id!==X.id)throw Error(`Connection not found: ${G}`);if(G&&K.organization_id&&!F&&oG()&&s90(G,K.organization_id)){if(!W)throw Error("User ID required to create dev-assets connection");let N=Zy(K.organization_id,$9());await Z.storage.connections.create({...N,organization_id:K.organization_id,created_by:W})}else if(G&&!F)throw Error(`Connection not found: ${G}`);let H=await Z.storage.virtualMcpPluginConfigs.upsert(Q,Y,{connectionId:G,settings:J});return{config:{id:H.id,virtualMcpId:H.virtualMcpId,pluginId:H.pluginId,connectionId:H.connectionId,settings:H.settings,createdAt:H.createdAt instanceof Date?H.createdAt.toISOString():H.createdAt,updatedAt:H.updatedAt instanceof Date?H.updatedAt.toISOString():H.updatedAt}}}})});import{z as pX}from"zod";var C04,nl0;var Ue1=D(()=>{M0();nB();C04=pX.object({connectionId:pX.string(),toolName:pX.string(),label:pX.string(),icon:pX.string().nullable().optional()}),nl0=u({name:"VIRTUAL_MCP_PINNED_VIEWS_UPDATE",description:"Update the pinned sidebar views for a virtual MCP. Replaces all current pins.",annotations:{title:"Update Pinned Views",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:pX.object({virtualMcpId:pX.string().describe("Virtual MCP ID"),pinnedViews:pX.array(C04).describe("Pinned views to set for the virtual MCP sidebar"),layout:pX.object({defaultMainView:pX.object({type:pX.string(),id:pX.string().optional(),toolName:pX.string().optional()}).nullable().optional(),chatDefaultOpen:pX.boolean().nullable().optional()}).optional()}),outputSchema:pX.object({item:d7.nullable()}),handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let{virtualMcpId:Q,pinnedViews:Y,layout:G}=$,J=o0(Z),W=await Z.storage.virtualMcps.findById(Q);if(!W)throw Error(`Virtual MCP not found: ${Q}`);if(W.organization_id!==X.id)throw Error(`Virtual MCP not found: ${Q}`);let K=W.metadata?.ui??{},F={...K,pinnedViews:Y.length>0?Y:null,layout:G??K.layout??null};return{item:await Z.storage.virtualMcps.update(Q,J??"system",{metadata:{...W.metadata,ui:F}})}}})});import{z as SH}from"zod";var _04,v04,tl0;var Be1=D(()=>{M0();_04=SH.object({ids:SH.array(SH.string()).max(1000).describe("Virtual MCP ids to look up")}),v04=SH.object({items:SH.array(SH.object({id:SH.string(),last_used_at:SH.string().optional(),last_used_by:SH.string().optional()}))}),tl0=u({name:"VIRTUAL_MCP_LAST_USED_LIST",description:"Get last-used info (timestamp + user) for one or more virtual MCPs, derived from the most recent thread per agent.",annotations:{title:"List Virtual MCP Last Used",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:_04,outputSchema:v04,handler:async($,Z)=>{t(Z),o(Z),await Z.access.check();let X=await Z.storage.threads.findLastUsedByVirtualMcpIds($.ids);return{items:$.ids.map((Q)=>({id:Q,last_used_at:X.get(Q)?.last_used_at,last_used_by:X.get(Q)?.last_used_by}))}}})});var Oe1=D(()=>{rs1();as1();ss1();Xe1();Fe1();He1();Ne1();Ue1();Be1()});import{z as s7}from"zod";var ol0;var De1=D(()=>{I6();M0();ol0=u({name:"MONITORING_HEATMAP",description:"Get tool-call volume broken down by agent and tool name, for spotting heavily-used tools per agent.",annotations:{title:"Get Tool-Call Heatmap",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:s7.object({startDate:s7.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:s7.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),virtualMcpIds:s7.array(s7.string()).max(100).optional().describe("Filter by specific agent (Virtual MCP) IDs"),excludeConnectionIds:s7.array(s7.string()).max(100).optional().describe("Exclude tool calls from these connection IDs"),limit:s7.number().int().min(1).max(1000).optional().describe("Max number of (agent, tool) cells to return")}),outputSchema:s7.object({cells:s7.array(s7.object({virtualMcpId:s7.string().nullable(),toolName:s7.string(),calls:s7.number(),errors:s7.number(),outputSize:s7.number().describe("Sum of tool-output character length \u2014 a proxy for context weight, not LLM token count")}))}),handler:async($,Z)=>{let X=o(Z);return await Z.access.check(),await FQ(),Z.storage.monitoring.queryToolCallHeatmap({organizationId:X.id,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,filters:{virtualMcpIds:$.virtualMcpIds,excludeConnectionIds:$.excludeConnectionIds},limit:$.limit})}})});import{z as B5}from"zod";var rl0;var Le1=D(()=>{I6();M0();rl0=u({name:"MONITORING_LOG_GET",description:"Get a single monitoring log by ID with full input and output data.",annotations:{title:"Get Monitoring Log",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:B5.object({id:B5.string().describe("Log ID to fetch")}),outputSchema:B5.object({log:B5.object({id:B5.string().optional(),organizationId:B5.string(),connectionId:B5.string(),toolName:B5.string(),input:B5.record(B5.string(),B5.unknown()),output:B5.record(B5.string(),B5.unknown()),isError:B5.boolean(),errorMessage:B5.string().nullish(),durationMs:B5.number(),timestamp:B5.string(),userId:B5.string().nullish(),requestId:B5.string(),userAgent:B5.string().nullish(),virtualMcpId:B5.string().nullish(),properties:B5.record(B5.string(),B5.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async($,Z)=>{await Z.access.check(),await FQ();let X=o(Z),Q=await Z.storage.monitoring.getById(X.id,$.id);if(!Q)return{log:null};return{log:{...Q,timestamp:Q.timestamp instanceof Date?Q.timestamp.toISOString():Q.timestamp}}}})});import{z as B8}from"zod";var b04,al0;var we1=D(()=>{I6();M0();b04=B8.object({id:B8.string().optional().describe("Unique log identifier"),organizationId:B8.string().describe("Organization ID"),connectionId:B8.string().describe("Connection ID"),toolName:B8.string().describe("Name of the tool that was called"),isError:B8.boolean().describe("Whether the call resulted in an error"),errorMessage:B8.string().nullish().describe("Error message if applicable"),durationMs:B8.number().describe("Call duration in milliseconds"),timestamp:B8.string().describe("ISO 8601 timestamp of the call"),userId:B8.string().nullish().describe("User who triggered the call"),requestId:B8.string().describe("Unique request identifier"),userAgent:B8.string().nullish().describe("Client identifier (x-studio-client header)"),virtualMcpId:B8.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:B8.record(B8.string(),B8.string()).nullish().describe("Custom key-value metadata attached to the log")}),al0=u({name:"MONITORING_LOGS_LIST",description:"List monitoring logs for tool calls with filtering and pagination.",annotations:{title:"List Monitoring Logs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:B8.object({connectionId:B8.string().optional().describe("Filter by connection ID"),excludeConnectionIds:B8.array(B8.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:B8.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:B8.string().optional().describe("Filter by tool name"),isError:B8.boolean().optional().describe("Filter by error status"),startDate:B8.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:B8.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:B8.number().default(20).describe("Maximum number of results"),offset:B8.number().default(0).describe("Offset for pagination"),properties:B8.record(B8.string(),B8.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:B8.array(B8.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:B8.record(B8.string(),B8.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:B8.record(B8.string(),B8.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:B8.object({logs:B8.array(b04).describe("Array of monitoring logs"),total:B8.number().describe("Total number of logs matching filters"),offset:B8.number().describe("Current offset for pagination"),limit:B8.number().describe("Current limit for pagination")}),handler:async($,Z)=>{await Z.access.check(),await FQ();let X=o(Z),Y=$.properties||$.propertyKeys||$.propertyPatterns||$.propertyInValues?{properties:$.properties,propertyKeys:$.propertyKeys,propertyPatterns:$.propertyPatterns,propertyInValues:$.propertyInValues}:void 0,G={organizationId:X.id,connectionId:$.connectionId,excludeConnectionIds:$.excludeConnectionIds,virtualMcpId:$.virtualMcpId,toolName:$.toolName,isError:$.isError,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,limit:$.limit,offset:$.offset,propertyFilters:Y},J=await Z.storage.monitoring.query(G);return{logs:J.logs.map(({input:W,output:K,...F})=>({...F,timestamp:F.timestamp instanceof Date?F.timestamp.toISOString():F.timestamp})),total:J.total,offset:$.offset,limit:$.limit}}})});import{z as J$}from"zod";var sl0;var Ee1=D(()=>{I6();M0();sl0=u({name:"MONITORING_STATS",description:"Get aggregated statistics (counts, latency, error rates) for tool call monitoring.",annotations:{title:"Get Monitoring Stats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:J$.object({startDate:J$.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:J$.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:J$.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:J$.array(J$.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:J$.array(J$.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:J$.array(J$.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:J$.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:J$.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:J$.array(J$.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:J$.boolean().optional().describe("Aggregate LLM-call usage (tokens + USD cost) from raw log rows for the given connection. Returns token/cost totals and timeseries. Requires interval.")}),outputSchema:J$.object({totalCalls:J$.number().describe("Total number of tool calls"),errorRate:J$.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:J$.number().describe("Average call duration in milliseconds"),errorRatePercent:J$.string().optional().describe("Error rate as a percentage string"),totalErrors:J$.number().optional().describe("Total number of errors"),p50DurationMs:J$.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:J$.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:J$.array(J$.object({connectionId:J$.string(),calls:J$.number(),errors:J$.number(),errorRate:J$.number(),avgDurationMs:J$.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:J$.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:J$.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:J$.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:J$.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:J$.array(J$.object({toolName:J$.string(),connectionId:J$.string().nullable(),calls:J$.number(),inputTokens:J$.number().optional(),outputTokens:J$.number().optional(),costUsd:J$.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:J$.array(J$.object({timestamp:J$.string(),toolName:J$.string(),calls:J$.number(),errors:J$.number(),avg:J$.number(),p95:J$.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:J$.array(J$.object({timestamp:J$.string(),calls:J$.number(),errors:J$.number(),errorRate:J$.number(),avg:J$.number(),p50:J$.number(),p95:J$.number(),inputTokens:J$.number().optional(),outputTokens:J$.number().optional(),totalTokens:J$.number().optional(),costUsd:J$.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async($,Z)=>{let X=o(Z);if(await Z.access.check(),await FQ(),$.interval&&$.llmUsage)return Z.storage.monitoring.queryLlmUsageStats({organizationId:X.id,interval:$.interval,connectionId:$.connectionIds?.[0]??"decopilot",startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,userIds:$.userIds,topN:$.topN});if($.interval){let Y=await Z.storage.monitoring.queryMetricTimeseries({organizationId:X.id,interval:$.interval,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,filters:{connectionIds:$.connectionIds,excludeConnectionIds:$.excludeConnectionIds,toolNames:$.toolNames,status:$.status}});if(!$.topN)return Y;let G=await Z.storage.monitoring.queryMetricTopToolsTimeseries({organizationId:X.id,interval:$.interval,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,topN:$.topN,filters:{connectionIds:$.connectionIds,excludeConnectionIds:$.excludeConnectionIds,toolNames:$.toolNames,status:$.status}});return{...Y,topTools:G.topTools,topToolsTimeseries:G.timeseries}}let Q=await Z.storage.monitoring.getStats({organizationId:X.id,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0});return{...Q,errorRatePercent:(Q.errorRate*100).toFixed(2)}}})});import{z as nX}from"zod";var el0;var je1=D(()=>{I6();M0();el0=u({name:"MONITORING_THREAD_USAGE",description:"Aggregate LLM token usage and USD cost per thread for the given thread IDs.",annotations:{title:"Get Thread Usage",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:nX.object({threadIds:nX.array(nX.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:nX.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:nX.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:nX.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:nX.object({items:nX.array(nX.object({threadId:nX.string(),calls:nX.number(),inputTokens:nX.number(),outputTokens:nX.number(),totalTokens:nX.number(),costUsd:nX.number()}))}),handler:async($,Z)=>{let X=o(Z);return await Z.access.check(),await FQ(),{items:await Z.storage.monitoring.queryThreadUsage({organizationId:X.id,connectionId:$.connectionId??"decopilot",threadIds:$.threadIds,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0})}}})});var ze1=D(()=>{De1();Le1();we1();Ee1();je1()});function UZ0($){return typeof $==="string"&&y04.has($.trim().toLowerCase())}var y04;var $d0=D(()=>{y04=new Set([".well-known","_admin","api","auth","choose-editor","cli","commerce-onboarding","dbos-queue-depth","health","hosted-run-pending","login","mcp","metrics","oauth","oauth-proxy","onboarding","org","report","reset-password"])});import{z as hY}from"zod";var Zd0;var Pe1=D(()=>{M0();$d0();Zd0=u({name:"ORGANIZATION_CREATE",description:"Create a new organization. The caller becomes the owner automatically.",annotations:{title:"Create Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:hY.object({slug:hY.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens").refine(($)=>!UZ0($),"Slug is reserved by Studio"),name:hY.string().min(1).max(255),description:hY.string().optional()}),outputSchema:hY.object({id:hY.string(),name:hY.string(),slug:hY.string(),logo:hY.string().nullable().optional(),metadata:hY.any().optional(),createdAt:hY.string().datetime().describe("ISO 8601 timestamp"),members:hY.array(hY.any()).optional()}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=o0(Z);if(!X)throw Error("User ID required to create organization");let Q=await Z.boundAuth.organization.create({name:$.name,slug:$.slug,metadata:$.description?{description:$.description}:void 0,userId:X});if(!Q)throw Error("Failed to create organization");return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as UK}from"zod";var Xd0;var Ae1=D(()=>{M0();Xd0=u({name:"ORGANIZATION_LIST",description:"List organizations the current user belongs to.",annotations:{title:"List Organizations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:UK.object({}),outputSchema:UK.object({organizations:UK.array(UK.object({id:UK.string(),name:UK.string(),slug:UK.string(),logo:UK.string().nullable().optional(),metadata:UK.any().optional(),createdAt:UK.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{if(t(Z),await Z.access.check(),!o0(Z))throw Error("User ID required to list organizations");return{organizations:(await Z.boundAuth.organization.list()).map((Q)=>({...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}))}}})});import{z as sG}from"zod";var Qd0;var Te1=D(()=>{M0();Qd0=u({name:"ORGANIZATION_GET",description:"Get an organization's details, members, and settings by slug or ID.",annotations:{title:"Get Organization",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:sG.object({}),outputSchema:sG.object({id:sG.string(),name:sG.string(),slug:sG.string(),logo:sG.string().nullable().optional(),metadata:sG.any().optional(),createdAt:sG.string().datetime().describe("ISO 8601 timestamp"),members:sG.array(sG.any()).optional(),invitations:sG.array(sG.any()).optional()}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.boundAuth.organization.get(X);if(!Q)throw Error("No active organization found");let Y=new Date,G=Q.invitations?.filter((J)=>new Date(J.expiresAt)>Y);return{...Q,invitations:G,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as V3}from"zod";var Yd0;var Re1=D(()=>{M0();Yd0=u({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:V3.object({id:V3.string(),name:V3.string().min(1).max(255).optional(),description:V3.string().optional()}),outputSchema:V3.object({id:V3.string(),name:V3.string(),slug:V3.string(),logo:V3.string().nullable().optional(),metadata:V3.any().optional(),createdAt:V3.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(t(Z),await Z.access.check(),$.id!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let X={};if($.name)X.name=$.name;if($.description!==void 0)X.metadata={description:$.description};let Q=await Z.boundAuth.organization.update({organizationId:$.id,data:X});if(!Q)throw Error("Failed to update organization");return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as wp}from"zod";var Gd0;var Ie1=D(()=>{M0();Gd0=u({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:wp.object({id:wp.string()}),outputSchema:wp.object({success:wp.boolean(),id:wp.string()}),handler:async($,Z)=>{if(t(Z),await Z.access.check(),$.id!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let X=await Z.boundAuth.organization.get($.id);return await Z.boundAuth.organization.update({organizationId:$.id,data:{metadata:{...X?.metadata,archived:!0,archivedAt:new Date().toISOString()}}}),{success:!0,id:$.id}}})});import{z as $$}from"zod";function D7($,Z){let X=$?.[Z];return g04.has(Z)?X!==!1:X===!0}var Ep,jp,CH,qe1,QO,zp,Pp,Ap,Tp,g04,YO;var c9=D(()=>{Ep=$$.object({title:$$.string(),url:$$.string(),icon:$$.string()}),jp=$$.object({registries:$$.record($$.string(),$$.object({enabled:$$.boolean()})).describe("Per-registry enabled/disabled state. Key is connection ID. Absent registries are treated as enabled."),blockedMcps:$$.array($$.string()).describe("List of MCP app_name or app_id values to hide from the store.")}),CH=$$.object({keyId:$$.string(),modelId:$$.string(),title:$$.string().optional()}).nullable(),qe1=$$.enum(["fast","smart","thinking","image","web_search","deep_research"]),QO=$$.enum(["fast","smart","thinking"]),zp=$$.object({tiers:$$.object({fast:CH,smart:CH,thinking:CH,image:CH,web_search:CH,deep_research:CH})}),Pp=$$.object({tiers:$$.object({fast:CH.optional(),smart:CH.optional(),thinking:CH.optional()})}),Ap=$$.object({ids:$$.array($$.string()).describe("Ordered list of custom virtual MCP agent ids to show on the home view.")}),Tp=$$.object({demo_mode:$$.boolean().optional().describe("Curated demo org: the commerce connect modal proceeds without a configured required data source."),reports_only:$$.boolean().optional().describe("Curated commerce (reports) look: hides agent navigation, the home Customize button, and the Settings/Automations tabs. Defaulted on for orgs created by commerce onboarding."),org_board_columns:$$.boolean().optional().describe("The task board's columns are this org's own, mirrored from its tracker, rather than the set Studio ships. Off means the canonical lanes, which is the only board most orgs want."),reviewer_enabled:$$.boolean().optional().describe("Run the Reviewer on a task's pull request once it's In Review \u2014 it reviews the code with the repo's stack-appropriate skills, fixes what it finds on the PR's own branch, then exercises the change on the deploy preview and approves or hands the card to a human."),qa_agent_enabled:$$.boolean().optional().describe("Deprecated: see reviewer_enabled."),code_reviewer_enabled:$$.boolean().optional().describe("Deprecated: see reviewer_enabled."),auto_merge:$$.boolean().optional().describe("When the Reviewer approves a task's pull request, merge it automatically instead of leaving the merge to a human. If the merge is blocked by a conflict with the base branch, hand the PR back to the Super Agent to resolve the conflict (check out the branch, merge the base, push) so it can then merge."),cheap_reviewer_model:$$.boolean().optional().describe("Run the Reviewer on a cheaper model than the Super Agent that wrote the code. On by default \u2014 turning it off trades cost for some review depth."),coding_agent_org_mcps:$$.boolean().optional().describe("Give a coding-agent run (the claude-code harness in a sandbox) every MCP connection in the org as its own MCP server, on top of the narrow task-run surface it always gets. Off by default: each connection is one more server the agent connects to at session start, and all of their tools land in its context."),coding_agents_claude_code:$$.boolean().optional().describe("Run chats on a Code Agent (an agent imported from a GitHub repo) with the claude-code harness inside its sandbox, instead of hosted Decopilot. Off by default: it changes the runtime of every such chat, and claude-code flushes whole turns rather than streaming tokens."),auto_assign_report_tasks_to_super_agent:$$.boolean().optional().describe("When a report import creates a task board item without an assignee, delegate it to the Super Agent automatically instead of leaving it unassigned."),delivery_lanes_enabled:$$.boolean().optional().describe("Board lanes for shipping: Approved, Merged and Post-deploy Validation sit between In Review and Done, and a merged pull request lands on Merged instead of Done. For teams whose release process continues after the merge. Off by default \u2014 with it off the board and the state machine behave exactly as if the lanes did not exist."),cms_auto_fresh_branch:$$.boolean().optional().describe("When a user opens the CMS on a branch whose last commit is older than the staleness window (2 days), move the session to a freshly minted branch cut from the default branch. The stale branch is left intact on GitHub. Off by default.")}),g04=new Set(["reviewer_enabled","cheap_reviewer_model"]);YO=$$.object({id:$$.string().describe("Brand context ID"),name:$$.string().describe("Company name"),domain:$$.string().describe("Company domain (e.g. example.com)"),overview:$$.string().describe("Company overview / description"),logo:$$.string().nullable().optional().describe("Logo URL"),favicon:$$.string().nullable().optional().describe("Favicon URL"),ogImage:$$.string().nullable().optional().describe("OG image URL"),fonts:$$.object({heading:$$.string().optional().describe("Font family for headings"),body:$$.string().optional().describe("Font family for body text"),code:$$.string().optional().describe("Font family for code / monospace")}).nullable().optional().describe("Font families by semantic role"),colors:$$.object({primary:$$.string().optional().describe("Primary brand color (hex)"),secondary:$$.string().optional().describe("Secondary brand color (hex)"),accent:$$.string().optional().describe("Accent / highlight color (hex)"),background:$$.string().optional().describe("Background color (hex)"),foreground:$$.string().optional().describe("Foreground / text color (hex)")}).nullable().optional().describe("Semantic color palette"),images:$$.array($$.record($$.string(),$$.unknown())).nullable().optional().describe("Brand images"),metadata:$$.record($$.string(),$$.unknown()).nullable().optional().describe("Extra design tokens (typography, components, spacing, layout, tone, etc.)"),archivedAt:$$.string().nullable().optional().describe("Archive timestamp (null to unarchive)"),isDefault:$$.boolean().optional().describe("Whether this is the default brand for the organization")})});import{z as _H}from"zod";var Jd0;var Me1=D(()=>{M0();c9();Jd0=u({name:"ORGANIZATION_SETTINGS_GET",description:"Get organization-level settings including sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Get Organization Settings",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:_H.object({}),outputSchema:_H.object({organizationId:_H.string(),sidebar_items:_H.array(Ep).nullable().optional(),enabled_plugins:_H.array(_H.string()).nullable().optional(),registry_config:jp.nullable().optional(),simple_mode:zp.nullable().optional(),default_home_agents:Ap.nullable().optional(),flags:Tp.nullable().optional(),main_agent_id:_H.string().nullable().optional(),createdAt:_H.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:_H.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.organizationSettings.get(X);if(!Q)return{organizationId:X};return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}})});import{z as fQ}from"zod";var Wd0;var ke1=D(()=>{M0();c9();Wd0=u({name:"ORGANIZATION_SETTINGS_UPDATE",description:"Update organization-level settings such as sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Update Organization Settings",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:fQ.object({organizationId:fQ.string(),sidebar_items:fQ.array(Ep).optional(),enabled_plugins:fQ.array(fQ.string()).optional(),registry_config:jp.optional(),simple_mode:zp.optional(),default_home_agents:Ap.optional(),flags:Tp.strict().optional().describe("Org boolean toggles. Shallow-merged into the stored flags: keys you pass win (explicit false persists), omitted keys keep their value."),main_agent_id:fQ.string().nullable().optional().describe("Virtual MCP id the org lands on instead of the Super Agent. Pass null to clear.")}),outputSchema:fQ.object({organizationId:fQ.string(),sidebar_items:fQ.array(Ep).nullable().optional(),enabled_plugins:fQ.array(fQ.string()).nullable().optional(),registry_config:jp.nullable().optional(),simple_mode:zp.nullable().optional(),default_home_agents:Ap.nullable().optional(),flags:Tp.nullable().optional(),main_agent_id:fQ.string().nullable().optional(),createdAt:fQ.string().datetime().describe("ISO 8601 timestamp"),updatedAt:fQ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(t(Z),await Z.access.check(),o(Z).id!==$.organizationId)throw Error("Cannot update settings for a different organization");let Q=await Z.storage.organizationSettings.upsert($.organizationId,{sidebar_items:$.sidebar_items,enabled_plugins:$.enabled_plugins,registry_config:$.registry_config,simple_mode:$.simple_mode,default_home_agents:$.default_home_agents,flags:$.flags,main_agent_id:$.main_agent_id});return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}})});import{z as S3}from"zod";var Ve1,Kd0,Fd0;var Se1=D(()=>{M0();c9();Ve1=YO.extend({organizationId:S3.string(),archivedAt:S3.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:S3.string().describe("ISO 8601 timestamp"),updatedAt:S3.string().describe("ISO 8601 timestamp")}),Kd0=u({name:"BRAND_CONTEXT_LIST",description:"List all brand contexts (company profiles) for the current organization.",annotations:{title:"List Brand Contexts",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:S3.object({includeArchived:S3.boolean().optional().describe("Include archived brands in the list")}),outputSchema:S3.object({items:S3.array(Ve1)}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");return{items:(await Z.storage.brandContext.list(X,{includeArchived:$.includeArchived})).map((Y)=>({...Y,archivedAt:Y.archivedAt instanceof Date?Y.archivedAt.toISOString():Y.archivedAt,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}))}}}),Fd0=u({name:"BRAND_CONTEXT_GET",description:"Get a specific brand context by ID.",annotations:{title:"Get Brand Context",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:S3.object({id:S3.string().describe("Brand context ID")}),outputSchema:Ve1.extend({organizationId:S3.string()}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.brandContext.get($.id,X);if(!Q)throw Error("Brand context not found");return{...Q,archivedAt:Q.archivedAt instanceof Date?Q.archivedAt.toISOString():Q.archivedAt,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}})});import{z as jE}from"zod";var Ce1,Hd0,Nd0,Ud0;var _e1=D(()=>{M0();c9();Ce1=YO.extend({organizationId:jE.string(),createdAt:jE.string().describe("ISO 8601 timestamp"),updatedAt:jE.string().describe("ISO 8601 timestamp")}),Hd0=u({name:"BRAND_CONTEXT_CREATE",description:"Create a new brand context (company profile) for the current organization.",annotations:{title:"Create Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:YO.omit({id:!0}),outputSchema:Ce1,handler:async($,Z)=>{t(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.brandContext.create(X,{name:$.name,domain:$.domain,overview:$.overview,logo:$.logo??null,favicon:$.favicon??null,ogImage:$.ogImage??null,fonts:$.fonts??null,colors:$.colors??null,images:$.images??null,metadata:$.metadata??null});return{...Q,archivedAt:Q.archivedAt instanceof Date?Q.archivedAt.toISOString():Q.archivedAt,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}}),Nd0=u({name:"BRAND_CONTEXT_UPDATE",description:"Update an existing brand context by ID.",annotations:{title:"Update Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:YO.partial().required({id:!0}),outputSchema:Ce1,handler:async($,Z)=>{t(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.brandContext.get($.id,X))throw Error("Brand context not found");let{id:Y,...G}=$;if(G.isDefault===!0)await Z.storage.brandContext.setDefault(Y,X);let J=await Z.storage.brandContext.update(Y,X,{name:G.name,domain:G.domain,overview:G.overview,logo:G.logo!==void 0?G.logo??null:void 0,favicon:G.favicon!==void 0?G.favicon??null:void 0,ogImage:G.ogImage!==void 0?G.ogImage??null:void 0,fonts:G.fonts!==void 0?G.fonts??null:void 0,colors:G.colors!==void 0?G.colors??null:void 0,images:G.images!==void 0?G.images??null:void 0,metadata:G.metadata!==void 0?G.metadata??null:void 0,archivedAt:G.archivedAt!==void 0?G.archivedAt??null:void 0,isDefault:G.isDefault===!1?!1:void 0});return{...J,archivedAt:J.archivedAt instanceof Date?J.archivedAt.toISOString():J.archivedAt,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}),Ud0=u({name:"BRAND_CONTEXT_DELETE",description:"Archive a brand context by ID (soft delete).",annotations:{title:"Archive Brand Context",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:jE.object({id:jE.string().describe("Brand context ID")}),outputSchema:jE.object({success:jE.boolean()}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.brandContext.get($.id,X))throw Error("Brand context not found");return await Z.storage.brandContext.update($.id,X,{archivedAt:new Date().toISOString(),isDefault:!1}),{success:!0}}})});async function BZ0($,Z,X){let Q=$.trim();if(!Q.startsWith("http"))Q=`https://${Q}`;let Y=await fetch("https://api.firecrawl.dev/v1/scrape",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Z}`},body:JSON.stringify({url:Q,formats:["branding"]})});if(!Y.ok){let U=await Y.text().catch(()=>"");throw Error(`Firecrawl API error: ${Y.status} ${U.slice(0,200)}`)}let G=await Y.json();if(!G.success||!G.data?.branding)return null;let J=G.data.branding,W=G.data.metadata??{},K=c04(J,W);return{name:W.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((U)=>U.trim()).filter(Boolean)?.slice().sort((U,B)=>U.length-B.length)[0]??W.ogSiteName??X??$,domain:$,overview:W.description??"",logo:K.logo,favicon:K.favicon,ogImage:K.ogImage,fonts:K.fonts,colors:K.colors,images:null,metadata:Object.keys(K.metadata).length>0?K.metadata:null}}function c04($,Z){let X=$.images??{},Q=$.colors??{},Y={};for(let[H,N]of Object.entries(Q))if(typeof N==="string"&&N&&h04.has(H))Y[H]=N;let G={},W=($.typography??{}).fontFamilies??{};for(let[H,N]of Object.entries(W))if(typeof N==="string"&&N){let U=u04[H.toLowerCase()];if(U&&!G[U])G[U]=N}let K=$.fonts;if(Array.isArray(K))for(let H of K){let N=H.family;if(typeof N==="string"&&N&&!G.body)G.body=N}let F={};for(let H of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if($[H]!==void 0)F[H]=$[H];return{logo:X.logo??null,favicon:X.favicon??null,ogImage:X.ogImage??Z.ogImage??null,fonts:Object.keys(G).length>0?G:null,colors:Object.keys(Y).length>0?Y:null,metadata:F}}var h04,u04;var Bd0=D(()=>{h04=new Set(["primary","secondary","accent","background","foreground"]),u04={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as OZ0}from"zod";var l04,Od0;var ve1=D(()=>{M0();Bd0();c9();l04=YO.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:OZ0.boolean()}),Od0=u({name:"BRAND_CONTEXT_EXTRACT",description:"Extract brand context (colors, fonts, logos) from a website URL using Firecrawl.",annotations:{title:"Extract Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:OZ0.object({domain:OZ0.string().describe("Website domain to extract brand from"),brandId:OZ0.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:l04,modelSummary:($)=>$.success?`Brand saved (id=${$.id}, name=${$.name}, domain=${$.domain}). The UI rendered the logo, colors, fonts, and overview.`:"Brand extraction failed.",handler:async($,Z)=>{t(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=Z.firecrawlApiKey;if(!Q)throw Error("FIRECRAWL_API_KEY is not configured. Set the environment variable to enable brand extraction.");let Y=await BZ0($.domain,Q,$.domain);if(!Y)throw Error("Firecrawl did not return branding data for this URL");let G={name:Y.name,domain:Y.domain,overview:Y.overview,logo:Y.logo,favicon:Y.favicon,ogImage:Y.ogImage,fonts:Y.fonts,colors:Y.colors,images:Y.images,metadata:Y.metadata},J=$.brandId?await(async()=>{if(!await Z.storage.brandContext.get($.brandId,X))throw Error("Brand context not found");return Z.storage.brandContext.update($.brandId,X,G)})():await Z.storage.brandContext.create(X,G);return{id:J.id,name:J.name,domain:J.domain,overview:J.overview,logo:J.logo,favicon:J.favicon,ogImage:J.ogImage,fonts:J.fonts,colors:J.colors,success:!0}}})});function fe1($){let Z=$.metadata??{};return{id:$.id,name:$.name,domain:$.domain||void 0,colors:$.colors??void 0,fonts:$.fonts??void 0,assets:$.logo||$.favicon||$.ogImage?{logo:$.logo??void 0,favicon:$.favicon??void 0,ogImage:$.ogImage??void 0}:void 0,overview:$.overview||void 0,tagline:typeof Z.tagline==="string"?Z.tagline:void 0,tone:typeof Z.tone==="string"?Z.tone:void 0,metadata:(()=>{let X=Object.fromEntries(Object.entries(Z).filter(([Q])=>Q!=="tagline"&&Q!=="tone"));return Object.keys(X).length>0?X:void 0})()}}var Dd0,Ld0;var be1=D(()=>{wl0();M0();Dd0=u({name:"BRAND_GET",description:"Get a brand context by ID. Omit the ID to get the default brand for the organization.",annotations:{title:"Get Brand",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:i90,outputSchema:Yp,handler:async($,Z)=>{t(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=$.id?await Z.storage.brandContext.get($.id,X):await Z.storage.brandContext.getDefault(X);if(!Q)throw Error($.id?"Brand not found":"No default brand configured");return fe1(Q)}}),Ld0=u({name:"BRAND_LIST",description:"List all active brands for the current organization.",annotations:{title:"List Brands",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:p90,outputSchema:n90,handler:async($,Z)=>{t(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");return{items:(await Z.storage.brandContext.list(X)).map(fe1)}}})});import{resolveTxt as d04}from"dns/promises";function wd0($){return`${m04}.${$.toLowerCase()}`}function xe1(){return`deco-verify-${crypto.randomUUID().replace(/-/g,"")}`}async function ye1($,Z,X=d04){if(!Z)return!1;try{return(await X(wd0($))).some((Y)=>Y.join("").trim()===Z)}catch{return!1}}var m04="_deco-verify";var ge1=()=>{};import{z as V5}from"zod";function GO($){let Z=$.verificationStatus==="pending"&&Boolean($.verificationToken);return{id:$.id,domain:$.domain,joinMode:$.joinMode,verificationStatus:$.verificationStatus,verificationMethod:$.verificationMethod,verifiedAt:$.verifiedAt?new Date($.verifiedAt).toISOString():null,recordName:Z?wd0($.domain):null,recordValue:Z?$.verificationToken:null}}function p04($){let Z=$.toLowerCase().trim();if(!i04.test(Z))throw Error(`Invalid domain format: "${Z}". Must be a valid domain like "acme.com"`);if(C3.has(Z))throw Error(`Cannot claim generic email domain "${Z}". Only corporate domains are allowed.`);return Z}var i04,Ed0,DZ0,jd0,zd0,Pd0,Ad0,Td0;var he1=D(()=>{uY();ge1();M0();i04=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,Ed0=V5.enum(["off","auto","request"]),DZ0=V5.object({id:V5.string(),domain:V5.string(),joinMode:Ed0,verificationStatus:V5.enum(["pending","verified"]),verificationMethod:V5.enum(["email","dns"]).nullable(),verifiedAt:V5.string().nullable(),recordName:V5.string().nullable(),recordValue:V5.string().nullable()});jd0=u({name:"ORGANIZATION_DOMAIN_LIST",description:"List the email domains claimed by an organization.",annotations:{title:"List Organization Domains",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:V5.object({}),outputSchema:V5.object({domains:V5.array(DZ0)}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(Z);return{domains:(await Z.storage.organizationDomains.listByOrganizationId(X.id)).map(GO)}}}),zd0=u({name:"ORGANIZATION_DOMAIN_ADD",description:"Claim an email domain for an organization. If the caller's verified email matches the domain it is trusted immediately; otherwise it requires DNS verification.",annotations:{title:"Add Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:V5.object({domain:V5.string().min(1).max(255).describe("Domain to claim, e.g. acme.com"),joinMode:Ed0.optional().describe("Initial join mode (only applied when the domain is trusted immediately via email match).")}),outputSchema:DZ0,handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(Z),Q=p04($.domain),G=Z.auth.user?.email?.split("@")[1]?.toLowerCase(),J=Boolean(Z.auth.user?.emailVerified)&&G===Q,W=await Z.storage.organizationDomains.getByOrgAndDomain(X.id,Q);if(W){if(W.verificationStatus!=="verified"&&J){let F=await Z.storage.organizationDomains.markVerified(W.id,"email");return GO(F)}return GO(W)}let K=J?await Z.storage.organizationDomains.add(X.id,Q,{joinMode:$.joinMode??"off",verificationStatus:"verified",verificationMethod:"email"}):await Z.storage.organizationDomains.add(X.id,Q,{joinMode:"off",verificationStatus:"pending",verificationToken:xe1()});return GO(K)}}),Pd0=u({name:"ORGANIZATION_DOMAIN_UPDATE",description:"Set the join mode for a claimed domain. Discoverable modes (auto/request) require the domain to be verified.",annotations:{title:"Update Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:V5.object({id:V5.string(),joinMode:Ed0}),outputSchema:DZ0,handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(Z),Q=await Z.storage.organizationDomains.getById($.id);if(!Q||Q.organizationId!==X.id)throw Error("Domain not found");if($.joinMode!=="off"&&Q.verificationStatus!=="verified")throw Error("Verify the domain before enabling auto-join or requests.");let Y=await Z.storage.organizationDomains.updateJoinMode($.id,$.joinMode);return GO(Y)}}),Ad0=u({name:"ORGANIZATION_DOMAIN_VERIFY",description:"Check the DNS TXT record for a pending domain and mark it verified if present.",annotations:{title:"Verify Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:V5.object({id:V5.string()}),outputSchema:V5.object({verified:V5.boolean(),domain:DZ0}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(Z),Q=await Z.storage.organizationDomains.getById($.id);if(!Q||Q.organizationId!==X.id)throw Error("Domain not found");if(Q.verificationStatus==="verified")return{verified:!0,domain:GO(Q)};if(!Q.verificationToken)throw Error("Domain has no pending DNS verification.");if(!await ye1(Q.domain,Q.verificationToken))return{verified:!1,domain:GO(Q)};let G=await Z.storage.organizationDomains.markVerified($.id,"dns");return{verified:!0,domain:GO(G)}}}),Td0=u({name:"ORGANIZATION_DOMAIN_REMOVE",description:"Remove a claimed domain from an organization.",annotations:{title:"Remove Organization Domain",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:V5.object({id:V5.string()}),outputSchema:V5.object({success:V5.boolean()}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(Z),Q=await Z.storage.organizationDomains.getById($.id);if(!Q||Q.organizationId!==X.id)throw Error("Domain not found");return await Z.storage.organizationDomains.removeById($.id),{success:!0}}})});function JO($){return($ instanceof Error?$.message.toLowerCase():"").includes("already a member")}import{z as P9}from"zod";var n04,Rd0,Id0,qd0;var ue1=D(()=>{M0();S4();n04=P9.object({id:P9.string(),userId:P9.string(),status:P9.enum(["pending","approved","denied"]),createdAt:P9.string(),user:P9.object({id:P9.string(),name:P9.string(),email:P9.string(),image:P9.string().nullable()}).nullable()}),Rd0=u({name:"ORGANIZATION_JOIN_REQUEST_LIST",description:"List pending requests to join the organization.",annotations:{title:"List Join Requests",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:P9.object({}),outputSchema:P9.object({requests:P9.array(n04)}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(Z);return{requests:(await Z.storage.organizationJoinRequests.listPendingWithUser(X.id)).map((Y)=>({id:Y.id,userId:Y.userId,status:Y.status,createdAt:new Date(Y.createdAt).toISOString(),user:Y.user}))}}}),Id0=u({name:"ORGANIZATION_JOIN_REQUEST_APPROVE",description:"Approve a pending join request, adding the user as a member.",annotations:{title:"Approve Join Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:P9.object({requestId:P9.string()}),outputSchema:P9.object({success:P9.boolean()}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(Z),Q=await Z.storage.organizationJoinRequests.getById($.requestId);if(!Q||Q.organizationId!==X.id)throw Error("Join request not found");if(Q.status!=="pending")throw Error("Join request has already been decided");let Y=o0(Z);if(!await Z.storage.organizationJoinRequests.decide(Q.id,"approved",Y??Q.userId))return{success:!0};try{await Z.boundAuth.organization.addMember({organizationId:X.id,userId:Q.userId,role:["user"]})}catch(J){if(!JO(J))throw J}if(Y)x1.capture({distinctId:Y,event:"organization_join_request_approved",groups:{organization:X.id},properties:{organization_id:X.id,user_id:Q.userId}});return{success:!0}}}),qd0=u({name:"ORGANIZATION_JOIN_REQUEST_DENY",description:"Deny a pending join request.",annotations:{title:"Deny Join Request",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:P9.object({requestId:P9.string()}),outputSchema:P9.object({success:P9.boolean()}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(Z),Q=await Z.storage.organizationJoinRequests.getById($.requestId);if(!Q||Q.organizationId!==X.id)throw Error("Join request not found");if(Q.status!=="pending")throw Error("Join request has already been decided");let Y=o0(Z);if(await Z.storage.organizationJoinRequests.decide(Q.id,"denied",Y??Q.userId)&&Y)x1.capture({distinctId:Y,event:"organization_join_request_denied",groups:{organization:X.id},properties:{organization_id:X.id,user_id:Q.userId}});return{success:!0}}})});import{z as bQ}from"zod";var Md0;var ce1=D(()=>{S4();M0();VQ();Md0=u({name:"ORGANIZATION_MEMBER_ADD",description:"Invite a member to the organization by email with an assigned role.",annotations:{title:"Add Organization Member",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:bQ.object({organizationId:bQ.string().optional(),userId:bQ.string(),role:bQ.array(bQ.string())}),outputSchema:bQ.object({id:bQ.string(),organizationId:bQ.string(),userId:bQ.string(),role:bQ.union([bQ.string(),bQ.array(bQ.string())]),createdAt:bQ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=$.organizationId||Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(X!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let Q=await Z.db.selectFrom("member").select(["role"]).where("userId","=",o0(Z)??"").where("organizationId","=",X).executeTakeFirst();if(!P50(Q?.role,$.role))throw Error(`Insufficient privileges to assign role "${$.role.join(",")}"`);let Y=await Z.boundAuth.organization.addMember({organizationId:X,userId:$.userId,role:$.role});if(!Y)throw Error("Failed to add member");let G=o0(Z);if(G)x1.capture({distinctId:G,event:"organization_member_added",groups:{organization:X},properties:{organization_id:X,added_user_id:$.userId,role:$.role}});return{...Y,role:Y.role,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as Ky}from"zod";var kd0;var le1=D(()=>{S4();M0();kd0=u({name:"ORGANIZATION_MEMBER_REMOVE",description:"Remove a member from the organization. Revokes all their access immediately.",annotations:{title:"Remove Organization Member",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Ky.object({organizationId:Ky.string().optional(),memberIdOrEmail:Ky.string()}),outputSchema:Ky.object({success:Ky.boolean(),memberIdOrEmail:Ky.string()}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=$.organizationId||Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(X!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let Q=await Z.boundAuth.organization.removeMember({organizationId:X,memberIdOrEmail:$.memberIdOrEmail});Z.invalidateMemberRole?.(Q.member.userId,X);let Y=o0(Z);if(Y)x1.capture({distinctId:Y,event:"organization_member_removed",groups:{organization:X},properties:{organization_id:X,member_id_or_email:$.memberIdOrEmail}});return{success:!0,memberIdOrEmail:$.memberIdOrEmail}}})});import{z as e7}from"zod";var Vd0;var de1=D(()=>{M0();Vd0=u({name:"ORGANIZATION_MEMBER_LIST",description:"List all members in the organization with their roles.",annotations:{title:"List Organization Members",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:e7.object({limit:e7.number().int().min(1).max(1000).optional(),offset:e7.number().int().min(0).optional()}),outputSchema:e7.object({members:e7.array(e7.object({id:e7.string(),organizationId:e7.string(),userId:e7.string(),role:e7.string(),createdAt:e7.string().datetime().describe("ISO 8601 timestamp"),user:e7.object({id:e7.string(),name:e7.string(),email:e7.string(),image:e7.string().optional()}).optional()}))}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");return{members:((await Z.boundAuth.organization.listMembers({organizationId:X,limit:$.limit,offset:$.offset}))?.members??[]).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}}})});import{z as gZ}from"zod";var Sd0;var me1=D(()=>{S4();M0();VQ();Sd0=u({name:"ORGANIZATION_MEMBER_UPDATE_ROLE",description:"Change a member's role (e.g., admin, member) within the organization.",annotations:{title:"Update Member Role",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:gZ.object({organizationId:gZ.string().optional(),memberId:gZ.string(),role:gZ.array(gZ.string())}),outputSchema:gZ.object({id:gZ.string(),organizationId:gZ.string(),userId:gZ.string(),role:gZ.union([gZ.string(),gZ.array(gZ.string())]),createdAt:gZ.string().datetime().describe("ISO 8601 timestamp"),user:gZ.object({email:gZ.string(),name:gZ.string(),image:gZ.string().optional()})}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=$.organizationId||Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.db.selectFrom("member").select(["role"]).where("userId","=",o0(Z)??"").where("organizationId","=",X).executeTakeFirst();if(!P50(Q?.role,$.role))throw Error(`Insufficient privileges to assign role "${$.role.join(",")}"`);let Y=await Z.boundAuth.organization.updateMemberRole({organizationId:X,memberId:$.memberId,role:$.role});if(!Y)throw Error("Failed to update member role");Z.invalidateMemberRole?.(Y.userId,X);let G=o0(Z);if(G)x1.capture({distinctId:G,event:"organization_member_role_updated",groups:{organization:X},properties:{organization_id:X,member_id:$.memberId,target_user_id:Y.userId,new_role:Array.isArray($.role)?$.role.join(","):$.role}});return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});async function ie1(){if(Rp&&Date.now()-Rp.fetchedAt<600000)return Rp.rate;try{let Z=await(await fetch("https://economia.awesomeapi.com.br/json/last/USD-BRL",{signal:AbortSignal.timeout(5000)})).json(),X=parseFloat(Z.USDBRL?.bid??"");if(Number.isNaN(X)||X<=0)throw Error("Invalid rate");return Rp={rate:X,fetchedAt:Date.now()},X}catch{return Rp?.rate??5.5}}function pe1($,Z,X){if(Z==="brl")return Math.round($/X);return $}var Rp=null;function Cd0($,Z="",X=new URLSearchParams){for(let[Q,Y]of Object.entries($)){if(Y===void 0||Y===null)continue;let G=Z?`${Z}[${Q}]`:Q;if(Array.isArray(Y))Y.forEach((J,W)=>{if(typeof J==="object"&&J!==null)Cd0(J,`${G}[${W}]`,X);else X.append(`${G}[${W}]`,String(J))});else if(typeof Y==="object")Cd0(Y,G,X);else X.append(G,String(Y))}return X}async function Ip($,Z){let X=b0().stripeSecretKey;if(!X)throw new cY(503,"billing is not configured");let Q=Z?.params?Cd0(Z.params).toString():void 0,Y=await fetch(`${t04}${$}`,{method:Z?.method??(Q?"POST":"GET"),headers:{Authorization:`Bearer ${X}`,...Q&&{"Content-Type":"application/x-www-form-urlencoded"}},body:Q,signal:AbortSignal.timeout(o04)}),G=await Y.json().catch(()=>({}));if(!Y.ok){let J=G.error?.message??`HTTP ${Y.status}`;throw new cY(Y.status,J)}return G}function ne1($){return{billing_address_collection:"required",custom_fields:[{key:r04,label:{type:"custom",custom:"CPF / CNPJ"},type:"text",optional:!1,text:{minimum_length:a04,maximum_length:s04}}],...$&&{customer_update:{address:"auto",name:"auto"}}}}async function te1($){let Z=b0().stripeOrgPriceId;if(!Z)throw new cY(503,"billing is not configured");let X=await Ip("/checkout/sessions",{params:{mode:"subscription",...ne1(null),line_items:[{price:Z,quantity:1}],success_url:$.successUrl,cancel_url:$.cancelUrl,metadata:{orgId:$.organizationId},subscription_data:{metadata:{orgId:$.organizationId}}}});if(!X.url)throw new cY(500,"checkout session lacks url");return{url:X.url}}function e04($,Z){return Math.round($*(1+Z/100))}async function oe1($){let Z=e04($.amountCents,$.feePercent),X=pe1($.amountCents,$.currency,await ie1()),Q=b0().stripeTopupProductId,Y={kind:"topup",orgId:$.organizationId,creditCents:X},G=$.currency==="brl"?`Studio AI credits (R$ ${($.amountCents/100).toFixed(2)})`:`Studio AI credits ($${($.amountCents/100).toFixed(2)})`,J=await Ip("/checkout/sessions",{params:{mode:"payment",...$.customerId&&{customer:$.customerId},...ne1($.customerId),line_items:[{quantity:1,price_data:{currency:$.currency,unit_amount:Z,...Q?{product:Q}:{product_data:{name:G}}}}],success_url:$.successUrl,cancel_url:$.cancelUrl,metadata:Y,payment_intent_data:{metadata:Y}}});if(!J.url)throw new cY(500,"checkout session lacks url");return{url:J.url}}async function LZ0($){let Z=await Ip("/billing_portal/sessions",{params:{customer:$.customerId,return_url:$.returnUrl}});if(!Z.url)throw new cY(500,"portal session lacks url");return{url:Z.url}}async function wZ0($){return Ip(`/subscriptions/${encodeURIComponent($)}`)}async function re1($){await Ip(`/subscriptions/${encodeURIComponent($)}`,{method:"DELETE"})}var t04="https://api.stripe.com/v1",cY,o04=15000,r04="taxid",a04=11,s04=18;var zE=D(()=>{R$();cY=class cY extends Error{status;constructor($,Z){super(`Stripe API ${$}: ${Z}`);this.status=$;this.name="StripeApiError"}}});function WO($,Z){let X=`/${encodeURIComponent($)}/settings`;return Z?`${X}/${Z}`:X}import{z as _d0}from"zod";var vd0;var ae1=D(()=>{zE();Z9();M0();S4();vd0=u({name:"ORGANIZATION_BILLING_CHECKOUT_START",description:"Start the organization's subscription: creates a Stripe Checkout session and returns its URL.",annotations:{title:"Start Billing Checkout",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:_d0.object({}),outputSchema:_d0.object({url:_d0.string()}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=Z.organization?.id,Q=Z.organization?.slug;if(!X||!Q)throw Error("Organization context required");let Y=await Z.storage.organizationBilling.getBilling(X);if(Y?.status==="active")throw Error("This organization already has an active subscription.");if(Y?.stripeSubscriptionId)throw Error("This organization still has a subscription on file \u2014 settle or cancel it before starting a new checkout.");let G=`${b9()}${WO(Q,"members")}`,{url:J}=await te1({organizationId:X,successUrl:`${G}?checkout=success`,cancelUrl:`${G}?checkout=canceled`});return xY({event:"subscription_checkout_started",organizationId:X,...Z.auth?.user?.id?{userId:Z.auth.user.id}:{}}),{url:J}}})});import{z as fd0}from"zod";var bd0;var se1=D(()=>{zE();Z9();M0();bd0=u({name:"ORGANIZATION_BILLING_PORTAL",description:"Open the organization's Stripe billing portal (manage card, invoices, cancellation). Returns the portal URL.",annotations:{title:"Open Billing Portal",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:fd0.object({}),outputSchema:fd0.object({url:fd0.string()}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(Z);if(!X.slug)throw Error("Organization context required");let Q=await Z.storage.organizationBilling.getBilling(X.id);if(!Q?.stripeCustomerId)throw Error("This organization has no billing account yet \u2014 subscribe first.");try{return await LZ0({customerId:Q.stripeCustomerId,returnUrl:`${b9()}${WO(X.slug,"members")}`})}catch(Y){if(Y instanceof cY)throw Error(Y.message);throw Y}}})});function EZ0($){return xd0[$%xd0.length]??$14}function xQ($){return $.createdBy==="system"}function X14($){if($?.reviewer_enabled===void 0&&$?.qa_agent_enabled===!1&&$?.code_reviewer_enabled===!1)return!1;return D7($,"reviewer_enabled")}function vH($){return X14($)?BK:[]}function Q14($){return D7($,"delivery_lanes_enabled")}function DK($){return Q14($)?"merged":"done"}function FO($,Z){if(!$)return!1;return[OK[Z],...Z14].some((X)=>$.startsWith(`${X}:`))}function fH($,Z){if(Z)return new Date(Z).getTime();let X=0;for(let Q of $){if(Q.action!=="status_changed")continue;if(Q.data?.to!=="in_review")continue;X=Math.max(X,new Date(Q.occurredAt).getTime())}return X}function HO($,Z){let X=fH($,Z.cycleStartedAt),Q=new Map;for(let Y of $){if(Y.action!=="review_approved"&&Y.action!=="review_changes_requested")continue;if(new Date(Y.occurredAt).getTime()<X)continue;let G=Y.data??{};if(G.reviewer!=="reviewer")continue;if(Y.action==="review_approved"){if(Z?.verifiedOnly&&G.verified!==!0)continue;Q.set("reviewer","approved")}else Q.set("reviewer","changes_requested")}return Q}function KO($,Z,X){if(Z.length===0)return!1;let Q=HO($,X);return Z.every((Y)=>Q.get(Y)==="approved")}function $0$($,Z,X){return KO($,Z,X)&&!KO($,Z,{...X,verifiedOnly:!0})}function Z0$($){let Z=null;for(let X of $){if(X.action!=="review_approved"&&X.action!=="review_changes_requested")continue;let Q=new Date(X.occurredAt).getTime();if(Z&&Q<Z.at)continue;let Y=X.data?.notes;Z={at:Q,notes:X.action==="review_changes_requested"&&typeof Y==="string"?Y:null}}return Z?.notes??null}var X8="super-agent",xd0,$14,qp='Your checkout is SHALLOW (`git clone --depth 1`), so it has no merge base and `git diff main...HEAD` (three dots) fails with "fatal: main...HEAD: no merge base". To see a branch diff, either use the two-dot form against the fetched remote ref (`git fetch origin <base> && git diff origin/<base> HEAD`), or deepen first with `git fetch --deepen=100`. Same for `git log main..HEAD` and anything else that needs shared history.',ee1,yd0="chore",BK,OK,Z14,Mp="NO VISUAL SURFACE",jZ0,zZ0,X0$="task-board.item.updated",Q0$="task-board.item.deleted";var C6=D(()=>{c9();xd0=["#9ca3af","#ef4444","#f97316","#f59e0b","#22c55e","#3b82f6","#a855f7","#ec4899"],$14=xd0[0];ee1="Read the diff with `gh pr diff <number>`. It comes from the API, so it needs no fetch, no merge base, and is unaffected by the shallow checkout. "+"Read it ONCE \u2014 `gh pr diff <number> --name-only` first if you need to size "+"it, then pull the hunks you need per FILE. Do NOT re-run the diff sliced by directory: each slice re-reads bytes you already have into every remaining turn's context, and it is the largest avoidable cost in a review.",BK=["reviewer"],OK={reviewer:"Reviewer"},Z14=["QA Agent","Code Reviewer"];jZ0=["triage","todo","in_progress","in_review","approved","merged","post_deploy_validation","done","archived"],zZ0=["approved","merged","post_deploy_validation"]});function gd0($){return $==="trial"?"trial":"subscription"}function kp($,Z,X,Q={}){xY({event:Z,organizationId:X.organizationId,...$.auth?.user?.id?{userId:$.auth.user.id}:{},properties:{task_id:X.id,...Q}})}function hd0($){return $?.status==="active"||$?.status==="past_due"}function PZ0($,Z){if(hd0($))return{periodKey:$?.currentPeriodEnd?`sub:${$.currentPeriodEnd.toISOString()}`:"sub:pending",limit:$?.monthlyTaskExecutions??Z.monthlyTaskExecutions,exhaustedReason:"monthly_exhausted"};return{periodKey:"trial",limit:$?.freeTaskExecutions??Z.freeTaskExecutions,exhaustedReason:"trial_exhausted"}}function Vp(){let $=b0();return{enforced:$.taskQuotaEnforced,freeTaskExecutions:$.freeTaskExecutions,monthlyTaskExecutions:$.monthlyTaskExecutions,maxRunsPerTask:$.maxRunsPerTask}}function NO(){return{...Vp(),maxRunsPerTask:Number.POSITIVE_INFINITY}}async function Fy($,Z,X=Vp()){if(!X.enforced||!xQ(Z))return;let Q=await $.storage.organizationBilling.taskClaim(Z.id);if(Q&&Q.runCount>=X.maxRunsPerTask)throw kp($,"task_quota_blocked",Z,{phase:"precheck",reason:"runs_exhausted"}),new tX("runs_exhausted");if(Q&&Q.state!=="released")return;let Y=await $.storage.organizationBilling.getBilling(Z.organizationId),G=PZ0(Y,X);if(await $.storage.organizationBilling.countTaskClaims(Z.organizationId,G.periodKey)>=G.limit)throw kp($,"task_quota_blocked",Z,{phase:"precheck",reason:G.exhaustedReason,billing_mode:gd0(G.periodKey),limit:G.limit}),new tX(G.exhaustedReason)}async function Y0$($,Z,X=Vp()){if(!X.enforced||!xQ(Z))return"skipped";let Q=await $.storage.organizationBilling.getBilling(Z.organizationId),Y=PZ0(Q,X),G=await $.storage.organizationBilling.claimTaskUnderLimit(Z.organizationId,Z.id,Y.periodKey,Y.limit,X.maxRunsPerTask);if(G==="exhausted")throw kp($,"task_quota_blocked",Z,{phase:"claim",reason:Y.exhaustedReason,billing_mode:gd0(Y.periodKey),limit:Y.limit}),new tX(Y.exhaustedReason);if(G==="runs_exhausted")throw kp($,"task_quota_blocked",Z,{phase:"claim",reason:"runs_exhausted"}),new tX("runs_exhausted");if(G==="claimed")kp($,"task_quota_claimed",Z,{billing_mode:gd0(Y.periodKey),period_key:Y.periodKey,limit:Y.limit});return G}async function G0$($,Z,X,Q){if(Q==="skipped")return;await $.rollbackTaskClaim(Z,X,{releaseSlot:Q==="claimed"}).catch((Y)=>console.error("[task-quota] rollback failed (stays charged)",Y))}async function J0$($,Z){let X=await $.storage.organizationBilling.taskClaim(Z);return!!X&&X.state!=="released"}async function W0$($,Z,X){if(await $.releaseTaskClaim(Z,X).catch((Y)=>{return console.error("[task-quota] refund failed (stays charged)",Y),!1}))xY({event:"task_quota_refunded",organizationId:Z,properties:{task_id:X}})}var Y14="[SUBSCRIPTION_REQUIRED]",G14,tX;var eG=D(()=>{C6();S4();R$();G14={trial_exhausted:"this organization used its free task executions \u2014 subscribe to keep running tasks",monthly_exhausted:"this organization used its monthly task executions \u2014 more become available next billing cycle",runs_exhausted:"this task reached its execution limit \u2014 create a new task to keep going"};tX=class tX extends Error{reason;constructor($){super(`${Y14} ${G14[$]}`);this.reason=$;this.name="TaskQuotaError"}}});import{z as bH}from"zod";var ud0;var K0$=D(()=>{M0();eG();ud0=u({name:"ORGANIZATION_TASK_QUOTA_GET",description:"Get the organization's auto-task quota: how many runs are used in the current period, the limit, and the subscription's billing status.",annotations:{title:"Get Task Quota",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:bH.object({}),outputSchema:bH.object({enforced:bH.boolean(),billingStatus:bH.string(),subscribed:bH.boolean(),hasBillingAccount:bH.boolean(),used:bH.number(),limit:bH.number(),currentPeriodEnd:bH.string().datetime().nullable()}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(Z),Q=Vp(),Y=await Z.storage.organizationBilling.getBilling(X.id),G=PZ0(Y,Q),J=await Z.storage.organizationBilling.countTaskClaims(X.id,G.periodKey);return{enforced:Q.enforced,billingStatus:Y?.status??"none",subscribed:hd0(Y),hasBillingAccount:!!Y?.stripeCustomerId,used:J,limit:G.limit,currentPeriodEnd:Y?.currentPeriodEnd?.toISOString()??null}}})});var F0$=D(()=>{Pe1();Ae1();Te1();Re1();Ie1();Me1();ke1();Se1();_e1();ve1();be1();he1();ue1();ce1();le1();de1();me1();ae1();se1();K0$()});function LK($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function AZ0($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every(AZ0);if(typeof $==="object")return Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||AZ0(X)));return!1}function cd0($){return Array.isArray($)&&$.every(AZ0)}function Sp($){return $!=null&&typeof $==="object"&&Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||AZ0(X)))}var g0$="vercel.ai.error",W14,H0$,N0$,J1,h0$="AI_APICallError",u0$,K14,U0$,B0$,Q4,c0$="AI_EmptyResponseBodyError",l0$,F14,O0$,D0$,TZ0,d0$="AI_InvalidArgumentError",m0$,H14,L0$,w0$,UO,i0$="AI_InvalidPromptError",p0$,N14,E0$,j0$,$J,n0$="AI_InvalidResponseDataError",t0$,U14,z0$,P0$,Hy,o0$="AI_JSONParseError",r0$,B14,A0$,T0$,xH,a0$="AI_LoadAPIKeyError",s0$,O14,R0$,I0$,PE,e0$="AI_LoadSettingError",$1$,D14,q0$,M0$,Z1$,X1$="AI_NoContentGeneratedError",Q1$,L14,k0$,V0$,Y1$,G1$="AI_NoSuchModelError",J1$,w14,S0$,C0$,l5,W1$="AI_TooManyEmbeddingValuesForCallError",K1$,E14,_0$,v0$,Ny,F1$="AI_TypeValidationError",H1$,j14,f0$,b0$,O5,N1$="AI_UnsupportedFunctionalityError",U1$,z14,x0$,y0$,_4;var a1=D(()=>{W14=Symbol.for(g0$),J1=class $ extends(N0$=Error,H0$=W14,N0$){constructor({name:Z,message:X,cause:Q}){super(X);this[H0$]=!0,this.name=Z,this.cause=Q}static isInstance(Z){return $.hasMarker(Z,g0$)}static hasMarker(Z,X){let Q=Symbol.for(X);return Z!=null&&typeof Z==="object"&&Q in Z&&typeof Z[Q]==="boolean"&&Z[Q]===!0}},u0$=`vercel.ai.error.${h0$}`,K14=Symbol.for(u0$),Q4=class extends(B0$=J1,U0$=K14,B0$){constructor({message:$,url:Z,requestBodyValues:X,statusCode:Q,responseHeaders:Y,responseBody:G,cause:J,isRetryable:W=Q!=null&&(Q===408||Q===409||Q===429||Q>=500),data:K}){super({name:h0$,message:$,cause:J});this[U0$]=!0,this.url=Z,this.requestBodyValues=X,this.statusCode=Q,this.responseHeaders=Y,this.responseBody=G,this.isRetryable=W,this.data=K}static isInstance($){return J1.hasMarker($,u0$)}},l0$=`vercel.ai.error.${c0$}`,F14=Symbol.for(l0$),TZ0=class extends(D0$=J1,O0$=F14,D0$){constructor({message:$="Empty response body"}={}){super({name:c0$,message:$});this[O0$]=!0}static isInstance($){return J1.hasMarker($,l0$)}};m0$=`vercel.ai.error.${d0$}`,H14=Symbol.for(m0$),UO=class extends(w0$=J1,L0$=H14,w0$){constructor({message:$,cause:Z,argument:X}){super({name:d0$,message:$,cause:Z});this[L0$]=!0,this.argument=X}static isInstance($){return J1.hasMarker($,m0$)}},p0$=`vercel.ai.error.${i0$}`,N14=Symbol.for(p0$),$J=class extends(j0$=J1,E0$=N14,j0$){constructor({prompt:$,message:Z,cause:X}){super({name:i0$,message:`Invalid prompt: ${Z}`,cause:X});this[E0$]=!0,this.prompt=$}static isInstance($){return J1.hasMarker($,p0$)}},t0$=`vercel.ai.error.${n0$}`,U14=Symbol.for(t0$),Hy=class extends(P0$=J1,z0$=U14,P0$){constructor({data:$,message:Z=`Invalid response data: ${JSON.stringify($)}.`}){super({name:n0$,message:Z});this[z0$]=!0,this.data=$}static isInstance($){return J1.hasMarker($,t0$)}},r0$=`vercel.ai.error.${o0$}`,B14=Symbol.for(r0$),xH=class extends(T0$=J1,A0$=B14,T0$){constructor({text:$,cause:Z}){super({name:o0$,message:`JSON parsing failed: Text: ${$}.
|
|
893
893
|
Error message: ${LK(Z)}`,cause:Z});this[A0$]=!0,this.text=$}static isInstance($){return J1.hasMarker($,r0$)}},s0$=`vercel.ai.error.${a0$}`,O14=Symbol.for(s0$),PE=class extends(I0$=J1,R0$=O14,I0$){constructor({message:$}){super({name:a0$,message:$});this[R0$]=!0}static isInstance($){return J1.hasMarker($,s0$)}},$1$=`vercel.ai.error.${e0$}`,D14=Symbol.for($1$),Z1$=class extends(M0$=J1,q0$=D14,M0$){constructor({message:$}){super({name:e0$,message:$});this[q0$]=!0}static isInstance($){return J1.hasMarker($,$1$)}},Q1$=`vercel.ai.error.${X1$}`,L14=Symbol.for(Q1$),Y1$=class extends(V0$=J1,k0$=L14,V0$){constructor({message:$="No content generated."}={}){super({name:X1$,message:$});this[k0$]=!0}static isInstance($){return J1.hasMarker($,Q1$)}},J1$=`vercel.ai.error.${G1$}`,w14=Symbol.for(J1$),l5=class extends(C0$=J1,S0$=w14,C0$){constructor({errorName:$=G1$,modelId:Z,modelType:X,message:Q=`No such ${X}: ${Z}`}){super({name:$,message:Q});this[S0$]=!0,this.modelId=Z,this.modelType=X}static isInstance($){return J1.hasMarker($,J1$)}},K1$=`vercel.ai.error.${W1$}`,E14=Symbol.for(K1$),Ny=class extends(v0$=J1,_0$=E14,v0$){constructor($){super({name:W1$,message:`Too many values for a single embedding call. The ${$.provider} model "${$.modelId}" can only embed up to ${$.maxEmbeddingsPerCall} values per call, but ${$.values.length} values were provided.`});this[_0$]=!0,this.provider=$.provider,this.modelId=$.modelId,this.maxEmbeddingsPerCall=$.maxEmbeddingsPerCall,this.values=$.values}static isInstance($){return J1.hasMarker($,K1$)}},H1$=`vercel.ai.error.${F1$}`,j14=Symbol.for(H1$),O5=class $ extends(b0$=J1,f0$=j14,b0$){constructor({value:Z,cause:X,context:Q}){let Y="Type validation failed";if(Q==null?void 0:Q.field)Y+=` for ${Q.field}`;if((Q==null?void 0:Q.entityName)||(Q==null?void 0:Q.entityId)){Y+=" (";let G=[];if(Q.entityName)G.push(Q.entityName);if(Q.entityId)G.push(`id: "${Q.entityId}"`);Y+=G.join(", "),Y+=")"}super({name:F1$,message:`${Y}: Value: ${JSON.stringify(Z)}.
|
|
@@ -2738,7 +2738,7 @@ query LastPublishedPr($owner: String!, $repo: String!, $base: String!) {
|
|
|
2738
2738
|
order by i."createdAt" asc
|
|
2739
2739
|
`.execute($),Y=[];for(let G of Q.rows){if(fZ(G))continue;let{invitationId:J,role:W,metadata:K,...F}=G;await Z51(Z,X.id,F.id,W??"user"),await Ta`
|
|
2740
2740
|
update invitation set status = 'accepted' where id = ${J}
|
|
2741
|
-
`.execute($),Y.push(F)}return Y}async function Z51($,Z,X,Q="user"){try{await $.addMember({body:{userId:Z,role:Q,organizationId:X}})}catch(Y){if(!JO(Y))throw Y}}async function ef$($,Z){for(let X=0;X<of$;X++){let Q=X===0?"":`-${Math.random().toString(36).slice(2,6)}`;try{return y66(await $.createOrganization({body:{name:Z.name,slug:`${Z.baseSlug}${Q}`,userId:Z.userId}}))}catch(Y){if(!g66(Y)||X===of$-1)throw Y}}throw Error("Failed to create organization")}var of$=5,S66,C66;var X51=D(()=>{yP0();S66=["labs","agent","studio","workspace","systems","core","cloud","works"],C66=["capybara","guarana","deco","samba","feijoada","capoeira","carnival"]});import{APIError as u66}from"better-auth/api";function $b$($,Z){if(typeof Z!=="string"||Z===$)return;throw new u66("BAD_REQUEST",{message:"Organization slug cannot be changed after creation."})}var Zb$=()=>{};var Kb$={};J4(Kb$,{resetPasswordEnabled:()=>uP0,grantDeploymentAdmin:()=>J51,getTrustedOrigins:()=>cP0,authConfig:()=>n8,auth:()=>s$,GENERIC_EMAIL_DOMAINS:()=>C3});import{randomBytes as c66}from"crypto";import{sso as l66}from"@better-auth/sso";import{organization as d66}from"@decocms/better-auth/plugins";import{betterAuth as m66}from"better-auth";import{admin as i66,apiKey as p66,jwt as n66,magicLink as t66,mcp as o66,openAPI as r66}from"better-auth/plugins";import{emailOTP as a66}from"better-auth/plugins/email-otp";import{APIError as Yb$}from"better-auth/api";import{adminAc as s66,defaultRoles as e66}from"better-auth/plugins/admin/access";import{defaultStatements as $56}from"@decocms/better-auth/plugins/organization/access";import{createAccessControl as Z56}from"@decocms/better-auth/plugins/access";function Xb$($){if(!UZ0($))return;throw new Yb$("BAD_REQUEST",{message:`Organization slug "${String($).trim()}" is reserved by Studio`})}function J51($){if(!Q51.includes($))Q51.push($)}function cP0(){let $=[Ra];try{let Z=new URL(Ra);if(Z.hostname==="localhost")$.push(Ra.replace("localhost","127.0.0.1"));else if(Z.hostname==="127.0.0.1")$.push(Ra.replace("127.0.0.1","localhost"))}catch{}return $}var Gb$,X56,hP0,G51,Q56,Y56,G56,Qb$,Q51,n8,Jb$=void 0,Y51=void 0,uP0=!1,J56,W56,K56,Ra,Wb$,F56=262144,H56,s$;var uY=D(()=>{R$();vx();h50();S4();Z9();iG();dn1();ix();in1();bf$();hf$();uf$();VQ();a61();if$();yP0();X51();$d0();Zb$();Gb$=Object.values(nw()).map(($)=>$.map((Z)=>Z.name)).flat(),X56={...$56,self:["*",...Gb$]},hP0=Z56(X56),G51=r61(Gb$),Q56=hP0.newRole(G51.user),Y56=hP0.newRole(G51.admin),G56=hP0.newRole(G51.owner),Qb$=Object.values(nw()).map(($)=>$.map((Z)=>`self:${Z.name}`)).flat(),Q51=[];n8=TH().auth;if(n8.inviteEmailProviderId&&n8.emailProviders&&n8.emailProviders.length>0){let $=T3(n8.emailProviders,n8.inviteEmailProviderId);if($){let Z=A3($);Jb$=async(X)=>{let Q=X.inviter.user?.name||X.inviter.user?.email,Y=`${$9()}/auth/accept-invitation?invitationId=${X.invitation.id}&redirectTo=/${X.organization.slug}`;await Z({to:X.email,subject:`You've been invited to join ${X.organization.name}`,html:R3({preheader:`${Q} has invited you to join ${X.organization.name} on deco Studio.`,heading:"You've been invited",subheading:`<strong>${Q}</strong> has invited you to join <strong>${X.organization.name}</strong> on deco Studio.`,body:XE("Accept invitation",Y),footnote:"If you weren\u2019t expecting an invitation, you can safely ignore this email."})})}}}if(n8.resetPasswordEmailProviderId&&n8.emailProviders&&n8.emailProviders.length>0){let $=T3(n8.emailProviders,n8.resetPasswordEmailProviderId);if($){let Z=A3($);uP0=!0,Y51=async({user:X,url:Q})=>{await Z({to:X.email,subject:"Reset your password",html:R3({preheader:"We received a request to reset the password on your deco Studio account.",heading:"Reset your password",subheading:"We received a password reset request for your account. Click the button below to choose a new password.",body:XE("Reset password",Q)+G90("This link expires in 24\xA0hours. If you didn\u2019t request a password reset, no action is needed.",!0),footnote:"If you didn\u2019t request a password reset, you can safely ignore this email."})})}}}J56=[d66({organizationCreation:{afterCreate:async($)=>{await ff$($.organization.id,$.member.userId)}},organizationHooks:{beforeCreateOrganization:async({organization:$})=>{Xb$($.slug)},beforeUpdateOrganization:async({organization:$,member:Z})=>{if(Xb$($.slug),typeof $.slug==="string"){let Y=await r8().db.selectFrom("organization").select("slug").where("id","=",Z.organizationId).executeTakeFirst();if(Y)$b$(Y.slug,$.slug)}let X=$.logo;if(typeof X!=="string"||!X.startsWith("data:"))return;let Q=await gf$(Z.organizationId,X);if(Q===X)return;return{data:{...$,logo:Q}}}},ac:hP0,creatorRole:"owner",allowUserToCreateOrganization:!0,dynamicAccessControl:{enabled:!0,maximumRolesPerOrganization:500,enableCustomResources:!0,allowedRolesToCreateResources:Bi,resourceNameValidation:($)=>{return{valid:/^[a-zA-Z0-9-_]+$/.test($)}}},roles:{user:Q56,admin:Y56,owner:G56},sendInvitationEmail:Jb$}),o66({loginPage:"/login",oidcConfig:{scopes:Qb$,metadata:{scopes_supported:Qb$},loginPage:"/login"}}),p66({enableMetadata:!0,maximumNameLength:64,keyExpiration:{minExpiresIn:0.003472222222222222},enableSessionForAPIKeys:!0,customAPIKeyGetter:($)=>{if($.headers?.get("X-MCP-Session-Auth")==="true")return null;let X=$.headers?.get("Authorization");if(X?.startsWith("Bearer "))return X.replace("Bearer ","").trim();return null},rateLimit:{enabled:!1}}),i66({defaultRole:"user",adminRoles:["admin","owner"],roles:{...e66,owner:s66},adminUserIds:Q51}),r66(),n66({jwt:{expirationTime:"5m",definePayload:({user:$})=>({id:$.id,email:$.email,name:$.name,role:$.role})}}),l66(n8.ssoConfig?mf$(n8.ssoConfig):void 0),...n8.magicLinkConfig?.enabled&&n8.emailProviders&&n8.emailProviders.length>0?[t66(mn1(n8.magicLinkConfig,n8.emailProviders))]:[],...n8.emailOtpConfig?.enabled&&n8.emailProviders&&n8.emailProviders.length>0?[a66(ln1(n8.emailOtpConfig,n8.emailProviders))]:[]],W56=vi(),K56=hn1(W56),Ra=$9();Wb$=b0(),H56=Wb$.betterAuthSecret||(()=>{return console.warn("BETTER_AUTH_SECRET not set - generating a random secret (not persistent across restarts)"),c66(32).toString("base64")})(),s$=m66({secret:H56,logger:{log:($,Z,...X)=>{if($==="error"&&Z.includes("validate API key"))return;if($==="error"&&X.some((Y)=>{let G=Y?.statusCode;return typeof G==="number"&&G>=300&&G<400}))return;let Q=`${new Date().toISOString()} ${$.toUpperCase()} [Better Auth]: ${Z}`;if($==="error")console.error(Q,...X);else if($==="warn")console.warn(Q,...X);else console.log(Q,...X)}},baseURL:Ra,trustedOrigins:cP0(),database:K56,socialProviders:n8.socialProviders,...n8.ssoConfig&&{account:{accountLinking:{trustedProviders:[n8.ssoConfig.providerId]}}},emailAndPassword:{enabled:n8.emailAndPassword.enabled,...Y51&&{sendResetPassword:Y51}},rateLimit:{enabled:!Wb$.disableRateLimit,window:60,max:1e4},plugins:J56,databaseHooks:{user:{create:{before:async($)=>{let Z=$.name;if(typeof Z==="string"&&Z.trim().length>0)return;let X=nf$($.email);if(!X)return;return{data:{...$,name:X}}},after:async($,Z)=>{t61({id:$.id,email:$.email,name:$.name??null,emailVerified:!!$.emailVerified});let X=Z?.getCookie("studio_signup_ref")??null,Q=Z?.getCookie("studio_signup_src")??null;x1.capture({distinctId:$.id,event:"user_signed_up",properties:{email:$.email,email_domain:$.email?.split("@")[1]?.toLowerCase()??null,email_verified:!!$.emailVerified,has_name:!!$.name,...X?{signup_ref:X}:{},...Q?{signup_src:Q}:{}}});let Y=TH().autoCreateOrganizationOnSignup!==!1;try{let G=await gP0({db:r8().db,authApi:s$.api,user:{id:$.id,email:$.email,name:$.name??null,emailVerified:!!$.emailVerified},allowCreate:Y,createdVia:"signup"});if(G.status==="created")x1.groupIdentify({groupType:"organization",groupKey:G.organization.id,properties:{name:G.organization.name,slug:G.organization.slug,created_at:new Date().toISOString(),created_via:G.createdVia,email_domain:G.domain}}),x1.capture({distinctId:$.id,event:"organization_created",groups:{organization:G.organization.id},properties:{organization_id:G.organization.id,organization_slug:G.organization.slug,name:G.organization.name,created_via:G.createdVia,email_domain:G.domain}});if(G.status==="joined_via_invitation")for(let J of G.organizations)x1.capture({distinctId:$.id,event:"organization_invitation_auto_accepted",groups:{organization:J.id},properties:{organization_id:J.id,organization_slug:J.slug,email_domain:G.domain,joined_via:G.createdVia,invitation_count:G.organizations.length}});if(G.status==="joined")x1.capture({distinctId:$.id,event:"organization_domain_joined",groups:{organization:G.organization.id},properties:{organization_id:G.organization.id,organization_slug:G.organization.slug,email_domain:G.domain,joined_via:G.createdVia}})}catch(G){x1.captureException(G,$.id),console.error("Failed to ensure organization on signup:",G)}}},update:{before:async($)=>{let Z=$.image;if(typeof Z==="string"&&Z.startsWith("data:")&&Z.length>F56)throw new Yb$("PAYLOAD_TOO_LARGE",{message:"Avatar image is too large. Upload an image smaller than 5MB."})}}},session:{create:{after:async($)=>{let Z=await r8().db.selectFrom("user").select(["id","email","name","emailVerified"]).where("id","=",$.userId).executeTakeFirst();if(!Z)return;t61({id:Z.id,email:Z.email,name:Z.name??null,emailVerified:!!Z.emailVerified})}}}}})});function K51($){return $?`/api/${$}`:""}function Fb$($){let X=new URL($).pathname;if(X.endsWith("/"))X=X.slice(0,-1);let Q=(Y)=>{let G=new URL($);return G.pathname=Y,G.toString()};return[Q(`${X}/.well-known/oauth-protected-resource`),Q(`/.well-known/oauth-protected-resource${X}`),Q("/.well-known/oauth-protected-resource")]}function Hb$($){let X=new URL($).pathname;if(X.endsWith("/"))X=X.slice(0,-1);let Q=X!==""&&X!=="/",Y=(G)=>{let J=new URL($);return J.pathname=G,J.toString()};if(Q)return[Y(`/.well-known/oauth-authorization-server${X}`),Y(`/.well-known/openid-configuration${X}`),Y(`${X}/.well-known/openid-configuration`)];return[Y("/.well-known/oauth-authorization-server"),Y("/.well-known/openid-configuration")]}function Nb$($){return"issuer"in $&&!("resource"in $)&&(("authorization_endpoint"in $)||("token_endpoint"in $))}function Ub$($){let Z=$.toLowerCase();return Z.includes("resource_metadata=")||Z.includes("invalid_token")||Z.includes("oauth")}function Bb$($){let Z=$.message?.toLowerCase()??"";return $.status===401||$.code===401||($.message?.includes("401")??!1)||Z.includes("unauthorized")||Z.includes("invalid_token")||Z.includes("api key required")||Z.includes("api-key required")}function Ob$($,{proxyResourceUrl:Z,proxyAuthServer:X}){return{...$,resource:Z,authorization_servers:[X]}}function F51({proxyResourceUrl:$,proxyAuthServer:Z,scopesSupported:X=["*"]}){return{resource:$,authorization_servers:[Z],bearer_methods_supported:["header"],scopes_supported:X}}function Db$($){return"scopes_supported"in $&&Array.isArray($.scopes_supported)&&$.scopes_supported.length>0?$.scopes_supported:["*"]}function Lb$($,Z){return{...$,authorization_endpoint:$.authorization_endpoint?`${Z}/authorize`:void 0,token_endpoint:$.token_endpoint?`${Z}/token`:void 0,registration_endpoint:$.registration_endpoint?`${Z}/register`:void 0}}function wb$({origin:$,prefix:Z,connectionId:X}){return`Bearer realm="mcp",resource_metadata="${$}${Z}/mcp/${X}/.well-known/oauth-protected-resource"`}var W51;var Eb$=D(()=>{W51=[404,401,406]});import{oAuthProtectedResourceMetadata as N56}from"better-auth/plugins";async function U56($,Z,X){return(await Z.storage.connections.findById($,X))?.connection_url??null}async function Pb$($,Z={}){try{let X=await N51($,{method:"POST",headers:{...Z,"Content-Type":"application/json",Accept:"application/json, text/event-stream"},body:JSON.stringify({jsonrpc:"2.0",id:0,method:"initialize",params:{protocolVersion:"2025-06-18",capabilities:{},clientInfo:{name:"mcp-cms-proxy",version:"1.0.0"}}})});if(X.status===401){let Q=X.headers.get("WWW-Authenticate");if(Q){if(Ub$(Q))return Q}if(await B56($))return'Bearer realm="mcp"'}return null}catch{return null}}async function B56($){try{let Z=new URL($),X=new URL("/.well-known/oauth-authorization-server",Z.origin),Q=await N51(X.toString(),{method:"GET",headers:{Accept:"application/json"}});if(Q.ok){let Y=await Q.json();if(Y.authorization_endpoint||Y.token_endpoint||Y.issuer)return!0}return!1}catch{return!1}}async function Nu($){let Z=Fb$($),X;for(let Q=0;Q<Z.length;Q++){if(X=await Mb$(Z[Q],{method:"GET",headers:{Accept:"application/json"}}),X.ok)return X;if(Q<Z.length-1&&!W51.includes(X.status))return X}return X}async function O56($){let Z;try{Z=new URL($).origin}catch{return null}try{let X=await Nu($);if(X.ok){let Q=await X.json();if(Q.authorization_servers?.[0])return Q.authorization_servers[0]}}catch{}return Z}async function Ab$($){let Z=$.get("studioContext");if(!Z)Z=await UJ.create($.req.raw),$.set("studioContext",Z);return Z}async function Ds0({error:$,reqUrl:Z,connectionId:X,connectionUrl:Q,headers:Y,orgSlug:G}){if(!Bb$($))return null;if(Boolean(await Pb$(Q,Y)))return new Response(null,{status:401,headers:{"WWW-Authenticate":wb$({origin:Z.origin,prefix:K51(G),connectionId:X})}});return new Response(JSON.stringify({error:"unauthorized",message:"Authentication required but server does not support OAuth"}),{status:401,headers:{"Content-Type":"application/json"}})}function jb$($){let Q=$.pathname;if(Q.endsWith("/.well-known/oauth-protected-resource"))Q=Q.slice(0,-37)||"/";else if(Q.startsWith("/.well-known/oauth-protected-resource"))Q=Q.slice(37)||"/";return`${$.origin}${Q}`}async function zb$($,Z){let X=await N56(s$)($),Q=await X.json();if(Z)Q.resource=Z;return Response.json(Q,X)}function N51($,Z,X=qb$){return GB()($,{...Z,signal:AbortSignal.timeout(X)})}class H51{response;constructor($){this.response=$}}async function Mb$($,Z,{attempts:X=3,timeoutMs:Q=qb$}={}){try{return await g6(async()=>{let Y=await N51($,Z,Q);if(Y.status>=500)throw new H51(Y);return Y},{maxAttempts:X,minTimeout:150,multiplier:2,jitter:0})}catch(Y){if(Y instanceof LY){if(Y.cause instanceof H51)return Y.cause.response;throw Y.cause}throw Y}}function kb$($){if(!YB($))return null;return new Response(JSON.stringify({error:"URLs targeting private networks are not allowed"}),{status:502,headers:{"Content-Type":"application/json"}})}async function qa($){if(YB($))return new Response(JSON.stringify({error:"URLs targeting private networks are not allowed"}),{status:502,headers:{"Content-Type":"application/json"}});let Z=Hb$($),X=null;for(let Q of Z){if(X=await Mb$(Q,{method:"GET",headers:{Accept:"application/json"}}),X.ok)return X;if(X.status!==404&&X.status!==401)return X}return X}var Tb$=($)=>{if(!($.hostname==="localhost"||$.hostname.endsWith(".localhost")||$.hostname==="127.0.0.1"))$.protocol="https:";return $},Ia=async($)=>{let Z=$.req.param("connectionId"),X=await Ab$($),Q=Tb$(new URL($.req.url)),Y=$.req.param("org")??X.organization?.slug,G;if(Y)if(X.organization?.id&&X.organization.slug===Y)G=X.organization.id;else{let H=await X.db.selectFrom("organization").select("id").where("slug","=",Y).executeTakeFirst();if(!H)return $.json({error:"Connection not found"},404);G=H.id}if(G&&X.auth?.tokenOrganizationId&&X.auth.tokenOrganizationId!==G)return $.json({error:"forbidden: token is scoped to another organization"},403);if(Z==="self")return zb$($.req.raw,jb$(Q));let J=await U56(Z,X,G);if(!J)return $.json({error:"Connection not found"},404);if(J.startsWith("virtual://"))return zb$($.req.raw,jb$(Q));let W=K51(Y),K=`${Q.origin}${W}/mcp/${Z}`,F=`${Q.origin}/oauth-proxy/${Z}`;try{let H=await Nu(J);if(!H.ok&&W51.includes(H.status)){if(await Pb$(J)){let O=F51({proxyResourceUrl:K,proxyAuthServer:F});return new Response(JSON.stringify(O),{status:200,headers:{"Content-Type":"application/json"}})}return new Response(H.body,{status:H.status,statusText:H.statusText,headers:{"Content-Type":"application/json"}})}if(!H.ok)return new Response(H.body,{status:H.status,statusText:H.statusText,headers:{"Content-Type":"application/json"}});let N=await H.json();if(Nb$(N)){let B=F51({proxyResourceUrl:K,proxyAuthServer:F,scopesSupported:Db$(N)});return new Response(JSON.stringify(B),{status:200,headers:{"Content-Type":"application/json"}})}let U=Ob$(N,{proxyResourceUrl:K,proxyAuthServer:F});return new Response(JSON.stringify(U),{status:H.status,statusText:H.statusText,headers:{"Content-Type":"application/json"}})}catch(H){let N=H;return console.error("[oauth-proxy] Failed to proxy OAuth protected resource metadata:",N),$.json({error:"Failed to proxy OAuth metadata",message:N.message},502)}},Rb$=()=>{let $=new H1;return $.get("/.well-known/oauth-protected-resource/mcp/:connectionId",(Z)=>Ia(Z)),$.get("/mcp/:connectionId/.well-known/oauth-protected-resource",(Z)=>Ia(Z)),$},Ib$=()=>{let $=new H1;return $.get("/mcp/:connectionId/.well-known/oauth-protected-resource",(Z)=>Ia(Z)),$},qb$=4000,D56=async($)=>{let Z=$.req.param("connectionId"),X=await Ab$($),Q=await X.storage.connections.findById(Z);if(!Q?.connection_url)return $.json({error:"Connection not found or no auth server"},404);let Y=await O56(Q.connection_url);if(!Y)return $.json({error:"Connection not found or no auth server"},404);let G=await X.db.selectFrom("organization").select("slug").where("id","=",Q.organization_id).executeTakeFirst();try{let J=await qa(Y);if(!J.ok)return new Response(J.body,{status:J.status,statusText:J.statusText,headers:{"Content-Type":"application/json"}});let W=await J.json(),K=Tb$(new URL($.req.url)),F=G?.slug?`${K.origin}/api/${G.slug}/oauth-proxy/${Z}`:`${K.origin}/oauth-proxy/${Z}`,H=Lb$(W,F);return new Response(JSON.stringify(H),{status:200,headers:{"Content-Type":"application/json"}})}catch(J){let W=J;return console.error("[oauth-proxy] Failed to proxy auth server metadata:",W),$.json({error:"Failed to proxy auth server metadata",message:W.message},502)}},Vb$=()=>{let $=new H1;return $.get("/.well-known/oauth-authorization-server/oauth-proxy/:connectionId",D56),$};var ct=D(()=>{U8();rO();uY();W4();zw();Eb$()});async function Uu($){try{let Z;try{let Q=await Nu($);if(Q.ok)Z=(await Q.json()).authorization_servers?.[0]}catch{}if(!Z)Z=new URL($).origin;let X=await qa(Z);if(X.ok){let Q=await X.json();if(typeof Q.token_endpoint==="string")try{let Y=new URL(Q.token_endpoint);if((Y.protocol==="http:"||Y.protocol==="https:")&&!YB(Q.token_endpoint))return Q.token_endpoint}catch{}}return null}catch{return null}}var lP0=D(()=>{ct();zw()});function Ku($){return!!$.refreshToken&&!!$.tokenEndpoint&&!!$.clientId}function L56($,Z){if($.includes("/oauth-proxy/"))return!0;try{return new URL($).host!==new URL(Z).host}catch{return!1}}async function j56($,Z){let X=await gm1($);if(!X.success||!X.accessToken){if(X.permanent===!0)await Z.delete($.connectionId).catch((Q)=>{console.warn("[TokenRefresh] failed to delete dead token row",{connectionId:$.connectionId,message:Q instanceof Error?Q.message:String(Q)})});return{accessToken:null,permanent:X.permanent===!0}}try{await Z.upsert({connectionId:$.connectionId,accessToken:X.accessToken,refreshToken:X.refreshToken??$.refreshToken,scope:X.scope??$.scope,expiresAt:X.expiresIn===void 0?null:new Date(Date.now()+X.expiresIn*1000),clientId:$.clientId,clientSecret:$.clientSecret,tokenEndpoint:$.tokenEndpoint})}catch(Q){return console.warn("[TokenRefresh] failed to persist refreshed token",{connectionId:$.connectionId,message:Q instanceof Error?Q.message:String(Q)}),{accessToken:X.accessToken,permanent:!1}}return{accessToken:X.accessToken,permanent:!1}}function vP0($,Z){let X=U51.get($.connectionId);if(X)return X;let Q=dP0.get($.connectionId);if(Q&&Date.now()<Q.nextAttemptAt)return Promise.resolve(null);let Y=j56($,Z).then(({accessToken:G,permanent:J})=>{if(G||J)dP0.delete($.connectionId);else{let W=dP0.get($.connectionId)?.attempt??0,K=sZ(E56,w56,W,2,0.5);dP0.set($.connectionId,{attempt:W+1,nextAttemptAt:Date.now()+K})}return G}).finally(()=>{U51.delete($.connectionId)});return U51.set($.connectionId,Y),Y}async function pY($){let{connectionId:Z,connectionUrl:X,tokenStorage:Q,force:Y}=$,G=await Q.get(Z);if(!G)return{state:"missing",accessToken:null};let J=Ku(G),W=J?$.bufferMs??Gn:0,K=Q.isExpired(G,W);if(!Y&&!K)return{state:"valid",accessToken:G.accessToken};if(!J){if(K)await Q.delete(Z);return{state:"expired_without_refresh",accessToken:null}}let F=G.tokenEndpoint;if(X&&F&&L56(F,X)){let N=await Uu(X);if(N)F=N}let H=await vP0({...G,tokenEndpoint:F},Q);if(!H)return{state:"refresh_failed",accessToken:null};return{state:"refreshed",accessToken:H}}var Gn=300000,E5$=3300000,J9="GitHub token refresh failed \u2014 reconnect the mcp-github integration.",U51,w56=30000,E56=300000,dP0;var YJ=D(()=>{W4();hm1();lP0();U51=new Map,dP0=new Map});import{SpanStatusCode as Sb$}from"@opentelemetry/api";function B51($){if(Array.isArray($))return $.map(B51);if($&&typeof $==="object"){let{__binding:Z,...X}=$,Q={};for(let[Y,G]of Object.entries(X))Q[Y]=B51(G);return Q}return $}async function O51($,Z,X){return Z.tracer.startActiveSpan("studio.connection.build_headers",{attributes:{"connection.id":$.id}},async(Q)=>{try{let Y=await z56($,Z,X);return Q.setStatus({code:Sb$.OK}),Y}catch(Y){throw Q.setStatus({code:Sb$.ERROR,message:Y.message}),Q.recordException(Y),Y}finally{Q.end()}})}async function z56($,Z,X){let Q=$.id,Y=Uu0($.configuration_state,$.configuration_scopes),G=Z.auth.user,J=G?.id??Z.auth.apiKey?.userId??(X?$.created_by:void 0),[W,K]=J?await nC1({sub:J,user:{id:J,email:G?.email,name:G?.name,role:G?.role},metadata:{state:$.configuration_state?B51($.configuration_state):void 0,studioUrl:Z.baseUrl,meshUrl:Z.baseUrl,connectionId:Q,organizationId:Z.organization?.id,organizationName:Z.organization?.name,organizationSlug:Z.organization?.slug},permissions:Y}).then((O)=>[O,null]).catch((O)=>[null,O]):[null,Error("User ID required to issue configuration token")];if(K)console.error("Failed to issue configuration token:",K);let F=Z.auth.user?.connectionId,H={...F?{"x-caller-id":F}:{},...Z.metadata.wellKnownForwardableHeaders??{},"x-request-id":Z.metadata.requestId};if(Z.metadata.runMetadata&&Object.keys(Z.metadata.runMetadata).length>0)Fu0(H,"runMetadata",JSON.stringify(Z.metadata.runMetadata));let N=null;if(!!k5($)?.sourceConnectionId)try{N=await Yn(Z,$)}catch(O){console.error("[Proxy] repo-scoped legacy token mint failed",{connectionId:Q,error:O.message})}else{let O=new m6(Z.db,Z.vault),L=await pY({connectionId:Q,connectionUrl:$.connection_url,tokenStorage:O});if(L.accessToken)N=L.accessToken;else if(L.state==="expired_without_refresh")console.warn(`[Proxy] Token expired for ${Q} with no refresh capability`)}if(!N&&$.connection_token)N=$.connection_token;if(N)H.Authorization=`Bearer ${N}`;if(W)Fu0(H,"token",W);return H}var Cb$=D(()=>{Bu0();gU();YJ();rG();Iy();_Q();Hu0()});function mP0(){let $=new Map;function Z(Q,Y){let G=$.get(Y);if(G)return G;let J=(async()=>{let W=await Q(),K=new y9({name:`outbound-client-${Y}`,version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}},jsonSchemaValidator:N5});return K.onclose=()=>{$.delete(Y)},await K.connect(W),K})().catch((W)=>{throw $.delete(Y),W});return $.set(Y,J),J}return Object.assign(Z,{[Symbol.asyncDispose]:async()=>{let Q=[];for(let[Y,G]of $)Q.push(G.then((J)=>J.close()).catch(()=>{}));await Promise.all(Q),$.clear()}})}var D51=D(()=>{mW();hX()});function _b$($){let Z=new ci({command:$.command,args:$.args,env:$.env,cwd:$.cwd,stderr:"pipe"}),X=$.name||$.id,Q="\x1B[2m",Y="\x1B[0m";return Z.stderr?.on("data",(G)=>{let J=G.toString().trimEnd();if(J)console.error(`${J} \x1B[2m[${X}]\x1B[0m`)}),Z}var vb$=D(()=>{lc0()});var Bu;var fb$=D(()=>{CQ();ow();hX();Bu=class Bu extends Nb{options;constructor($,Z){super($);this.options=Z}toolsListPromise=null;fetchToolsFromServer(){if(!this.toolsListPromise)this.toolsListPromise=new Promise(($)=>{let Z=`auth-tools-${Date.now()}`,X=this.innerTransport.onmessage,Q=(G)=>{clearTimeout(Y),this.innerTransport.onmessage=X,this.toolsListPromise=null,$(G)},Y=setTimeout(()=>Q(null),Q60);this.innerTransport.onmessage=(G)=>{if("id"in G&&G.id===Z)if("result"in G){let J=G.result?.tools??null;Q(J)}else Q(null);else X?.(G)},this.innerTransport.send({jsonrpc:"2.0",id:Z,method:"tools/list",params:{}}).catch(()=>Q(null))});return this.toolsListPromise}async ensureToolsMap(){let $=this.options.cache??Y9(),Z=await rB("tools",this.options.connection.id,async()=>{let X=await this.fetchToolsFromServer();if(X===null)throw Error("Failed to fetch tools list");return X},$,(X)=>this.options.ctx.pendingRevalidations.push(X),oB);if(!Z)return new Map;return new Map(Z.map((X)=>[X.name,X]))}async handleOutgoingMessage($){if(!this.isRequest($))return this.innerTransport.send($);let Z=$;if(Z.method==="tools/call")await this.authorizeToolCall(Z),this.stripMetaFromArguments(Z);return this.innerTransport.send($)}async authorizeToolCall($){if(this.options.superUser)return;let X=$.params.name,{ctx:Q,connection:Y}=this.options;if(await this.isPublicTool(X))return;if(!Q.auth.user?.id&&!Q.auth.apiKey?.id)throw Error("Authentication required. Please provide a valid OAuth token or API key.");let G=async()=>{return(await this.ensureToolsMap()).get(X)?._meta};await new tw(Q.auth.user?.id??Q.auth.apiKey?.userId,X,Q.boundAuth,Q.organization?.role??Q.auth.user?.role,Y.id,G,Q.organization?.id).check(X)}async isPublicTool($){if($.startsWith("STUDIO_PUBLIC_")||$.startsWith("MESH_PUBLIC_"))return!0;let X=(await this.ensureToolsMap()).get($);if(!X?._meta)return!1;return $K(X._meta)?.public_tool===!0}stripMetaFromArguments($){let Z=$.params;if(Z.arguments&&"_meta"in Z.arguments){let{_meta:X,...Q}=Z.arguments;Z.arguments=Q}}}});function L51($){let{ctx:Z,organizationId:X,connectionId:Q,toolName:Y,durationMs:G,isError:J}=$;if(!X||!Q||!Y)return;let W={"tool.name":Y,"organization.id":X,"connection.id":Q,status:J?"error":"success","error.type":J?$.errorType||"Error":""};Z.meter.createHistogram("tool.execution.duration",{description:"Duration of tool executions in milliseconds",unit:"ms"}).record(G,W),Z.meter.createCounter("tool.execution.count",{description:"Number of tool executions"}).add(1,W)}import{trace as ZNZ,context as XNZ}from"@opentelemetry/api";function bb$($){if(!$.isError)return;let Z=$.content;if(!Array.isArray(Z))return;for(let X of Z)if(X&&typeof X==="object"&&"type"in X&&X.type==="text"&&"text"in X&&typeof X.text==="string")return X.text;return}function xb$($){if(!$)return;let Z=$._meta;if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let X=Z.properties;if(!X||typeof X!=="object"||Array.isArray(X))return;let Q={};for(let[Y,G]of Object.entries(X))if(typeof G==="string")Q[Y]=G;return Object.keys(Q).length>0?Q:void 0}function yb$($,Z){if(!$&&!Z)return;if(!$)return Z;if(!Z)return $;return{...Z,...$}}var gb$=D(()=>{fL0();wY()});import{trace as P56,context as hb$}from"@opentelemetry/api";var Ou;var ub$=D(()=>{hX();fL0();gb$();Ou=class Ou extends Nb{options;inflightRequests=new Map;requestContext;constructor($,Z){super($);this.options=Z;this.requestContext=hb$.active()}async handleOutgoingMessage($){if(this.isRequest($)){let Z=$;this.onRequestStart(Z)}return this.innerTransport.send($)}handleIncomingMessage($){if(this.isResponse($)){let Z=$;this.onResponseEnd(Z)}this.onmessage?.($)}onRequestStart($){let{ctx:Z,connectionId:X}=this.options,Q,Y;if($.method==="tools/call"&&$.params){let J=$.params;Q=J.name,Y=J.arguments}let G;if($.method==="tools/call"&&Q)G=Z.tracer.startSpan("mcp.proxy.callTool",{attributes:{"connection.id":X,"tool.name":Q,"request.id":Z.metadata.requestId,"jsonrpc.id":$.id,"jsonrpc.method":$.method}},this.requestContext);if($.id!==null&&$.id!==void 0)this.inflightRequests.set($.id,{startTime:Date.now(),method:$.method,toolName:Q,toolArguments:Y,span:G})}onResponseEnd($){if($.id===null||$.id===void 0)return;let Z=this.inflightRequests.get($.id);if(!Z)return;let{ctx:X,connectionId:Q}=this.options,{startTime:Y,method:G,toolName:J,toolArguments:W,span:K}=Z,F=Date.now()-Y;if(this.inflightRequests.delete($.id),G!=="tools/call"||!J)return;let H=X.organization?.id??"",N="error"in $,U=N?$.error:$.result,B=N?{content:[{type:"text",text:$.error?.message||"Unknown error"}],isError:!0}:U,O=N||B?.isError===!0,L=N?$.error?.message:void 0,w=bb$(B)||null;if(X.meter.createHistogram("connection.proxy.duration").record(F,{"connection.id":Q,"organization.id":H,"tool.name":J,status:O?"error":"success"}),O)X.meter.createCounter("connection.proxy.errors").add(1,{"connection.id":Q,"organization.id":H,"tool.name":J,error:L??w??void 0});else X.meter.createCounter("connection.proxy.requests").add(1,{"connection.id":Q,"organization.id":H,"tool.name":J,status:"success"});if(H)L51({ctx:X,organizationId:H,connectionId:Q,toolName:J,durationMs:F,isError:O,errorType:N?"RemoteError":O?"ToolError":""});if(K){if(O)K.recordException(Error(L??w??"Tool error"));let E=xb$(W),j=yb$(X.metadata.properties,E),z=P56.setSpan(hb$.active(),K);qt({organizationId:X.organization?.id??"",connectionId:Q,toolName:J,toolArguments:W,result:B,duration:F,isError:O,errorMessage:w,userId:X.auth.user?.id||X.auth.apiKey?.userId||null,requestId:X.metadata.requestId,userAgent:X.metadata.userAgent||null,virtualMcpId:this.options.virtualMcpId||null,properties:j||null},z),K.end()}}async close(){for(let $ of this.inflightRequests.values())if($.span)$.span.setAttributes({"transport.closed":!0}),$.span.end();return this.inflightRequests.clear(),super.close()}}});var cb$=D(()=>{hX();fb$();ub$()});async function lb$($,Z,X=!1){let Q=$.id,Y=Z.connectionId&&Z.connectionId!==Q?Z.connectionId:void 0;switch($.connection_type){case"STDIO":{if(!b0().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let G=$.connection_headers;if(!yW(G))throw Error("STDIO connection missing parameters");let J=_b$({id:Q,name:$.title,command:G.command,args:G.args,env:G.envVars,cwd:G.cwd});return J=Ub(J,(W)=>new Bu(W,{ctx:Z,connection:$,superUser:X}),(W)=>new Ou(W,{ctx:Z,connectionId:Q,virtualMcpId:Y})),A56(()=>J,Q)}case"HTTP":case"Websocket":{if(!$.connection_url)throw Error(`${$.connection_type} connection missing URL`);let G=$.connection_url;return Z.getOrCreateClient(async()=>{let J=await O51($,Z,X),W=$.connection_headers;if(W&&"headers"in W)Object.assign(J,W.headers);let K=new pW(new URL(G),{requestInit:{headers:J}});return K=Ub(K,(F)=>new Bu(F,{ctx:Z,connection:$,superUser:X}),(F)=>new Ou(F,{ctx:Z,connectionId:Q,virtualMcpId:Y})),K},Q)}case"SSE":{if(!$.connection_url)throw Error("SSE connection missing URL");let G=$.connection_url;return Z.getOrCreateClient(async()=>{let J=await O51($,Z,X),W=$.connection_headers;if(W&&"headers"in W)Object.assign(J,W.headers);let K=new wH(new URL(G),{requestInit:{headers:J}});return K=Ub(K,(F)=>new Bu(F,{ctx:Z,connection:$,superUser:X}),(F)=>new Ou(F,{ctx:Z,connectionId:Q,virtualMcpId:Y})),K},Q)}default:throw Error(`Unknown connection type: ${$.connection_type}`)}}var A56;var db$=D(()=>{R$();hW();pd();jb();Cb$();D51();vb$();cb$();A56=mP0()});var j5$={};J4(j5$,{clientFromConnection:()=>U5});async function U5($,Z,X=!1){if($.connection_type==="VIRTUAL")return J3$($,Z,X);return lb$($,Z,X)}var ai=D(()=>{db$();ay()});function w51($){if($===null)return"null";if(Array.isArray($))return"array";return typeof $}function T56($,Z){if(Z==="integer")return typeof $==="number"&&Number.isInteger($);return w51($)===Z}function R56($,Z){if(Z==="object"||Z==="array"){let X;try{X=JSON.parse($)}catch{return}return w51(X)===Z?X:void 0}if(Z==="boolean"){if($==="true")return!0;if($==="false")return!1;return}if(Z==="number"||Z==="integer"){if($.trim()==="")return;let X=Number($);if(!Number.isFinite(X))return;if(Z==="integer"&&!Number.isInteger(X))return;return X}return}function mb$($,Z){if(!$?.properties||!Z)return null;let X=!1,Q={...Z};for(let[Y,G]of Object.entries(Z)){if(typeof G!=="string")continue;let J=$.properties[Y]?.type;if(!J||J==="string")continue;let W=R56(G,J);if(W===void 0)continue;Q[Y]=W,X=!0}return X?Q:null}function E51($,Z,X){let Q=Object.keys(X??{}),Y=Z?.required??[],G=Y.filter((F)=>!Q.includes(F)),J=(F)=>{let H=Z?.properties?.[F]?.type;return H?`${F} (${H})`:F},W=Q.filter((F)=>{let H=Z?.properties?.[F]?.type;return H!=null&&!T56(X?.[F],H)}).map((F)=>`${F} (expected ${Z?.properties?.[F]?.type}, got ${w51(X?.[F])})`);return[`Invalid arguments for "${$}".`,Y.length?`Required: ${Y.map(J).join(", ")}.`:"",`You sent: ${Q.length?Q.join(", "):"(none)"}.`,G.length?`Missing required: ${G.join(", ")}.`:"",W.length?`Wrong type: ${W.join(", ")}.`:""].filter(Boolean).join(" ")}function ib$($,Z,X,Q){if(!($ instanceof L1)||$.code!==I1.InvalidParams)return $;if(!Z)return $;let Y=E51(Z,X,Q),G=$.message.replace(/^MCP error -?\d+: /,"");return new L1(I1.InvalidParams,`${G}
|
|
2741
|
+
`.execute($),Y.push(F)}return Y}async function Z51($,Z,X,Q="user"){try{await $.addMember({body:{userId:Z,role:Q,organizationId:X}})}catch(Y){if(!JO(Y))throw Y}}async function ef$($,Z){for(let X=0;X<of$;X++){let Q=X===0?"":`-${Math.random().toString(36).slice(2,6)}`;try{return y66(await $.createOrganization({body:{name:Z.name,slug:`${Z.baseSlug}${Q}`,userId:Z.userId}}))}catch(Y){if(!g66(Y)||X===of$-1)throw Y}}throw Error("Failed to create organization")}var of$=5,S66,C66;var X51=D(()=>{yP0();S66=["labs","agent","studio","workspace","systems","core","cloud","works"],C66=["capybara","guarana","deco","samba","feijoada","capoeira","carnival"]});import{APIError as u66}from"better-auth/api";function $b$($,Z){if(typeof Z!=="string"||Z===$)return;throw new u66("BAD_REQUEST",{message:"Organization slug cannot be changed after creation."})}var Zb$=()=>{};var Kb$={};J4(Kb$,{resetPasswordEnabled:()=>uP0,grantDeploymentAdmin:()=>J51,getTrustedOrigins:()=>cP0,authConfig:()=>n8,auth:()=>s$,GENERIC_EMAIL_DOMAINS:()=>C3});import{randomBytes as c66}from"crypto";import{sso as l66}from"@better-auth/sso";import{organization as d66}from"@decocms/better-auth/plugins";import{betterAuth as m66}from"better-auth";import{admin as i66,apiKey as p66,jwt as n66,magicLink as t66,mcp as o66,openAPI as r66}from"better-auth/plugins";import{emailOTP as a66}from"better-auth/plugins/email-otp";import{APIError as Yb$}from"better-auth/api";import{adminAc as s66,defaultRoles as e66}from"better-auth/plugins/admin/access";import{defaultStatements as $56}from"@decocms/better-auth/plugins/organization/access";import{createAccessControl as Z56}from"@decocms/better-auth/plugins/access";function Xb$($){if(!UZ0($))return;throw new Yb$("BAD_REQUEST",{message:`Organization slug "${String($).trim()}" is reserved by Studio`})}function J51($){if(!Q51.includes($))Q51.push($)}function cP0(){let $=[Ra];try{let Z=new URL(Ra);if(Z.hostname==="localhost")$.push(Ra.replace("localhost","127.0.0.1"));else if(Z.hostname==="127.0.0.1")$.push(Ra.replace("127.0.0.1","localhost"))}catch{}return $}var Gb$,X56,hP0,G51,Q56,Y56,G56,Qb$,Q51,n8,Jb$=void 0,Y51=void 0,uP0=!1,J56,W56,K56,Ra,Wb$,F56=262144,H56,s$;var uY=D(()=>{R$();vx();h50();S4();Z9();iG();dn1();ix();in1();bf$();hf$();uf$();VQ();a61();if$();yP0();X51();$d0();Zb$();Gb$=Object.values(nw()).map(($)=>$.map((Z)=>Z.name)).flat(),X56={...$56,self:["*",...Gb$]},hP0=Z56(X56),G51=r61(Gb$),Q56=hP0.newRole(G51.user),Y56=hP0.newRole(G51.admin),G56=hP0.newRole(G51.owner),Qb$=Object.values(nw()).map(($)=>$.map((Z)=>`self:${Z.name}`)).flat(),Q51=[];n8=TH().auth;if(n8.inviteEmailProviderId&&n8.emailProviders&&n8.emailProviders.length>0){let $=T3(n8.emailProviders,n8.inviteEmailProviderId);if($){let Z=A3($);Jb$=async(X)=>{let Q=X.inviter.user?.name||X.inviter.user?.email,Y=`${$9()}/auth/accept-invitation?invitationId=${X.invitation.id}&redirectTo=/${X.organization.slug}`;await Z({to:X.email,subject:`You've been invited to join ${X.organization.name}`,html:R3({preheader:`${Q} has invited you to join ${X.organization.name} on deco Studio.`,heading:"You've been invited",subheading:`<strong>${Q}</strong> has invited you to join <strong>${X.organization.name}</strong> on deco Studio.`,body:XE("Accept invitation",Y),footnote:"If you weren\u2019t expecting an invitation, you can safely ignore this email."})})}}}if(n8.resetPasswordEmailProviderId&&n8.emailProviders&&n8.emailProviders.length>0){let $=T3(n8.emailProviders,n8.resetPasswordEmailProviderId);if($){let Z=A3($);uP0=!0,Y51=async({user:X,url:Q})=>{await Z({to:X.email,subject:"Reset your password",html:R3({preheader:"We received a request to reset the password on your deco Studio account.",heading:"Reset your password",subheading:"We received a password reset request for your account. Click the button below to choose a new password.",body:XE("Reset password",Q)+G90("This link expires in 24\xA0hours. If you didn\u2019t request a password reset, no action is needed.",!0),footnote:"If you didn\u2019t request a password reset, you can safely ignore this email."})})}}}J56=[d66({organizationCreation:{afterCreate:async($)=>{await ff$($.organization.id,$.member.userId)}},organizationHooks:{beforeCreateOrganization:async({organization:$})=>{Xb$($.slug)},beforeUpdateOrganization:async({organization:$,member:Z})=>{if(Xb$($.slug),typeof $.slug==="string"){let Y=await r8().db.selectFrom("organization").select("slug").where("id","=",Z.organizationId).executeTakeFirst();if(Y)$b$(Y.slug,$.slug)}let X=$.logo;if(typeof X!=="string"||!X.startsWith("data:"))return;let Q=await gf$(Z.organizationId,X);if(Q===X)return;return{data:{...$,logo:Q}}}},ac:hP0,creatorRole:"owner",allowUserToCreateOrganization:!0,dynamicAccessControl:{enabled:!0,maximumRolesPerOrganization:500,enableCustomResources:!0,allowedRolesToCreateResources:Bi,resourceNameValidation:($)=>{return{valid:/^[a-zA-Z0-9-_]+$/.test($)}}},roles:{user:Q56,admin:Y56,owner:G56},sendInvitationEmail:Jb$}),o66({loginPage:"/login",oidcConfig:{scopes:Qb$,metadata:{scopes_supported:Qb$},loginPage:"/login"}}),p66({enableMetadata:!0,maximumNameLength:64,keyExpiration:{minExpiresIn:0.003472222222222222},enableSessionForAPIKeys:!0,customAPIKeyGetter:($)=>{if($.headers?.get("X-MCP-Session-Auth")==="true")return null;let X=$.headers?.get("Authorization");if(X?.startsWith("Bearer "))return X.replace("Bearer ","").trim();return null},rateLimit:{enabled:!1}}),i66({defaultRole:"user",adminRoles:["admin","owner"],roles:{...e66,owner:s66},adminUserIds:Q51}),r66(),n66({jwt:{expirationTime:"5m",definePayload:({user:$})=>({id:$.id,email:$.email,name:$.name,role:$.role})}}),l66(n8.ssoConfig?mf$(n8.ssoConfig):void 0),...n8.magicLinkConfig?.enabled&&n8.emailProviders&&n8.emailProviders.length>0?[t66(mn1(n8.magicLinkConfig,n8.emailProviders))]:[],...n8.emailOtpConfig?.enabled&&n8.emailProviders&&n8.emailProviders.length>0?[a66(ln1(n8.emailOtpConfig,n8.emailProviders))]:[]],W56=vi(),K56=hn1(W56),Ra=$9();Wb$=b0(),H56=Wb$.betterAuthSecret||(()=>{return console.warn("BETTER_AUTH_SECRET not set - generating a random secret (not persistent across restarts)"),c66(32).toString("base64")})(),s$=m66({secret:H56,logger:{log:($,Z,...X)=>{if($==="error"&&Z.includes("validate API key"))return;if($==="error"&&X.some((Y)=>{let G=Y?.statusCode;return typeof G==="number"&&G>=300&&G<400}))return;let Q=`${new Date().toISOString()} ${$.toUpperCase()} [Better Auth]: ${Z}`;if($==="error")console.error(Q,...X);else if($==="warn")console.warn(Q,...X);else console.log(Q,...X)}},baseURL:Ra,trustedOrigins:cP0(),database:K56,socialProviders:n8.socialProviders,...n8.ssoConfig&&{account:{accountLinking:{trustedProviders:[n8.ssoConfig.providerId]}}},emailAndPassword:{enabled:n8.emailAndPassword.enabled,...Y51&&{sendResetPassword:Y51}},rateLimit:{enabled:!Wb$.disableRateLimit,window:60,max:1e4},plugins:J56,databaseHooks:{user:{create:{before:async($)=>{let Z=$.name;if(typeof Z==="string"&&Z.trim().length>0)return;let X=nf$($.email);if(!X)return;return{data:{...$,name:X}}},after:async($,Z)=>{t61({id:$.id,email:$.email,name:$.name??null,emailVerified:!!$.emailVerified});let X=Z?.getCookie("studio_signup_ref")??null,Q=Z?.getCookie("studio_signup_src")??null;x1.capture({distinctId:$.id,event:"user_signed_up",properties:{email:$.email,email_domain:$.email?.split("@")[1]?.toLowerCase()??null,email_verified:!!$.emailVerified,has_name:!!$.name,...X?{signup_ref:X}:{},...Q?{signup_src:Q}:{}}});let Y=TH().autoCreateOrganizationOnSignup!==!1;try{let G=await gP0({db:r8().db,authApi:s$.api,user:{id:$.id,email:$.email,name:$.name??null,emailVerified:!!$.emailVerified},allowCreate:Y,createdVia:"signup"});if(G.status==="created")x1.groupIdentify({groupType:"organization",groupKey:G.organization.id,properties:{name:G.organization.name,slug:G.organization.slug,created_at:new Date().toISOString(),created_via:G.createdVia,email_domain:G.domain}}),x1.capture({distinctId:$.id,event:"organization_created",groups:{organization:G.organization.id},properties:{organization_id:G.organization.id,organization_slug:G.organization.slug,name:G.organization.name,created_via:G.createdVia,email_domain:G.domain}});if(G.status==="joined_via_invitation")for(let J of G.organizations)x1.capture({distinctId:$.id,event:"organization_invitation_auto_accepted",groups:{organization:J.id},properties:{organization_id:J.id,organization_slug:J.slug,email_domain:G.domain,joined_via:G.createdVia,invitation_count:G.organizations.length}});if(G.status==="joined")x1.capture({distinctId:$.id,event:"organization_domain_joined",groups:{organization:G.organization.id},properties:{organization_id:G.organization.id,organization_slug:G.organization.slug,email_domain:G.domain,joined_via:G.createdVia}})}catch(G){x1.captureException(G,$.id),console.error("Failed to ensure organization on signup:",G)}}},update:{before:async($)=>{let Z=$.image;if(typeof Z==="string"&&Z.startsWith("data:")&&Z.length>F56)throw new Yb$("PAYLOAD_TOO_LARGE",{message:"Avatar image is too large. Upload an image smaller than 5MB."})}}},session:{create:{after:async($)=>{let Z=await r8().db.selectFrom("user").select(["id","email","name","emailVerified"]).where("id","=",$.userId).executeTakeFirst();if(!Z)return;t61({id:Z.id,email:Z.email,name:Z.name??null,emailVerified:!!Z.emailVerified})}}}}})});function K51($){return $?`/api/${$}`:""}function Fb$($){let X=new URL($).pathname;if(X.endsWith("/"))X=X.slice(0,-1);let Q=(Y)=>{let G=new URL($);return G.pathname=Y,G.toString()};return[Q(`${X}/.well-known/oauth-protected-resource`),Q(`/.well-known/oauth-protected-resource${X}`),Q("/.well-known/oauth-protected-resource")]}function Hb$($){let X=new URL($).pathname;if(X.endsWith("/"))X=X.slice(0,-1);let Q=X!==""&&X!=="/",Y=(G)=>{let J=new URL($);return J.pathname=G,J.toString()};if(Q)return[Y(`/.well-known/oauth-authorization-server${X}`),Y(`/.well-known/openid-configuration${X}`),Y(`${X}/.well-known/openid-configuration`)];return[Y("/.well-known/oauth-authorization-server"),Y("/.well-known/openid-configuration")]}function Nb$($){return"issuer"in $&&!("resource"in $)&&(("authorization_endpoint"in $)||("token_endpoint"in $))}function Ub$($){let Z=$.toLowerCase();return Z.includes("resource_metadata=")||Z.includes("invalid_token")||Z.includes("oauth")}function Bb$($){let Z=$.message?.toLowerCase()??"";return $.status===401||$.code===401||($.message?.includes("401")??!1)||Z.includes("unauthorized")||Z.includes("invalid_token")||Z.includes("api key required")||Z.includes("api-key required")}function Ob$($,{proxyResourceUrl:Z,proxyAuthServer:X}){return{...$,resource:Z,authorization_servers:[X]}}function F51({proxyResourceUrl:$,proxyAuthServer:Z,scopesSupported:X=["*"]}){return{resource:$,authorization_servers:[Z],bearer_methods_supported:["header"],scopes_supported:X}}function Db$($){return"scopes_supported"in $&&Array.isArray($.scopes_supported)&&$.scopes_supported.length>0?$.scopes_supported:["*"]}function Lb$($,Z){return{...$,authorization_endpoint:$.authorization_endpoint?`${Z}/authorize`:void 0,token_endpoint:$.token_endpoint?`${Z}/token`:void 0,registration_endpoint:$.registration_endpoint?`${Z}/register`:void 0}}function wb$({origin:$,prefix:Z,connectionId:X}){return`Bearer realm="mcp",resource_metadata="${$}${Z}/mcp/${X}/.well-known/oauth-protected-resource"`}var W51;var Eb$=D(()=>{W51=[404,401,406]});import{oAuthProtectedResourceMetadata as N56}from"better-auth/plugins";async function U56($,Z,X){return(await Z.storage.connections.findById($,X))?.connection_url??null}async function Pb$($,Z={}){try{let X=await N51($,{method:"POST",headers:{...Z,"Content-Type":"application/json",Accept:"application/json, text/event-stream"},body:JSON.stringify({jsonrpc:"2.0",id:0,method:"initialize",params:{protocolVersion:"2025-06-18",capabilities:{},clientInfo:{name:"mcp-cms-proxy",version:"1.0.0"}}})});if(X.status===401){let Q=X.headers.get("WWW-Authenticate");if(Q){if(Ub$(Q))return Q}if(await B56($))return'Bearer realm="mcp"'}return null}catch{return null}}async function B56($){try{let Z=new URL($),X=new URL("/.well-known/oauth-authorization-server",Z.origin),Q=await N51(X.toString(),{method:"GET",headers:{Accept:"application/json"}});if(Q.ok){let Y=await Q.json();if(Y.authorization_endpoint||Y.token_endpoint||Y.issuer)return!0}return!1}catch{return!1}}async function Nu($){let Z=Fb$($),X;for(let Q=0;Q<Z.length;Q++){if(X=await Mb$(Z[Q],{method:"GET",headers:{Accept:"application/json"}}),X.ok)return X;if(Q<Z.length-1&&!W51.includes(X.status))return X}return X}async function O56($){let Z;try{Z=new URL($).origin}catch{return null}try{let X=await Nu($);if(X.ok){let Q=await X.json();if(Q.authorization_servers?.[0])return Q.authorization_servers[0]}}catch{}return Z}async function Ab$($){let Z=$.get("studioContext");if(!Z)Z=await UJ.create($.req.raw),$.set("studioContext",Z);return Z}async function Ds0({error:$,reqUrl:Z,connectionId:X,connectionUrl:Q,headers:Y,orgSlug:G}){if(!Bb$($))return null;if(Boolean(await Pb$(Q,Y)))return new Response(null,{status:401,headers:{"WWW-Authenticate":wb$({origin:Z.origin,prefix:K51(G),connectionId:X})}});return new Response(JSON.stringify({error:"unauthorized",message:"Authentication required but server does not support OAuth"}),{status:401,headers:{"Content-Type":"application/json"}})}function jb$($){let Q=$.pathname;if(Q.endsWith("/.well-known/oauth-protected-resource"))Q=Q.slice(0,-37)||"/";else if(Q.startsWith("/.well-known/oauth-protected-resource"))Q=Q.slice(37)||"/";return`${$.origin}${Q}`}async function zb$($,Z){let X=await N56(s$)($),Q=await X.json();if(Z)Q.resource=Z;return Response.json(Q,X)}function N51($,Z,X=qb$){return GB()($,{...Z,signal:AbortSignal.timeout(X)})}class H51{response;constructor($){this.response=$}}async function Mb$($,Z,{attempts:X=3,timeoutMs:Q=qb$}={}){try{return await g6(async()=>{let Y=await N51($,Z,Q);if(Y.status>=500)throw new H51(Y);return Y},{maxAttempts:X,minTimeout:150,multiplier:2,jitter:0})}catch(Y){if(Y instanceof LY){if(Y.cause instanceof H51)return Y.cause.response;throw Y.cause}throw Y}}function kb$($){if(!YB($))return null;return new Response(JSON.stringify({error:"URLs targeting private networks are not allowed"}),{status:502,headers:{"Content-Type":"application/json"}})}async function qa($){if(YB($))return new Response(JSON.stringify({error:"URLs targeting private networks are not allowed"}),{status:502,headers:{"Content-Type":"application/json"}});let Z=Hb$($),X=null;for(let Q of Z){if(X=await Mb$(Q,{method:"GET",headers:{Accept:"application/json"}}),X.ok)return X;if(X.status!==404&&X.status!==401)return X}return X}var Tb$=($)=>{if(!($.hostname==="localhost"||$.hostname.endsWith(".localhost")||$.hostname==="127.0.0.1"))$.protocol="https:";return $},Ia=async($)=>{let Z=$.req.param("connectionId"),X=await Ab$($),Q=Tb$(new URL($.req.url)),Y=$.req.param("org")??X.organization?.slug,G;if(Y)if(X.organization?.id&&X.organization.slug===Y)G=X.organization.id;else{let H=await X.db.selectFrom("organization").select("id").where("slug","=",Y).executeTakeFirst();if(!H)return $.json({error:"Connection not found"},404);G=H.id}if(G&&X.auth?.tokenOrganizationId&&X.auth.tokenOrganizationId!==G)return $.json({error:"forbidden: token is scoped to another organization"},403);if(Z==="self")return zb$($.req.raw,jb$(Q));let J=await U56(Z,X,G);if(!J)return $.json({error:"Connection not found"},404);if(J.startsWith("virtual://"))return zb$($.req.raw,jb$(Q));let W=K51(Y),K=`${Q.origin}${W}/mcp/${Z}`,F=`${Q.origin}/oauth-proxy/${Z}`;try{let H=await Nu(J);if(!H.ok&&W51.includes(H.status)){if(await Pb$(J)){let O=F51({proxyResourceUrl:K,proxyAuthServer:F});return new Response(JSON.stringify(O),{status:200,headers:{"Content-Type":"application/json"}})}return new Response(H.body,{status:H.status,statusText:H.statusText,headers:{"Content-Type":"application/json"}})}if(!H.ok)return new Response(H.body,{status:H.status,statusText:H.statusText,headers:{"Content-Type":"application/json"}});let N=await H.json();if(Nb$(N)){let B=F51({proxyResourceUrl:K,proxyAuthServer:F,scopesSupported:Db$(N)});return new Response(JSON.stringify(B),{status:200,headers:{"Content-Type":"application/json"}})}let U=Ob$(N,{proxyResourceUrl:K,proxyAuthServer:F});return new Response(JSON.stringify(U),{status:H.status,statusText:H.statusText,headers:{"Content-Type":"application/json"}})}catch(H){let N=H;return console.error("[oauth-proxy] Failed to proxy OAuth protected resource metadata:",N),$.json({error:"Failed to proxy OAuth metadata",message:N.message},502)}},Rb$=()=>{let $=new H1;return $.get("/.well-known/oauth-protected-resource/mcp/:connectionId",(Z)=>Ia(Z)),$.get("/mcp/:connectionId/.well-known/oauth-protected-resource",(Z)=>Ia(Z)),$},Ib$=()=>{let $=new H1;return $.get("/mcp/:connectionId/.well-known/oauth-protected-resource",(Z)=>Ia(Z)),$},qb$=4000,D56=async($)=>{let Z=$.req.param("connectionId"),X=await Ab$($),Q=await X.storage.connections.findById(Z);if(!Q?.connection_url)return $.json({error:"Connection not found or no auth server"},404);let Y=await O56(Q.connection_url);if(!Y)return $.json({error:"Connection not found or no auth server"},404);let G=await X.db.selectFrom("organization").select("slug").where("id","=",Q.organization_id).executeTakeFirst();try{let J=await qa(Y);if(!J.ok)return new Response(J.body,{status:J.status,statusText:J.statusText,headers:{"Content-Type":"application/json"}});let W=await J.json(),K=Tb$(new URL($.req.url)),F=G?.slug?`${K.origin}/api/${G.slug}/oauth-proxy/${Z}`:`${K.origin}/oauth-proxy/${Z}`,H=Lb$(W,F);return new Response(JSON.stringify(H),{status:200,headers:{"Content-Type":"application/json"}})}catch(J){let W=J;return console.error("[oauth-proxy] Failed to proxy auth server metadata:",W),$.json({error:"Failed to proxy auth server metadata",message:W.message},502)}},Vb$=()=>{let $=new H1;return $.get("/.well-known/oauth-authorization-server/oauth-proxy/:connectionId",D56),$};var ct=D(()=>{U8();rO();uY();W4();zw();Eb$()});async function Uu($){try{let Z;try{let Q=await Nu($);if(Q.ok)Z=(await Q.json()).authorization_servers?.[0]}catch{}if(!Z)Z=new URL($).origin;let X=await qa(Z);if(X.ok){let Q=await X.json();if(typeof Q.token_endpoint==="string")try{let Y=new URL(Q.token_endpoint);if((Y.protocol==="http:"||Y.protocol==="https:")&&!YB(Q.token_endpoint))return Q.token_endpoint}catch{}}return null}catch{return null}}var lP0=D(()=>{ct();zw()});function Ku($){return!!$.refreshToken&&!!$.tokenEndpoint&&!!$.clientId}function L56($,Z){if($.includes("/oauth-proxy/"))return!0;try{return new URL($).host!==new URL(Z).host}catch{return!1}}async function j56($,Z){let X=await gm1($);if(!X.success||!X.accessToken){if(X.permanent===!0)await Z.delete($.connectionId).catch((Q)=>{console.warn("[TokenRefresh] failed to delete dead token row",{connectionId:$.connectionId,message:Q instanceof Error?Q.message:String(Q)})});return{accessToken:null,permanent:X.permanent===!0}}try{await Z.upsert({connectionId:$.connectionId,accessToken:X.accessToken,refreshToken:X.refreshToken??$.refreshToken,scope:X.scope??$.scope,expiresAt:X.expiresIn===void 0?null:new Date(Date.now()+X.expiresIn*1000),clientId:$.clientId,clientSecret:$.clientSecret,tokenEndpoint:$.tokenEndpoint})}catch(Q){return console.warn("[TokenRefresh] failed to persist refreshed token",{connectionId:$.connectionId,message:Q instanceof Error?Q.message:String(Q)}),{accessToken:X.accessToken,permanent:!1}}return{accessToken:X.accessToken,permanent:!1}}function vP0($,Z){let X=U51.get($.connectionId);if(X)return X;let Q=dP0.get($.connectionId);if(Q&&Date.now()<Q.nextAttemptAt)return Promise.resolve(null);let Y=j56($,Z).then(({accessToken:G,permanent:J})=>{if(G||J)dP0.delete($.connectionId);else{let W=dP0.get($.connectionId)?.attempt??0,K=sZ(E56,w56,W,2,0.5);dP0.set($.connectionId,{attempt:W+1,nextAttemptAt:Date.now()+K})}return G}).finally(()=>{U51.delete($.connectionId)});return U51.set($.connectionId,Y),Y}async function pY($){let{connectionId:Z,connectionUrl:X,tokenStorage:Q,force:Y}=$,G=await Q.get(Z);if(!G)return{state:"missing",accessToken:null};let J=Ku(G),W=J?$.bufferMs??Gn:0,K=Q.isExpired(G,W);if(!Y&&!K)return{state:"valid",accessToken:G.accessToken};if(!J){if(K)await Q.delete(Z);return{state:"expired_without_refresh",accessToken:null}}let F=G.tokenEndpoint;if(X&&F&&L56(F,X)){let N=await Uu(X);if(N)F=N}let H=await vP0({...G,tokenEndpoint:F},Q);if(!H)return{state:"refresh_failed",accessToken:null};return{state:"refreshed",accessToken:H}}var Gn=300000,E5$=3300000,J9="GitHub token refresh failed \u2014 reconnect the mcp-github integration.",U51,w56=30000,E56=300000,dP0;var YJ=D(()=>{W4();hm1();lP0();U51=new Map,dP0=new Map});import{SpanStatusCode as Sb$}from"@opentelemetry/api";function B51($){if(Array.isArray($))return $.map(B51);if($&&typeof $==="object"){let{__binding:Z,...X}=$,Q={};for(let[Y,G]of Object.entries(X))Q[Y]=B51(G);return Q}return $}async function O51($,Z,X){return Z.tracer.startActiveSpan("studio.connection.build_headers",{attributes:{"connection.id":$.id}},async(Q)=>{try{let Y=await z56($,Z,X);return Q.setStatus({code:Sb$.OK}),Y}catch(Y){throw Q.setStatus({code:Sb$.ERROR,message:Y.message}),Q.recordException(Y),Y}finally{Q.end()}})}async function z56($,Z,X){let Q=$.id,Y=Uu0($.configuration_state,$.configuration_scopes),G=Z.auth.user,J=G?.id??Z.auth.apiKey?.userId??(X?$.created_by:void 0),[W,K]=J?await nC1({sub:J,user:{id:J,email:G?.email,name:G?.name,role:G?.role},metadata:{state:$.configuration_state?B51($.configuration_state):void 0,studioUrl:Z.baseUrl,meshUrl:Z.baseUrl,connectionId:Q,organizationId:Z.organization?.id,organizationName:Z.organization?.name,organizationSlug:Z.organization?.slug},permissions:Y}).then((O)=>[O,null]).catch((O)=>[null,O]):[null,Error("User ID required to issue configuration token")];if(K)console.error("Failed to issue configuration token:",K);let F=Z.auth.user?.connectionId,H={...F?{"x-caller-id":F}:{},...Z.metadata.wellKnownForwardableHeaders??{},"x-request-id":Z.metadata.requestId};if(Z.metadata.runMetadata&&Object.keys(Z.metadata.runMetadata).length>0)Fu0(H,"runMetadata",JSON.stringify(Z.metadata.runMetadata));let N=null;if(!!k5($)?.sourceConnectionId)try{N=await Yn(Z,$)}catch(O){console.error("[Proxy] repo-scoped legacy token mint failed",{connectionId:Q,error:O.message})}else{let O=new m6(Z.db,Z.vault),L=await pY({connectionId:Q,connectionUrl:$.connection_url,tokenStorage:O});if(L.accessToken)N=L.accessToken;else if(L.state==="expired_without_refresh")console.warn(`[Proxy] Token expired for ${Q} with no refresh capability`)}if(!N&&$.connection_token)N=$.connection_token;if(N)H.Authorization=`Bearer ${N}`;if(W)Fu0(H,"token",W);return H}var Cb$=D(()=>{Bu0();gU();YJ();rG();Iy();_Q();Hu0()});function mP0(){let $=new Map;function Z(Q,Y){let G=$.get(Y);if(G)return G;let J=(async()=>{let W=await Q(),K=new y9({name:`outbound-client-${Y}`,version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}},jsonSchemaValidator:N5});return K.onclose=()=>{$.delete(Y)},await K.connect(W),K})().catch((W)=>{throw $.delete(Y),W});return $.set(Y,J),J}return Object.assign(Z,{[Symbol.asyncDispose]:async()=>{let Q=[];for(let[Y,G]of $)Q.push(G.then((J)=>J.close()).catch(()=>{}));await Promise.all(Q),$.clear()}})}var D51=D(()=>{mW();hX()});function _b$($){let Z=new ci({command:$.command,args:$.args,env:$.env,cwd:$.cwd,stderr:"pipe"}),X=$.name||$.id,Q="\x1B[2m",Y="\x1B[0m";return Z.stderr?.on("data",(G)=>{let J=G.toString().trimEnd();if(J)console.error(`${J} \x1B[2m[${X}]\x1B[0m`)}),Z}var vb$=D(()=>{lc0()});var Bu;var fb$=D(()=>{CQ();ow();hX();Bu=class Bu extends Nb{options;constructor($,Z){super($);this.options=Z}toolsListPromise=null;fetchToolsFromServer(){if(!this.toolsListPromise)this.toolsListPromise=new Promise(($)=>{let Z=`auth-tools-${Date.now()}`,X=this.innerTransport.onmessage,Q=(G)=>{clearTimeout(Y),this.innerTransport.onmessage=X,this.toolsListPromise=null,$(G)},Y=setTimeout(()=>Q(null),Q60);this.innerTransport.onmessage=(G)=>{if("id"in G&&G.id===Z)if("result"in G){let J=G.result?.tools??null;Q(J)}else Q(null);else X?.(G)},this.innerTransport.send({jsonrpc:"2.0",id:Z,method:"tools/list",params:{}}).catch(()=>Q(null))});return this.toolsListPromise}async ensureToolsMap(){let $=this.options.cache??Y9(),Z=await rB("tools",this.options.connection.id,async()=>{let X=await this.fetchToolsFromServer();if(X===null)throw Error("Failed to fetch tools list");return X},$,(X)=>this.options.ctx.pendingRevalidations.push(X),oB);if(!Z)return new Map;return new Map(Z.map((X)=>[X.name,X]))}async handleOutgoingMessage($){if(!this.isRequest($))return this.innerTransport.send($);let Z=$;if(Z.method==="tools/call")await this.authorizeToolCall(Z),this.stripMetaFromArguments(Z);return this.innerTransport.send($)}async authorizeToolCall($){if(this.options.superUser)return;let X=$.params.name,{ctx:Q,connection:Y}=this.options;if(await this.isPublicTool(X))return;if(!Q.auth.user?.id&&!Q.auth.apiKey?.id)throw Error("Authentication required. Please provide a valid OAuth token or API key.");let G=async()=>{return(await this.ensureToolsMap()).get(X)?._meta};await new tw(Q.auth.user?.id??Q.auth.apiKey?.userId,X,Q.boundAuth,Q.organization?.role??Q.auth.user?.role,Y.id,G,Q.organization?.id,!1).check(X)}async isPublicTool($){let X=(await this.ensureToolsMap()).get($);if(!X?._meta)return!1;return $K(X._meta)?.public_tool===!0}stripMetaFromArguments($){let Z=$.params;if(Z.arguments&&"_meta"in Z.arguments){let{_meta:X,...Q}=Z.arguments;Z.arguments=Q}}}});function L51($){let{ctx:Z,organizationId:X,connectionId:Q,toolName:Y,durationMs:G,isError:J}=$;if(!X||!Q||!Y)return;let W={"tool.name":Y,"organization.id":X,"connection.id":Q,status:J?"error":"success","error.type":J?$.errorType||"Error":""};Z.meter.createHistogram("tool.execution.duration",{description:"Duration of tool executions in milliseconds",unit:"ms"}).record(G,W),Z.meter.createCounter("tool.execution.count",{description:"Number of tool executions"}).add(1,W)}import{trace as ZNZ,context as XNZ}from"@opentelemetry/api";function bb$($){if(!$.isError)return;let Z=$.content;if(!Array.isArray(Z))return;for(let X of Z)if(X&&typeof X==="object"&&"type"in X&&X.type==="text"&&"text"in X&&typeof X.text==="string")return X.text;return}function xb$($){if(!$)return;let Z=$._meta;if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let X=Z.properties;if(!X||typeof X!=="object"||Array.isArray(X))return;let Q={};for(let[Y,G]of Object.entries(X))if(typeof G==="string")Q[Y]=G;return Object.keys(Q).length>0?Q:void 0}function yb$($,Z){if(!$&&!Z)return;if(!$)return Z;if(!Z)return $;return{...Z,...$}}var gb$=D(()=>{fL0();wY()});import{trace as P56,context as hb$}from"@opentelemetry/api";var Ou;var ub$=D(()=>{hX();fL0();gb$();Ou=class Ou extends Nb{options;inflightRequests=new Map;requestContext;constructor($,Z){super($);this.options=Z;this.requestContext=hb$.active()}async handleOutgoingMessage($){if(this.isRequest($)){let Z=$;this.onRequestStart(Z)}return this.innerTransport.send($)}handleIncomingMessage($){if(this.isResponse($)){let Z=$;this.onResponseEnd(Z)}this.onmessage?.($)}onRequestStart($){let{ctx:Z,connectionId:X}=this.options,Q,Y;if($.method==="tools/call"&&$.params){let J=$.params;Q=J.name,Y=J.arguments}let G;if($.method==="tools/call"&&Q)G=Z.tracer.startSpan("mcp.proxy.callTool",{attributes:{"connection.id":X,"tool.name":Q,"request.id":Z.metadata.requestId,"jsonrpc.id":$.id,"jsonrpc.method":$.method}},this.requestContext);if($.id!==null&&$.id!==void 0)this.inflightRequests.set($.id,{startTime:Date.now(),method:$.method,toolName:Q,toolArguments:Y,span:G})}onResponseEnd($){if($.id===null||$.id===void 0)return;let Z=this.inflightRequests.get($.id);if(!Z)return;let{ctx:X,connectionId:Q}=this.options,{startTime:Y,method:G,toolName:J,toolArguments:W,span:K}=Z,F=Date.now()-Y;if(this.inflightRequests.delete($.id),G!=="tools/call"||!J)return;let H=X.organization?.id??"",N="error"in $,U=N?$.error:$.result,B=N?{content:[{type:"text",text:$.error?.message||"Unknown error"}],isError:!0}:U,O=N||B?.isError===!0,L=N?$.error?.message:void 0,w=bb$(B)||null;if(X.meter.createHistogram("connection.proxy.duration").record(F,{"connection.id":Q,"organization.id":H,"tool.name":J,status:O?"error":"success"}),O)X.meter.createCounter("connection.proxy.errors").add(1,{"connection.id":Q,"organization.id":H,"tool.name":J,error:L??w??void 0});else X.meter.createCounter("connection.proxy.requests").add(1,{"connection.id":Q,"organization.id":H,"tool.name":J,status:"success"});if(H)L51({ctx:X,organizationId:H,connectionId:Q,toolName:J,durationMs:F,isError:O,errorType:N?"RemoteError":O?"ToolError":""});if(K){if(O)K.recordException(Error(L??w??"Tool error"));let E=xb$(W),j=yb$(X.metadata.properties,E),z=P56.setSpan(hb$.active(),K);qt({organizationId:X.organization?.id??"",connectionId:Q,toolName:J,toolArguments:W,result:B,duration:F,isError:O,errorMessage:w,userId:X.auth.user?.id||X.auth.apiKey?.userId||null,requestId:X.metadata.requestId,userAgent:X.metadata.userAgent||null,virtualMcpId:this.options.virtualMcpId||null,properties:j||null},z),K.end()}}async close(){for(let $ of this.inflightRequests.values())if($.span)$.span.setAttributes({"transport.closed":!0}),$.span.end();return this.inflightRequests.clear(),super.close()}}});var cb$=D(()=>{hX();fb$();ub$()});async function lb$($,Z,X=!1){let Q=$.id,Y=Z.connectionId&&Z.connectionId!==Q?Z.connectionId:void 0;switch($.connection_type){case"STDIO":{if(!b0().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let G=$.connection_headers;if(!yW(G))throw Error("STDIO connection missing parameters");let J=_b$({id:Q,name:$.title,command:G.command,args:G.args,env:G.envVars,cwd:G.cwd});return J=Ub(J,(W)=>new Bu(W,{ctx:Z,connection:$,superUser:X}),(W)=>new Ou(W,{ctx:Z,connectionId:Q,virtualMcpId:Y})),A56(()=>J,Q)}case"HTTP":case"Websocket":{if(!$.connection_url)throw Error(`${$.connection_type} connection missing URL`);let G=$.connection_url;return Z.getOrCreateClient(async()=>{let J=await O51($,Z,X),W=$.connection_headers;if(W&&"headers"in W)Object.assign(J,W.headers);let K=new pW(new URL(G),{requestInit:{headers:J}});return K=Ub(K,(F)=>new Bu(F,{ctx:Z,connection:$,superUser:X}),(F)=>new Ou(F,{ctx:Z,connectionId:Q,virtualMcpId:Y})),K},Q)}case"SSE":{if(!$.connection_url)throw Error("SSE connection missing URL");let G=$.connection_url;return Z.getOrCreateClient(async()=>{let J=await O51($,Z,X),W=$.connection_headers;if(W&&"headers"in W)Object.assign(J,W.headers);let K=new wH(new URL(G),{requestInit:{headers:J}});return K=Ub(K,(F)=>new Bu(F,{ctx:Z,connection:$,superUser:X}),(F)=>new Ou(F,{ctx:Z,connectionId:Q,virtualMcpId:Y})),K},Q)}default:throw Error(`Unknown connection type: ${$.connection_type}`)}}var A56;var db$=D(()=>{R$();hW();pd();jb();Cb$();D51();vb$();cb$();A56=mP0()});var j5$={};J4(j5$,{clientFromConnection:()=>U5});async function U5($,Z,X=!1){if($.connection_type==="VIRTUAL")return J3$($,Z,X);return lb$($,Z,X)}var ai=D(()=>{db$();ay()});function w51($){if($===null)return"null";if(Array.isArray($))return"array";return typeof $}function T56($,Z){if(Z==="integer")return typeof $==="number"&&Number.isInteger($);return w51($)===Z}function R56($,Z){if(Z==="object"||Z==="array"){let X;try{X=JSON.parse($)}catch{return}return w51(X)===Z?X:void 0}if(Z==="boolean"){if($==="true")return!0;if($==="false")return!1;return}if(Z==="number"||Z==="integer"){if($.trim()==="")return;let X=Number($);if(!Number.isFinite(X))return;if(Z==="integer"&&!Number.isInteger(X))return;return X}return}function mb$($,Z){if(!$?.properties||!Z)return null;let X=!1,Q={...Z};for(let[Y,G]of Object.entries(Z)){if(typeof G!=="string")continue;let J=$.properties[Y]?.type;if(!J||J==="string")continue;let W=R56(G,J);if(W===void 0)continue;Q[Y]=W,X=!0}return X?Q:null}function E51($,Z,X){let Q=Object.keys(X??{}),Y=Z?.required??[],G=Y.filter((F)=>!Q.includes(F)),J=(F)=>{let H=Z?.properties?.[F]?.type;return H?`${F} (${H})`:F},W=Q.filter((F)=>{let H=Z?.properties?.[F]?.type;return H!=null&&!T56(X?.[F],H)}).map((F)=>`${F} (expected ${Z?.properties?.[F]?.type}, got ${w51(X?.[F])})`);return[`Invalid arguments for "${$}".`,Y.length?`Required: ${Y.map(J).join(", ")}.`:"",`You sent: ${Q.length?Q.join(", "):"(none)"}.`,G.length?`Missing required: ${G.join(", ")}.`:"",W.length?`Wrong type: ${W.join(", ")}.`:""].filter(Boolean).join(" ")}function ib$($,Z,X,Q){if(!($ instanceof L1)||$.code!==I1.InvalidParams)return $;if(!Z)return $;let Y=E51(Z,X,Q),G=$.message.replace(/^MCP error -?\d+: /,"");return new L1(I1.InvalidParams,`${G}
|
|
2742
2742
|
|
|
2743
2743
|
${Y}`,$.data)}function iP0($){let Z=$;if(!Z||Z.isError!==!0||!Array.isArray(Z.content))return null;let X=Z.content.map((Q)=>Q?.type==="text"?Q.text:null).filter((Q)=>typeof Q==="string").join(`
|
|
2744
2744
|
`);return/MCP error -32602|Input validation error/.test(X)?X:null}function pb$($,Z){let X=$;return{...X,content:(X.content??[]).map((Q,Y)=>Y===0&&Q?.type==="text"?{...Q,text:`${Q.text}
|
|
@@ -2877,7 +2877,7 @@ Respond with the structured verdict and a short reason.`,lc$;var mc$=D(()=>{l4()
|
|
|
2877
2877
|
${G.join(`
|
|
2878
2878
|
`)}`:Y}function UN6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
|
|
2879
2879
|
`)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var Il$=200,XN6=12,YN6,JN6=300,E71=3;var j71=D(()=>{dD();KT0();YN6={aheadBy:0,behindBy:0,files:[]}});function ON6($){if(!$||$.includes(".."))return!1;return BN6.test($)}function Ml$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!ON6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function kl$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var BN6;var Vl$=D(()=>{BN6=/^[\w./@-]+$/});function Us($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function Sl$($,Z,X,Q){if(!Q.connectionId)throw new Uv("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Uv(J9);await kO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let N=H instanceof Error?H.message:J9;throw new Uv(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await RK(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((H)=>{let{code:N,message:U}=z5$(H instanceof Error?H.message:String(H));throw N?new Uv(U):H}),K=hu($),F=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!F.ok){let H=await MO(F,DN6).catch(()=>F.statusText);throw Error(`Failed to refresh sandbox git credentials (${F.status}): ${H}`)}}var DN6=10485760,Uv;var z71=D(()=>{YJ();aA0();Qn();Ui0();qy();Uv=class Uv extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function wN6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!LN6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Bv($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(jN6)])}async function PN6($,Z){let X=$.var.studioContext,Q=XJ(Z.branch),Y=$.req.query("thread")??Q,G=Y&&Y===Q?Z.branchThread:Y?await X.storage.threads.get(Y).catch(()=>null):null,J=G?.virtual_mcp_id===Z.virtualMcpId?G:null,W=LC(J?.metadata?.runtime);if(W)return W;let K=mO0(Z.virtualMcpMetadata),F=K==="cms"?await Z71(X,{claimName:Z.claimName}):"alive",H=K==="cms"&&F!=="alive"?"cms":"sandbox",N=!!J&&(F==="gone"||F==="alive"&&K==="cms");if(N&&J)_n(X,J.id,H);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:F,resolved:H,stamped:N});return H}async function AN6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await ZQ($.var.studioContext)}catch{return null}}function Ov($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function mu($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Us(Z,X);if(!Y)throw new h4(404,"AUTH","repo","Project has no GitHub repository");let G=o(Q);return sA0(Q,G.id,Y)}function P71($,Z){if(Z instanceof QA0)return $.json({error:Z.message},429,{...A5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,A5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,A5)}async function vl$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function fl$($){try{let Z=await mu($),X=await FT0(Z,$.get("vmClaim").branch);return $.json(X,200,A5)}catch(Z){return P71($,Z)}}function Bs($,Z){let Q=(UT0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return UT0.set($,Y),Y.finally(()=>{if(UT0.get($)===Y)UT0.delete($)}),Q}async function oZ($,Z,X){if(!X?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,A5);let Q=X?.runner??Ov($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,F=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,F.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),F.set("content-type","application/json");let H=X?.signal,N={method:W,headers:F,body:K,...H?{signal:H}:{}},U=async()=>{let B=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Q.adoptLiveClaim({userId:G,projectRef:J},Y))B=await Q.proxyDaemonRequest(Y,Z,N);if(B.status===404){try{await B.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...A5}})}}let O=await B.text(),L=X?.redactRepoDir?TN6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...A5}})};try{if(H){let B=U();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(H.aborted)return w(H.reason);H.addEventListener("abort",()=>w(H.reason),{once:!0})})])}return await U()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function TN6($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function BT0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function RN6($){return bl$.includes($)}var LN6,Cl$=524288,EN6=65536,jN6=1e4,_l$=2000,zN6,UT0,A5,bl$,xl$=()=>{let $=new H1;$.use("/:virtualMcpId/:branch/*",zN6),$.post("/:virtualMcpId/:branch/write",(X)=>oZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:Bv(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>oZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Bv(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>oZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Bv(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>oZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:Bv(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>oZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:Bv(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>oZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:Bv(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>oZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:Bv(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return oZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return oZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>oZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>oZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!RN6(Q))return X.json({error:`step must be one of: ${bl$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await Z71(X.var.studioContext,{claimName:Y.claimName})==="gone"?null:await AN6(X);if(!G)return X.json({error:"sandbox not found: nothing is running at this ref"},404,A5);if(Q==="start"){let J=o(X.var.studioContext),W=Ry(Y.virtualMcpMetadata);try{await J70({ctx:X.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:W})}catch(K){let F=K instanceof Error?K.message:String(K);return X.json({error:`Failed to push env to daemon: ${F}`},502)}}return oZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0,runner:G})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return iN(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return xc$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return fl$(X);return Z(X)});let Z=(X)=>oZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(_l$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return fl$(X);return oZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(_l$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")try{let Y=await X.req.json().catch(()=>({})),G=await mu(X),J=await HT0(G,Q.branch,Y.base);return X.json(J,200,A5)}catch(Y){return P71(X,Y)}return oZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").runtime==="cms")return X.json({ok:!0},200,A5);let Q=Ov(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Bs(Y,async()=>{try{await X71(W,Q,Y);let K=Us(G,J);if(K)await Sl$(W,Q,Y,K)}catch(K){if(K instanceof Uv)return X.json({error:K.message},403,A5);let F=K instanceof Error?K.message:String(K);return X.json({error:F},502,A5)}return oZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return Bs(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,A5);try{let J=await mu(X);return await ql$(J,Q.branch,G),X.json({ok:!0},200,A5)}catch(J){let W=J instanceof h4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,A5)}});return Bs(Q.claimName,()=>oZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return Bs(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await mu(X),F=W.base??await K.getDefaultBranch();return await NT0(K,Q.branch,F),X.json({ok:!0},200,A5)}catch(W){return P71(X,W)}});let Y=Ov(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Bs(G,async()=>{try{await X71(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,A5)}return oZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",n5({maxSize:Cl$,onError:(X)=>X.json({error:"Payload too large"},413,A5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=Ov(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=G71(H)&&U?[H,N]:Y?await Promise.all([BT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),BT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await mu(X);return Promise.all([FT0(w,Q.branch),HT0(w,Q.branch)])})(),L=await cc$(K,B,O);return X.json(L,200,A5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,A5);return X.json({error:H},502,A5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",n5({maxSize:Cl$,onError:(X)=>X.json({error:"Payload too large"},413,A5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=Ov(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=G71(H)&&U?[H,N]:Y?await Promise.all([BT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),BT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await mu(X);return Promise.all([FT0(w,Q.branch),HT0(w,Q.branch)])})(),L=await dc$(K,B,O,typeof F.language==="string"?F.language:void 0);return X.json(L,200,A5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,A5);return X.json({error:H},502,A5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=Ov(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,"");return vl$(X,`${W}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",n5({maxSize:EN6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=Ov(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=Ml$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=kl$(G,W.resolveType);return vl$(X,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var yl$=D(()=>{U8();wF();gu();$71();sp();vc$();g3();dy();fc$();d3();bc$();yc$();Fi0();Zn();K71();mc$();H71();dD();j71();Vl$();z71();LN6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;zN6=rA0(async($,Z)=>{let X=$.var.studioContext;try{t(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=o0(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=o(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{wN6(J)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=rp({orgId:Y.id,virtualMcpId:G,branch:J}),F=await Qi0(X,J),H=Yi0(F,Q),N=_c$({userId:H,projectRef:K}),U=W.metadata??null,B=await PN6($,{claimName:N,branch:J,virtualMcpId:G,sandboxUserId:H,virtualMcpMetadata:U,branchThread:F});if(B==="cms")return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await ZQ(X)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:O,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});UT0=new Map;A5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};bl$=["clone","install","start"]});function gl$($,Z,X){let Q=A71.get($);if(!Q)Q={pending:null,running:!1},A71.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)qN6($,Q);return G}async function qN6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await MN6(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)A71.delete($)}}async function MN6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await du(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getDecofileTree(J,Q),K=L71(W,Q),F=[],H=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,L]of $.set){let w=w71(K,O),E=`${JSON.stringify(L,null,2)}
|
|
2880
|
-
`,j=await Z.createBlob(E);await Al$(Z.owner,Z.repo,j,E);let z=w[0]??`${WT0(Q)}/${N71(O)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let O of $.del)for(let L of w71(K,O))F.push({path:L,mode:"100644",type:"blob",sha:null}),H.delete(L);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=Ks(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),B=await Z.createCommit({message:kN6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof h4&&O.status===422)||Y>=IN6-1)throw O;await L$(sZ(2000,200,Y,2,0.5))}}}function kN6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return am0(Q,$.deps.coAuthor)}var IN6=3,A71;var hl$=D(()=>{gO0();$T0();W4();dD();KT0();A71=new Map});import{createHmac as ul$,randomBytes as VN6,timingSafeEqual as SN6}from"crypto";function cl$(){if(OT0)return OT0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return OT0=$?Buffer.from($):VN6(32),OT0}function T71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+CN6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=ul$("sha256",cl$()).update(Q).digest("base64url");return`${Q}.${Y}`}function ll$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(ul$("sha256",cl$()).update(Q).digest("base64url"));if(Y.length!==G.length||!SN6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var CN6=21600000,OT0=null;var dl$=D(()=>{R$()});import{z as iu}from"zod";function vN6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&_N6.test($)}function tl$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Os($){let Z=$.get("decofileScope");return sA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Ds($,Z){if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function ol$(){let $=new H1;return $.use("/:virtualMcpId/:branch",nl$),$.use("/:virtualMcpId/:branch/*",nl$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Tl$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=T71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(tl$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await Os(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return Ds(Z,Y)}}),$.patch("/:virtualMcpId/:branch",bN6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=xN6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{eA0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await Os(Z),W=await gl$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:hu(Q)},G),K=T71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:tl$(Z)})}catch(J){return Ds(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof h4&&W.status===409))throw W;await NT0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof h4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof h4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof h4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return Ds(Z,Q)}}),$}var _N6,ml$=500,il$=1048576,pl$=1024,fN6=8388608,bN6,xN6,nl$;var rl$=D(()=>{vn0();$T0();U8();wF();$71();aA0();z71();H71();hl$();dl$();j71();dD();KT0();_N6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;bN6=n5({maxSize:fN6,onError:($)=>$.json({error:"Payload too large"},413)}),xN6=iu.object({set:iu.record(iu.string(),iu.unknown()).optional(),delete:iu.array(iu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=ml$,{message:`Patch cannot touch more than ${ml$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=il$),{message:`Each block must be at most ${il$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=pl$),{message:`Each block key must be at most ${pl$} characters`}),nl$=rA0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!vN6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!ll$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!dO0(K))return $.json({error:"Project has no preview server configured"},404);let H=W.connections?.map((B)=>B.connection_id)??[],N=Us(K,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var al$=($)=>{let Z=new H1;if(Z.use("*",Xv),Z.route("/",BA0()),Z.route("/",Bg$()),Z.route("/",jc$()),Z.route("/",Lc$()),Z.route("/",nA0()),Z.route("/tools",qc$()),Z.route("/",Tc$()),Z.route("/",ou$({kvStorage:$.kvStorage})),Z.route("/",nu$()),Z.route("/fs",Fc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",xl$()),Z.route("/decofile",ol$()),Z.route("/",Bc$()),Z.route("/deco-sites",DA0()),Z.route("/sso",WA0()),Z.route("/",tA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Gg$()),$.mountDevAssets)Z.route("/dev-assets",LA0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",Ib$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",Nc$()),Z.route("/mcp",ww0()),Z.route("/mcp/self",pA0()),Z.route("/mcp",zw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var sl$=D(()=>{U8();A91();Jg$();q91();wA0();fa();z91();tu$();ru$();Hc$();ct();O91();Pw0();nZ1();Uc$();Oc$();wc$();zc$();Rc$();oZ1();Mc$();rZ1();Ew0();yl$();rl$()});function yN6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var gN6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},el$=()=>{let $=new H1;return $.use("*",gN6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await tZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:yN6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var $d$=D(()=>{U8();R$();NP0()});import{z as M1}from"zod";function AF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function tN6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function oN6($,Z,X){try{return JSON.parse($)}catch{throw new Qd$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function rN6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:oN6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function aN6($){let Z=$.map((X)=>{let Q=X.function.parameters?mY(X.function.parameters):mY({type:"object",properties:{}});return[X.function.name,h$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function sN6($){if(!$)return;return{openai:{response_format:$}}}function eN6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Zd$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Xd$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var hN6=256,uN6,cN6,lN6,dN6,mN6,iN6,pN6,nN6,Qd$,Yd$,Gd$;var Jd$=D(()=>{l4();U8();gu();RN();uN6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),cN6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),lN6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(cN6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),dN6=M1.object({type:M1.literal("text")}),mN6=M1.object({type:M1.literal("json_object")}),iN6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),pN6=M1.union([dN6,mN6,iN6]),nN6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(lN6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(uN6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:pN6.optional(),user:M1.string().optional()});Qd$=class Qd$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Yd$=new H1;Yd$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(AF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(AF("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(AF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=nN6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(AF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=tN6(G.model);if(!J)return $.json(AF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>Ww(j.providerId));if(!E)return $.json(AF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(AF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=rN6(G.messages),U=G.tools?aN6(G.tools):void 0,B=sN6(G.response_format),O=eN6(),L=Math.floor(Date.now()/1000);if(G.stream)return iN($,async(w)=>{let E=Zd$(H,N,U,G,B,$.req.raw.signal);try{let j=AO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=hN6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Xd$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=Zd$(H,N,U,G,B,$.req.raw.signal),E=await zO(w),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:Xd$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(AF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(AF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(AF(Y.message,"server_error"),500)}});Gd$=Yd$});function $U6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Wd$(){let $=new H1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!aG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||fZ(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(es1(N)!==G)continue;if(!$U6(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Kd$=D(()=>{U8();XO()});var Hd$;var Fd$=D(()=>{Hd$={name:"decocms",version:"4.303.10",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function QU6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??XU6}}var Nd$,XU6="https://ph.studio.decocms.com",Ud$;var Bd$=D(()=>{U8();h50();yC();Z9();R$();G91();Fd$();Nd$=new H1;Nd$.get("/",($)=>{let Z={version:Hd$.version,theme:Ti1(),...TH().logo&&{logo:TH().logo},...NN()&&{internalUrl:sC1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Dy$(),posthog:QU6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:Ts()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Ud$=Nd$});function pu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function R71($){return(pu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Dd$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(pu($))}&sz=${Z}`}function Od$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function Ld$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?Od$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Od$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var Dv,YU6,GU6,JU6,WU6,wd$;var Ed$=D(()=>{Dv=l0.enum(["good","bad","neutral"]),YU6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:Dv.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),GU6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(YU6)),JU6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},WU6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:Dv.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:Dv.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:Dv.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:Dv.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(GU6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:Dv.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:Dv.optional()})).min(1)})]),wd$=l0.object({...JU6,template:WU6})});function DT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=wd$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var I71=D(()=>{Ed$()});import{join as jd$}from"path";async function FU6($){try{let Z=await fetch(`${GK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(KU6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=DT0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||R71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function wG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function HU6($,Z){let X=pu($),Q=Z?.brand?.trim()||R71(X),Y=Dd$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Ld$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${wG(W)}</title>`,`<meta name="description" content="${wG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${wG(W)}" />`,`<meta property="og:description" content="${wG(K)}" />`,`<meta property="og:url" content="${wG(J)}" />`,`<meta property="og:image" content="${wG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${wG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${wG(W)}" />`,`<meta name="twitter:description" content="${wG(K)}" />`,`<meta name="twitter:image" content="${wG(F)}" />`,`<meta name="twitter:image:alt" content="${wG(H)}" />`,`<link rel="canonical" href="${wG(J)}" />`,`<link rel="icon" href="${wG(Y)}" sizes="any" />`].join(`
|
|
2880
|
+
`,j=await Z.createBlob(E);await Al$(Z.owner,Z.repo,j,E);let z=w[0]??`${WT0(Q)}/${N71(O)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let O of $.del)for(let L of w71(K,O))F.push({path:L,mode:"100644",type:"blob",sha:null}),H.delete(L);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=Ks(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),B=await Z.createCommit({message:kN6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof h4&&O.status===422)||Y>=IN6-1)throw O;await L$(sZ(2000,200,Y,2,0.5))}}}function kN6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return am0(Q,$.deps.coAuthor)}var IN6=3,A71;var hl$=D(()=>{gO0();$T0();W4();dD();KT0();A71=new Map});import{createHmac as ul$,randomBytes as VN6,timingSafeEqual as SN6}from"crypto";function cl$(){if(OT0)return OT0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return OT0=$?Buffer.from($):VN6(32),OT0}function T71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+CN6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=ul$("sha256",cl$()).update(Q).digest("base64url");return`${Q}.${Y}`}function ll$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(ul$("sha256",cl$()).update(Q).digest("base64url"));if(Y.length!==G.length||!SN6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var CN6=21600000,OT0=null;var dl$=D(()=>{R$()});import{z as iu}from"zod";function vN6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&_N6.test($)}function tl$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Os($){let Z=$.get("decofileScope");return sA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Ds($,Z){if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function ol$(){let $=new H1;return $.use("/:virtualMcpId/:branch",nl$),$.use("/:virtualMcpId/:branch/*",nl$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Tl$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=T71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(tl$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await Os(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return Ds(Z,Y)}}),$.patch("/:virtualMcpId/:branch",bN6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=xN6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{eA0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await Os(Z),W=await gl$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:hu(Q)},G),K=T71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:tl$(Z)})}catch(J){return Ds(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof h4&&W.status===409))throw W;await NT0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof h4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof h4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof h4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return Ds(Z,Q)}}),$}var _N6,ml$=500,il$=1048576,pl$=1024,fN6=8388608,bN6,xN6,nl$;var rl$=D(()=>{vn0();$T0();U8();wF();$71();aA0();z71();H71();hl$();dl$();j71();dD();KT0();_N6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;bN6=n5({maxSize:fN6,onError:($)=>$.json({error:"Payload too large"},413)}),xN6=iu.object({set:iu.record(iu.string(),iu.unknown()).optional(),delete:iu.array(iu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=ml$,{message:`Patch cannot touch more than ${ml$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=il$),{message:`Each block must be at most ${il$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=pl$),{message:`Each block key must be at most ${pl$} characters`}),nl$=rA0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!vN6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!ll$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!dO0(K))return $.json({error:"Project has no preview server configured"},404);let H=W.connections?.map((B)=>B.connection_id)??[],N=Us(K,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var al$=($)=>{let Z=new H1;if(Z.use("*",Xv),Z.route("/",BA0()),Z.route("/",Bg$()),Z.route("/",jc$()),Z.route("/",Lc$()),Z.route("/",nA0()),Z.route("/tools",qc$()),Z.route("/",Tc$()),Z.route("/",ou$({kvStorage:$.kvStorage})),Z.route("/",nu$()),Z.route("/fs",Fc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",xl$()),Z.route("/decofile",ol$()),Z.route("/",Bc$()),Z.route("/deco-sites",DA0()),Z.route("/sso",WA0()),Z.route("/",tA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Gg$()),$.mountDevAssets)Z.route("/dev-assets",LA0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",Ib$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",Nc$()),Z.route("/mcp",ww0()),Z.route("/mcp/self",pA0()),Z.route("/mcp",zw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var sl$=D(()=>{U8();A91();Jg$();q91();wA0();fa();z91();tu$();ru$();Hc$();ct();O91();Pw0();nZ1();Uc$();Oc$();wc$();zc$();Rc$();oZ1();Mc$();rZ1();Ew0();yl$();rl$()});function yN6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var gN6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},el$=()=>{let $=new H1;return $.use("*",gN6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await tZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:yN6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var $d$=D(()=>{U8();R$();NP0()});import{z as M1}from"zod";function AF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function tN6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function oN6($,Z,X){try{return JSON.parse($)}catch{throw new Qd$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function rN6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:oN6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function aN6($){let Z=$.map((X)=>{let Q=X.function.parameters?mY(X.function.parameters):mY({type:"object",properties:{}});return[X.function.name,h$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function sN6($){if(!$)return;return{openai:{response_format:$}}}function eN6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Zd$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Xd$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var hN6=256,uN6,cN6,lN6,dN6,mN6,iN6,pN6,nN6,Qd$,Yd$,Gd$;var Jd$=D(()=>{l4();U8();gu();RN();uN6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),cN6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),lN6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(cN6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),dN6=M1.object({type:M1.literal("text")}),mN6=M1.object({type:M1.literal("json_object")}),iN6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),pN6=M1.union([dN6,mN6,iN6]),nN6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(lN6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(uN6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:pN6.optional(),user:M1.string().optional()});Qd$=class Qd$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Yd$=new H1;Yd$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(AF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(AF("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(AF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=nN6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(AF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=tN6(G.model);if(!J)return $.json(AF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>Ww(j.providerId));if(!E)return $.json(AF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(AF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=rN6(G.messages),U=G.tools?aN6(G.tools):void 0,B=sN6(G.response_format),O=eN6(),L=Math.floor(Date.now()/1000);if(G.stream)return iN($,async(w)=>{let E=Zd$(H,N,U,G,B,$.req.raw.signal);try{let j=AO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=hN6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Xd$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=Zd$(H,N,U,G,B,$.req.raw.signal),E=await zO(w),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:Xd$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(AF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(AF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(AF(Y.message,"server_error"),500)}});Gd$=Yd$});function $U6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Wd$(){let $=new H1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!aG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||fZ(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(es1(N)!==G)continue;if(!$U6(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Kd$=D(()=>{U8();XO()});var Hd$;var Fd$=D(()=>{Hd$={name:"decocms",version:"4.303.11",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function QU6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??XU6}}var Nd$,XU6="https://ph.studio.decocms.com",Ud$;var Bd$=D(()=>{U8();h50();yC();Z9();R$();G91();Fd$();Nd$=new H1;Nd$.get("/",($)=>{let Z={version:Hd$.version,theme:Ti1(),...TH().logo&&{logo:TH().logo},...NN()&&{internalUrl:sC1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Dy$(),posthog:QU6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:Ts()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Ud$=Nd$});function pu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function R71($){return(pu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Dd$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(pu($))}&sz=${Z}`}function Od$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function Ld$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?Od$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Od$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var Dv,YU6,GU6,JU6,WU6,wd$;var Ed$=D(()=>{Dv=l0.enum(["good","bad","neutral"]),YU6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:Dv.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),GU6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(YU6)),JU6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},WU6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:Dv.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:Dv.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:Dv.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:Dv.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(GU6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:Dv.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:Dv.optional()})).min(1)})]),wd$=l0.object({...JU6,template:WU6})});function DT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=wd$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var I71=D(()=>{Ed$()});import{join as jd$}from"path";async function FU6($){try{let Z=await fetch(`${GK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(KU6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=DT0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||R71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function wG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function HU6($,Z){let X=pu($),Q=Z?.brand?.trim()||R71(X),Y=Dd$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Ld$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${wG(W)}</title>`,`<meta name="description" content="${wG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${wG(W)}" />`,`<meta property="og:description" content="${wG(K)}" />`,`<meta property="og:url" content="${wG(J)}" />`,`<meta property="og:image" content="${wG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${wG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${wG(W)}" />`,`<meta name="twitter:description" content="${wG(K)}" />`,`<meta name="twitter:image" content="${wG(F)}" />`,`<meta name="twitter:image:alt" content="${wG(H)}" />`,`<link rel="canonical" href="${wG(J)}" />`,`<link rel="icon" href="${wG(Y)}" sizes="any" />`].join(`
|
|
2881
2881
|
`)}function NU6($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
|
|
2882
2882
|
</head>`)}function zd$($){let Z=new H1;return Z.get("/:domain/og.png",async(X)=>{let Q=pu(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(jd$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${GK({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(UU6)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?jd$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await FU6(pu(Q)),K=HU6(Q,W);return X.html(NU6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var KU6=2500,UU6=1e4;var Pd$=D(()=>{U8();I71();NE();R$()});function Ls($,Z){return fetch(`${GK({})}${$}`,Z)}async function BU6($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await Ls(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=DT0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var OU6,nN,Ad$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},Td$;var Rd$=D(()=>{U8();uY();NE();I71();OU6=new Set(["complete","errored","terminated","unknown"]),nN=new H1;nN.use("*",async($,Z)=>{let X=await s$.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});nN.use("/link-token/*",Ad$);nN.use("/suggest",Ad$);nN.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await BU6(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});nN.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Ls("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${HE({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});nN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Ls(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${HE({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:OU6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});nN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Ls(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});nN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Ls(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});Td$=nN});import{createHmac as DU6,timingSafeEqual as LU6}from"crypto";function qd$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let F of Z.split(",")){let H=F.indexOf("=");if(H<=0)continue;let N=F.slice(0,H).trim(),U=F.slice(H+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>wU6)return!1;let W=DU6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((F)=>{let H=Buffer.from(F,"hex");return K.length===H.length&&LU6(K,H)})}function Md$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=yJ(Z),Q=yJ(yJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:TF(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function kd$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function TF($){return typeof $==="string"?$:void 0}function yJ($){return typeof $==="object"&&$!==null?$:void 0}function LT0($){return typeof $==="number"?new Date($*1000):null}function k71($){return TF($)??TF(yJ($)?.id)}function EU6($){return k71($.subscription)??TF(yJ(yJ($.parent)?.subscription_details)?.subscription)}function jU6($){let Z=LT0($.current_period_end);if(Z)return Z;let X=yJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=yJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function q71($,Z){let X=LT0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function M71($,Z){let X=LT0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function zU6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=TF(yJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(TF(yJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(TF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=TF(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(yJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:yJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(TF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=k71(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(q71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:k71(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:M71(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=TF(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&q71(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":kd$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:jU6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:M71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=EU6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(q71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:LT0(X.period_end),lastStripeEventAt:M71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function PU6($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:kd$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function Id$($,Z){let X=PU6($,Z);if(!X)return;xY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Cn1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Vd$($){let Z=new ZK(r8().db),X=await zU6(Z,$);if(!(X.handled&&X.topUp))Id$($,X);if(X.handled&&X.topUp)await pE$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),Id$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await re1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof cY&&(Q.status===400||Q.status===404)))throw Q}return X}var wU6=300;var Sd$=D(()=>{iG();S4();E50();zE();g01()});var AU6=1048576,V71;var Cd$=D(()=>{U8();wF();R$();Sd$();V71=new H1;V71.post("/webhook",n5({maxSize:AU6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!qd$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Md$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Vd$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as TU6}from"crypto";function IU6($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return TU6(Buffer.from(Y),Buffer.from(Q))}var RU6=5242880,S71;var _d$=D(()=>{U8();wF();d3();S71=new H1;S71.post("/webhook",n5({maxSize:RU6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!IU6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await Cn0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function vd$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var fd$,qU6,MU6,bd$;var xd$=D(()=>{U8();P3();Ug();Xy();fd$=new H1,qU6=["range","if-none-match","if-modified-since"],MU6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];fd$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(ju($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new Z$(401,{message:"Authentication required"})}if(!X)throw new Z$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new Z$(400,{message:"Missing file key"});let Y=await Ut(Q,Z);if(!Y)throw new Z$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&oG()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new Z$(500,{message:"Invalid data URL from storage"});let[,F,H]=K,N=Buffer.from(H,"base64"),U=new Headers({"Content-Type":F,"Cache-Control":"private, max-age=86400"});return vd$(U,F),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of qU6){let F=$.req.header(K);if(F)G.set(K,F)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new Z$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new Z$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of MU6){let F=J.headers.get(K);if(F)W.set(K,F)}return W.set("Cache-Control","private, max-age=86400"),vd$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});bd$=fd$});var ws=_((Lv)=>{var kU6=Lv&&Lv.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),VU6=Lv&&Lv.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))kU6(Z,$,X)};Object.defineProperty(Lv,"__esModule",{value:!0});VU6(PY(),Lv)});var hd$=_((yd$)=>{Object.defineProperty(yd$,"__esModule",{value:!0});yd$.version=void 0;yd$.version="3.4.0"});var ld$=_((RF)=>{var SU6=RF&&RF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(RF,"__esModule",{value:!0});RF.NodeTransport=RF.VERSION=void 0;RF.nodeResolveHost=xU6;var s6=ws(),CU6=z0("net"),C71=z0("tls"),_U6=z0("path"),ud$=z0("fs"),vU6=SU6(z0("dns")),fU6=hd$();RF.VERSION=fU6.version;var bU6="nats.js";class cd${socket;version;lang;yields=[];signal=(0,s6.deferred)();closedNotification=(0,s6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=bU6,this.version=RF.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,s6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw s6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new s6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new s6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,s6.deferred)(),X,Q=(0,CU6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,s6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=s6.DataBuffer.concat(...this.yields),Y=(0,s6.extractProtocolMessage)(Q);if(Y!=="")try{let G=s6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,s6.deferred)();try{if($=(0,_U6.resolve)($),!(0,ud$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,ud$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,s6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new s6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,s6.deferred)();try{let Y=(0,C71.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new s6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,s6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new s6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,s6.deferred)();try{let Q=(0,C71.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new s6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,s6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,s6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof C71.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,s6.render)($)}`);let Z=(0,s6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,s6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,s6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}RF.NodeTransport=cd$;function xU6($){let Z=(0,s6.deferred)();return vU6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var nd$=_((pd$)=>{Object.defineProperty(pd$,"__esModule",{value:!0});pd$.connect=yU6;var dd$=ld$(),md$=ws(),id$=ws();function yU6($={}){if((0,id$.hasWsProtocol)($))return Promise.reject(id$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,md$.setTransportFactory)({factory:()=>{return new dd$.NodeTransport},dnsResolveFn:dd$.nodeResolveHost}),md$.NatsConnectionImpl.connect($)}});var td$=_((tN)=>{var hU6=tN&&tN.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),uU6=tN&&tN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))hU6(Z,$,X)};Object.defineProperty(tN,"__esModule",{value:!0});tN.connect=void 0;var cU6=nd$();Object.defineProperty(tN,"connect",{enumerable:!0,get:function(){return cU6.connect}});uU6(ws(),tN)});function sd$($){let Z=$?.connectFn??iU6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function F(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function H(U){(async()=>{for await(let B of U.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,F()})().catch(()=>{})}async function N(U,B){let O=0;while(!G)try{X=await Z({servers:U,timeout:mU6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,H(X),F();return}catch{O++;let L=sZ(dU6,lU6,O-1,2,0.5);await L$(L)}}return{init(U,B){if(Y)return;Y=!0,G=!1;let O=B?.creds?od$.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;N(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=ad$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function iU6($){return rd$.connect($)}var od$,rd$,ad$,lU6=100,dU6=3000,mU6=3000;var ed$=D(()=>{W4();od$=V(wc(),1),rd$=V(td$(),1),ad$=V(OL(),1)});function _71($,Z){return`${$}.${Z}`}class v71{cache;constructor($){this.cache=$u({ttlMs:$?.ttlMs??pU6,maxSize:$?.maxSize??nU6})}async get($,Z){return this.cache.get(_71($,Z))??null}async set($,Z,X){this.cache.set(_71($,Z),X)}async invalidate($,Z){this.cache.delete(_71($,Z))}teardown(){this.cache.clear()}}var pU6=600000,nU6=5000;var $m$=()=>{};function wT0($,Z){return`${$}:${Z}`}function f71($){let Z=$u({ttlMs:$?.ttlMs??tU6,maxSize:$?.maxSize??oU6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,F){let H=X?.();if(!H)return;try{H.publish(Zm$,Y.encode(JSON.stringify({organizationId:K,keyId:F,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,F){return Z.get(wT0(K,F))},set(K,F,H){Z.set(wT0(K,F),H)},invalidate(K,F){Z.delete(wT0(K,F)),W(K,F)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Zm$),(async()=>{for await(let F of J)try{let H=JSON.parse(G.decode(F.data));if(H.originId===Q)continue;Z.delete(wT0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Zm$="studio.ai-provider-keys.invalidate",tU6=30000,oU6=5000;var Xm$=()=>{};class b71{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder,Q=Z.subscribe("studio.decopilot.cancel");this.subscription=Q,(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var Qm$=($)=>{let Z;return()=>Z??=$()},x71,y71;var Ym$=D(()=>{I6();x71=Qm$(()=>w$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),y71=Qm$(()=>w$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function XB6($=Wm$){return{name:mK,subjects:[`${sr0}.>`],storage:DW.StorageType.File,max_age:sU6,max_bytes:$B6,max_msgs_per_subject:ZB6,discard:DW.DiscardPolicy.Old,retention:DW.RetentionPolicy.Limits,duplicate_window:eU6,num_replicas:$}}class Km${chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record($,Z){if(this.chunks++,this.encodeMs+=$,$>this.maxMs)this.maxMs=$;this.bytes+=Z}flush(){let $=performance.now(),Z=$-this.windowStart;if(this.chunks>0&&Z>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(Z),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/Z*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=$}}function Gm$($){let Z=Jm$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function JB6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,aU6().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function WB6($,Z){return $.info?.cluster?Z:1}function KB6($){if(!($ instanceof Error))return!1;if(/non-clustered/i.test($.message))return!0;return/replicas?\b/i.test($.message)&&/not supported|can ?not|exceed|insufficient|greater than/i.test($.message)}class g71{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=async(Q,Y)=>{let G=XB6(Y);try{await Q.streams.info(mK),await Q.streams.update(mK,G)}catch(J){if(J instanceof Error&&J.message.includes("stream not found"))await Q.streams.add(G),await Q.streams.update(mK,G);else if(J instanceof Error&&/can ?not change.*storage|storage type/i.test(J.message))await Q.streams.delete(mK),await Q.streams.add(G);else throw J}},X=await g6(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await DW.jetstreamManager($),Y=WB6($,Wm$);try{await Z(Q,Y)}catch(G){if(Y<=1||!KB6(G))throw G;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${Y} (${G.message}); falling back to an unreplicated stream`),await Z(Q,1)}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:Tg});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=JB6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let F=fB$(Z);Y.publish(F.subject,F.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(F)=>{let H=performance.now(),N=$a0(F,{runId:Z}),U=performance.now()-H;x71().record(U),y71().add(1,{"org.id":Q??"unknown"}),GB6?.record(U,N.reduce((B,O)=>B+O.data.length,0));for(let B of N)G.publish(Y,B.subject,B.data,B.headers?Gm$(B.headers):void 0)};return(async()=>{let F=$.getReader(),H=0,N=0,U;try{while(!0){let{done:B,value:O}=await F.read();if(B)break;if(K(O),N++,++H>=64)H=0,await new Promise((L)=>setImmediate(L))}}catch(B){U=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(F.releaseLock(),W(),YB6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishSerialized($,Z){try{return await g6(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:Gm$(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Tg}),!0}catch(X){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,X),!1}}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=$a0(Z,{runId:$,dedup:X});x71().record(performance.now()-Y),y71().add(1);for(let J of G)if(!await this.publishSerialized(Q,J))return!1;return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=vB$({runId:$,fenceToken:Z,finalSeq:X});return await this.publishSerialized(Q,Y)}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?DW.DeliverPolicy.New:DW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=GD($),W;try{W=await g6(async()=>{return(await Q.consumers.get(mK,{filter_subjects:J,deliver_policy:Y})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Tg})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let H=aL0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(nL0()).pipeThrough(tL0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{H.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:E}=await H.read();if(w){O(),L.close();return}let j=E;if(j.kind==="done"){if(G){O(),L.close();return}continue}L.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(mK,{filter:GD($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var DW,Jm$,rU6=($)=>{let Z;return()=>Z??=$()},aU6,sU6=86400000000000,eU6=120000000000,$B6=4294967296,Wm$,ZB6=500000,QB6,YB6,GB6;var Fm$=D(()=>{W4();Za0();sL0();oL0();I6();Ym$();DW=V(OL(),1),Jm$=V(wc(),1),aU6=rU6(()=>w$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),Wm$=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);QB6=process.env.STREAM_ENCODE_TRACE==="1",YB6=process.env.DECOPILOT_STREAM_TRACE==="1";GB6=QB6?new Km$:null});function ET0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,gW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var Hm$=D(()=>{_8()});class h71{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}async function Nm$($,Z,X){let Q=Z.organizationId;if(!aQ(Z))return!1;if(!vC(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.organizationSettings.get(Q),G=DK(Y?.flags),J=await E5($,Q),W=await $.storage.taskBoard.update(Z.id,Q,KJ(J,G),Z.updatedBy);return await z6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:G,reason:"pr_merged"}}),b$(Q,W),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${G}`),!0}var Um$=D(()=>{C6();KX();Fg();aY();bK();j5()});function DB6($){return $ instanceof tX}function LB6($,Z){return Z-$>=BB6}class u71{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??FB6;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??NB6,X=this.options.itemIntervalMs??HB6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-jt0),wo0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-OB6));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await Oo0(this.taskBoard,Y,Q),await Do0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==X8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await FN(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),DB6(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+UB6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),b$(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!LB6(fH(X,Z.reviewCycleStartedAt),Date.now()))return;await gK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(!aQ(Q))return!1;let Y=Q.assigneeId===X8,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}let W=await Promise.all(G.map(async(K)=>({...K,...await Ng(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await Nm$(J,Q,W))return!0;if(await TO$(J,Q))return!0;if(!Y)return!1;if(!yo0(W))return!1;return await FL0(J,Q,{previewMatchesHead:go0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var FB6=60000,HB6=300000,NB6=50,UB6=60000,BB6=900000,OB6=120000;var Bm$=D(()=>{C6();ko0();WN();vt();bK();Um$();j5();eG();Eo0();XG();Kt()});import{readdir as wB6,rm as jT0}from"fs/promises";import{join as zT0}from"path";async function PT0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-EB6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await wv($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await Om$($,Y,Z);else if(!Y.startsWith(".")){let G=zT0($,Y),J=await wv(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Om$(G,K,Z)}if((await wv(G)).length===0)await jT0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Om$($,Z,X){let Q=0,Y=zT0($,Z),G=await wv(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=zT0(Y,W),F=await wv(K);for(let N of F){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let B=zT0(K,N);await jT0(B,{recursive:!0,force:!0}),Q++}}if((await wv(K)).length===0)await jT0(K,{recursive:!0,force:!0})}if((await wv(Y)).length===0)await jT0(Y,{recursive:!0,force:!0});return Q}async function wv($){try{return(await wB6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var EB6=30;var c71=()=>{};import{DBOS as l71,SchedulerMode as jB6}from"@dbos-inc/dbos-sdk";async function PB6(){let $=[hJ(),Ev(),kF()],Z=0;for(let X of $)try{Z+=await PT0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function AB6($,Z){await l71.runStep(()=>PB6(),{name:"monitoringRetention"})}function Lm$(){if(Dm$)return;Dm$=!0;let $=l71.registerWorkflow(AB6,{name:"monitoringRetentionWorkflow"});l71.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:zB6,mode:jB6.ExactlyOncePerIntervalWhenActive})}var zB6="23 4 * * *",Dm$=!1;var wm$=D(()=>{wY();c71()});function Em$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await UJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await Lt($.db,Z,Q.role);return Y.boundAuth=l51({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new tw(X,void 0,Y.boundAuth,Q.role,"self"),oO(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var jm$=D(()=>{ow();rO()});function TB6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function RB6(){return{services:TB6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function qB6(){for(let $ of IB6)$()}function zm$($){let Z=[...d71.logs,$];d71={...d71,logs:Z.length>500?Z.slice(-500):Z},qB6()}function m71(){return MB6}var d71,IB6,MB6=!1;var i71=D(()=>{d71=RB6(),IB6=new Set});import{EventEmitter as kB6}from"events";var p71;var Pm$=D(()=>{i71();p71=new kB6;p71.on("request",($)=>{zm$($)})});function Am$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let B=nu(U.params.name),O=U.params.arguments||{},L=Object.keys(O).map((E)=>nu(E)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";G=`${J5.tool}${B}${J5.dim}(${w})${J5.reset}`}else if(U.method)G=`${J5.dim}${nu(U.method)}${J5.reset}`}}catch{}}let W=nu(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${J5.mcp}${nu(H.slice(0,12))}\u2026${J5.reset}`}else if(Y==="/mcp")W=`${J5.mcp}/mcp${J5.reset}`;else if(Y==="/mcp/registry")W=`${J5.mcp}/mcp/registry${J5.reset}`;let K=SB6(Q),F=J?"\u25C0":"\u2190";if(!m71())console.log(`${J5.dim}${F}${J5.reset} ${K}${Q}${J5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let H=Date.now()-X,N=$.res.status,U=VB6(N),B=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!m71())console.log(`${J5.dim}${O}${J5.reset} ${K}${Q}${J5.reset} ${W}${G?` ${G}`:""} ${U}${N}${J5.reset} ${J5.duration}${B}${J5.reset}`);p71.emit("request",{method:Q,path:nu(Y),status:N,duration:H,timestamp:new Date})}}}var J5,VB6=($)=>{if($>=500)return J5.serverError;if($>=400)return J5.clientError;if($>=300)return J5.redirect;return J5.ok},SB6=($)=>{return J5[$]||J5.reset},nu=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Tm$=D(()=>{i71();Pm$();J5={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as Mm$}from"crypto";import{mkdir as CB6,readdir as _B6,rm as Rm$,stat as km$}from"fs/promises";import{join as t71,relative as vB6}from"path";import{z as P$}from"zod";function Sm$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return t71(fB6,Z)}function Cm$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function n71($,Z){let X=Sm$($),Q=Cm$(Z);return t71(X,Q)}function bB6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Mm$("sha256",Y).update(G).digest("hex")}function qm$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=bB6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Cm$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function _m$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Mm$("md5","etag").update(Q).digest("hex")}"`}async function vm$($,Z,X,Q,Y){try{let G=await _B6($,{withFileTypes:!0});for(let J of G){let W=t71($,J.name),F=vB6(Z,W).replace(/\\/g,"/");if(X&&!F.startsWith(X))continue;if(J.isDirectory())if(Q){let H=F+"/";if(!X||H.startsWith(X)){if(!(X?F.slice(X.length):F).includes("/"))Y.commonPrefixes.add(H)}}else await vm$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let H=F.slice(X.length);if(H.includes(Q)){let N=H.indexOf(Q),U=X+H.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let H=await km$(W);Y.objects.push({key:F,size:H.size,lastModified:H.mtime.toISOString(),etag:_m$(W,H.mtime,H.size)})}catch{}}}}catch{}}function fm$($,Z){let Q=o($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:P$.object({prefix:P$.string().optional(),maxKeys:P$.number().optional().default(1000),continuationToken:P$.string().optional(),delimiter:P$.string().optional()}),outputSchema:P$.object({objects:P$.array(P$.object({key:P$.string(),size:P$.number(),lastModified:P$.string(),etag:P$.string()})),nextContinuationToken:P$.string().optional(),isTruncated:P$.boolean(),commonPrefixes:P$.array(P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,F=G.continuationToken,H=Sm$(Q);await CB6(H,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await vm$(H,H,J,K,N),N.objects.sort((w,E)=>w.key.localeCompare(E.key));let U=0;if(F){if(U=N.objects.findIndex((w)=>w.key>F),U===-1)U=N.objects.length}let B=N.objects.slice(U,U+W),O=U+W<N.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({contentType:P$.string().optional(),contentLength:P$.number(),lastModified:P$.string(),etag:P$.string(),metadata:P$.record(P$.string(),P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=n71(Q,G.key),W=await km$(J);return{contentType:k91(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:_m$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Im$;return{url:qm$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional(),contentType:P$.string().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Im$;return{url:qm$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({success:P$.boolean(),key:P$.string()}),handler:async(Y)=>{let G=Y,J=n71(Q,G.key);try{return await Rm$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:P$.object({keys:P$.array(P$.string()).max(1000)}),outputSchema:P$.object({deleted:P$.array(P$.string()),errors:P$.array(P$.object({key:P$.string(),message:P$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let F=n71(Q,K);try{await Rm$(F),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function o71($,Z,X){let Q=fm$(Z,X),Y=new iW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:N5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:P$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:P$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(F)=>{try{let H=await J.handler(F);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let G=new YQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),PJ(Y,G,$,"mcp:dev-assets")}async function bm$($,Z,X,Q){let G=fm$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var fB6="./data/assets",Im$=3600,Vm$,xm$;var ym$=D(()=>{R$();Sg();U8();ud();Z_();hX();wA0();Vm$=new H1;Vm$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return o71($.req.raw,Z,Q)});xm$=Vm$});var gm$={};J4(gm$,{mountDevRoutes:()=>xB6});function xB6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return o71(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),F=await bm$(W,K,Y,J);if(F.isError)return Q.json(F.content,500);return Q.json(F.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",xm$);let X=new H1;X.use("*",BW({mountPath:"/api/dev-assets"})),X.route("/",LA0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var hm$=D(()=>{U8();P91();wA0();ym$()});import{sql as yB6}from"kysely";import{randomUUID as um$}from"crypto";import{z as gB6}from"zod";async function uB6($){let Z=new Date().toISOString(),X=um$(),Q=C8.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:um$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await yB6`SELECT
|
|
2883
2883
|
pg_notify('studio_events', ${X}),
|