decocms 2.181.1 → 2.181.2
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-CwQ-M1BH.js → AlertCircle-Hpsw9_tf.js} +1 -1
- package/dist/client/assets/{ArrowLeft-7hoUFjWA.js → ArrowLeft-U7OUoBhv.js} +1 -1
- package/dist/client/assets/{ArrowUp-C8UJr_8S.js → ArrowUp-BrSLqvQo.js} +1 -1
- package/dist/client/assets/{Check-wCq9US95.js → Check-CVKUMJv3.js} +1 -1
- package/dist/client/assets/{ChevronDown-C4UuUfvP.js → ChevronDown-Ds3IOx8p.js} +1 -1
- package/dist/client/assets/{ChevronRight-8vS2LfiE.js → ChevronRight-CTHCKnjF.js} +1 -1
- package/dist/client/assets/{ChevronUp-eUIC7wig.js → ChevronUp-DJbt-mXd.js} +1 -1
- package/dist/client/assets/{Container-OKF_GeCq.js → Container-D4n2e11R.js} +1 -1
- package/dist/client/assets/{Dataflow03-CYOanaoD.js → Dataflow03-q5kzWw4s.js} +1 -1
- package/dist/client/assets/{Download01-D6Ut3-TC.js → Download01-BBRbjA11.js} +1 -1
- package/dist/client/assets/{FolderClosed-DWPM1ogz.js → FolderClosed-CgbAGtho.js} +1 -1
- package/dist/client/assets/{Grid01-CFCqtKvs.js → Grid01-CbgVFQNg.js} +1 -1
- package/dist/client/assets/{List-Dm7hE_p7.js → List-D35z7ORx.js} +1 -1
- package/dist/client/assets/{Loading01-CKkwknOS.js → Loading01-DDv5lfhX.js} +1 -1
- package/dist/client/assets/{Play-B44HkfJ8.js → Play-Q9uDVIa5.js} +1 -1
- package/dist/client/assets/{Plus-B_tfkXz3.js → Plus-DcUxQQXw.js} +1 -1
- package/dist/client/assets/{RefreshCcw01-Dd-MCL9x.js → RefreshCcw01-nS96T2bf.js} +1 -1
- package/dist/client/assets/{SearchMd-DwH-zFLD.js → SearchMd-CTpXH6F3.js} +1 -1
- package/dist/client/assets/{Settings01-Cc_jPdtk.js → Settings01-BVY96Vsg.js} +1 -1
- package/dist/client/assets/{Trash01-DFCUs2vM.js → Trash01-CzfVJZjl.js} +1 -1
- package/dist/client/assets/{Type01-DmSAzri2.js → Type01-BwsSTKh1.js} +1 -1
- package/dist/client/assets/{Upload01-B4UOm_Kf.js → Upload01-Bn_9d04P.js} +1 -1
- package/dist/client/assets/{User01-a2C2h2ws.js → User01-Dl4j8Eui.js} +1 -1
- package/dist/client/assets/{VideoRecorder-b8m_Ituf.js → VideoRecorder-0-qQusnp.js} +1 -1
- package/dist/client/assets/{X-CVr_hKcl.js → X-DvXlEl9E.js} +1 -1
- package/dist/client/assets/{XCircle-Dv-O5jd1.js → XCircle-DI9HiD4A.js} +1 -1
- package/dist/client/assets/{XClose-DXhO2ZT2.js → XClose-Bw5018RM.js} +1 -1
- package/dist/client/assets/{Zap-D6ZQZPYh.js → Zap-DGbTVlYq.js} +1 -1
- package/dist/client/assets/{agent-connections-preview-hZGsihWU.js → agent-connections-preview-Cfflc0J5.js} +1 -1
- package/dist/client/assets/{agent-detail-D_DBZ4Bl.js → agent-detail-CehIC3W1.js} +1 -1
- package/dist/client/assets/{agents-CpLdJw8X.js → agents-DmtfY0M7.js} +1 -1
- package/dist/client/assets/{ai-providers-logos-HDlTKyFP.js → ai-providers-logos-BtOy-_hY.js} +1 -1
- package/dist/client/assets/{alert-dialog-Dqc_24Os.js → alert-dialog-CIdU20ao.js} +1 -1
- package/dist/client/assets/{auth-catchall-DZ2DNfI0.js → auth-catchall-DklKmwQO.js} +1 -1
- package/dist/client/assets/{automation-detail-5-Ty44fE.js → automation-detail-CIe1WG8E.js} +1 -1
- package/dist/client/assets/{automations-COLW1OP9.js → automations-KsqaYtsv.js} +1 -1
- package/dist/client/assets/{avatar-BCNSpjov.js → avatar-Dz9Au16I.js} +1 -1
- package/dist/client/assets/{badge-C9kSd2rC.js → badge-BIY4HSu4.js} +1 -1
- package/dist/client/assets/{binder-1tH_sZqU.js → binder-DaeU7_Yt.js} +1 -1
- package/dist/client/assets/{breadcrumb-BjaszutD.js → breadcrumb-DNInqlES.js} +1 -1
- package/dist/client/assets/{card-C_4nJrQs.js → card-CoTaf7Bb.js} +1 -1
- package/dist/client/assets/{checkbox-CKx9MIya.js → checkbox-UWf_Spym.js} +1 -1
- package/dist/client/assets/{collapsible-DKOKNSjC.js → collapsible-DGsDf05s.js} +1 -1
- package/dist/client/assets/{collection-detail-CpVZhrBd.js → collection-detail-jT6_1Zus.js} +1 -1
- package/dist/client/assets/{collection-display-button-07J7hFqi.js → collection-display-button-CIwF6qiP.js} +1 -1
- package/dist/client/assets/{collection-search-C014T-nI.js → collection-search-DmeA1lkM.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-1AJGYm4t.js → collection-table-wrapper-DZ9kkHHz.js} +1 -1
- package/dist/client/assets/{collection-tabs-BZp_rh35.js → collection-tabs-VEtVQj8e.js} +1 -1
- package/dist/client/assets/{command-DOoFRPUJ.js → command-DS9L8dE9.js} +1 -1
- package/dist/client/assets/{connection-card-Dvo5xeIo.js → connection-card-DY8BmloD.js} +1 -1
- package/dist/client/assets/{connection-detail-B512SIke.js → connection-detail-D6zDmZps.js} +1 -1
- package/dist/client/assets/{connections-BOj_J2If.js → connections-BvDULZyp.js} +1 -1
- package/dist/client/assets/{constants-C2NIYyeK.js → constants-C5g6K3-0.js} +1 -1
- package/dist/client/assets/{context-Cfhj-jDE.js → context-0-m5aPvK.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-CoH8Z4xz.js → create-organization-dialog-Bw7JkHCW.js} +1 -1
- package/dist/client/assets/{create-project-dialog-Bo88aywl.js → create-project-dialog-CofGaj8t.js} +1 -1
- package/dist/client/assets/{danger-Cm2vTS1T.js → danger-BxwsLFA0.js} +1 -1
- package/dist/client/assets/{danger-zone-DT2ENIL0.js → danger-zone-DNgGGkaE.js} +1 -1
- package/dist/client/assets/{dependencies-DwJHkCHB.js → dependencies-CscQrQx3.js} +1 -1
- package/dist/client/assets/{dialog-D2mcZnzN.js → dialog-Beaz2erB.js} +1 -1
- package/dist/client/assets/{drawer-vD6YQ-sA.js → drawer-DuM10S-O.js} +1 -1
- package/dist/client/assets/{dropdown-menu-5AX5yqCQ.js → dropdown-menu-IA1w2fjK.js} +1 -1
- package/dist/client/assets/{dynamic-plugin-layout-CVwFp6hh.js → dynamic-plugin-layout-CtDEEZnp.js} +1 -1
- package/dist/client/assets/{editable-task-title-DSaRvdkK.js → editable-task-title-DuDIwQf_.js} +1 -1
- package/dist/client/assets/{empty-state-BnwPT1fd.js → empty-state-DnJSxmJA.js} +1 -1
- package/dist/client/assets/{empty-state-C_h_kfhM.js → empty-state-hwIP0sm6.js} +1 -1
- package/dist/client/assets/{env-vars-editor-Cdhuqusz.js → env-vars-editor-Ceyzo9UT.js} +1 -1
- package/dist/client/assets/{extract-connection-data-BJKmDa-6.js → extract-connection-data-D13QyL30.js} +1 -1
- package/dist/client/assets/{file-browser-C-yRGqGr.js → file-browser-B-JXooL8.js} +2 -2
- package/dist/client/assets/{form-3OFR-VJQ.js → form-CccEC3cm.js} +1 -1
- package/dist/client/assets/{general-Bc8nPdrN.js → general-axIGxWAv.js} +1 -1
- package/dist/client/assets/{generate-id-Dz9QYszT.js → generate-id-0beDKMoR.js} +1 -1
- package/dist/client/assets/{grid-view-B8S8xAuj.js → grid-view-VGzy6bo9.js} +1 -1
- package/dist/client/assets/{home-CgBkZx75.js → home-ED4EKgWV.js} +1 -1
- package/dist/client/assets/{index-1_kpvnU4.js → index-Be3yjubl.js} +1 -1
- package/dist/client/assets/{index-Ums8T5hF.js → index-BfJLXP0j.js} +1 -1
- package/dist/client/assets/{index-t6xY8FYJ.js → index-BjxqoU_w.js} +3 -3
- package/dist/client/assets/{index-B0rHyq8i.js → index-C2aMuEoP.js} +1 -1
- package/dist/client/assets/{index-CU9cIMQQ.js → index-CDessA1I.js} +1 -1
- package/dist/client/assets/{index-BN5_gDph.js → index-DQTOgFOw.js} +1 -1
- package/dist/client/assets/{index-aw4p2K_Q.js → index-DqQdLYr7.js} +1 -1
- package/dist/client/assets/{index-CqfM11ms.js → index-DsV3YD3P.js} +1 -1
- package/dist/client/assets/{index-D9tlV5w6.js → index-DxFKywdp.js} +1 -1
- package/dist/client/assets/{index-CpTXJjPF.js → index-JasJqXzm.js} +1 -1
- package/dist/client/assets/{index-BKuN2Iot.js → index-VZp2CIbR.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-cSGG5mU_.js → infiniteQueryObserver-C0OPB4rx.js} +1 -1
- package/dist/client/assets/{input-qMconvxq.js → input-Be0bLLQW.js} +1 -1
- package/dist/client/assets/{integration-icon-BlldxArX.js → integration-icon-C9ac9VOj.js} +1 -1
- package/dist/client/assets/{label-DQB9xwZM.js → label-C6smVCIk.js} +1 -1
- package/dist/client/assets/{layout-D0kNFrGz.js → layout-CYi_63K3.js} +1 -1
- package/dist/client/assets/{layout-CXznpTUY.js → layout-D0N63fj1.js} +1 -1
- package/dist/client/assets/{login-ByYrGnuD.js → login-B4SjGwXr.js} +1 -1
- package/dist/client/assets/{logo-upload-DXmtyQTR.js → logo-upload-DwLQLlu7.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-BgFTGV3R.js → mcp-app-renderer-BWF6RI84.js} +1 -1
- package/dist/client/assets/{mcp-server-card-CbbQ9zmv.js → mcp-server-card-ksfI1Eyh.js} +1 -1
- package/dist/client/assets/{mcp-server-detail-C4NpEsJs.js → mcp-server-detail-Cb-T_-Mb.js} +2 -2
- package/dist/client/assets/{members-DwVIkRhC.js → members-DJ6DA7d5.js} +1 -1
- package/dist/client/assets/{monaco-editor-DlS1kIEY.js → monaco-editor-D0GS_D3E.js} +1 -1
- package/dist/client/assets/{monitoring-dashboard-edit-B-Anvw32.js → monitoring-dashboard-edit-Bxyyp3mT.js} +1 -1
- package/dist/client/assets/{monitoring-dashboard-view-B4EKAI4H.js → monitoring-dashboard-view-D1jhpkzD.js} +1 -1
- package/dist/client/assets/{monitoring-BP_I8oHA.js → monitoring-osT0IqjS.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-_pMtDdXo.js → monitoring-stats-row-BzJ0yham.js} +1 -1
- package/dist/client/assets/{oauth-callback-oqOHT12Q.js → oauth-callback-B9dLIXA2.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-BQrF4HBs.js → oauth-callback-ai-provider-mFsE32vf.js} +1 -1
- package/dist/client/assets/{org-ai-providers-DJ2pJYJP.js → org-ai-providers-UG6FIdxB.js} +1 -1
- package/dist/client/assets/{page-BwYkJelt.js → page-C4W1F739.js} +1 -1
- package/dist/client/assets/{page-C2dXKJSu.js → page-Drtt1B9w.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-CWHcbfRs.js → plugin-empty-state-C-XfLac2.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-ZcHYGE5m.js → plugin-empty-state-C7t75jMS.js} +1 -1
- package/dist/client/assets/{plugin-header-CYJy88Hz.js → plugin-header-5ST0P5Q7.js} +1 -1
- package/dist/client/assets/{plugin-header-BdlNegyr.js → plugin-header-BJKUaApF.js} +1 -1
- package/dist/client/assets/plugins-EgDqBTdv.js +1 -0
- package/dist/client/assets/{popover-CRTw2B4t.js → popover-Dn0X9Fr1.js} +1 -1
- package/dist/client/assets/{project-app-view-Dd-mlwjV.js → project-app-view-CcUsagsx.js} +1 -1
- package/dist/client/assets/{project-layout-B74T6y-f.js → project-layout-D9UABDEG.js} +1 -1
- package/dist/client/assets/{project-plugins-wKxoF0hg.js → project-plugins-B2zBuBKC.js} +1 -1
- package/dist/client/assets/{projects-list-wmEMeN4i.js → projects-list-BWN1T4nW.js} +1 -1
- package/dist/client/assets/{registry-layout-BTO44Pm9.js → registry-layout-tQMWJSmp.js} +1 -1
- package/dist/client/assets/{registry-utils-q14xY1bA.js → registry-utils-CVkiAvdy.js} +1 -1
- package/dist/client/assets/{reset-password-BzKcrrar.js → reset-password-DJ4VaB6B.js} +1 -1
- package/dist/client/assets/{resizable-Cd0SSbbe.js → resizable-BD6CMEjd.js} +1 -1
- package/dist/client/assets/{save-actions--GeWosdW.js → save-actions-BFbH4lFH.js} +1 -1
- package/dist/client/assets/{scroll-area-XEIbL86H.js → scroll-area-VqeDMOPN.js} +1 -1
- package/dist/client/assets/{select-D64t3Q_g.js → select-VEJvYQo7.js} +1 -1
- package/dist/client/assets/{select-virtual-mcp-7C78QF32.js → select-virtual-mcp-BVFbfMoH.js} +1 -1
- package/dist/client/assets/{shell-layout-ClRvSlWW.js → shell-layout-lPP98AcT.js} +2 -2
- package/dist/client/assets/{sidebar-settings-DgIvJCIQ.js → sidebar-settings-Cvi9DQQC.js} +1 -1
- package/dist/client/assets/{skeleton-BPyW696G.js → skeleton-HKYMRn58.js} +1 -1
- package/dist/client/assets/{spinner-CV28jHZI.js → spinner-BFdTwge6.js} +1 -1
- package/dist/client/assets/{store-invite-DbwSzRRK.js → store-invite-BqHShMlA.js} +1 -1
- package/dist/client/assets/{switch-BI7Srio5.js → switch-CG6Wlm7Y.js} +1 -1
- package/dist/client/assets/{table-CvLgTwxu.js → table-C915-j5j.js} +1 -1
- package/dist/client/assets/{tabs-BcgepvIr.js → tabs-EJf8mrdN.js} +1 -1
- package/dist/client/assets/{task-status-E_WeHLB-.js → task-status-DwSGaLCq.js} +1 -1
- package/dist/client/assets/tasks-B-KbBDgd.js +1 -0
- package/dist/client/assets/{tasks-panel-CgnSZwBZ.js → tasks-panel-j-1pM09U.js} +1 -1
- package/dist/client/assets/{textarea-BjXJvI0O.js → textarea-BpJcJgEu.js} +1 -1
- package/dist/client/assets/{time-range-picker-CTHuop4k.js → time-range-picker-CBrng89O.js} +1 -1
- package/dist/client/assets/{toggle-group-DF6ThyrQ.js → toggle-group-D3jOZx6Z.js} +1 -1
- package/dist/client/assets/{tools-list-BYjVtR4b.js → tools-list-BJKvrBYn.js} +1 -1
- package/dist/client/assets/{tooltip-CKRAIo8e.js → tooltip-SqkLa6wk.js} +1 -1
- package/dist/client/assets/{topbar-portal-w0rGTzsN.js → topbar-portal-Ul2d-lg1.js} +1 -1
- package/dist/client/assets/{types-CEJbDNRj.js → types-CdHbWvSx.js} +1 -1
- package/dist/client/assets/{use-automations-CZzmdooE.js → use-automations-xjYa92g6.js} +1 -1
- package/dist/client/assets/{use-collections-CLlnuJpl.js → use-collections-Zp8eOwPm.js} +1 -1
- package/dist/client/assets/{use-connection-DSXGpH93.js → use-connection-B-vgK3kN.js} +1 -1
- package/dist/client/assets/{use-copy-C8N2hXkR.js → use-copy-Bor2cPit.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-CCjeFnH5.js → use-create-virtual-mcp-DLLVUJBK.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-C1MEbO72.js → use-infinite-scroll-QweqoXs4.js} +1 -1
- package/dist/client/assets/{use-install-from-registry-OGBcaDCK.js → use-install-from-registry-BWF2XusE.js} +1 -1
- package/dist/client/assets/{use-list-state-CsPnDRB0.js → use-list-state-BpX2jytt.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-DSysuR0s.js → use-mcp-prompts-qi4FHPHh.js} +1 -1
- package/dist/client/assets/{use-mcp-resources-BWxiCCmX.js → use-mcp-resources-B8ERGBbF.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-Ca8lRrYA.js → use-mcp-tools-DNLvgz5O.js} +1 -1
- package/dist/client/assets/{use-members-CRSSGJnt.js → use-members-CcTYAvXH.js} +1 -1
- package/dist/client/assets/{use-project-Cpu-iDuV.js → use-project-D_8V3WFM.js} +1 -1
- package/dist/client/assets/{use-store-discovery-1Qhmse-y.js → use-store-discovery-iIFblh2E.js} +1 -1
- package/dist/client/assets/{use-view-mode-CjInGBUv.js → use-view-mode-BBlaOBUn.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-D5bKIffF.js → use-virtual-mcp-BnUWdVw5.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-KvMZbxSR.js +1 -0
- package/dist/client/assets/{useMutation-Bncnalv9.js → useMutation-oWI4nFQG.js} +1 -1
- package/dist/client/assets/useQuery-CmP1G4DA.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-4eRk30PP.js +1 -0
- package/dist/client/assets/{user-CwGhUrKE.js → user-BtGr8jKI.js} +1 -1
- package/dist/client/assets/{workflow-D6XUy7ku.js → workflow-CKtu7TZc.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +7 -2
- package/dist/server/server.js +7 -2
- package/package.json +1 -1
- package/dist/client/assets/plugins-vFW-WlI8.js +0 -1
- package/dist/client/assets/tasks-Db5wfUei.js +0 -1
- package/dist/client/assets/useInfiniteQuery-C-1ZqiFa.js +0 -1
- package/dist/client/assets/useQuery-CIPIMOb2.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Dah_qudN.js +0 -1
- package/dist/server/node_modules/xtend/.jshintrc +0 -30
- package/dist/server/node_modules/xtend/LICENSE +0 -20
- package/dist/server/node_modules/xtend/README.md +0 -32
- package/dist/server/node_modules/xtend/immutable.js +0 -19
- package/dist/server/node_modules/xtend/mutable.js +0 -17
- package/dist/server/node_modules/xtend/package.json +0 -55
- package/dist/server/node_modules/xtend/test.js +0 -103
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as ie,j as t,B as ge,e as pt,f as ft,u as $e,r as ht,O as Fe,v as ke,w as gt,K as Ke}from"./index-t6xY8FYJ.js";import{u as Qe,a as Ve}from"./constants-C2NIYyeK.js";import{B as xt,g as Me}from"./generate-id-Dz9QYszT.js";import{C as Ye}from"./collection-display-button-07J7hFqi.js";import{C as jt}from"./collection-search-C014T-nI.js";import{C as Ct}from"./card-C_4nJrQs.js";import{I as Xe,e as Ze,q as Ue}from"./integration-icon-BlldxArX.js";import{D as et,a as tt,b as st,c as L}from"./dropdown-menu-5AX5yqCQ.js";import{c as ot}from"./Play-B44HkfJ8.js";import{i as it,s as nt}from"./RefreshCcw01-Dd-MCL9x.js";import{s as rt}from"./Trash01-DFCUs2vM.js";import{C as bt}from"./collection-table-wrapper-1AJGYm4t.js";import{E as We}from"./empty-state-BnwPT1fd.js";import{U as yt}from"./user-CwGhUrKE.js";import{E as lt}from"./empty-state-C_h_kfhM.js";import{u as vt}from"./use-list-state-CsPnDRB0.js";import{g as Nt}from"./connection-slug-Bw8dtz1U.js";import{A as wt,h as St,c as _t,b as Pt,d as Dt,e as It,a as At,f as Tt}from"./alert-dialog-Dqc_24Os.js";import{u as Et,e as Ot}from"./use-collections-CLlnuJpl.js";import{u as $t}from"./use-connection-DSXGpH93.js";import{s as kt}from"./Plus-B_tfkXz3.js";import{a as Lt}from"./layout-D0kNFrGz.js";import{u as zt}from"./useMutation-Bncnalv9.js";import{P as k}from"./index-1_kpvnU4.js";import{B as Be,a as Re,b as He,c as qe}from"./breadcrumb-BjaszutD.js";import{e as Ft}from"./Dataflow03-CYOanaoD.js";import"./ArrowUp-C8UJr_8S.js";import"./Check-wCq9US95.js";import"./Grid01-CFCqtKvs.js";import"./List-Dm7hE_p7.js";import"./tooltip-CKRAIo8e.js";import"./index-BKuN2Iot.js";import"./badge-C9kSd2rC.js";import"./Loading01-CKkwknOS.js";import"./SearchMd-DwH-zFLD.js";import"./input-qMconvxq.js";import"./Container-OKF_GeCq.js";import"./AlertCircle-CwQ-M1BH.js";import"./ArrowLeft-7hoUFjWA.js";import"./XCircle-Dv-O5jd1.js";import"./Type01-DmSAzri2.js";import"./ChevronDown-C4UuUfvP.js";import"./ChevronRight-8vS2LfiE.js";import"./ChevronUp-eUIC7wig.js";import"./Download01-D6Ut3-TC.js";import"./VideoRecorder-b8m_Ituf.js";import"./FolderClosed-DWPM1ogz.js";import"./Settings01-Cc_jPdtk.js";import"./Upload01-B4UOm_Kf.js";import"./User01-a2C2h2ws.js";import"./XClose-DXhO2ZT2.js";import"./X-CVr_hKcl.js";import"./Zap-D6ZQZPYh.js";import"./table-CvLgTwxu.js";import"./avatar-BCNSpjov.js";import"./useQuery-CIPIMOb2.js";import"./use-view-mode-CjInGBUv.js";import"./slugify-CEUa2lfQ.js";function Kt(s,e){const o=s.properties||{};for(const n in o){const l=o[n];if(l&&l.type==="string"&&(l.format==="url"||l.format==="uri")&&e&&typeof e=="object"&&n in e&&e[n])return e[n]}const a=["image","img","avatar","icon","logo","thumbnail","cover"];for(const n of a)if(e&&typeof e=="object"&&n in e&&typeof e[n]=="string")return e[n]}function Mt(s){const e=ie.c(25),{item:o,schema:a,actions:n}=s;let l;e[0]!==o||e[1]!==a?(l=Kt(a,o),e[0]=o,e[1]=a,e[2]=l):l=e[2];const r=l,c=o&&typeof o=="object"&&"description"in o&&typeof o.description=="string"?o.description:void 0;let p;e[3]!==n?(p=n&&Object.keys(n).length>0,e[3]=n,e[4]=p):p=e[4];const i=p;let u;e[5]!==r||e[6]!==o.title?(u=t.jsx(Xe,{icon:r,name:o.title,size:"md",className:"shrink-0 shadow-sm"}),e[5]=r,e[6]=o.title,e[7]=u):u=e[7];let f;e[8]!==o.title?(f=t.jsx("h3",{className:"text-base font-medium text-foreground truncate",children:o.title}),e[8]=o.title,e[9]=f):f=e[9];const d=c||"No description";let m;e[10]!==d?(m=t.jsx("p",{className:"text-base text-muted-foreground line-clamp-2",children:d}),e[10]=d,e[11]=m):m=e[11];let b;e[12]!==f||e[13]!==m?(b=t.jsxs("div",{className:"flex flex-col gap-0 flex-1",children:[f,m]}),e[12]=f,e[13]=m,e[14]=b):b=e[14];let x;e[15]!==u||e[16]!==b?(x=t.jsxs("div",{className:"flex flex-col gap-4 p-6 flex-1",children:[u,b]}),e[15]=u,e[16]=b,e[17]=x):x=e[17];let N;e[18]!==n||e[19]!==i||e[20]!==o?(N=i&&t.jsx("div",{className:"absolute top-6 right-6 sm:opacity-0 sm:group-hover:opacity-100 transition-opacity",onClick:Rt,onMouseDown:Bt,children:t.jsxs(et,{children:[t.jsx(tt,{asChild:!0,children:t.jsx(ge,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:Wt,children:t.jsx(it,{size:20})})}),t.jsxs(st,{align:"end",onClick:Ut,children:[n.open&&t.jsxs(L,{onClick:g=>{g.stopPropagation(),n.open?.(o)},children:[t.jsx(nt,{size:16}),"Open"]}),n.edit&&t.jsxs(L,{onClick:g=>{g.stopPropagation(),n.edit?.(o)},children:[t.jsx(Ze,{size:16}),"Edit"]}),n.duplicate&&t.jsxs(L,{onClick:g=>{g.stopPropagation(),n.duplicate?.(o)},children:[t.jsx(ot,{size:16}),"Duplicate"]}),n.delete&&t.jsxs(L,{variant:"destructive",onClick:g=>{g.stopPropagation(),n.delete?.(o)},children:[t.jsx(rt,{size:16}),"Delete"]})]})]})}),e[18]=n,e[19]=i,e[20]=o,e[21]=N):N=e[21];let j;return e[22]!==x||e[23]!==N?(j=t.jsxs(Ct,{className:"cursor-pointer transition-colors h-full flex flex-col group relative",children:[x,N]}),e[22]=x,e[23]=N,e[24]=j):j=e[24],j}function Ut(s){return s.stopPropagation()}function Wt(s){return s.stopPropagation()}function Bt(s){return s.stopPropagation()}function Rt(s){return s.stopPropagation()}const Ht=["icon","avatar","logo"],Ge=["created_at","created_by","id"];function qt(s){return Object.keys(s).find(e=>Ht.includes(e.toLowerCase()))}function at(s,e){return Object.keys(s.properties||{}).filter(o=>["id","created_at","updated_at","created_by","updated_by"].includes(o)?!1:e?e.includes(o):!0).map(o=>({id:o,label:o.charAt(0).toUpperCase()+o.slice(1).replace(/_/g," ")}))}function Gt(s){const e=ie.c(30),{data:o,schema:a,viewMode:n,search:l,sortKey:r,sortDirection:c,onSort:p,actions:i,onItemClick:u,headerActions:f,emptyState:d,readOnly:m,columns:b,hideToolbar:x,sortableFields:N}=s,j=c===void 0?"asc":c,g=p===void 0?Yt:p;let h;e[0]!==i?(h=i===void 0?{}:i,e[0]=i,e[1]=h):h=e[1];const E=h,T=u===void 0?Vt:u,w=f===void 0?null:f,O=d===void 0?null:d,S=m===void 0?!1:m,_=b===void 0?void 0:b,z=x===void 0?!1:x,y=N===void 0?void 0:N;let v;e[2]!==_||e[3]!==a||e[4]!==y?(v=_?_.filter(Qt).filter(A=>!y||y.includes(A.id)).map(Jt):at(a,y),e[2]=_,e[3]=a,e[4]=y,e[5]=v):v=e[5];const I=v;let P;e[6]!==w||e[7]!==z||e[8]!==g||e[9]!==j||e[10]!==r||e[11]!==I?(P=!z&&t.jsx("div",{className:"shrink-0 w-full border-b border-border h-12",children:t.jsxs("div",{className:"flex items-center gap-3 h-12 px-4",children:[t.jsx("div",{className:"flex items-center gap-2 flex-1",children:w}),t.jsx("div",{className:"flex items-center gap-2 shrink-0",children:t.jsx(Ye,{sortKey:r,sortDirection:j,onSort:g,sortOptions:I})})]})}),e[6]=w,e[7]=z,e[8]=g,e[9]=j,e[10]=r,e[11]=I,e[12]=P):P=e[12];let D;e[13]!==E||e[14]!==_||e[15]!==o||e[16]!==O||e[17]!==T||e[18]!==g||e[19]!==S||e[20]!==a||e[21]!==l||e[22]!==j||e[23]!==r||e[24]!==y||e[25]!==n?(D=n==="cards"?t.jsx("div",{className:"flex-1 overflow-auto p-5",children:o.length===0?t.jsx("div",{className:"flex items-center justify-center h-full",children:O||t.jsx(We,{icon:t.jsx(Ue,{size:36,className:"text-muted-foreground"}),title:"No items found",description:l?"Try adjusting your search":"No items to display"})}):t.jsx("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(280px,1fr))] gap-4",children:o.map(A=>t.jsx("div",{onClick:()=>T?.(A),className:"cursor-pointer h-full",children:t.jsx(Mt,{item:A,schema:a,readOnly:S,actions:E})},A.id))})}):t.jsx(bt,{columns:es(_,a,y,E),data:o,sortKey:r,sortDirection:j,onSort:g,onRowClick:T,emptyState:O||t.jsx(We,{icon:t.jsx(Ue,{size:36,className:"text-muted-foreground"}),title:"No items found",description:l?"Try adjusting your search":"No items to display"})}),e[13]=E,e[14]=_,e[15]=o,e[16]=O,e[17]=T,e[18]=g,e[19]=S,e[20]=a,e[21]=l,e[22]=j,e[23]=r,e[24]=y,e[25]=n,e[26]=D):D=e[26];let $;return e[27]!==P||e[28]!==D?($=t.jsxs("div",{className:"h-full flex flex-col overflow-hidden",children:[P,D]}),e[27]=P,e[28]=D,e[29]=$):$=e[29],$}function Jt(s){return{id:s.id,label:typeof s.header=="string"?s.header:s.id}}function Qt(s){return s.sortable!==!1}function Vt(){}function Yt(){}function Xt(s){return{id:"actions",header:"",render:e=>t.jsxs(et,{children:[t.jsx(tt,{asChild:!0,children:t.jsx(ge,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0",onClick:o=>o.stopPropagation(),children:t.jsx(it,{size:20})})}),t.jsxs(st,{align:"end",onClick:o=>o.stopPropagation(),children:[s.open&&t.jsxs(L,{onClick:o=>{o.stopPropagation(),s.open?.(e)},children:[t.jsx(nt,{size:16}),"Open"]}),s.edit&&t.jsxs(L,{onClick:o=>{o.stopPropagation(),s.edit?.(e)},children:[t.jsx(Ze,{size:16}),"Edit"]}),s.duplicate&&t.jsxs(L,{onClick:o=>{o.stopPropagation(),s.duplicate?.(e)},children:[t.jsx(ot,{size:16}),"Duplicate"]}),s.delete&&t.jsxs(L,{variant:"destructive",onClick:o=>{o.stopPropagation(),s.delete?.(e)},children:[t.jsx(rt,{size:16}),"Delete"]})]})]}),cellClassName:"w-[60px]",sortable:!1}}function ct(s){const e=s.type;return Array.isArray(e)?e.every(o=>ct({type:o})):e==="string"||e==="number"||e==="integer"||e==="boolean"||e==="null"}function Zt(s,e){const o=s.properties||{},a=Object.keys(o).filter(i=>{const u=o[i];return u&&ct(u)}),n=qt(o),l=[],r=new Set;n&&a.includes(n)&&(l.push(n),r.add(n));const c=["title","description","updated_at","updated_by"];for(const i of c)a.includes(i)&&!r.has(i)&&(l.push(i),r.add(i));const p=a.filter(i=>!r.has(i)&&!Ge.includes(i)).sort((i,u)=>i.localeCompare(u));for(const i of p)l.push(i),r.add(i);for(const i of Ge)a.includes(i)&&!r.has(i)&&(l.push(i),r.add(i));return l.map(i=>{const u=o[i],f=e?e.includes(i):!["id"].includes(i);return i===n?{id:i,header:"",render:d=>{const m=d[i];return t.jsx(Xe,{icon:m,name:d.title,size:"sm",className:"shrink-0 shadow-sm"})},sortable:!1,cellClassName:"w-16 shrink-0",wrap:!0}:i==="description"?{id:i,header:"Description",render:d=>{const m=d[i];return m==null?"—":t.jsx("span",{className:"block truncate max-w-[50ch]",children:String(m)})},sortable:f,cellClassName:"max-w-[50ch]"}:i==="created_by"||i==="updated_by"?{id:i,header:i.charAt(0).toUpperCase()+i.slice(1).replace(/_/g," "),render:d=>{const m=d[i];return m?t.jsx(yt,{id:String(m),size:"xs"}):"—"},sortable:f,cellClassName:"max-w-[250px]"}:u?.format==="date-time"||i.endsWith("_at")?{id:i,header:i.charAt(0).toUpperCase()+i.slice(1).replace(/_/g," "),render:d=>{const m=d[i];return m?t.jsx("span",{className:"block truncate max-w-full",children:new Date(m).toLocaleDateString()}):"—"},sortable:f,cellClassName:"max-w-[200px]"}:{id:i,header:i.charAt(0).toUpperCase()+i.slice(1).replace(/_/g," "),render:d=>{const m=d[i];return m==null?"—":t.jsx("span",{className:"block truncate max-w-full",children:String(m)})},sortable:f,cellClassName:"max-w-[200px]"}})}function es(s,e,o,a){const n=s||Zt(e,o);return n.some(c=>c.id==="actions")?n:Object.keys(a).length>0?[...n,Xt(a)]:n}function ts(s){const e=ie.c(114),{connectionId:o,org:a,activeCollection:n}=s,l=n.name,r=n.schema??xt,c=n.hasCreateTool,p=n.hasUpdateTool,i=n.hasDeleteTool,u=pt(),{data:f}=ft.useSession(),d=f?.user?.id||"unknown",m=$t(o);let b;e[0]!==m||e[1]!==o?(b=m?Nt(m):o,e[0]=m,e[1]=o,e[2]=b):b=e[2];const x=b,{org:N}=$e();let j;e[3]!==o||e[4]!==N.id?(j={connectionId:o,orgId:N.id},e[3]=o,e[4]=N.id,e[5]=j):j=e[5];const g=Qe(j),h=Et(o,l,g),E=`${o}-${l}`;let T;e[6]!==a||e[7]!==E?(T={namespace:a,resource:E,defaultSortKey:"updated_at"},e[6]=a,e[7]=E,e[8]=T):T=e[8];const{search:w,searchTerm:O,setSearch:S,viewMode:_,setViewMode:z,sortKey:y,sortDirection:v,handleSort:I}=vt(T);let P;e[9]!==O||e[10]!==v||e[11]!==y?(P={searchTerm:O,sortKey:y,sortDirection:v},e[9]=O,e[10]=v,e[11]=y,e[12]=P):P=e[12];const D=Ot(o,l,g,P),$=!c&&!p&&!i;let A;e[13]!==x||e[14]!==l||e[15]!==u||e[16]!==a?(A=C=>{u({to:"/$org/$project/mcps/$appSlug/$collectionName/$itemId",params:{org:a,project:Fe,appSlug:x,collectionName:l,itemId:C.id}})},e[13]=x,e[14]=l,e[15]=u,e[16]=a,e[17]=A):A=e[17];const F=A;let ne;e[18]!==h.create||e[19]!==d?(ne=async C=>{const he=new Date().toISOString();await h.create.mutateAsync({...C,id:Me("conn"),title:`${C.title} (Copy)`,created_at:he,updated_at:he,created_by:d,updated_by:d})},e[18]=h.create,e[19]=d,e[20]=ne):ne=e[20];const xe=ne,[K,je]=ht.useState(null);let re;e[21]===Symbol.for("react.memo_cache_sentinel")?(re=C=>{je(C)},e[21]=re):re=e[21];const dt=re;let M;e[22]!==F||e[23]!==p?(M=p&&{edit:F},e[22]=F,e[23]=p,e[24]=M):M=e[24];let U;e[25]!==xe||e[26]!==c?(U=c&&{duplicate:xe},e[25]=xe,e[26]=c,e[27]=U):U=e[27];let W;e[28]!==i?(W=i&&{delete:dt},e[28]=i,e[29]=W):W=e[29];let le;e[30]!==U||e[31]!==W||e[32]!==M?(le={...M,...U,...W},e[30]=U,e[31]=W,e[32]=M,e[33]=le):le=e[33];const Ce=le;let ae;e[34]!==h.delete||e[35]!==K?(ae=async()=>{K&&(await h.delete.mutateAsync(K.id),je(null))},e[34]=h.delete,e[35]=K,e[36]=ae):ae=e[36];const be=ae;let ce;e[37]!==h.create||e[38]!==x||e[39]!==l||e[40]!==c||e[41]!==u||e[42]!==a||e[43]!==d?(ce=async()=>{if(!c){ke.error("Create operation is not available for this collection");return}const C=new Date().toISOString(),he={id:Me("conn"),title:"New Item",description:"A brief description of the item",created_at:C,updated_at:C,created_by:d,updated_by:d};try{const Oe=await h.create.mutateAsync(he);u({to:"/$org/$project/mcps/$appSlug/$collectionName/$itemId",params:{org:a,project:Fe,appSlug:x,collectionName:l,itemId:Oe.id}})}catch(Oe){console.error("Failed to create item:",Oe)}},e[37]=h.create,e[38]=x,e[39]=l,e[40]=c,e[41]=u,e[42]=a,e[43]=d,e[44]=ce):ce=e[44];const ye=ce;let de;e[45]!==r?(de=at(r),e[45]=r,e[46]=de):de=e[46];const ve=de,Le=(D?.length??0)>0,mt=c&&Le,ut=c&&!Le&&!w;let me;e[47]!==h.create||e[48]!==ye||e[49]!==c?(me=c?t.jsxs(ge,{onClick:ye,size:"sm",disabled:h.create.isPending,className:"h-7",children:[t.jsx(kt,{className:"mr-2 h-4 w-4"}),h.create.isPending?"Creating...":"Create"]}):null,e[47]=h.create,e[48]=ye,e[49]=c,e[50]=me):me=e[50];const ze=me,Ne=y;let B;e[51]!==I||e[52]!==v||e[53]!==ve||e[54]!==Ne?(B=t.jsx(Ye,{sortKey:Ne,sortDirection:v,onSort:I,sortOptions:ve}),e[51]=I,e[52]=v,e[53]=ve,e[54]=Ne,e[55]=B):B=e[55];const we=mt&&ze;let R;e[56]!==B||e[57]!==we?(R=t.jsxs(Lt,{children:[B,we]}),e[56]=B,e[57]=we,e[58]=R):R=e[58];const Se=`Search ${l}...`;let H;e[59]!==S?(H=C=>{C.key==="Escape"&&(S(""),C.target.blur())},e[59]=S,e[60]=H):H=e[60];let q;e[61]!==w||e[62]!==S||e[63]!==Se||e[64]!==H?(q=t.jsx(jt,{value:w,onChange:S,placeholder:Se,onKeyDown:H}),e[61]=w,e[62]=S,e[63]=Se,e[64]=H,e[65]=q):q=e[65];let G;e[66]!==D?(G=D??[],e[66]=D,e[67]=G):G=e[67];const _e=y;let J;e[68]!==F?(J=C=>F(C),e[68]=F,e[69]=J):J=e[69];const Pe="No items found",De=w?"Try adjusting your search terms":"This collection doesn't have any items yet.",Ie=ut?ze:void 0;let Q;e[70]!==Pe||e[71]!==De||e[72]!==Ie?(Q=t.jsx(lt,{image:null,title:Pe,description:De,actions:Ie}),e[70]=Pe,e[71]=De,e[72]=Ie,e[73]=Q):Q=e[73];let V;e[74]!==I||e[75]!==$||e[76]!==Ce||e[77]!==r||e[78]!==w||e[79]!==S||e[80]!==z||e[81]!==v||e[82]!==G||e[83]!==_e||e[84]!==J||e[85]!==Q||e[86]!==_?(V=t.jsx("div",{className:"flex-1 overflow-auto",children:t.jsx(Gt,{hideToolbar:!0,data:G,schema:r,viewMode:_,onViewModeChange:z,search:w,onSearchChange:S,sortKey:_e,sortDirection:v,onSort:I,actions:Ce,onItemClick:J,readOnly:$,emptyState:Q})}),e[74]=I,e[75]=$,e[76]=Ce,e[77]=r,e[78]=w,e[79]=S,e[80]=z,e[81]=v,e[82]=G,e[83]=_e,e[84]=J,e[85]=Q,e[86]=_,e[87]=V):V=e[87];let Y;e[88]!==q||e[89]!==V?(Y=t.jsxs("div",{className:"flex flex-col h-full overflow-hidden",children:[q,V]}),e[88]=q,e[89]=V,e[90]=Y):Y=e[90];const Ae=!!K;let ue;e[91]===Symbol.for("react.memo_cache_sentinel")?(ue=C=>{C||je(null)},e[91]=ue):ue=e[91];let pe;e[92]===Symbol.for("react.memo_cache_sentinel")?(pe=t.jsx(_t,{children:"Delete item?"}),e[92]=pe):pe=e[92];const Te=K?.title;let X;e[93]!==Te?(X=t.jsxs(Pt,{children:[pe,t.jsxs(Dt,{children:['Are you sure you want to delete "',Te,'"? This action cannot be undone.']})]}),e[93]=Te,e[94]=X):X=e[94];let Z;e[95]!==h.delete.isPending?(Z=t.jsx(wt,{disabled:h.delete.isPending,children:"Cancel"}),e[95]=h.delete.isPending,e[96]=Z):Z=e[96];const Ee=h.delete.isPending?"Deleting...":"Delete";let ee;e[97]!==h.delete.isPending||e[98]!==be||e[99]!==Ee?(ee=t.jsx(St,{onClick:be,disabled:h.delete.isPending,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:Ee}),e[97]=h.delete.isPending,e[98]=be,e[99]=Ee,e[100]=ee):ee=e[100];let te;e[101]!==Z||e[102]!==ee?(te=t.jsxs(It,{children:[Z,ee]}),e[101]=Z,e[102]=ee,e[103]=te):te=e[103];let se;e[104]!==X||e[105]!==te?(se=t.jsxs(At,{children:[X,te]}),e[104]=X,e[105]=te,e[106]=se):se=e[106];let oe;e[107]!==Ae||e[108]!==se?(oe=t.jsx(Tt,{open:Ae,onOpenChange:ue,children:se}),e[107]=Ae,e[108]=se,e[109]=oe):oe=e[109];let fe;return e[110]!==R||e[111]!==Y||e[112]!==oe?(fe=t.jsxs(t.Fragment,{children:[R,Y,oe]}),e[110]=R,e[111]=Y,e[112]=oe,e[113]=fe):fe=e[113],fe}function ss(){const s=ie.c(12),{org:e,project:o}=$e(),a=gt();let n;s[0]!==e.id?(n={connectionId:Ve,orgId:e.id},s[0]=e.id,s[1]=n):n=s[1];const l=Qe(n);let r;s[2]!==l||s[3]!==o?(r=async u=>{const f=o.enabledPlugins??[];if(f.includes(u))return;const d=[...f,u],m=await l.callTool({name:"PROJECT_UPDATE",arguments:{projectId:o.id,enabledPlugins:d}});return m.structuredContent??m},s[2]=l,s[3]=o,s[4]=r):r=s[4];let c;s[5]!==e.id||s[6]!==o||s[7]!==a?(c=()=>{a.invalidateQueries({queryKey:Ke.project(e.id,o.slug)}),a.invalidateQueries({queryKey:Ke.projects(e.id)})},s[5]=e.id,s[6]=o,s[7]=a,s[8]=c):c=s[8];let p;return s[9]!==r||s[10]!==c?(p={mutationFn:r,onSuccess:c,onError:os},s[9]=r,s[10]=c,s[11]=p):p=s[11],zt(p)}function os(s){ke.error("Failed to enable plugin: "+(s instanceof Error?s.message:"Unknown error"))}function is(s){const e=ie.c(12),{pluginId:o,title:a,description:n,icon:l}=s,r=ss();let c;e[0]!==r||e[1]!==o?(c=async()=>{try{await r.mutateAsync(o),ke.success("Plugin enabled!")}catch{}},e[0]=r,e[1]=o,e[2]=c):c=e[2];const p=c,i=l??null,u=r.isPending?"Enabling…":"Enable plugin";let f;e[3]!==r.isPending||e[4]!==p||e[5]!==u?(f=t.jsx(ge,{onClick:p,disabled:r.isPending,children:u}),e[3]=r.isPending,e[4]=p,e[5]=u,e[6]=f):f=e[6];let d;return e[7]!==n||e[8]!==i||e[9]!==f||e[10]!==a?(d=t.jsx(lt,{image:i,title:a,description:n,actions:f}),e[7]=n,e[8]=i,e[9]=f,e[10]=a,e[11]=d):d=e[11],d}const Je="workflows",ns={name:"WORKFLOW",displayName:"Workflow",hasCreateTool:!0,hasUpdateTool:!0,hasDeleteTool:!0};function uo(){const s=ie.c(5),{project:e,org:o}=$e();if(!(e.enabledPlugins??[]).includes(Je)){let c;s[0]===Symbol.for("react.memo_cache_sentinel")?(c=t.jsx(k.Header,{children:t.jsx(k.Header.Left,{children:t.jsx(Be,{children:t.jsx(Re,{children:t.jsx(He,{children:t.jsx(qe,{children:"Workflows"})})})})})}),s[0]=c):c=s[0];let p;return s[1]===Symbol.for("react.memo_cache_sentinel")?(p=t.jsxs(k,{children:[c,t.jsx(k.Content,{children:t.jsx("div",{className:"flex flex-col items-center justify-center h-full",children:t.jsx(is,{pluginId:Je,title:"Enable Workflows",description:"Automate multi-step processes by enabling the Workflows plugin. Once enabled you can create, run, and monitor workflows.",icon:t.jsx("div",{className:"bg-muted p-4 rounded-full",children:t.jsx(Ft,{className:"size-8 text-muted-foreground"})})})})})]}),s[1]=p):p=s[1],p}let l;s[2]===Symbol.for("react.memo_cache_sentinel")?(l=t.jsx(k.Header,{children:t.jsx(k.Header.Left,{children:t.jsx(Be,{children:t.jsx(Re,{children:t.jsx(He,{children:t.jsx(qe,{children:"Workflows"})})})})})}),s[2]=l):l=s[2];let r;return s[3]!==o.slug?(r=t.jsxs(k,{children:[l,t.jsx(k.Content,{children:t.jsx(ts,{connectionId:Ve,org:o.slug,activeCollection:ns})})]}),s[3]=o.slug,s[4]=r):r=s[4],r}export{uo as default};
|
|
1
|
+
import{c as ie,j as t,B as ge,e as pt,f as ft,u as $e,r as ht,O as Fe,v as ke,w as gt,K as Ke}from"./index-BjxqoU_w.js";import{u as Qe,a as Ve}from"./constants-C5g6K3-0.js";import{B as xt,g as Me}from"./generate-id-0beDKMoR.js";import{C as Ye}from"./collection-display-button-CIwF6qiP.js";import{C as jt}from"./collection-search-DmeA1lkM.js";import{C as Ct}from"./card-CoTaf7Bb.js";import{I as Xe,e as Ze,q as Ue}from"./integration-icon-C9ac9VOj.js";import{D as et,a as tt,b as st,c as L}from"./dropdown-menu-IA1w2fjK.js";import{c as ot}from"./Play-Q9uDVIa5.js";import{i as it,s as nt}from"./RefreshCcw01-nS96T2bf.js";import{s as rt}from"./Trash01-CzfVJZjl.js";import{C as bt}from"./collection-table-wrapper-DZ9kkHHz.js";import{E as We}from"./empty-state-DnJSxmJA.js";import{U as yt}from"./user-BtGr8jKI.js";import{E as lt}from"./empty-state-hwIP0sm6.js";import{u as vt}from"./use-list-state-BpX2jytt.js";import{g as Nt}from"./connection-slug-Bw8dtz1U.js";import{A as wt,h as St,c as _t,b as Pt,d as Dt,e as It,a as At,f as Tt}from"./alert-dialog-CIdU20ao.js";import{u as Et,e as Ot}from"./use-collections-Zp8eOwPm.js";import{u as $t}from"./use-connection-B-vgK3kN.js";import{s as kt}from"./Plus-DcUxQQXw.js";import{a as Lt}from"./layout-CYi_63K3.js";import{u as zt}from"./useMutation-oWI4nFQG.js";import{P as k}from"./index-Be3yjubl.js";import{B as Be,a as Re,b as He,c as qe}from"./breadcrumb-DNInqlES.js";import{e as Ft}from"./Dataflow03-q5kzWw4s.js";import"./ArrowUp-BrSLqvQo.js";import"./Check-CVKUMJv3.js";import"./Grid01-CbgVFQNg.js";import"./List-D35z7ORx.js";import"./tooltip-SqkLa6wk.js";import"./index-VZp2CIbR.js";import"./badge-BIY4HSu4.js";import"./Loading01-DDv5lfhX.js";import"./SearchMd-CTpXH6F3.js";import"./input-Be0bLLQW.js";import"./Container-D4n2e11R.js";import"./AlertCircle-Hpsw9_tf.js";import"./ArrowLeft-U7OUoBhv.js";import"./XCircle-DI9HiD4A.js";import"./Type01-BwsSTKh1.js";import"./ChevronDown-Ds3IOx8p.js";import"./ChevronRight-CTHCKnjF.js";import"./ChevronUp-DJbt-mXd.js";import"./Download01-BBRbjA11.js";import"./VideoRecorder-0-qQusnp.js";import"./FolderClosed-CgbAGtho.js";import"./Settings01-BVY96Vsg.js";import"./Upload01-Bn_9d04P.js";import"./User01-Dl4j8Eui.js";import"./XClose-Bw5018RM.js";import"./X-DvXlEl9E.js";import"./Zap-DGbTVlYq.js";import"./table-C915-j5j.js";import"./avatar-Dz9Au16I.js";import"./useQuery-CmP1G4DA.js";import"./use-view-mode-BBlaOBUn.js";import"./slugify-CEUa2lfQ.js";function Kt(s,e){const o=s.properties||{};for(const n in o){const l=o[n];if(l&&l.type==="string"&&(l.format==="url"||l.format==="uri")&&e&&typeof e=="object"&&n in e&&e[n])return e[n]}const a=["image","img","avatar","icon","logo","thumbnail","cover"];for(const n of a)if(e&&typeof e=="object"&&n in e&&typeof e[n]=="string")return e[n]}function Mt(s){const e=ie.c(25),{item:o,schema:a,actions:n}=s;let l;e[0]!==o||e[1]!==a?(l=Kt(a,o),e[0]=o,e[1]=a,e[2]=l):l=e[2];const r=l,c=o&&typeof o=="object"&&"description"in o&&typeof o.description=="string"?o.description:void 0;let p;e[3]!==n?(p=n&&Object.keys(n).length>0,e[3]=n,e[4]=p):p=e[4];const i=p;let u;e[5]!==r||e[6]!==o.title?(u=t.jsx(Xe,{icon:r,name:o.title,size:"md",className:"shrink-0 shadow-sm"}),e[5]=r,e[6]=o.title,e[7]=u):u=e[7];let f;e[8]!==o.title?(f=t.jsx("h3",{className:"text-base font-medium text-foreground truncate",children:o.title}),e[8]=o.title,e[9]=f):f=e[9];const d=c||"No description";let m;e[10]!==d?(m=t.jsx("p",{className:"text-base text-muted-foreground line-clamp-2",children:d}),e[10]=d,e[11]=m):m=e[11];let b;e[12]!==f||e[13]!==m?(b=t.jsxs("div",{className:"flex flex-col gap-0 flex-1",children:[f,m]}),e[12]=f,e[13]=m,e[14]=b):b=e[14];let x;e[15]!==u||e[16]!==b?(x=t.jsxs("div",{className:"flex flex-col gap-4 p-6 flex-1",children:[u,b]}),e[15]=u,e[16]=b,e[17]=x):x=e[17];let N;e[18]!==n||e[19]!==i||e[20]!==o?(N=i&&t.jsx("div",{className:"absolute top-6 right-6 sm:opacity-0 sm:group-hover:opacity-100 transition-opacity",onClick:Rt,onMouseDown:Bt,children:t.jsxs(et,{children:[t.jsx(tt,{asChild:!0,children:t.jsx(ge,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:Wt,children:t.jsx(it,{size:20})})}),t.jsxs(st,{align:"end",onClick:Ut,children:[n.open&&t.jsxs(L,{onClick:g=>{g.stopPropagation(),n.open?.(o)},children:[t.jsx(nt,{size:16}),"Open"]}),n.edit&&t.jsxs(L,{onClick:g=>{g.stopPropagation(),n.edit?.(o)},children:[t.jsx(Ze,{size:16}),"Edit"]}),n.duplicate&&t.jsxs(L,{onClick:g=>{g.stopPropagation(),n.duplicate?.(o)},children:[t.jsx(ot,{size:16}),"Duplicate"]}),n.delete&&t.jsxs(L,{variant:"destructive",onClick:g=>{g.stopPropagation(),n.delete?.(o)},children:[t.jsx(rt,{size:16}),"Delete"]})]})]})}),e[18]=n,e[19]=i,e[20]=o,e[21]=N):N=e[21];let j;return e[22]!==x||e[23]!==N?(j=t.jsxs(Ct,{className:"cursor-pointer transition-colors h-full flex flex-col group relative",children:[x,N]}),e[22]=x,e[23]=N,e[24]=j):j=e[24],j}function Ut(s){return s.stopPropagation()}function Wt(s){return s.stopPropagation()}function Bt(s){return s.stopPropagation()}function Rt(s){return s.stopPropagation()}const Ht=["icon","avatar","logo"],Ge=["created_at","created_by","id"];function qt(s){return Object.keys(s).find(e=>Ht.includes(e.toLowerCase()))}function at(s,e){return Object.keys(s.properties||{}).filter(o=>["id","created_at","updated_at","created_by","updated_by"].includes(o)?!1:e?e.includes(o):!0).map(o=>({id:o,label:o.charAt(0).toUpperCase()+o.slice(1).replace(/_/g," ")}))}function Gt(s){const e=ie.c(30),{data:o,schema:a,viewMode:n,search:l,sortKey:r,sortDirection:c,onSort:p,actions:i,onItemClick:u,headerActions:f,emptyState:d,readOnly:m,columns:b,hideToolbar:x,sortableFields:N}=s,j=c===void 0?"asc":c,g=p===void 0?Yt:p;let h;e[0]!==i?(h=i===void 0?{}:i,e[0]=i,e[1]=h):h=e[1];const E=h,T=u===void 0?Vt:u,w=f===void 0?null:f,O=d===void 0?null:d,S=m===void 0?!1:m,_=b===void 0?void 0:b,z=x===void 0?!1:x,y=N===void 0?void 0:N;let v;e[2]!==_||e[3]!==a||e[4]!==y?(v=_?_.filter(Qt).filter(A=>!y||y.includes(A.id)).map(Jt):at(a,y),e[2]=_,e[3]=a,e[4]=y,e[5]=v):v=e[5];const I=v;let P;e[6]!==w||e[7]!==z||e[8]!==g||e[9]!==j||e[10]!==r||e[11]!==I?(P=!z&&t.jsx("div",{className:"shrink-0 w-full border-b border-border h-12",children:t.jsxs("div",{className:"flex items-center gap-3 h-12 px-4",children:[t.jsx("div",{className:"flex items-center gap-2 flex-1",children:w}),t.jsx("div",{className:"flex items-center gap-2 shrink-0",children:t.jsx(Ye,{sortKey:r,sortDirection:j,onSort:g,sortOptions:I})})]})}),e[6]=w,e[7]=z,e[8]=g,e[9]=j,e[10]=r,e[11]=I,e[12]=P):P=e[12];let D;e[13]!==E||e[14]!==_||e[15]!==o||e[16]!==O||e[17]!==T||e[18]!==g||e[19]!==S||e[20]!==a||e[21]!==l||e[22]!==j||e[23]!==r||e[24]!==y||e[25]!==n?(D=n==="cards"?t.jsx("div",{className:"flex-1 overflow-auto p-5",children:o.length===0?t.jsx("div",{className:"flex items-center justify-center h-full",children:O||t.jsx(We,{icon:t.jsx(Ue,{size:36,className:"text-muted-foreground"}),title:"No items found",description:l?"Try adjusting your search":"No items to display"})}):t.jsx("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(280px,1fr))] gap-4",children:o.map(A=>t.jsx("div",{onClick:()=>T?.(A),className:"cursor-pointer h-full",children:t.jsx(Mt,{item:A,schema:a,readOnly:S,actions:E})},A.id))})}):t.jsx(bt,{columns:es(_,a,y,E),data:o,sortKey:r,sortDirection:j,onSort:g,onRowClick:T,emptyState:O||t.jsx(We,{icon:t.jsx(Ue,{size:36,className:"text-muted-foreground"}),title:"No items found",description:l?"Try adjusting your search":"No items to display"})}),e[13]=E,e[14]=_,e[15]=o,e[16]=O,e[17]=T,e[18]=g,e[19]=S,e[20]=a,e[21]=l,e[22]=j,e[23]=r,e[24]=y,e[25]=n,e[26]=D):D=e[26];let $;return e[27]!==P||e[28]!==D?($=t.jsxs("div",{className:"h-full flex flex-col overflow-hidden",children:[P,D]}),e[27]=P,e[28]=D,e[29]=$):$=e[29],$}function Jt(s){return{id:s.id,label:typeof s.header=="string"?s.header:s.id}}function Qt(s){return s.sortable!==!1}function Vt(){}function Yt(){}function Xt(s){return{id:"actions",header:"",render:e=>t.jsxs(et,{children:[t.jsx(tt,{asChild:!0,children:t.jsx(ge,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0",onClick:o=>o.stopPropagation(),children:t.jsx(it,{size:20})})}),t.jsxs(st,{align:"end",onClick:o=>o.stopPropagation(),children:[s.open&&t.jsxs(L,{onClick:o=>{o.stopPropagation(),s.open?.(e)},children:[t.jsx(nt,{size:16}),"Open"]}),s.edit&&t.jsxs(L,{onClick:o=>{o.stopPropagation(),s.edit?.(e)},children:[t.jsx(Ze,{size:16}),"Edit"]}),s.duplicate&&t.jsxs(L,{onClick:o=>{o.stopPropagation(),s.duplicate?.(e)},children:[t.jsx(ot,{size:16}),"Duplicate"]}),s.delete&&t.jsxs(L,{variant:"destructive",onClick:o=>{o.stopPropagation(),s.delete?.(e)},children:[t.jsx(rt,{size:16}),"Delete"]})]})]}),cellClassName:"w-[60px]",sortable:!1}}function ct(s){const e=s.type;return Array.isArray(e)?e.every(o=>ct({type:o})):e==="string"||e==="number"||e==="integer"||e==="boolean"||e==="null"}function Zt(s,e){const o=s.properties||{},a=Object.keys(o).filter(i=>{const u=o[i];return u&&ct(u)}),n=qt(o),l=[],r=new Set;n&&a.includes(n)&&(l.push(n),r.add(n));const c=["title","description","updated_at","updated_by"];for(const i of c)a.includes(i)&&!r.has(i)&&(l.push(i),r.add(i));const p=a.filter(i=>!r.has(i)&&!Ge.includes(i)).sort((i,u)=>i.localeCompare(u));for(const i of p)l.push(i),r.add(i);for(const i of Ge)a.includes(i)&&!r.has(i)&&(l.push(i),r.add(i));return l.map(i=>{const u=o[i],f=e?e.includes(i):!["id"].includes(i);return i===n?{id:i,header:"",render:d=>{const m=d[i];return t.jsx(Xe,{icon:m,name:d.title,size:"sm",className:"shrink-0 shadow-sm"})},sortable:!1,cellClassName:"w-16 shrink-0",wrap:!0}:i==="description"?{id:i,header:"Description",render:d=>{const m=d[i];return m==null?"—":t.jsx("span",{className:"block truncate max-w-[50ch]",children:String(m)})},sortable:f,cellClassName:"max-w-[50ch]"}:i==="created_by"||i==="updated_by"?{id:i,header:i.charAt(0).toUpperCase()+i.slice(1).replace(/_/g," "),render:d=>{const m=d[i];return m?t.jsx(yt,{id:String(m),size:"xs"}):"—"},sortable:f,cellClassName:"max-w-[250px]"}:u?.format==="date-time"||i.endsWith("_at")?{id:i,header:i.charAt(0).toUpperCase()+i.slice(1).replace(/_/g," "),render:d=>{const m=d[i];return m?t.jsx("span",{className:"block truncate max-w-full",children:new Date(m).toLocaleDateString()}):"—"},sortable:f,cellClassName:"max-w-[200px]"}:{id:i,header:i.charAt(0).toUpperCase()+i.slice(1).replace(/_/g," "),render:d=>{const m=d[i];return m==null?"—":t.jsx("span",{className:"block truncate max-w-full",children:String(m)})},sortable:f,cellClassName:"max-w-[200px]"}})}function es(s,e,o,a){const n=s||Zt(e,o);return n.some(c=>c.id==="actions")?n:Object.keys(a).length>0?[...n,Xt(a)]:n}function ts(s){const e=ie.c(114),{connectionId:o,org:a,activeCollection:n}=s,l=n.name,r=n.schema??xt,c=n.hasCreateTool,p=n.hasUpdateTool,i=n.hasDeleteTool,u=pt(),{data:f}=ft.useSession(),d=f?.user?.id||"unknown",m=$t(o);let b;e[0]!==m||e[1]!==o?(b=m?Nt(m):o,e[0]=m,e[1]=o,e[2]=b):b=e[2];const x=b,{org:N}=$e();let j;e[3]!==o||e[4]!==N.id?(j={connectionId:o,orgId:N.id},e[3]=o,e[4]=N.id,e[5]=j):j=e[5];const g=Qe(j),h=Et(o,l,g),E=`${o}-${l}`;let T;e[6]!==a||e[7]!==E?(T={namespace:a,resource:E,defaultSortKey:"updated_at"},e[6]=a,e[7]=E,e[8]=T):T=e[8];const{search:w,searchTerm:O,setSearch:S,viewMode:_,setViewMode:z,sortKey:y,sortDirection:v,handleSort:I}=vt(T);let P;e[9]!==O||e[10]!==v||e[11]!==y?(P={searchTerm:O,sortKey:y,sortDirection:v},e[9]=O,e[10]=v,e[11]=y,e[12]=P):P=e[12];const D=Ot(o,l,g,P),$=!c&&!p&&!i;let A;e[13]!==x||e[14]!==l||e[15]!==u||e[16]!==a?(A=C=>{u({to:"/$org/$project/mcps/$appSlug/$collectionName/$itemId",params:{org:a,project:Fe,appSlug:x,collectionName:l,itemId:C.id}})},e[13]=x,e[14]=l,e[15]=u,e[16]=a,e[17]=A):A=e[17];const F=A;let ne;e[18]!==h.create||e[19]!==d?(ne=async C=>{const he=new Date().toISOString();await h.create.mutateAsync({...C,id:Me("conn"),title:`${C.title} (Copy)`,created_at:he,updated_at:he,created_by:d,updated_by:d})},e[18]=h.create,e[19]=d,e[20]=ne):ne=e[20];const xe=ne,[K,je]=ht.useState(null);let re;e[21]===Symbol.for("react.memo_cache_sentinel")?(re=C=>{je(C)},e[21]=re):re=e[21];const dt=re;let M;e[22]!==F||e[23]!==p?(M=p&&{edit:F},e[22]=F,e[23]=p,e[24]=M):M=e[24];let U;e[25]!==xe||e[26]!==c?(U=c&&{duplicate:xe},e[25]=xe,e[26]=c,e[27]=U):U=e[27];let W;e[28]!==i?(W=i&&{delete:dt},e[28]=i,e[29]=W):W=e[29];let le;e[30]!==U||e[31]!==W||e[32]!==M?(le={...M,...U,...W},e[30]=U,e[31]=W,e[32]=M,e[33]=le):le=e[33];const Ce=le;let ae;e[34]!==h.delete||e[35]!==K?(ae=async()=>{K&&(await h.delete.mutateAsync(K.id),je(null))},e[34]=h.delete,e[35]=K,e[36]=ae):ae=e[36];const be=ae;let ce;e[37]!==h.create||e[38]!==x||e[39]!==l||e[40]!==c||e[41]!==u||e[42]!==a||e[43]!==d?(ce=async()=>{if(!c){ke.error("Create operation is not available for this collection");return}const C=new Date().toISOString(),he={id:Me("conn"),title:"New Item",description:"A brief description of the item",created_at:C,updated_at:C,created_by:d,updated_by:d};try{const Oe=await h.create.mutateAsync(he);u({to:"/$org/$project/mcps/$appSlug/$collectionName/$itemId",params:{org:a,project:Fe,appSlug:x,collectionName:l,itemId:Oe.id}})}catch(Oe){console.error("Failed to create item:",Oe)}},e[37]=h.create,e[38]=x,e[39]=l,e[40]=c,e[41]=u,e[42]=a,e[43]=d,e[44]=ce):ce=e[44];const ye=ce;let de;e[45]!==r?(de=at(r),e[45]=r,e[46]=de):de=e[46];const ve=de,Le=(D?.length??0)>0,mt=c&&Le,ut=c&&!Le&&!w;let me;e[47]!==h.create||e[48]!==ye||e[49]!==c?(me=c?t.jsxs(ge,{onClick:ye,size:"sm",disabled:h.create.isPending,className:"h-7",children:[t.jsx(kt,{className:"mr-2 h-4 w-4"}),h.create.isPending?"Creating...":"Create"]}):null,e[47]=h.create,e[48]=ye,e[49]=c,e[50]=me):me=e[50];const ze=me,Ne=y;let B;e[51]!==I||e[52]!==v||e[53]!==ve||e[54]!==Ne?(B=t.jsx(Ye,{sortKey:Ne,sortDirection:v,onSort:I,sortOptions:ve}),e[51]=I,e[52]=v,e[53]=ve,e[54]=Ne,e[55]=B):B=e[55];const we=mt&&ze;let R;e[56]!==B||e[57]!==we?(R=t.jsxs(Lt,{children:[B,we]}),e[56]=B,e[57]=we,e[58]=R):R=e[58];const Se=`Search ${l}...`;let H;e[59]!==S?(H=C=>{C.key==="Escape"&&(S(""),C.target.blur())},e[59]=S,e[60]=H):H=e[60];let q;e[61]!==w||e[62]!==S||e[63]!==Se||e[64]!==H?(q=t.jsx(jt,{value:w,onChange:S,placeholder:Se,onKeyDown:H}),e[61]=w,e[62]=S,e[63]=Se,e[64]=H,e[65]=q):q=e[65];let G;e[66]!==D?(G=D??[],e[66]=D,e[67]=G):G=e[67];const _e=y;let J;e[68]!==F?(J=C=>F(C),e[68]=F,e[69]=J):J=e[69];const Pe="No items found",De=w?"Try adjusting your search terms":"This collection doesn't have any items yet.",Ie=ut?ze:void 0;let Q;e[70]!==Pe||e[71]!==De||e[72]!==Ie?(Q=t.jsx(lt,{image:null,title:Pe,description:De,actions:Ie}),e[70]=Pe,e[71]=De,e[72]=Ie,e[73]=Q):Q=e[73];let V;e[74]!==I||e[75]!==$||e[76]!==Ce||e[77]!==r||e[78]!==w||e[79]!==S||e[80]!==z||e[81]!==v||e[82]!==G||e[83]!==_e||e[84]!==J||e[85]!==Q||e[86]!==_?(V=t.jsx("div",{className:"flex-1 overflow-auto",children:t.jsx(Gt,{hideToolbar:!0,data:G,schema:r,viewMode:_,onViewModeChange:z,search:w,onSearchChange:S,sortKey:_e,sortDirection:v,onSort:I,actions:Ce,onItemClick:J,readOnly:$,emptyState:Q})}),e[74]=I,e[75]=$,e[76]=Ce,e[77]=r,e[78]=w,e[79]=S,e[80]=z,e[81]=v,e[82]=G,e[83]=_e,e[84]=J,e[85]=Q,e[86]=_,e[87]=V):V=e[87];let Y;e[88]!==q||e[89]!==V?(Y=t.jsxs("div",{className:"flex flex-col h-full overflow-hidden",children:[q,V]}),e[88]=q,e[89]=V,e[90]=Y):Y=e[90];const Ae=!!K;let ue;e[91]===Symbol.for("react.memo_cache_sentinel")?(ue=C=>{C||je(null)},e[91]=ue):ue=e[91];let pe;e[92]===Symbol.for("react.memo_cache_sentinel")?(pe=t.jsx(_t,{children:"Delete item?"}),e[92]=pe):pe=e[92];const Te=K?.title;let X;e[93]!==Te?(X=t.jsxs(Pt,{children:[pe,t.jsxs(Dt,{children:['Are you sure you want to delete "',Te,'"? This action cannot be undone.']})]}),e[93]=Te,e[94]=X):X=e[94];let Z;e[95]!==h.delete.isPending?(Z=t.jsx(wt,{disabled:h.delete.isPending,children:"Cancel"}),e[95]=h.delete.isPending,e[96]=Z):Z=e[96];const Ee=h.delete.isPending?"Deleting...":"Delete";let ee;e[97]!==h.delete.isPending||e[98]!==be||e[99]!==Ee?(ee=t.jsx(St,{onClick:be,disabled:h.delete.isPending,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:Ee}),e[97]=h.delete.isPending,e[98]=be,e[99]=Ee,e[100]=ee):ee=e[100];let te;e[101]!==Z||e[102]!==ee?(te=t.jsxs(It,{children:[Z,ee]}),e[101]=Z,e[102]=ee,e[103]=te):te=e[103];let se;e[104]!==X||e[105]!==te?(se=t.jsxs(At,{children:[X,te]}),e[104]=X,e[105]=te,e[106]=se):se=e[106];let oe;e[107]!==Ae||e[108]!==se?(oe=t.jsx(Tt,{open:Ae,onOpenChange:ue,children:se}),e[107]=Ae,e[108]=se,e[109]=oe):oe=e[109];let fe;return e[110]!==R||e[111]!==Y||e[112]!==oe?(fe=t.jsxs(t.Fragment,{children:[R,Y,oe]}),e[110]=R,e[111]=Y,e[112]=oe,e[113]=fe):fe=e[113],fe}function ss(){const s=ie.c(12),{org:e,project:o}=$e(),a=gt();let n;s[0]!==e.id?(n={connectionId:Ve,orgId:e.id},s[0]=e.id,s[1]=n):n=s[1];const l=Qe(n);let r;s[2]!==l||s[3]!==o?(r=async u=>{const f=o.enabledPlugins??[];if(f.includes(u))return;const d=[...f,u],m=await l.callTool({name:"PROJECT_UPDATE",arguments:{projectId:o.id,enabledPlugins:d}});return m.structuredContent??m},s[2]=l,s[3]=o,s[4]=r):r=s[4];let c;s[5]!==e.id||s[6]!==o||s[7]!==a?(c=()=>{a.invalidateQueries({queryKey:Ke.project(e.id,o.slug)}),a.invalidateQueries({queryKey:Ke.projects(e.id)})},s[5]=e.id,s[6]=o,s[7]=a,s[8]=c):c=s[8];let p;return s[9]!==r||s[10]!==c?(p={mutationFn:r,onSuccess:c,onError:os},s[9]=r,s[10]=c,s[11]=p):p=s[11],zt(p)}function os(s){ke.error("Failed to enable plugin: "+(s instanceof Error?s.message:"Unknown error"))}function is(s){const e=ie.c(12),{pluginId:o,title:a,description:n,icon:l}=s,r=ss();let c;e[0]!==r||e[1]!==o?(c=async()=>{try{await r.mutateAsync(o),ke.success("Plugin enabled!")}catch{}},e[0]=r,e[1]=o,e[2]=c):c=e[2];const p=c,i=l??null,u=r.isPending?"Enabling…":"Enable plugin";let f;e[3]!==r.isPending||e[4]!==p||e[5]!==u?(f=t.jsx(ge,{onClick:p,disabled:r.isPending,children:u}),e[3]=r.isPending,e[4]=p,e[5]=u,e[6]=f):f=e[6];let d;return e[7]!==n||e[8]!==i||e[9]!==f||e[10]!==a?(d=t.jsx(lt,{image:i,title:a,description:n,actions:f}),e[7]=n,e[8]=i,e[9]=f,e[10]=a,e[11]=d):d=e[11],d}const Je="workflows",ns={name:"WORKFLOW",displayName:"Workflow",hasCreateTool:!0,hasUpdateTool:!0,hasDeleteTool:!0};function uo(){const s=ie.c(5),{project:e,org:o}=$e();if(!(e.enabledPlugins??[]).includes(Je)){let c;s[0]===Symbol.for("react.memo_cache_sentinel")?(c=t.jsx(k.Header,{children:t.jsx(k.Header.Left,{children:t.jsx(Be,{children:t.jsx(Re,{children:t.jsx(He,{children:t.jsx(qe,{children:"Workflows"})})})})})}),s[0]=c):c=s[0];let p;return s[1]===Symbol.for("react.memo_cache_sentinel")?(p=t.jsxs(k,{children:[c,t.jsx(k.Content,{children:t.jsx("div",{className:"flex flex-col items-center justify-center h-full",children:t.jsx(is,{pluginId:Je,title:"Enable Workflows",description:"Automate multi-step processes by enabling the Workflows plugin. Once enabled you can create, run, and monitor workflows.",icon:t.jsx("div",{className:"bg-muted p-4 rounded-full",children:t.jsx(Ft,{className:"size-8 text-muted-foreground"})})})})})]}),s[1]=p):p=s[1],p}let l;s[2]===Symbol.for("react.memo_cache_sentinel")?(l=t.jsx(k.Header,{children:t.jsx(k.Header.Left,{children:t.jsx(Be,{children:t.jsx(Re,{children:t.jsx(He,{children:t.jsx(qe,{children:"Workflows"})})})})})}),s[2]=l):l=s[2];let r;return s[3]!==o.slug?(r=t.jsxs(k,{children:[l,t.jsx(k.Content,{children:t.jsx(ts,{connectionId:Ve,org:o.slug,activeCollection:ns})})]}),s[3]=o.slug,s[4]=r):r=s[4],r}export{uo as default};
|
package/dist/client/index.html
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
<meta name="twitter:description" content="Hire specialized agents, give them access to your tools, and let them deliver real projects — with planning, verification, and observability built in." />
|
|
14
14
|
<meta name="twitter:image" content="/og-image.png" />
|
|
15
15
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
16
|
-
<script type="module" crossorigin src="/assets/index-
|
|
16
|
+
<script type="module" crossorigin src="/assets/index-BjxqoU_w.js"></script>
|
|
17
17
|
<link rel="stylesheet" crossorigin href="/assets/index-j1ZaalMw.css">
|
|
18
18
|
</head>
|
|
19
19
|
<body>
|
package/dist/server/cli.js
CHANGED
|
@@ -2668,7 +2668,12 @@ Follow this workflow for every request:
|
|
|
2668
2668
|
3. **Plan** \u2014 for multi-step tasks (3+ tool calls), outline the steps
|
|
2669
2669
|
and wait for user confirmation. For simple tasks, act immediately.
|
|
2670
2670
|
4. **Learn skills** \u2014 check <available-prompts> for a matching prompt.
|
|
2671
|
-
If
|
|
2671
|
+
**WARNING: If a prompt's content already appears anywhere in the
|
|
2672
|
+
conversation history (e.g. applied via /promptName in the UI), you
|
|
2673
|
+
MUST NOT call read_prompt for it \u2014 the content is already loaded.
|
|
2674
|
+
Follow its instructions directly.** Only call read_prompt for prompts
|
|
2675
|
+
whose content is NOT yet in the conversation, passing any required
|
|
2676
|
+
arguments listed in <available-prompts>.
|
|
2672
2677
|
5. **Execute** \u2014 enable the tools you need, then carry out the plan.
|
|
2673
2678
|
6. **If not possible** \u2014 explain why, suggest what connection the user
|
|
2674
2679
|
could add, and offer a partial workaround if one exists.
|
|
@@ -2857,7 +2862,7 @@ ${W.join(`
|
|
|
2857
2862
|
</available-connections>`}function tB6(Y){return Y.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}async function Qw8(Y){let{prompts:X}=await Y.listPrompts();if(X.length===0)return null;return`
|
|
2858
2863
|
|
|
2859
2864
|
<available-prompts>
|
|
2860
|
-
${X.map((G)
|
|
2865
|
+
${X.map((G)=>{let W=`${G.name}|${G.description??""}`;if(G.arguments&&G.arguments.length>0){let K=G.arguments.map((Z)=>Z.required?`${Z.name} (required)`:Z.name).join(", ");W+=`|args: ${K}`}return W}).join(`
|
|
2861
2866
|
`)}
|
|
2862
2867
|
</available-prompts>`}async function eB6(Y){let X=Y.stream.getReader();while(!0){let{done:J}=await X.read();if(J)break}}var Gw8;var Cc=A(()=>{tm();AB6();EB6();p9();UG();mB6();dB6();cE();Hm1();Rc();nB6();aB6();tl();sB6();Gw8=/^(this tool |use this to |allows you to |a tool that |a tool to |tool to |tool that )/i});async function Kw8(Y){let X=K71(Y),J=await Y.req.json(),G=wB6.safeParse(J);if(!G.success)throw new nJ(400,{message:G.error.message});let{messages:W,...K}=G.data,Z=W,{systemMessages:Q,requestMessage:H}=qB6(Z);return{organization:X,systemMessages:Q,requestMessage:H,...K}}function Nm1(Y){let{cancelBroadcast:X,streamBuffer:J,runRegistry:G}=Y,W=new rY;return W.get("/:org/decopilot/allowed-models",async(K)=>{try{let Z=K.get("meshContext"),Q=K71(K),H=Z.auth.user?.role,$=await Tq(Z.db,Q.id,H);return K.json(BF6($))}catch(Z){if(console.error("[decopilot:allowed-models] Error",Z),Z instanceof nJ)return K.json({error:Z.message},Z.status);return K.json({error:Z instanceof Error?Z.message:"Internal error"},500)}}),W.post("/:org/decopilot/stream",async(K)=>{try{let Z=K.get("meshContext"),{organization:Q,models:H,agent:$,systemMessages:V,requestMessage:z,temperature:U,memory:q,thread_id:O,toolApprovalLevel:L}=await Kw8(K),M=Z.auth?.user?.id;if(!M)throw new nJ(401,{message:"User ID is required"});let E=await Tq(Z.db,Q.id,Z.auth.user?.role);if(E!==void 0&&!VS(E,H.credentialId,H.thinking.id))throw new nJ(403,{message:"Model not allowed for your role"});let R=q?.windowSize??z_,C=O??q?.thread_id,T=await O_({messages:[...V,z],models:H,agent:$,temperature:U,toolApprovalLevel:L,organizationId:Q.id,userId:M,threadId:C,windowSize:R},Z,{runRegistry:G,streamBuffer:J,cancelBroadcast:X});return Re({stream:T.stream,consumeSseStream:ih})}catch(Z){if(console.error("[decopilot:stream] Error",Z),Z instanceof nJ)return K.json({error:Z.message},Z.status);if(Z instanceof Error&&Z.name==="AbortError")return console.warn("[decopilot:stream] Aborted",{error:Z.message}),K.json({error:"Request aborted"},400);return console.error("[decopilot:stream] Failed",{error:Z instanceof Error?Z.message:JSON.stringify(Z),stack:Z instanceof Error?Z.stack:void 0}),K.json({error:Z instanceof Error?Z.message:JSON.stringify(Z)},500)}}),W.post("/:org/decopilot/cancel/:threadId",async(K)=>{let{threadId:Z,thread:Q,organization:H}=await BB6(K);if((await G.execute({type:"CANCEL",threadId:Z})).some((V)=>V.event.type==="RUN_FAILED"))return K.json({cancelled:!0});if(X.broadcast(Z),Q.status==="in_progress")console.warn("[decopilot:cancel] Ghost run detected, force-failing",{threadId:Z}),G.execute({type:"FORCE_FAIL",threadId:Z,reason:"ghost",orgId:H.id}).catch((V)=>{console.error("[decopilot:cancel] Failed to force-fail ghost thread",{threadId:Z,err:V})});return K.json({cancelled:!0,async:!0},202)}),W.get("/:org/decopilot/attach/:threadId",async(K)=>{try{let{threadId:Z}=await zm1(K);if(!G.isRunning(Z))return K.body(null,204);let Q=await J.createReplayStream(Z);if(!Q)return K.body(null,204);let H=Ce({execute:async({writer:$})=>{let V=Q.getReader();try{while(!0){let{done:z,value:U}=await V.read();if(z)break;$.write(U)}}finally{V.releaseLock()}}});return Re({stream:H,consumeSseStream:ih})}catch(Z){if(Z instanceof nJ)throw Z;return console.error("[decopilot:attach] Error",Z),K.body(null,500)}}),W}var YD6=A(()=>{UG();fZ();US();cE();Hm1();Rc();tl();MB6();Cc()});var XD6=A(()=>{YD6()});var V71,JD6;var GD6=A(()=>{fZ();RX1();V71=new rY;V71.post("/connections/:connectionId/oauth-token",async(Y)=>{let X=Y.get("meshContext"),J=Y.req.param("connectionId");if(!(X.auth.user?.id??X.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);if(!await X.storage.connections.findById(J,X.organization?.id))return Y.json({error:"Connection not found"},404);let K=await Y.req.json();if(!K.accessToken)return Y.json({error:"accessToken is required"},400);if(K.tokenEndpoint){let V;try{V=new URL(K.tokenEndpoint)}catch{return Y.json({error:"tokenEndpoint must be a valid URL"},400)}if(V.protocol!=="http:"&&V.protocol!=="https:")return Y.json({error:"tokenEndpoint must be an http(s) URL"},400)}let Z=K.expiresIn?new Date(Date.now()+K.expiresIn*1000):null,Q=new Uq(X.db,X.vault),H={connectionId:J,accessToken:K.accessToken,refreshToken:K.refreshToken??null,scope:K.scope??null,expiresAt:Z,clientId:K.clientId??null,clientSecret:K.clientSecret??null,tokenEndpoint:K.tokenEndpoint??null},$=await Q.upsert(H);return Y.json({success:!0,expiresAt:$.expiresAt})});V71.delete("/connections/:connectionId/oauth-token",async(Y)=>{let X=Y.get("meshContext"),J=Y.req.param("connectionId");if(!(X.auth.user?.id??X.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);return await new Uq(X.db,X.vault).delete(J),Y.json({success:!0})});V71.get("/connections/:connectionId/oauth-token/status",async(Y)=>{let X=Y.get("meshContext"),J=Y.req.param("connectionId");if(!(X.auth.user?.id??X.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);let W=new Uq(X.db,X.vault),K=await W.get(J);if(!K)return Y.json({hasToken:!1,isExpired:!0,canRefresh:!1});let Z=W.isExpired(K),Q=!!K.refreshToken&&!!K.tokenEndpoint;return Y.json({hasToken:!0,isExpired:Z,canRefresh:Q,expiresAt:K.expiresAt})});JD6=V71});async function z71(Y,X,J){let G=await fetch(`${Y}/rest/v1/${J}`,{headers:{apikey:X,Authorization:`Bearer ${X}`,Accept:"application/json"}});if(!G.ok){let W=await G.text().catch(()=>G.statusText);throw console.error(`[deco-sites] Supabase error (${G.status}): ${W}`),Error(`External service error (${G.status})`)}return G.json()}function ZD6(){let Y=process.env.DECO_SUPABASE_URL,X=process.env.DECO_SUPABASE_SERVICE_KEY;if(!Y||!X)return null;return{supabaseUrl:Y,serviceKey:X}}async function QD6(Y,X,J){return(await z71(Y,X,`profiles?email=eq.${encodeURIComponent(J)}&select=user_id`))[0]?.user_id??null}async function Hw8(Y,X,J){return(await z71(Y,X,`api_key?user_id=eq.${encodeURIComponent(J)}&select=id&limit=1`))[0]?.id??null}var U71,WD6="https://sites-admin-mcp.decocache.com/api/mcp",KD6;var HD6=A(()=>{fZ();wm();U71=new rY;U71.use("*",async(Y,X)=>{if(!Y.get("meshContext").auth.user?.id)return Y.json({error:"Unauthorized"},401);return X()});U71.get("/",async(Y)=>{let J=Y.get("meshContext").auth.user?.email;if(!J)return Y.json({error:"Unauthorized"},401);let G=ZD6();if(!G)return Y.json({error:"Deco integration is not configured"},503);let{supabaseUrl:W,serviceKey:K}=G;try{let Z=await QD6(W,K,J);if(!Z)return Y.json({sites:[]});let H=(await z71(W,K,`members?user_id=eq.${encodeURIComponent(Z)}&deleted_at=is.null&select=team_id`)).map((V)=>V.team_id).filter((V)=>Number.isInteger(V));if(H.length===0)return Y.json({sites:[]});let $=await z71(W,K,`sites?team=in.(${H.join(",")})&select=name,domains&order=id`);return Y.json({sites:$})}catch(Z){return console.error("[deco-sites] GET error:",Z),Y.json({error:"Failed to fetch sites"},502)}});U71.post("/connection",async(Y)=>{let X=Y.get("meshContext"),J=X.auth.user?.email,G=H9(X);if(!J||!G)return Y.json({error:"Unauthorized"},401);let W;try{W=await Y.req.json()}catch{return Y.json({error:"Invalid request body"},400)}let{siteName:K,connId:Z,orgId:Q}=W;if(!K||!Z||!Q)return Y.json({error:"siteName, connId, and orgId are required"},400);if(!await X.db.selectFrom("member").select("member.id").where("member.userId","=",G).where("member.organizationId","=",Q).executeTakeFirst())return Y.json({error:"Forbidden"},403);let $=ZD6();if(!$)return Y.json({error:"Deco integration is not configured"},503);let{supabaseUrl:V,serviceKey:z}=$;try{let U=await QD6(V,z,J);if(!U)return Y.json({error:"No deco.cx account found for this user"},404);let q=await Hw8(V,z,U),O=await jN({id:`pending-${Z}`,title:`deco.cx \u2014 ${K}`,connection_type:"HTTP",connection_url:WD6,connection_token:q}).catch(()=>null),L=O?.tools?.length?O.tools:null,M=O?.scopes?.length?O.scopes:null,E=await X.storage.connections.create({id:Z,organization_id:Q,created_by:G,title:`deco.cx \u2014 ${K}`,description:`Admin MCP for deco.cx site: ${K}`,connection_type:"HTTP",connection_url:WD6,connection_token:q??null,connection_headers:null,oauth_config:null,configuration_state:{SITE_NAME:K},metadata:{source:"deco.cx-import"},icon:null,app_name:"deco.cx",app_id:null,tools:L,configuration_scopes:M});return Y.json({connId:E.id})}catch(U){return console.error("[deco-sites] POST /connection error:",U),Y.json({error:"Failed to create connection"},500)}});KD6=U71});var Bm1=class{writer;encoder;writable;abortSubscribers=[];responseReadable;aborted=!1;closed=!1;constructor(Y,X){this.writable=Y,this.writer=Y.getWriter(),this.encoder=new TextEncoder;let J=X.getReader();this.abortSubscribers.push(async()=>{await J.cancel()}),this.responseReadable=new ReadableStream({async pull(G){let{done:W,value:K}=await J.read();W?G.close():G.enqueue(K)},cancel:()=>{this.abort()}})}async write(Y){try{if(typeof Y==="string")Y=this.encoder.encode(Y);await this.writer.write(Y)}catch{}return this}async writeln(Y){return await this.write(Y+`
|
|
2863
2868
|
`),this}sleep(Y){return new Promise((X)=>setTimeout(X,Y))}async close(){try{await this.writer.close()}catch{}this.closed=!0}async pipe(Y){this.writer.releaseLock(),await Y.pipeTo(this.writable,{preventClose:!0}),this.writer=this.writable.getWriter()}onAbort(Y){this.abortSubscribers.push(Y)}abort(){if(!this.aborted)this.aborted=!0,this.abortSubscribers.forEach((Y)=>Y())}};var Dm1=()=>{};var q71=()=>{let Y=typeof Bun<"u"?Bun.version:void 0;if(Y===void 0)return!1;let X=Y.startsWith("1.1")||Y.startsWith("1.0")||Y.startsWith("0.");return q71=()=>X,X};var wm1=()=>{};var $D6=A(()=>{Dm1();wm1()});var FD6,$w8=async(Y,X,J)=>{try{await X(Y)}catch(G){if(G instanceof Error&&J)await J(G,Y),await Y.writeSSE({event:"error",data:G.message});else console.error(G)}finally{Y.close()}},Fw8,Ic=(Y,X,J)=>{let{readable:G,writable:W}=new TransformStream,K=new FD6(W,G);if(q71())Y.req.raw.signal.addEventListener("abort",()=>{if(!K.closed)K.abort()});return Fw8.set(K.responseReadable,Y),Y.header("Transfer-Encoding","chunked"),Y.header("Content-Type","text/event-stream"),Y.header("Cache-Control","no-cache"),Y.header("Connection","keep-alive"),$w8(K,X,J),Y.newResponse(K.responseReadable)};var VD6=A(()=>{uJ1();Dm1();wm1();FD6=class extends Bm1{constructor(Y,X){super(Y,X)}async writeSSE(Y){let J=(await Jd(Y.data,gJ1.Stringify,!1,{})).split(/\r\n|\r|\n/).map((W)=>{return`data: ${W}`}).join(`
|
package/dist/server/server.js
CHANGED
|
@@ -2454,7 +2454,12 @@ Follow this workflow for every request:
|
|
|
2454
2454
|
3. **Plan** \u2014 for multi-step tasks (3+ tool calls), outline the steps
|
|
2455
2455
|
and wait for user confirmation. For simple tasks, act immediately.
|
|
2456
2456
|
4. **Learn skills** \u2014 check <available-prompts> for a matching prompt.
|
|
2457
|
-
If
|
|
2457
|
+
**WARNING: If a prompt's content already appears anywhere in the
|
|
2458
|
+
conversation history (e.g. applied via /promptName in the UI), you
|
|
2459
|
+
MUST NOT call read_prompt for it \u2014 the content is already loaded.
|
|
2460
|
+
Follow its instructions directly.** Only call read_prompt for prompts
|
|
2461
|
+
whose content is NOT yet in the conversation, passing any required
|
|
2462
|
+
arguments listed in <available-prompts>.
|
|
2458
2463
|
5. **Execute** \u2014 enable the tools you need, then carry out the plan.
|
|
2459
2464
|
6. **If not possible** \u2014 explain why, suggest what connection the user
|
|
2460
2465
|
could add, and offer a partial workaround if one exists.
|
|
@@ -2643,7 +2648,7 @@ ${W.join(`
|
|
|
2643
2648
|
</available-connections>`}function ZO6(Y){return Y.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}async function IU8(Y){let{prompts:X}=await Y.listPrompts();if(X.length===0)return null;return`
|
|
2644
2649
|
|
|
2645
2650
|
<available-prompts>
|
|
2646
|
-
${X.map((J)
|
|
2651
|
+
${X.map((J)=>{let W=`${J.name}|${J.description??""}`;if(J.arguments&&J.arguments.length>0){let K=J.arguments.map((Z)=>Z.required?`${Z.name} (required)`:Z.name).join(", ");W+=`|args: ${K}`}return W}).join(`
|
|
2647
2652
|
`)}
|
|
2648
2653
|
</available-prompts>`}async function QO6(Y){let X=Y.stream.getReader();while(!0){let{done:G}=await X.read();if(G)break}}async function jU8(Y){let X=IJ1(Y),G=await Y.req.json(),J=dq6.safeParse(G);if(!J.success)throw new BG(400,{message:J.error.message});let{messages:W,...K}=J.data,Z=W,{systemMessages:Q,requestMessage:H}=bq6(Z);return{organization:X,systemMessages:Q,requestMessage:H,...K}}function Dg1(Y){let{cancelBroadcast:X,streamBuffer:G,runRegistry:J}=Y,W=new xY;return W.get("/:org/decopilot/allowed-models",async(K)=>{try{let Z=K.get("meshContext"),Q=IJ1(K),H=Z.auth.user?.role,$=await Lq(Z.db,Q.id,H);return K.json(C36($))}catch(Z){if(console.error("[decopilot:allowed-models] Error",Z),Z instanceof BG)return K.json({error:Z.message},Z.status);return K.json({error:Z instanceof Error?Z.message:"Internal error"},500)}}),W.post("/:org/decopilot/stream",async(K)=>{try{let Z=K.get("meshContext"),{organization:Q,models:H,agent:$,systemMessages:V,requestMessage:z,temperature:U,memory:q,thread_id:O,toolApprovalLevel:N}=await jU8(K),M=Z.auth?.user?.id;if(!M)throw new BG(401,{message:"User ID is required"});let P=await Lq(Z.db,Q.id,Z.auth.user?.role);if(P!==void 0&&!YS(P,H.credentialId,H.thinking.id))throw new BG(403,{message:"Model not allowed for your role"});let R=q?.windowSize??oS,C=O??q?.thread_id,T=await tS({messages:[...V,z],models:H,agent:$,temperature:U,toolApprovalLevel:N,organizationId:Q.id,userId:M,threadId:C,windowSize:R},Z,{runRegistry:J,streamBuffer:G,cancelBroadcast:X});return i91({stream:T.stream,consumeSseStream:Tu})}catch(Z){if(console.error("[decopilot:stream] Error",Z),Z instanceof BG)return K.json({error:Z.message},Z.status);if(Z instanceof Error&&Z.name==="AbortError")return console.warn("[decopilot:stream] Aborted",{error:Z.message}),K.json({error:"Request aborted"},400);return console.error("[decopilot:stream] Failed",{error:Z instanceof Error?Z.message:JSON.stringify(Z),stack:Z instanceof Error?Z.stack:void 0}),K.json({error:Z instanceof Error?Z.message:JSON.stringify(Z)},500)}}),W.post("/:org/decopilot/cancel/:threadId",async(K)=>{let{threadId:Z,thread:Q,organization:H}=await mq6(K);if((await J.execute({type:"CANCEL",threadId:Z})).some((V)=>V.event.type==="RUN_FAILED"))return K.json({cancelled:!0});if(X.broadcast(Z),Q.status==="in_progress")console.warn("[decopilot:cancel] Ghost run detected, force-failing",{threadId:Z}),J.execute({type:"FORCE_FAIL",threadId:Z,reason:"ghost",orgId:H.id}).catch((V)=>{console.error("[decopilot:cancel] Failed to force-fail ghost thread",{threadId:Z,err:V})});return K.json({cancelled:!0,async:!0},202)}),W.get("/:org/decopilot/attach/:threadId",async(K)=>{try{let{threadId:Z}=await qg1(K);if(!J.isRunning(Z))return K.body(null,204);let Q=await G.createReplayStream(Z);if(!Q)return K.body(null,204);let H=a91({execute:async({writer:$})=>{let V=Q.getReader();try{while(!0){let{done:z,value:U}=await V.read();if(z)break;$.write(U)}}finally{V.releaseLock()}}});return i91({stream:H,consumeSseStream:Tu})}catch(Z){if(Z instanceof BG)throw Z;return console.error("[decopilot:attach] Error",Z),K.body(null,500)}}),W}rW();KX1();var kJ1=new xY;kJ1.post("/connections/:connectionId/oauth-token",async(Y)=>{let X=Y.get("meshContext"),G=Y.req.param("connectionId");if(!(X.auth.user?.id??X.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);if(!await X.storage.connections.findById(G,X.organization?.id))return Y.json({error:"Connection not found"},404);let K=await Y.req.json();if(!K.accessToken)return Y.json({error:"accessToken is required"},400);if(K.tokenEndpoint){let V;try{V=new URL(K.tokenEndpoint)}catch{return Y.json({error:"tokenEndpoint must be a valid URL"},400)}if(V.protocol!=="http:"&&V.protocol!=="https:")return Y.json({error:"tokenEndpoint must be an http(s) URL"},400)}let Z=K.expiresIn?new Date(Date.now()+K.expiresIn*1000):null,Q=new Zq(X.db,X.vault),H={connectionId:G,accessToken:K.accessToken,refreshToken:K.refreshToken??null,scope:K.scope??null,expiresAt:Z,clientId:K.clientId??null,clientSecret:K.clientSecret??null,tokenEndpoint:K.tokenEndpoint??null},$=await Q.upsert(H);return Y.json({success:!0,expiresAt:$.expiresAt})});kJ1.delete("/connections/:connectionId/oauth-token",async(Y)=>{let X=Y.get("meshContext"),G=Y.req.param("connectionId");if(!(X.auth.user?.id??X.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);return await new Zq(X.db,X.vault).delete(G),Y.json({success:!0})});kJ1.get("/connections/:connectionId/oauth-token/status",async(Y)=>{let X=Y.get("meshContext"),G=Y.req.param("connectionId");if(!(X.auth.user?.id??X.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);let W=new Zq(X.db,X.vault),K=await W.get(G);if(!K)return Y.json({hasToken:!1,isExpired:!0,canRefresh:!1});let Z=W.isExpired(K),Q=!!K.refreshToken&&!!K.tokenEndpoint;return Y.json({hasToken:!0,isExpired:Z,canRefresh:Q,expiresAt:K.expiresAt})});var KO6=kJ1;rW();Gg();var fJ1=new xY;async function vJ1(Y,X,G){let J=await fetch(`${Y}/rest/v1/${G}`,{headers:{apikey:X,Authorization:`Bearer ${X}`,Accept:"application/json"}});if(!J.ok){let W=await J.text().catch(()=>J.statusText);throw console.error(`[deco-sites] Supabase error (${J.status}): ${W}`),Error(`External service error (${J.status})`)}return J.json()}function $O6(){let Y=process.env.DECO_SUPABASE_URL,X=process.env.DECO_SUPABASE_SERVICE_KEY;if(!Y||!X)return null;return{supabaseUrl:Y,serviceKey:X}}async function FO6(Y,X,G){return(await vJ1(Y,X,`profiles?email=eq.${encodeURIComponent(G)}&select=user_id`))[0]?.user_id??null}async function SU8(Y,X,G){return(await vJ1(Y,X,`api_key?user_id=eq.${encodeURIComponent(G)}&select=id&limit=1`))[0]?.id??null}fJ1.use("*",async(Y,X)=>{if(!Y.get("meshContext").auth.user?.id)return Y.json({error:"Unauthorized"},401);return X()});fJ1.get("/",async(Y)=>{let G=Y.get("meshContext").auth.user?.email;if(!G)return Y.json({error:"Unauthorized"},401);let J=$O6();if(!J)return Y.json({error:"Deco integration is not configured"},503);let{supabaseUrl:W,serviceKey:K}=J;try{let Z=await FO6(W,K,G);if(!Z)return Y.json({sites:[]});let H=(await vJ1(W,K,`members?user_id=eq.${encodeURIComponent(Z)}&deleted_at=is.null&select=team_id`)).map((V)=>V.team_id).filter((V)=>Number.isInteger(V));if(H.length===0)return Y.json({sites:[]});let $=await vJ1(W,K,`sites?team=in.(${H.join(",")})&select=name,domains&order=id`);return Y.json({sites:$})}catch(Z){return console.error("[deco-sites] GET error:",Z),Y.json({error:"Failed to fetch sites"},502)}});var HO6="https://sites-admin-mcp.decocache.com/api/mcp";fJ1.post("/connection",async(Y)=>{let X=Y.get("meshContext"),G=X.auth.user?.email,J=Q9(X);if(!G||!J)return Y.json({error:"Unauthorized"},401);let W;try{W=await Y.req.json()}catch{return Y.json({error:"Invalid request body"},400)}let{siteName:K,connId:Z,orgId:Q}=W;if(!K||!Z||!Q)return Y.json({error:"siteName, connId, and orgId are required"},400);if(!await X.db.selectFrom("member").select("member.id").where("member.userId","=",J).where("member.organizationId","=",Q).executeTakeFirst())return Y.json({error:"Forbidden"},403);let $=$O6();if(!$)return Y.json({error:"Deco integration is not configured"},503);let{supabaseUrl:V,serviceKey:z}=$;try{let U=await FO6(V,z,G);if(!U)return Y.json({error:"No deco.cx account found for this user"},404);let q=await SU8(V,z,U),O=await dN({id:`pending-${Z}`,title:`deco.cx \u2014 ${K}`,connection_type:"HTTP",connection_url:HO6,connection_token:q}).catch(()=>null),N=O?.tools?.length?O.tools:null,M=O?.scopes?.length?O.scopes:null,P=await X.storage.connections.create({id:Z,organization_id:Q,created_by:J,title:`deco.cx \u2014 ${K}`,description:`Admin MCP for deco.cx site: ${K}`,connection_type:"HTTP",connection_url:HO6,connection_token:q??null,connection_headers:null,oauth_config:null,configuration_state:{SITE_NAME:K},metadata:{source:"deco.cx-import"},icon:null,app_name:"deco.cx",app_id:null,tools:N,configuration_scopes:M});return Y.json({connId:P.id})}catch(U){return console.error("[deco-sites] POST /connection error:",U),Y.json({error:"Failed to create connection"},500)}});var VO6=fJ1;vv1();fj();TJ();rW();var wg1=class{writer;encoder;writable;abortSubscribers=[];responseReadable;aborted=!1;closed=!1;constructor(Y,X){this.writable=Y,this.writer=Y.getWriter(),this.encoder=new TextEncoder;let G=X.getReader();this.abortSubscribers.push(async()=>{await G.cancel()}),this.responseReadable=new ReadableStream({async pull(J){let{done:W,value:K}=await G.read();W?J.close():J.enqueue(K)},cancel:()=>{this.abort()}})}async write(Y){try{if(typeof Y==="string")Y=this.encoder.encode(Y);await this.writer.write(Y)}catch{}return this}async writeln(Y){return await this.write(Y+`
|
|
2649
2654
|
`),this}sleep(Y){return new Promise((X)=>setTimeout(X,Y))}async close(){try{await this.writer.close()}catch{}this.closed=!0}async pipe(Y){this.writer.releaseLock(),await Y.pipeTo(this.writable,{preventClose:!0}),this.writer=this.writable.getWriter()}onAbort(Y){this.abortSubscribers.push(Y)}abort(){if(!this.aborted)this.aborted=!0,this.abortSubscribers.forEach((Y)=>Y())}};var yJ1=()=>{let Y=typeof Bun<"u"?Bun.version:void 0;if(Y===void 0)return!1;let X=Y.startsWith("1.1")||Y.startsWith("1.0")||Y.startsWith("0.");return yJ1=()=>X,X};Te();var zO6=class extends wg1{constructor(Y,X){super(Y,X)}async writeSSE(Y){let G=(await Xh(Y.data,Ee.Stringify,!1,{})).split(/\r\n|\r|\n/).map((W)=>{return`data: ${W}`}).join(`
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as r,j as i}from"./index-t6xY8FYJ.js";import{P as m}from"./project-plugins-wKxoF0hg.js";import"./useQuery-CIPIMOb2.js";import"./useMutation-Bncnalv9.js";import"./constants-C2NIYyeK.js";import"./switch-BI7Srio5.js";import"./label-DQB9xwZM.js";import"./Container-OKF_GeCq.js";import"./use-connection-DSXGpH93.js";import"./use-collections-CLlnuJpl.js";import"./registry-utils-q14xY1bA.js";import"./binder-1tH_sZqU.js";import"./use-install-from-registry-OGBcaDCK.js";import"./extract-connection-data-BJKmDa-6.js";import"./generate-id-Dz9QYszT.js";import"./Loading01-CKkwknOS.js";import"./Plus-B_tfkXz3.js";import"./select-D64t3Q_g.js";import"./index-BdQq_4o_.js";import"./index-BKuN2Iot.js";import"./Check-wCq9US95.js";import"./ChevronDown-C4UuUfvP.js";import"./ChevronUp-eUIC7wig.js";function q(){const o=r.c(1);let t;return o[0]===Symbol.for("react.memo_cache_sentinel")?(t=i.jsx(m,{}),o[0]=t):t=o[0],t}export{q as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as n,j as r,E as d,r as f,u as x,e as j}from"./index-t6xY8FYJ.js";import{T as h}from"./tasks-panel-CgnSZwBZ.js";import{P as p}from"./index-1_kpvnU4.js";import{B as g,a as b,b as T,c as k}from"./breadcrumb-BjaszutD.js";import{i as B}from"./Loading01-CKkwknOS.js";import{u as S}from"./context-Cfhj-jDE.js";import"./task-status-E_WeHLB-.js";import"./popover-CRTw2B4t.js";import"./skeleton-BPyW696G.js";import"./spinner-CV28jHZI.js";import"./tooltip-CKRAIo8e.js";import"./index-BKuN2Iot.js";import"./constants-C2NIYyeK.js";import"./use-mcp-prompts-DSysuR0s.js";import"./useQuery-CIPIMOb2.js";import"./dialog-D2mcZnzN.js";import"./X-CVr_hKcl.js";import"./form-3OFR-VJQ.js";import"./label-DQB9xwZM.js";import"./input-qMconvxq.js";import"./index-CqfM11ms.js";import"./usage-BW6ztpN6.js";import"./integration-icon-BlldxArX.js";import"./Container-OKF_GeCq.js";import"./AlertCircle-CwQ-M1BH.js";import"./ArrowUp-C8UJr_8S.js";import"./ArrowLeft-7hoUFjWA.js";import"./XCircle-Dv-O5jd1.js";import"./Type01-DmSAzri2.js";import"./Check-wCq9US95.js";import"./ChevronDown-C4UuUfvP.js";import"./ChevronRight-8vS2LfiE.js";import"./ChevronUp-eUIC7wig.js";import"./RefreshCcw01-Dd-MCL9x.js";import"./Play-B44HkfJ8.js";import"./Dataflow03-CYOanaoD.js";import"./Download01-D6Ut3-TC.js";import"./List-Dm7hE_p7.js";import"./VideoRecorder-b8m_Ituf.js";import"./FolderClosed-DWPM1ogz.js";import"./Grid01-CFCqtKvs.js";import"./Plus-B_tfkXz3.js";import"./SearchMd-DwH-zFLD.js";import"./Settings01-Cc_jPdtk.js";import"./Trash01-DFCUs2vM.js";import"./Upload01-B4UOm_Kf.js";import"./User01-a2C2h2ws.js";import"./XClose-DXhO2ZT2.js";import"./Zap-D6ZQZPYh.js";import"./org-ai-providers-DJ2pJYJP.js";import"./useMutation-Bncnalv9.js";import"./card-C_4nJrQs.js";import"./toggle-group-DF6ThyrQ.js";import"./avatar-BCNSpjov.js";import"./ai-providers-logos-HDlTKyFP.js";import"./formatDistanceToNow-Cb2QZZJn.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./select-D64t3Q_g.js";import"./index-BdQq_4o_.js";import"./use-copy-C8N2hXkR.js";import"./marked.esm-BaswSlok.js";import"./tabs-BcgepvIr.js";import"./checkbox-CKx9MIya.js";import"./drawer-vD6YQ-sA.js";import"./select-virtual-mcp-7C78QF32.js";import"./use-virtual-mcp-D5bKIffF.js";import"./use-collections-CLlnuJpl.js";import"./use-create-virtual-mcp-CCjeFnH5.js";import"./use-mcp-resources-BWxiCCmX.js";import"./collapsible-DKOKNSjC.js";import"./index-Ums8T5hF.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-BgFTGV3R.js";import"./types-CEJbDNRj.js";import"./useSuspenseInfiniteQuery-Dah_qudN.js";import"./infiniteQueryObserver-cSGG5mU_.js";import"./collection-search-C014T-nI.js";import"./user-CwGhUrKE.js";import"./format-time-CMKyl-GC.js";import"./empty-state-C_h_kfhM.js";import"./dropdown-menu-5AX5yqCQ.js";import"./decopilot-events-Brt4gAR6.js";import"./index-BN5_gDph.js";function v(){const t=n.c(8),{org:o,project:s}=x(),a=j(),{switchToTask:c}=S();let i;t[0]!==a||t[1]!==o.slug||t[2]!==s.slug||t[3]!==c?(i=async u=>{await c(u),a({to:"/$org/$project",params:{org:o.slug,project:s.slug}})},t[0]=a,t[1]=o.slug,t[2]=s.slug,t[3]=c,t[4]=i):i=t[4];const l=i;let m;t[5]===Symbol.for("react.memo_cache_sentinel")?(m=r.jsx(p.Header,{children:r.jsx(p.Header.Left,{children:r.jsx(g,{children:r.jsx(b,{children:r.jsx(T,{children:r.jsx(k,{children:"Tasks"})})})})})}),t[5]=m):m=t[5];let e;return t[6]!==l?(e=r.jsxs(p,{children:[m,r.jsx(p.Content,{children:r.jsx("div",{className:"h-full flex flex-col overflow-hidden",children:r.jsx(h,{onTaskSelect:l})})})]}),t[6]=l,t[7]=e):e=t[7],e}function tr(){const t=n.c(1);let o;return t[0]===Symbol.for("react.memo_cache_sentinel")?(o=r.jsx(d,{children:r.jsx(f.Suspense,{fallback:r.jsx("div",{className:"flex h-full items-center justify-center",children:r.jsx(B,{size:32,className:"animate-spin text-muted-foreground"})}),children:r.jsx(v,{})})}),t[0]=o):o=t[0],o}export{tr as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as u}from"./infiniteQueryObserver-cSGG5mU_.js";import{T as i}from"./index-t6xY8FYJ.js";function t(e,r){return i(e,u,r)}export{t as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{T as u,aB as s}from"./index-t6xY8FYJ.js";function o(e,r){return u(e,s,r)}export{o as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as s}from"./infiniteQueryObserver-cSGG5mU_.js";import{T as u,U as n}from"./index-t6xY8FYJ.js";function a(r,e){return u({...r,enabled:!0,suspense:!0,throwOnError:n},s,e)}export{a as u};
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"maxdepth": 4,
|
|
3
|
-
"maxstatements": 200,
|
|
4
|
-
"maxcomplexity": 12,
|
|
5
|
-
"maxlen": 80,
|
|
6
|
-
"maxparams": 5,
|
|
7
|
-
|
|
8
|
-
"curly": true,
|
|
9
|
-
"eqeqeq": true,
|
|
10
|
-
"immed": true,
|
|
11
|
-
"latedef": false,
|
|
12
|
-
"noarg": true,
|
|
13
|
-
"noempty": true,
|
|
14
|
-
"nonew": true,
|
|
15
|
-
"undef": true,
|
|
16
|
-
"unused": "vars",
|
|
17
|
-
"trailing": true,
|
|
18
|
-
|
|
19
|
-
"quotmark": true,
|
|
20
|
-
"expr": true,
|
|
21
|
-
"asi": true,
|
|
22
|
-
|
|
23
|
-
"browser": false,
|
|
24
|
-
"esnext": true,
|
|
25
|
-
"devel": false,
|
|
26
|
-
"node": false,
|
|
27
|
-
"nonstandard": false,
|
|
28
|
-
|
|
29
|
-
"predef": ["require", "module", "__dirname", "__filename"]
|
|
30
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
The MIT License (MIT)
|
|
2
|
-
Copyright (c) 2012-2014 Raynos.
|
|
3
|
-
|
|
4
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
6
|
-
in the Software without restriction, including without limitation the rights
|
|
7
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
9
|
-
furnished to do so, subject to the following conditions:
|
|
10
|
-
|
|
11
|
-
The above copyright notice and this permission notice shall be included in
|
|
12
|
-
all copies or substantial portions of the Software.
|
|
13
|
-
|
|
14
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
20
|
-
THE SOFTWARE.
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# xtend
|
|
2
|
-
|
|
3
|
-
[![browser support][3]][4]
|
|
4
|
-
|
|
5
|
-
[](http://github.com/badges/stability-badges)
|
|
6
|
-
|
|
7
|
-
Extend like a boss
|
|
8
|
-
|
|
9
|
-
xtend is a basic utility library which allows you to extend an object by appending all of the properties from each object in a list. When there are identical properties, the right-most property takes precedence.
|
|
10
|
-
|
|
11
|
-
## Examples
|
|
12
|
-
|
|
13
|
-
```js
|
|
14
|
-
var extend = require("xtend")
|
|
15
|
-
|
|
16
|
-
// extend returns a new object. Does not mutate arguments
|
|
17
|
-
var combination = extend({
|
|
18
|
-
a: "a",
|
|
19
|
-
b: "c"
|
|
20
|
-
}, {
|
|
21
|
-
b: "b"
|
|
22
|
-
})
|
|
23
|
-
// { a: "a", b: "b" }
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## Stability status: Locked
|
|
27
|
-
|
|
28
|
-
## MIT Licensed
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
[3]: http://ci.testling.com/Raynos/xtend.png
|
|
32
|
-
[4]: http://ci.testling.com/Raynos/xtend
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
module.exports = extend
|
|
2
|
-
|
|
3
|
-
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
4
|
-
|
|
5
|
-
function extend() {
|
|
6
|
-
var target = {}
|
|
7
|
-
|
|
8
|
-
for (var i = 0; i < arguments.length; i++) {
|
|
9
|
-
var source = arguments[i]
|
|
10
|
-
|
|
11
|
-
for (var key in source) {
|
|
12
|
-
if (hasOwnProperty.call(source, key)) {
|
|
13
|
-
target[key] = source[key]
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return target
|
|
19
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
module.exports = extend
|
|
2
|
-
|
|
3
|
-
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
4
|
-
|
|
5
|
-
function extend(target) {
|
|
6
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
7
|
-
var source = arguments[i]
|
|
8
|
-
|
|
9
|
-
for (var key in source) {
|
|
10
|
-
if (hasOwnProperty.call(source, key)) {
|
|
11
|
-
target[key] = source[key]
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
return target
|
|
17
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "xtend",
|
|
3
|
-
"version": "4.0.2",
|
|
4
|
-
"description": "extend like a boss",
|
|
5
|
-
"keywords": [
|
|
6
|
-
"extend",
|
|
7
|
-
"merge",
|
|
8
|
-
"options",
|
|
9
|
-
"opts",
|
|
10
|
-
"object",
|
|
11
|
-
"array"
|
|
12
|
-
],
|
|
13
|
-
"author": "Raynos <raynos2@gmail.com>",
|
|
14
|
-
"repository": "git://github.com/Raynos/xtend.git",
|
|
15
|
-
"main": "immutable",
|
|
16
|
-
"scripts": {
|
|
17
|
-
"test": "node test"
|
|
18
|
-
},
|
|
19
|
-
"dependencies": {},
|
|
20
|
-
"devDependencies": {
|
|
21
|
-
"tape": "~1.1.0"
|
|
22
|
-
},
|
|
23
|
-
"homepage": "https://github.com/Raynos/xtend",
|
|
24
|
-
"contributors": [
|
|
25
|
-
{
|
|
26
|
-
"name": "Jake Verbaten"
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
"name": "Matt Esch"
|
|
30
|
-
}
|
|
31
|
-
],
|
|
32
|
-
"bugs": {
|
|
33
|
-
"url": "https://github.com/Raynos/xtend/issues",
|
|
34
|
-
"email": "raynos2@gmail.com"
|
|
35
|
-
},
|
|
36
|
-
"license": "MIT",
|
|
37
|
-
"testling": {
|
|
38
|
-
"files": "test.js",
|
|
39
|
-
"browsers": [
|
|
40
|
-
"ie/7..latest",
|
|
41
|
-
"firefox/16..latest",
|
|
42
|
-
"firefox/nightly",
|
|
43
|
-
"chrome/22..latest",
|
|
44
|
-
"chrome/canary",
|
|
45
|
-
"opera/12..latest",
|
|
46
|
-
"opera/next",
|
|
47
|
-
"safari/5.1..latest",
|
|
48
|
-
"ipad/6.0..latest",
|
|
49
|
-
"iphone/6.0..latest"
|
|
50
|
-
]
|
|
51
|
-
},
|
|
52
|
-
"engines": {
|
|
53
|
-
"node": ">=0.4"
|
|
54
|
-
}
|
|
55
|
-
}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
var test = require("tape")
|
|
2
|
-
var extend = require("./")
|
|
3
|
-
var mutableExtend = require("./mutable")
|
|
4
|
-
|
|
5
|
-
test("merge", function(assert) {
|
|
6
|
-
var a = { a: "foo" }
|
|
7
|
-
var b = { b: "bar" }
|
|
8
|
-
|
|
9
|
-
assert.deepEqual(extend(a, b), { a: "foo", b: "bar" })
|
|
10
|
-
assert.end()
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
test("replace", function(assert) {
|
|
14
|
-
var a = { a: "foo" }
|
|
15
|
-
var b = { a: "bar" }
|
|
16
|
-
|
|
17
|
-
assert.deepEqual(extend(a, b), { a: "bar" })
|
|
18
|
-
assert.end()
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
test("undefined", function(assert) {
|
|
22
|
-
var a = { a: undefined }
|
|
23
|
-
var b = { b: "foo" }
|
|
24
|
-
|
|
25
|
-
assert.deepEqual(extend(a, b), { a: undefined, b: "foo" })
|
|
26
|
-
assert.deepEqual(extend(b, a), { a: undefined, b: "foo" })
|
|
27
|
-
assert.end()
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
test("handle 0", function(assert) {
|
|
31
|
-
var a = { a: "default" }
|
|
32
|
-
var b = { a: 0 }
|
|
33
|
-
|
|
34
|
-
assert.deepEqual(extend(a, b), { a: 0 })
|
|
35
|
-
assert.deepEqual(extend(b, a), { a: "default" })
|
|
36
|
-
assert.end()
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
test("is immutable", function (assert) {
|
|
40
|
-
var record = {}
|
|
41
|
-
|
|
42
|
-
extend(record, { foo: "bar" })
|
|
43
|
-
assert.equal(record.foo, undefined)
|
|
44
|
-
assert.end()
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
test("null as argument", function (assert) {
|
|
48
|
-
var a = { foo: "bar" }
|
|
49
|
-
var b = null
|
|
50
|
-
var c = void 0
|
|
51
|
-
|
|
52
|
-
assert.deepEqual(extend(b, a, c), { foo: "bar" })
|
|
53
|
-
assert.end()
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
test("mutable", function (assert) {
|
|
57
|
-
var a = { foo: "bar" }
|
|
58
|
-
|
|
59
|
-
mutableExtend(a, { bar: "baz" })
|
|
60
|
-
|
|
61
|
-
assert.equal(a.bar, "baz")
|
|
62
|
-
assert.end()
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
test("null prototype", function(assert) {
|
|
66
|
-
var a = { a: "foo" }
|
|
67
|
-
var b = Object.create(null)
|
|
68
|
-
b.b = "bar";
|
|
69
|
-
|
|
70
|
-
assert.deepEqual(extend(a, b), { a: "foo", b: "bar" })
|
|
71
|
-
assert.end()
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
test("null prototype mutable", function (assert) {
|
|
75
|
-
var a = { foo: "bar" }
|
|
76
|
-
var b = Object.create(null)
|
|
77
|
-
b.bar = "baz";
|
|
78
|
-
|
|
79
|
-
mutableExtend(a, b)
|
|
80
|
-
|
|
81
|
-
assert.equal(a.bar, "baz")
|
|
82
|
-
assert.end()
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
test("prototype pollution", function (assert) {
|
|
86
|
-
var a = {}
|
|
87
|
-
var maliciousPayload = '{"__proto__":{"oops":"It works!"}}'
|
|
88
|
-
|
|
89
|
-
assert.strictEqual(a.oops, undefined)
|
|
90
|
-
extend({}, maliciousPayload)
|
|
91
|
-
assert.strictEqual(a.oops, undefined)
|
|
92
|
-
assert.end()
|
|
93
|
-
})
|
|
94
|
-
|
|
95
|
-
test("prototype pollution mutable", function (assert) {
|
|
96
|
-
var a = {}
|
|
97
|
-
var maliciousPayload = '{"__proto__":{"oops":"It works!"}}'
|
|
98
|
-
|
|
99
|
-
assert.strictEqual(a.oops, undefined)
|
|
100
|
-
mutableExtend({}, maliciousPayload)
|
|
101
|
-
assert.strictEqual(a.oops, undefined)
|
|
102
|
-
assert.end()
|
|
103
|
-
})
|