decocms 4.344.3 → 4.344.4

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.
Files changed (257) hide show
  1. package/dist/client/assets/{AlertCircle-C3hNX-U3.js → AlertCircle-MMXQB5BT.js} +1 -1
  2. package/dist/client/assets/{AreaChart-V5K73xTf.js → AreaChart-yVeAt06n.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-xkekPehv.js → ArrowLeft-DcqEiCXC.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-CYfoVlFX.js → ArrowUp-C0l-cSxr.js} +1 -1
  5. package/dist/client/assets/{Check-BcH3mbli.js → Check-COlZG_Iq.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-efnyoYbr.js → CheckCircle-DlrGO-LV.js} +1 -1
  7. package/dist/client/assets/{ChevronRight-zWIGH7_7.js → ChevronRight-lhy77Wwp.js} +1 -1
  8. package/dist/client/assets/{ChevronSelectorVertical-Q_MhqA-g.js → ChevronSelectorVertical-DrBBU4AT.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-CcnNOmjW.js → ChevronUp-BBoq4dQx.js} +1 -1
  10. package/dist/client/assets/{Copy01-B-07BGuw.js → Copy01-ByTSNoHg.js} +1 -1
  11. package/dist/client/assets/{CreditCard01-DZdhUpRr.js → CreditCard01-qqfxWQO_.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-Cha1vnex.js → DotsVertical-BK7lUtpM.js} +1 -1
  13. package/dist/client/assets/{Download01-BH00OOK2.js → Download01-Cqs5gANt.js} +1 -1
  14. package/dist/client/assets/{ErrorBarContext-DGy0g17o.js → ErrorBarContext-CaFlLJMw.js} +1 -1
  15. package/dist/client/assets/{Eye-s_5OI3rP.js → Eye-De6iXjt2.js} +1 -1
  16. package/dist/client/assets/{GitBranch01-DPsdhEPj.js → GitBranch01-C7r39_B1.js} +1 -1
  17. package/dist/client/assets/{Globe01-BOLRhWz3.js → Globe01-BVw1J1dL.js} +1 -1
  18. package/dist/client/assets/{HardDrive-Jz5aKVF-.js → HardDrive-UD8cThYr.js} +1 -1
  19. package/dist/client/assets/{Image01-Dde0njV5.js → Image01-2rJjksWt.js} +1 -1
  20. package/dist/client/assets/{Key01-CL0l8cke.js → Key01-g1jGSd1T.js} +1 -1
  21. package/dist/client/assets/{Link01-c7H6evzR.js → Link01-BECijxK2.js} +1 -1
  22. package/dist/client/assets/{LinkExternal01-mF6LE9cE.js → LinkExternal01-CO1G1_g7.js} +1 -1
  23. package/dist/client/assets/{Monitor01-CxZPUqxw.js → Monitor01-BbOgpVrd.js} +1 -1
  24. package/dist/client/assets/{Package-D1Oz_AXu.js → Package-CLE_ytpB.js} +1 -1
  25. package/dist/client/assets/{Palette-BZi2CQIb.js → Palette-CLZ81RQu.js} +1 -1
  26. package/dist/client/assets/{Play-DL08uuDR.js → Play-BS6znGOA.js} +1 -1
  27. package/dist/client/assets/{Plus-UnZHTGwg.js → Plus-RDqtgmUn.js} +1 -1
  28. package/dist/client/assets/{SearchMd-BoghbLrR.js → SearchMd-BPJyn57v.js} +1 -1
  29. package/dist/client/assets/{Sector-CwzoDHdp.js → Sector-0dGAognD.js} +1 -1
  30. package/dist/client/assets/{Settings02-CRvAtfO0.js → Settings02-DCwLCWga.js} +1 -1
  31. package/dist/client/assets/{Share07-CTpIecy0.js → Share07-CZ9aibs3.js} +1 -1
  32. package/dist/client/assets/{Shield01-DPL17IT0.js → Shield01-D_ej3uf2.js} +1 -1
  33. package/dist/client/assets/{Stars01-DveEX2vy.js → Stars01-CpnggJLh.js} +1 -1
  34. package/dist/client/assets/{Sun-cPKIj7uq.js → Sun-BVXGJtHB.js} +1 -1
  35. package/dist/client/assets/{Tool01-DXqO9hP4.js → Tool01-lLgSUXVY.js} +1 -1
  36. package/dist/client/assets/{Tool02-B4NLpHjP.js → Tool02-DbSkbpld.js} +1 -1
  37. package/dist/client/assets/{Trash01-CRSthTGO.js → Trash01-BKalTQIS.js} +1 -1
  38. package/dist/client/assets/{TrendUp01-Dug8rn5Y.js → TrendUp01-Cm7YwYbt.js} +1 -1
  39. package/dist/client/assets/{Upload01-D_Fv189I.js → Upload01-HHF0-qzw.js} +1 -1
  40. package/dist/client/assets/{User01-CDa2pgjQ.js → User01-r0_GbQ8r.js} +1 -1
  41. package/dist/client/assets/{UserSquare-CWhx4AsN.js → UserSquare-hcaj17gz.js} +1 -1
  42. package/dist/client/assets/{Users01-DZlH1wbC.js → Users01-Bu5fyBA6.js} +1 -1
  43. package/dist/client/assets/{Users03-CoUu6iB3.js → Users03-BOFJsacM.js} +1 -1
  44. package/dist/client/assets/{XCircle-TCv3gxEk.js → XCircle-Mj5ql-Qx.js} +1 -1
  45. package/dist/client/assets/{XClose-DqZ5Ef7p.js → XClose-Df2qGXCV.js} +1 -1
  46. package/dist/client/assets/{Zap-HRAvXFnr.js → Zap-Cokcdzem.js} +1 -1
  47. package/dist/client/assets/{ZoomOut-DC7lYRrH.js → ZoomOut-T2TmOAC7.js} +1 -1
  48. package/dist/client/assets/{access-gate-LG7Db20W.js → access-gate-tjl-KQc5.js} +1 -1
  49. package/dist/client/assets/{agent-icon-B0j2UorE.js → agent-icon-Dud4Dgyt.js} +1 -1
  50. package/dist/client/assets/{agents-list-DJgBBD1W.js → agents-list-C2SALbi7.js} +1 -1
  51. package/dist/client/assets/{ai-providers-D9b6lp9s.js → ai-providers-DrsNB3ZL.js} +1 -1
  52. package/dist/client/assets/{alert-Yw6picdx.js → alert-CSBIES1I.js} +1 -1
  53. package/dist/client/assets/{alert-dialog-B6LS36Sm.js → alert-dialog-DR3U9WH-.js} +1 -1
  54. package/dist/client/assets/{analytics-tab-D-B27giR.js → analytics-tab-NgL3s46L.js} +1 -1
  55. package/dist/client/assets/{api-keys-D7tL_p1k.js → api-keys-B9YvTwjr.js} +1 -1
  56. package/dist/client/assets/api-keys-BKUTfUtI.js +1 -0
  57. package/dist/client/assets/app-editor-B7bRgdBC.js +1 -0
  58. package/dist/client/assets/{auth-catchall-DU8qDYnm.js → auth-catchall-DlIPkq35.js} +1 -1
  59. package/dist/client/assets/{auth-entry-6o1YBMQ6.js → auth-entry-DYxJPWB9.js} +1 -1
  60. package/dist/client/assets/{auth-DBYGTgFE.js → auth-pxmXflMC.js} +1 -1
  61. package/dist/client/assets/{auth-split-layout-Csg-iIgy.js → auth-split-layout-BEtw3h52.js} +1 -1
  62. package/dist/client/assets/{authenticate-and-persist-oauth-AGm_2YIv.js → authenticate-and-persist-oauth-DEt4nWzC.js} +1 -1
  63. package/dist/client/assets/{automation-list-row-yl7Jr9Us.js → automation-list-row-w_6dod7A.js} +1 -1
  64. package/dist/client/assets/{automation-runs-DBYd6ygh.js → automation-runs-CSMD6Fno.js} +1 -1
  65. package/dist/client/assets/{automations-Dlvl2Sbn.js → automations-Chklo3P6.js} +1 -1
  66. package/dist/client/assets/{autosend-9lrcbCup.js → autosend-BTepWx3_.js} +1 -1
  67. package/dist/client/assets/{avatar-BusY4imm.js → avatar--vQE0XAV.js} +1 -1
  68. package/dist/client/assets/{badge-COtyjjy2.js → badge-BsDrwMQC.js} +1 -1
  69. package/dist/client/assets/{block-document-pw3BZW3I.js → block-document-CvifDrCI.js} +1 -1
  70. package/dist/client/assets/{breadcrumb-aEyQOqqG.js → breadcrumb--1eSMHFt.js} +1 -1
  71. package/dist/client/assets/{buckets-CrIxq0vO.js → buckets-CXTxvCv-.js} +1 -1
  72. package/dist/client/assets/{bulk-category-panel-D7gbHLhl.js → bulk-category-panel-Bx5YHxjU.js} +1 -1
  73. package/dist/client/assets/{capability-load-error-BeQsW5u1.js → capability-load-error-Dafmx4Ll.js} +1 -1
  74. package/dist/client/assets/{cards-CAtXduAN.js → cards-DWh17eYP.js} +1 -1
  75. package/dist/client/assets/{category-editor-CQj0g1PN.js → category-editor-BeXDYFhG.js} +1 -1
  76. package/dist/client/assets/{cdn-tab-VWG7A8ek.js → cdn-tab-C1FgbuSh.js} +1 -1
  77. package/dist/client/assets/{chart-BSIlcmgf.js → chart-DClpxfm_.js} +1 -1
  78. package/dist/client/assets/{chat-context-DU7jeH6U.js → chat-context-C9lWTtFJ.js} +1 -1
  79. package/dist/client/assets/{checkbox-D1r9ixw9.js → checkbox-QNc1bP0G.js} +1 -1
  80. package/dist/client/assets/{choose-editor-BEZHaCP7.js → choose-editor-CHBT1o2b.js} +1 -1
  81. package/dist/client/assets/{cli-auth-success-ChhNt2lr.js → cli-auth-success-ItLmOJgn.js} +1 -1
  82. package/dist/client/assets/{client-icons-CqD2Q5XK.js → client-icons-CAQi5x0D.js} +1 -1
  83. package/dist/client/assets/{collection-detail-Bc1N9_b4.js → collection-detail-D8x6ZU5_.js} +1 -1
  84. package/dist/client/assets/{collection-display-button-Bc0_77tr.js → collection-display-button-sHhiXn17.js} +1 -1
  85. package/dist/client/assets/{collection-search-CkYj4zLQ.js → collection-search-BQUnJFre.js} +1 -1
  86. package/dist/client/assets/{collection-table-wrapper-DRVe2c2R.js → collection-table-wrapper-BEX1_xVZ.js} +1 -1
  87. package/dist/client/assets/{collection-tabs-N31SqJ5M.js → collection-tabs-CPQ4VrZ9.js} +1 -1
  88. package/dist/client/assets/{command-M5Hy4Bca.js → command-CfiREnnD.js} +1 -1
  89. package/dist/client/assets/{commerce-onboarding-g6xIZGng.js → commerce-onboarding-DiMj1pm4.js} +1 -1
  90. package/dist/client/assets/{connect-Cf-9oNPe.js → connect-C590HPCH.js} +1 -1
  91. package/dist/client/assets/{connect-layout-Z933g_CV.js → connect-layout-uoNJYOn4.js} +1 -1
  92. package/dist/client/assets/{connection-Cimig8VQ.js → connection-C8iBaknC.js} +1 -1
  93. package/dist/client/assets/{connection-card-kDFhfbya.js → connection-card-BRtH_NyF.js} +1 -1
  94. package/dist/client/assets/{connection-detail-D3l8WE-Y.js → connection-detail-DAZ9PGtT.js} +1 -1
  95. package/dist/client/assets/{connection-form-helpers-Bb00vWyO.js → connection-form-helpers-BExi3iUW.js} +1 -1
  96. package/dist/client/assets/{connections-BS7ow6ak.js → connections-DxzZcAAQ.js} +1 -1
  97. package/dist/client/assets/{create-organization-dialog-DF7Gz0pf.js → create-organization-dialog-CMEbcfeY.js} +1 -1
  98. package/dist/client/assets/{decopilot-sse-pool-C6z-rtNE.js → decopilot-sse-pool-BEKKOta-.js} +1 -1
  99. package/dist/client/assets/{dialog-CIbVvLCQ.js → dialog-Dn9dA6Rv.js} +1 -1
  100. package/dist/client/assets/{domain-settings-Bmfy9jDz.js → domain-settings-HD-p0a2P.js} +1 -1
  101. package/dist/client/assets/{drawer-CJFC-0Fv.js → drawer-C2zduVGY.js} +1 -1
  102. package/dist/client/assets/{dropdown-menu-BHHO3QAR.js → dropdown-menu-nFmVNZOj.js} +1 -1
  103. package/dist/client/assets/{e2e-tab-DNyiIyOa.js → e2e-tab-CPMFk97B.js} +1 -1
  104. package/dist/client/assets/{editor-D6mstx7z.js → editor-CTbgd0DG.js} +1 -1
  105. package/dist/client/assets/{empty-state-BOUJ1IRI.js → empty-state-B4rx-IxR.js} +1 -1
  106. package/dist/client/assets/{empty-state-CFTbSuP9.js → empty-state-BhGR8qhU.js} +1 -1
  107. package/dist/client/assets/{extract-connection-data-BAwcjEs9.js → extract-connection-data-BzkNyMFd.js} +1 -1
  108. package/dist/client/assets/{file-explorer-Bh9n4VYl.js → file-explorer-Czaff-IK.js} +1 -1
  109. package/dist/client/assets/{file-type-icon-VaomZQ4k.js → file-type-icon-DdLRSJG1.js} +1 -1
  110. package/dist/client/assets/{folder-icon-BPPBLsSQ.js → folder-icon-BmvMT_Zn.js} +1 -1
  111. package/dist/client/assets/{form-BLZF8D8t.js → form-fu44NVNg.js} +1 -1
  112. package/dist/client/assets/{general-1KXfjgkN.js → general-DbNOgsZ8.js} +1 -1
  113. package/dist/client/assets/{github-icon-BMwS5NHP.js → github-icon-CWspdq_p.js} +1 -1
  114. package/dist/client/assets/{hooks-Dx8_BRAv.js → hooks-DbYjnhUf.js} +1 -1
  115. package/dist/client/assets/{hosting-tab-HpfZRgGl.js → hosting-tab-Cgg1sG_u.js} +1 -1
  116. package/dist/client/assets/{index-816NyhfX.js → index-8Crc8SXX.js} +1 -1
  117. package/dist/client/assets/{index-DSjfYpae.js → index-BWDxLD35.js} +6 -6
  118. package/dist/client/assets/{index-B_lUDZ9B.js → index-BZsplvNT.js} +25 -25
  119. package/dist/client/assets/{index-CIa7ef_A.js → index-BjFdFeie.js} +1 -1
  120. package/dist/client/assets/{index-scWMkxhM.js → index-Ct5rA0-g.js} +1 -1
  121. package/dist/client/assets/{index-CiTAcnLT.js → index-CynzbMm4.js} +1 -1
  122. package/dist/client/assets/{index-BozOu9tc.js → index-DN-3imGW.js} +1 -1
  123. package/dist/client/assets/{index-BnQgQVCt.js → index-QjV5PBHw.js} +1 -1
  124. package/dist/client/assets/{index-Dd37LnAd.js → index-jvb5JpTh.js} +1 -1
  125. package/dist/client/assets/{index-CVcEeQb5.js → index-kyz_nUCi.js} +1 -1
  126. package/dist/client/assets/{index-redirect-CxyJoKV4.js → index-redirect-D3POnIh8.js} +1 -1
  127. package/dist/client/assets/{infiniteQueryObserver-CwY974C7.js → infiniteQueryObserver-OPx_IdGS.js} +1 -1
  128. package/dist/client/assets/{infra-billing-_yVOOYJd.js → infra-billing-CRZG7-9t.js} +1 -1
  129. package/dist/client/assets/{input-COX_MHDV.js → input-MZsLaCQZ.js} +1 -1
  130. package/dist/client/assets/{integration-icon-DCPy_52o.js → integration-icon-BN_v-AR8.js} +1 -1
  131. package/dist/client/assets/{invite-member-dialog-BHafD7C7.js → invite-member-dialog-BLEWp8gy.js} +1 -1
  132. package/dist/client/assets/{label-BWr2mmGs.js → label-CLbn6I-z.js} +1 -1
  133. package/dist/client/assets/{layout-C7V0gFy0.js → layout-Cndx-lJE.js} +1 -1
  134. package/dist/client/assets/{login-D1Nz670h.js → login-HuqqF-1k.js} +1 -1
  135. package/dist/client/assets/{markdown-BYbXDv7N.js → markdown-DAt9kqvI.js} +1 -1
  136. package/dist/client/assets/{mcp-app-renderer-C-wnTv6N.js → mcp-app-renderer-BWNi86_e.js} +1 -1
  137. package/dist/client/assets/{mcp-oauth-D4bG2HDW.js → mcp-oauth-Dwal9CtL.js} +1 -1
  138. package/dist/client/assets/{members-wTEykKnV.js → members-m6A5KiaB.js} +1 -1
  139. package/dist/client/assets/{monaco-editor-YC0wWRXT.js → monaco-editor-BDGu60Kj.js} +1 -1
  140. package/dist/client/assets/{monitoring-stats-row-BvTSmQaL.js → monitoring-stats-row-CbsfH-jC.js} +1 -1
  141. package/dist/client/assets/{multi-select-BmB9r4YL.js → multi-select-BWbyu4GD.js} +1 -1
  142. package/dist/client/assets/{oauth-callback-D2Gp_wZF.js → oauth-callback-DI2eutSn.js} +1 -1
  143. package/dist/client/assets/{oauth-callback-ai-provider-CoABKbtI.js → oauth-callback-ai-provider-Bq0wfzLm.js} +1 -1
  144. package/dist/client/assets/{onboarding-CftT1nG0.js → onboarding-CkiQtPaQ.js} +1 -1
  145. package/dist/client/assets/{org-layout-B1FHoYea.js → org-layout-d65Yldzy.js} +1 -1
  146. package/dist/client/assets/{organization-choice-CBe05Pnl.js → organization-choice-C88i014U.js} +1 -1
  147. package/dist/client/assets/{orgs-CtakA9D0.js → orgs-B2ed6u31.js} +1 -1
  148. package/dist/client/assets/{page-seo-form-ZY8ZbyqT.js → page-seo-form-wint5qXC.js} +1 -1
  149. package/dist/client/assets/{popover-BGEouS4O.js → popover-hKCv1VM6.js} +1 -1
  150. package/dist/client/assets/{post-calendar-C4PHtaZV.js → post-calendar-pp6SUqf1.js} +1 -1
  151. package/dist/client/assets/{post-editor-D6FwVD0B.js → post-editor-CmMNYzrc.js} +1 -1
  152. package/dist/client/assets/{primitives-BFeFdEFz.js → primitives-B-O1UE0A.js} +1 -1
  153. package/dist/client/assets/{profile-GTCpmwYq.js → profile-DM7rMY2F.js} +1 -1
  154. package/dist/client/assets/{project-app-view-BQZfjkf1.js → project-app-view-BNsHn5Uh.js} +1 -1
  155. package/dist/client/assets/{project-icon-mS3w82ZB.js → project-icon-D8jpcjeG.js} +1 -1
  156. package/dist/client/assets/{prompts-uofkMfaL.js → prompts-DkkC-eqS.js} +1 -1
  157. package/dist/client/assets/record-editor-BmqGb_Zo.js +1 -0
  158. package/dist/client/assets/redirect-editor-CyyPNlIj.js +1 -0
  159. package/dist/client/assets/{registry-layout-YOADDKZS.js → registry-layout-D4YhR76r.js} +1 -1
  160. package/dist/client/assets/registry-tFRQZakc.js +2 -0
  161. package/dist/client/assets/{reports-DYmaGRqW.js → reports-CH1NPn70.js} +1 -1
  162. package/dist/client/assets/repositories-VIP8TM6S.js +1 -0
  163. package/dist/client/assets/{repository-import-picker-DKCHkj_0.js → repository-import-picker-BtZlpocU.js} +1 -1
  164. package/dist/client/assets/repository-picker-nNmLRtMV.js +1 -0
  165. package/dist/client/assets/{require-capability-D7WPxMT8.js → require-capability-DeSNM-qc.js} +1 -1
  166. package/dist/client/assets/{required-auth-layout-BzHLhAY7.js → required-auth-layout-DDtOwDBP.js} +1 -1
  167. package/dist/client/assets/{reset-password-Db8RpI71.js → reset-password-CCPqEEuB.js} +1 -1
  168. package/dist/client/assets/{review-settings-CcgZS4Qu.js → review-settings-D7yIvq08.js} +1 -1
  169. package/dist/client/assets/{roles-D5JKlKQL.js → roles-ByD_eMtG.js} +1 -1
  170. package/dist/client/assets/{schema-7gcATtGd.js → schema-D-Yt_dVJ.js} +1 -1
  171. package/dist/client/assets/{scroll-area-BV67BPd_.js → scroll-area-BCJcp5qm.js} +1 -1
  172. package/dist/client/assets/{search-input-D-ESO_3b.js → search-input-CfYSReFc.js} +1 -1
  173. package/dist/client/assets/{secrets-DslGN31D.js → secrets-VhaU4I-n.js} +1 -1
  174. package/dist/client/assets/{sections-editor-Cl6Tz3LM.js → sections-editor-CbIx_gFP.js} +1 -1
  175. package/dist/client/assets/{select-DrcEVnZ2.js → select-NANblt2H.js} +1 -1
  176. package/dist/client/assets/{select-model-BxS8auXw.js → select-model-DUIjK9U7.js} +1 -1
  177. package/dist/client/assets/{self-tool-result-BJzf7f_D.js → self-tool-result-C6WuYAjK.js} +1 -1
  178. package/dist/client/assets/{seo-editor-BE4i-LT0.js → seo-editor-MilAfPeH.js} +1 -1
  179. package/dist/client/assets/settings-layout-qx89HSSt.js +1 -0
  180. package/dist/client/assets/{settings-sidebar-C6TvhfID.js → settings-sidebar-jJm3A_Wp.js} +1 -1
  181. package/dist/client/assets/{shell-controls-BxmxydXV.js → shell-controls-B0eaQlPV.js} +1 -1
  182. package/dist/client/assets/{shell-layout-Bx5eb743.js → shell-layout-CV8Ixl8_.js} +1 -1
  183. package/dist/client/assets/{skill-preview-DttG8VYN.js → skill-preview-DqgiXYj-.js} +1 -1
  184. package/dist/client/assets/{skills-DHAWKG4x.js → skills-PrvnaupX.js} +1 -1
  185. package/dist/client/assets/{sso-Bx-8EZnD.js → sso-gxLIhDQT.js} +1 -1
  186. package/dist/client/assets/{store-C6L68gEz.js → store-BTWjEs30.js} +1 -1
  187. package/dist/client/assets/store-registry-DIHiXDnw.js +2 -0
  188. package/dist/client/assets/{switch-6gOY7p_B.js → switch-2iiOxMIT.js} +1 -1
  189. package/dist/client/assets/{synced-repos-5BNmNf6C.js → synced-repos-Dq0mvbwm.js} +1 -1
  190. package/dist/client/assets/{table-CiqNoZ31.js → table-BI2-Msk8.js} +1 -1
  191. package/dist/client/assets/{tabs-Bkqs8f-5.js → tabs-KWxF94R5.js} +1 -1
  192. package/dist/client/assets/{task-board-DZmRPJBt.js → task-board-CIYSPfni.js} +1 -1
  193. package/dist/client/assets/{task-route-DFWTcvum.js → task-route-Qet1qaWg.js} +1 -1
  194. package/dist/client/assets/{tasks-CzRXtD5l.js → tasks-mySCoXvt.js} +1 -1
  195. package/dist/client/assets/{textarea-BPKnRKFj.js → textarea-BrZpmcDa.js} +1 -1
  196. package/dist/client/assets/{thread-intent-CFtt_nS5.js → thread-intent-D83P1YX-.js} +1 -1
  197. package/dist/client/assets/{thread-route-Cqs0O0Ez.js → thread-route-BJMImioz.js} +1 -1
  198. package/dist/client/assets/{toggle-group-dwqfI-na.js → toggle-group-B8axbJ88.js} +1 -1
  199. package/dist/client/assets/{toolbar-ClAV86ux.js → toolbar-CQ1c9TU5.js} +1 -1
  200. package/dist/client/assets/{toolbar-icon-button-_od4zlTM.js → toolbar-icon-button-TKQD0EoO.js} +1 -1
  201. package/dist/client/assets/{track-DR1-LwVK.js → track-DtXEYVxz.js} +1 -1
  202. package/dist/client/assets/{types-CXQqC75q.js → types-DIafnHyw.js} +1 -1
  203. package/dist/client/assets/{use-ai-providers-dsyrDnO9.js → use-ai-providers-C6jqS37t.js} +1 -1
  204. package/dist/client/assets/{use-automations-GJZG9mot.js → use-automations-0rXR_jur.js} +1 -1
  205. package/dist/client/assets/{use-autosave-edA5EL24.js → use-autosave-ONqifd0v.js} +1 -1
  206. package/dist/client/assets/{use-connection-BRJSF7XV.js → use-connection-BASuVort.js} +1 -1
  207. package/dist/client/assets/{use-copy-BYPpXCK2.js → use-copy-CfbW_sJF.js} +1 -1
  208. package/dist/client/assets/{use-create-virtual-mcp-CK3FIQpt.js → use-create-virtual-mcp-BFwR2LLd.js} +1 -1
  209. package/dist/client/assets/{use-date-fns-locale-xY0hnak0.js → use-date-fns-locale-rJyU17pO.js} +1 -1
  210. package/dist/client/assets/{use-debounced-autosave-BZz1Sh5T.js → use-debounced-autosave-DE2qvgUH.js} +1 -1
  211. package/dist/client/assets/{use-debounced-value-BBOX-Vjy.js → use-debounced-value-CPoNgVAT.js} +1 -1
  212. package/dist/client/assets/{use-decopilot-events-CrymWsPY.js → use-decopilot-events-Ba2e0p8u.js} +1 -1
  213. package/dist/client/assets/{use-delete-connection-BwDOMJxj.js → use-delete-connection-CLSY2jpQ.js} +1 -1
  214. package/dist/client/assets/{use-deployment-admin-BHuzOYuO.js → use-deployment-admin-DjyhNRVh.js} +1 -1
  215. package/dist/client/assets/{use-destination-route-OdrYRKi6.js → use-destination-route-BqyAy3Oj.js} +1 -1
  216. package/dist/client/assets/{use-file-configs-B8jXjEAi.js → use-file-configs-DEwUByyO.js} +1 -1
  217. package/dist/client/assets/{use-infinite-scroll-DQ_XrNCL.js → use-infinite-scroll-xe2j8vP-.js} +1 -1
  218. package/dist/client/assets/{use-join-requests-35XhVVHr.js → use-join-requests-DWRW4Nw6.js} +1 -1
  219. package/dist/client/assets/{use-mcp-auth-status-nQqJOE5j.js → use-mcp-auth-status-D_UjuiQT.js} +1 -1
  220. package/dist/client/assets/{use-mcp-client-xRPKqtBd.js → use-mcp-client-Czt5As3J.js} +1 -1
  221. package/dist/client/assets/{use-mcp-prompts-BH2161nI.js → use-mcp-prompts-BdJKj4LE.js} +1 -1
  222. package/dist/client/assets/{use-mcp-tools-DhWg8eQ9.js → use-mcp-tools-CrhdqfI1.js} +1 -1
  223. package/dist/client/assets/{use-members-CTCpXWvz.js → use-members-CjQN-pzi.js} +1 -1
  224. package/dist/client/assets/{use-navigate-to-agent-DEnupm5-.js → use-navigate-to-agent-CSvXEd48.js} +1 -1
  225. package/dist/client/assets/{use-org-auth-client-tX4pyhvY.js → use-org-auth-client-C1KTKuFD.js} +1 -1
  226. package/dist/client/assets/{use-org-notice-BrqrQNrZ.js → use-org-notice-CMibf9Lb.js} +1 -1
  227. package/dist/client/assets/{use-org-sso-ax_WPM-e.js → use-org-sso-Dt4n-uJ6.js} +1 -1
  228. package/dist/client/assets/{use-organization-roles-le6n88uk.js → use-organization-roles-BQX1Apru.js} +1 -1
  229. package/dist/client/assets/{use-organization-settings-DeqTyhDT.js → use-organization-settings-DUnuAPqv.js} +1 -1
  230. package/dist/client/assets/{use-panel-navigate-DufE4TQe.js → use-panel-navigate-CClWc1o5.js} +1 -1
  231. package/dist/client/assets/{use-registry-connections-CnQcaAch.js → use-registry-connections--YU44G6-.js} +1 -1
  232. package/dist/client/assets/{use-secrets-BKeXLH1Q.js → use-secrets-CAcbMNuV.js} +1 -1
  233. package/dist/client/assets/{use-section-preview-base-C_rHbM66.js → use-section-preview-base-BJKm5dYq.js} +1 -1
  234. package/dist/client/assets/{use-status-sounds-Cw977hrS.js → use-status-sounds-DRFYHjKx.js} +1 -1
  235. package/dist/client/assets/{use-tags-C-FksPQ4.js → use-tags-WZbYjj0q.js} +1 -1
  236. package/dist/client/assets/{use-view-mode-BzXvEzDG.js → use-view-mode-ClHuh5-e.js} +1 -1
  237. package/dist/client/assets/{use-virtual-mcp-8rv5G58S.js → use-virtual-mcp-B-ZmtBG6.js} +1 -1
  238. package/dist/client/assets/useInfiniteQuery-Cfow7UUh.js +1 -0
  239. package/dist/client/assets/useSuspenseInfiniteQuery-Btts--oR.js +1 -0
  240. package/dist/client/assets/{users-Hybgdqlv.js → users-CbysTzDo.js} +1 -1
  241. package/dist/client/assets/{variant-calendar-CVemYhc_.js → variant-calendar-COq-MIb2.js} +1 -1
  242. package/dist/client/assets/{view-mode-toggle-ZMf_pu5n.js → view-mode-toggle-CNRnTxNm.js} +1 -1
  243. package/dist/client/index.html +1 -1
  244. package/dist/server/cli.js +2 -2
  245. package/dist/server/server.js +2 -2
  246. package/package.json +1 -1
  247. package/dist/client/assets/api-keys-BpX-le77.js +0 -1
  248. package/dist/client/assets/app-editor-Dr01DzC2.js +0 -1
  249. package/dist/client/assets/record-editor-DZ_Ht_rf.js +0 -1
  250. package/dist/client/assets/redirect-editor-DLSqpC6c.js +0 -1
  251. package/dist/client/assets/registry-R33rTMC7.js +0 -2
  252. package/dist/client/assets/repositories-BgsdtnFm.js +0 -1
  253. package/dist/client/assets/repository-picker-hMZKUmSe.js +0 -1
  254. package/dist/client/assets/settings-layout-CUALOfuk.js +0 -1
  255. package/dist/client/assets/store-registry-DGHd6xRw.js +0 -2
  256. package/dist/client/assets/useInfiniteQuery-D-5t1K3F.js +0 -1
  257. package/dist/client/assets/useSuspenseInfiniteQuery-CzeWzIJb.js +0 -1
@@ -2821,7 +2821,7 @@ ${Z}`}:X)}}var Pu$=D(()=>{H9()});async function sG6($,Z,Q){if(!$)return!1;let X=
2821
2821
  AND date >= {since:Date} AND date <= {until:Date}
2822
2822
  GROUP BY ${X}
2823
2823
  ORDER BY pageviews DESC
2824
- LIMIT 50`,{slug:$,since:Z,until:Q})).map((G)=>({key:G.key,pageviews:Number(G.pageviews),visitors:Number(G.visitors)}))}async function dc$($){let{since:Z,until:Q}=mc$(90),X=await ic$($,Z,Q);return[...new Set(X.map(LT0))]}async function A20($){let Z=$.get("studioContext");if(!sL(Z))return $.json({error:"Unauthorized"},401);let Q=n(Z),X=$.req.param("site");if(!X)return $.json({error:"site is required"},400);let Y=X.toLowerCase();if(!await Z.storage.orgSites.isOwnedBy(Y,Q.id))return $.json({error:"Site not found in organization"},404);return{slug:Y}}var OW6,DW6,lc$,Z3="site_id IN (SELECT id FROM default.dim_sites WHERE name = {slug:String})",TW6,IW6="https://deco.lilstts.com/plausible",MW6=12000,kW6,pc$=()=>{let $=new Q1;return $.get("/:site/cdn/data",async(Z)=>{let Q=await A20(Z);if(Q instanceof Response)return Q;if(!Jf())return Z.json({available:!1,error:"Monitor is not configured"});let X=Z.req.query("view")??"summary";if(!OW6.has(X))return Z.json({error:`unknown or unavailable view: ${X}`},400);let Y=Z.req.query("range")??"7d",G=kQ1(Y,Z.req.query("since"),Z.req.query("until"));if(!G)return Z.json({error:`unknown range: ${Y}`},400);let{slug:J}=Q,{since:W,until:K}=G,H=cc$(Z.req.query("filters"));try{let F;switch(X){case"summary":F=await LW6(J,W,K,H);break;case"timeline":F=await EW6(J,W,K,G.granularity,H);break;case"cache-status":F=await jW6(J,W,K,H);break;case"status-codes":F=await zW6(J,W,K,H);break;case"top-paths":F=await PW6(J,W,K,Z.req.query("groupByPath")==="1",H);break;case"top-countries":F=await AW6(J,W,K,H);break}return Z.json({available:!0,view:X,range:Y,data:F})}catch(F){return console.error(`[monitor] cdn ${X} query failed for site="${J}":`,F),Z.json({error:"Failed to query monitor warehouse"},502)}}),$.get("/:site/audience/data",async(Z)=>{let Q=await A20(Z);if(Q instanceof Response)return Q;if(!Jf())return Z.json({available:!1,error:"Monitor is not configured"});let X=Z.req.query("view")??"summary";if(!TW6.has(X))return Z.json({error:`unknown or unavailable view: ${X}`},400);let Y=Z.req.query("range")??"7d",G=kQ1(Y,Z.req.query("since"),Z.req.query("until"));if(!G)return Z.json({error:`unknown range: ${Y}`},400);let{slug:J}=Q,{since:W,until:K}=G;try{let H;switch(X){case"summary":H=await RW6(J,W,K);break;case"timeline":H=await qW6(J,W,K);break;case"top-sources":H=await VQ1(J,W,K,"utm_source");break;case"top-countries":H=await VQ1(J,W,K,"country");break;case"devices":H=await VQ1(J,W,K,"device_type");break}return Z.json({available:!0,view:X,range:Y,data:H})}catch(H){return console.error(`[monitor] audience ${X} query failed for site="${J}":`,H),Z.json({error:"Failed to query monitor warehouse"},502)}}),$.get("/:site/hosts",async(Z)=>{let Q=await A20(Z);if(Q instanceof Response)return Q;let{slug:X}=Q;if(!Jf())return Z.json({available:!1,hosts:[]});try{let Y=await dc$(X);return Z.json({available:!0,hosts:Y})}catch(Y){return console.error(`[monitor] hosts failed for site="${X}":`,Y),Z.json({available:!0,hosts:[]})}}),$.get("/:site/onedollar",async(Z)=>{let Q=await A20(Z);if(Q instanceof Response)return Q;let{slug:X}=Q,Y=M0().oneDollarStatsApiKey;if(!Y)return Z.json({available:!1,error:"OneDollarStats not configured"});let G=Z.req.query("report")??"kpis",J=kW6[G];if(!J)return Z.json({error:`unknown report: ${G}`},400);let W=Z.req.query("range")??"7d",K=kQ1(W,Z.req.query("since"),Z.req.query("until"));if(!K)return Z.json({error:`unknown range: ${W}`},400);let H=await dc$(X),F=Z.req.query("host"),U=F&&H.includes(F)?F:H[0];if(!U)return Z.json({available:!0,report:G,range:W,results:[]});let{since:N,until:B}=K,O=G==="timeseries"?K.granularity==="hourly"?"time:hour":"time:day":J.dimension,w={page:"event:page",source:"visit:referrer",referrer:"visit:referrer",country:"visit:country",browser:"visit:browser",os:"visit:os",device:"visit:device",utm_campaign:"visit:utm_campaign",utm_source:"visit:utm_source",utm_medium:"visit:utm_medium",utm_content:"visit:utm_content",utm_term:"visit:utm_term"},L={equals:"is",not_equals:"is_not",contains:"contains",not_contains:"contains_not"},E=cc$(Z.req.query("filters")).map((z)=>{let P=w[z.field],A=L[z.op];return P&&A?[A,P,[z.value]]:null}).filter(Boolean),j=async(z)=>{let P=await fetch(IW6,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":Y,Accept:"application/json"},body:JSON.stringify({site_id:U,metrics:J.metrics,date_range:z,...O?{dimensions:[O]}:{},...J.order?{order_by:[[J.order,"desc"]]}:{},...E.length?{filters:E}:{},pagination:{limit:100,offset:0}}),signal:AbortSignal.timeout(MW6)});if(!P.ok)throw Error(`OneDollarStats ${P.status}`);return(await P.json().catch(()=>null))?.results??[]};try{let z=await j([N,B]),P;if(G==="kpis"||G==="timeseries"&&Z.req.query("compare")==="1"){let q=Date.parse(`${N}T00:00:00Z`),k=86400000,M=T20(new Date(q-86400000)),C=T20(new Date(q-K.days*86400000));P=await j([C,M]).catch(()=>{return})}return Z.json({available:!0,report:G,range:W,host:U,metrics:J.metrics,results:z,...P?{previous:P}:{}})}catch(z){return console.error(`[monitor] onedollar ${G} failed for host="${U}":`,z),Z.json({error:"Failed to reach OneDollarStats"},502)}}),$};var nc$=D(()=>{u$();E$();WZ1();KZ1();OW6=new Set(["summary","timeline","cache-status","status-codes","top-paths","top-countries"]),DW6={today:{days:1,granularity:"hourly"},yesterday:{days:1,granularity:"hourly",endOffsetDays:1},"7d":{days:7,granularity:"daily"},"14d":{days:14,granularity:"daily"},"30d":{days:30,granularity:"daily"},"90d":{days:90,granularity:"daily"},"180d":{days:180,granularity:"daily"},"1y":{days:365,granularity:"daily"}};lc$=/^\d{4}-\d{2}-\d{2}$/;TW6=new Set(["summary","timeline","top-sources","top-countries","devices"]);kW6={kpis:{metrics:["visitors","visits","pageviews","bounce_rate","visit_duration"]},timeseries:{metrics:["pageviews","visits","visitors","bounce_rate","visit_duration"]},pages:{metrics:["pageviews","visitors"],dimension:"event:page",order:"pageviews"},sources:{metrics:["visitors"],dimension:"visit:referrer",order:"visitors"},countries:{metrics:["visitors"],dimension:"visit:country",order:"visitors"},browsers:{metrics:["visitors"],dimension:"visit:browser",order:"visitors"},os:{metrics:["visitors"],dimension:"visit:os",order:"visitors"},devices:{metrics:["visitors"],dimension:"visit:device",order:"visitors"},events:{metrics:["visitors","events"],dimension:"event:name",order:"events"},utm_campaign:{metrics:["visitors","events"],dimension:"visit:utm_campaign",order:"events"},utm_source:{metrics:["visitors","events"],dimension:"visit:utm_source",order:"events"},utm_medium:{metrics:["visitors","events"],dimension:"visit:utm_medium",order:"events"},utm_content:{metrics:["visitors","events"],dimension:"visit:utm_content",order:"events"},utm_term:{metrics:["visitors","events"],dimension:"visit:utm_term",order:"events"}}});import{timingSafeEqual as VW6}from"crypto";function ul($){let Q=$?.match(/^Bearer\s+(.+)$/i)?.[1]?.trim();return Q?Q:null}function SQ1($,Z){let Q=Buffer.from($),X=Buffer.from(Z);return Q.length===X.length&&VW6(Q,X)}function ll($){let Z=process.env.VAULT_SERVICE_TOKEN;return!!Z&&SQ1($,Z)}function tc$($){if(!$)return null;return $ instanceof Date?$.toISOString():$}function SW6($){if(!$)return[];if(Array.isArray($))return $.filter((Z)=>typeof Z==="string");if(typeof $!=="string")return[];try{let Z=JSON.parse($);return Array.isArray(Z)?Z.filter((Q)=>typeof Q==="string"):[]}catch{return[]}}async function oc$($,Z,Q){let X=ul($.req.header("authorization"));if(!X)return{ok:!1,response:$.json({error:"Unauthorized"},401)};let Y=$.get("studioContext"),G=Y.organization?.id;if(!G)return{ok:!1,response:$.json({error:"Organization context required"},403)};if(ll(X))return{ok:!0,ctx:Y,organizationId:G};let J=await Y.storage.connectionCredentialVault.authenticateWorkloadToken(X);if(!J||J.organizationId!==G)return{ok:!1,response:$.json({error:"Unauthorized"},401)};let W=await Y.storage.connections.findById(J.subjectConnectionId,G);if(!W||W.status!=="active")return{ok:!1,response:$.json({error:"Unauthorized"},401)};if(!await Y.storage.connectionCredentialVault.hasGrant({organizationId:G,subjectConnectionId:J.subjectConnectionId,targetConnectionId:Z,scope:Q}))return{ok:!1,response:$.json({error:"Forbidden"},403)};return{ok:!0,ctx:Y,organizationId:G}}var rc$=()=>{let $=new Q1;return $.post("/vault/connections/batch",async(Z)=>{let Q=ul(Z.req.header("authorization"));if(!Q||!ll(Q))return Z.json({error:"Unauthorized"},401);let X=Z.get("studioContext"),Y=X.organization?.id;if(!Y)return Z.json({error:"Organization context required"},403);let G=await Z.req.json().catch(()=>null),J=Array.isArray(G?.connectionIds)?[...new Set(G.connectionIds)].filter((B)=>typeof B==="string"&&B.length>0):[];if(J.length===0||J.length>20)return Z.json({error:"connectionIds must be a non-empty string array (max 20)"},400);let{items:W}=await X.storage.connections.list(Y,{includeVirtual:!0,where:{field:["id"],operator:"in",value:J},limit:J.length}),K=new Map(W.map((B)=>[B.id,B])),H=new Set((await X.db.selectFrom("downstream_tokens").select("connectionId").where("connectionId","in",J).execute()).map((B)=>B.connectionId)),F=new Map((await X.db.selectFrom("connections").select(["id","configuration_state","connection_token"]).where("id","in",J).where("organization_id","=",Y).execute()).map((B)=>[B.id,B])),U=new z5(X.db,X.vault),N={};return await Promise.all(J.map(async(B)=>{try{let O=K.get(B);if(!O||O.status!=="active"){N[B]={error:"Connection not found"};return}if(F.get(B)?.configuration_state&&!O.configuration_state){N[B]={error:"MCP configuration could not be decrypted"};return}let w={type:"mcp_configuration",state:O.configuration_state??{},scopes:O.configuration_scopes??[]},L=null;if(H.has(B)){let E=await HG({connectionId:B,connectionUrl:O.connection_url,tokenStorage:U});if(E.state==="valid"||E.state==="refreshed"){let j=await U.get(B);L={type:"oauth_access_token",tokenType:"Bearer",accessToken:E.accessToken,expiresAt:tc$(j?.expiresAt??null),scope:j?.scope??null}}}else if(O.connection_token)L={type:"static_token",tokenType:"Bearer",accessToken:O.connection_token,expiresAt:null,scope:null};else if(F.get(B)?.connection_token){N[B]={error:"Connection token could not be decrypted"};return}N[B]={configuration:w,accessToken:L}}catch(O){N[B]={error:O instanceof Error?O.message:String(O)}}})),Z.header("Cache-Control","no-store"),Z.header("Pragma","no-cache"),Z.json(N)}),$.post("/vault/connections/:connectionId/access-token",async(Z)=>{let Q=Z.req.param("connectionId"),X=await oc$(Z,Q,a50);if(!X.ok)return X.response;let{ctx:Y,organizationId:G}=X,J=await Y.storage.connections.findById(Q,G);if(!J||J.status!=="active")return Z.json({error:"Connection not found"},404);let W=new z5(Y.db,Y.vault),K=await HG({connectionId:Q,connectionUrl:J.connection_url,tokenStorage:W});if(K.state==="missing"){if(J.connection_token)return Z.header("Cache-Control","no-store"),Z.header("Pragma","no-cache"),Z.json({type:"static_token",tokenType:"Bearer",accessToken:J.connection_token,expiresAt:null,scope:null});if((await Y.db.selectFrom("connections").select("connection_token").where("id","=",Q).where("organization_id","=",G).executeTakeFirst())?.connection_token)return Z.json({error:"Connection token could not be decrypted"},424);return Z.json({error:"Downstream token not found"},409)}if(K.state==="expired_without_refresh"||K.state==="refresh_failed")return Z.json({error:"Downstream token refresh failed"},424);let H=await W.get(Q);return Z.header("Cache-Control","no-store"),Z.header("Pragma","no-cache"),Z.json({type:"oauth_access_token",tokenType:"Bearer",accessToken:K.accessToken,expiresAt:tc$(H?.expiresAt??null),scope:H?.scope??null})}),$.post("/vault/connections/:connectionId/configuration",async(Z)=>{let Q=Z.req.param("connectionId"),X=await oc$(Z,Q,e50);if(!X.ok)return X.response;let{ctx:Y,organizationId:G}=X,J=await Y.db.selectFrom("connections").select(["status","configuration_state","configuration_scopes"]).where("id","=",Q).where("organization_id","=",G).executeTakeFirst();if(!J||J.status!=="active")return Z.json({error:"Connection not found"},404);let W={};if(J.configuration_state)try{let K=await Y.vault.decrypt(J.configuration_state),H=JSON.parse(K);if(typeof H!=="object"||H===null||Array.isArray(H))throw Error("MCP configuration state is not an object");W=H}catch{return Z.json({error:"MCP configuration could not be decrypted"},424)}return Z.header("Cache-Control","no-store"),Z.header("Pragma","no-cache"),Z.json({type:"mcp_configuration",state:W,scopes:SW6(J.configuration_scopes)})}),$};var Ee=D(()=>{u$();LJ();$90();s3()});import{createHmac as CW6}from"crypto";import{mkdir as _W6,writeFile as vW6}from"fs/promises";import{dirname as fW6,join as ec$}from"path";function xW6($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return ec$(bW6,Z)}function sc$($,Z){let Q=xW6($),X=sG(Z);return ec$(Q,X)}function ac$($,Z,Q,X,Y){let G=M0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${X}`,W=CW6("sha256",G).update(J).digest("hex");return SQ1(Y,W)}function CQ1($){let Z=$.split(".").pop()?.toLowerCase()||"";return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",ico:"image/x-icon",bmp:"image/bmp",pdf:"application/pdf",json:"application/json",xml:"application/xml",txt:"text/plain",html:"text/html",htm:"text/html",css:"text/css",csv:"text/csv",md:"text/markdown",js:"application/javascript",mjs:"application/javascript",ts:"application/typescript",mp4:"video/mp4",webm:"video/webm",avi:"video/x-msvideo",mov:"video/quicktime",mp3:"audio/mpeg",wav:"audio/wav",ogg:"audio/ogg",zip:"application/zip",gz:"application/gzip",tar:"application/x-tar",woff:"font/woff",woff2:"font/woff2",ttf:"font/ttf",otf:"font/otf"}[Z]||"application/octet-stream"}var bW6="./data/assets",R20=($)=>{let Z=new Q1,Q=$.orgFromPath?"/*":"/:orgId/*";return Z.get(Q,async(X)=>{let Y=$.orgFromPath?X.get("studioContext")?.organization?.id:X.req.param("orgId");if(!Y)return X.json({error:"Missing organization context"},500);let G=$.orgFromPath?`/api/${X.req.param("org")??""}/dev-assets/`:`/api/dev-assets/${Y}/`,J=X.req.path.replace(G,"");if(!J)return X.json({error:"Missing key"},400);let W=X.req.query("expires"),K=X.req.query("signature"),H=X.req.query("method");if(!W||!K||H!=="GET")return X.json({error:"Invalid or missing signature parameters"},400);let F=parseInt(W,10);if(!Number.isFinite(F))return X.json({error:"Invalid expires parameter"},400);let U=Math.floor(Date.now()/1000);if(F<U)return X.json({error:"URL has expired"},403);if(!ac$(Y,J,F,"GET",K))return X.json({error:"Invalid signature"},403);let N=sc$(Y,J);try{let B=Bun.file(N);if(!await B.exists())return X.json({error:"File not found"},404);let w=CQ1(J);return new Response(B.stream(),{headers:{"Content-Type":w,"Content-Length":B.size.toString(),"Cache-Control":"private, max-age=3600"}})}catch(B){return console.error("Error serving file:",B),X.json({error:"Failed to read file"},500)}}),Z.put(Q,async(X)=>{let Y=$.orgFromPath?X.get("studioContext")?.organization?.id:X.req.param("orgId");if(!Y)return X.json({error:"Missing organization context"},500);let G=$.orgFromPath?`/api/${X.req.param("org")??""}/dev-assets/`:`/api/dev-assets/${Y}/`,J=X.req.path.replace(G,"");if(!J)return X.json({error:"Missing key"},400);let W=X.req.query("expires"),K=X.req.query("signature"),H=X.req.query("method");if(!W||!K||H!=="PUT")return X.json({error:"Invalid or missing signature parameters"},400);let F=parseInt(W,10);if(!Number.isFinite(F))return X.json({error:"Invalid expires parameter"},400);let U=Math.floor(Date.now()/1000);if(F<U)return X.json({error:"URL has expired"},403);if(!ac$(Y,J,F,"PUT",K))return X.json({error:"Invalid signature"},403);let N=sc$(Y,J),B=fW6(N);try{await _W6(B,{recursive:!0});let O=await X.req.arrayBuffer();return await vW6(N,Buffer.from(O)),X.json({success:!0,key:J})}catch(O){return console.error("Error saving file:",O),X.json({error:"Failed to save file"},500)}}),Z};var q20=D(()=>{u$();E$();T3();Ee()});function _Q1($){let Z=new URL(yW6);return Z.searchParams.set("client_id",$.clientId),Z.searchParams.set("redirect_uri",$.redirectUri),Z.searchParams.set("state",$.state),Z.toString()}function gW6($,Z=200){let Q=$!==null&&typeof $==="object"?$:{};if(typeof Q.error==="string"){let X=typeof Q.error_description==="string"?` (${Q.error_description})`:"";throw new A1({provider:"github",status:400,message:`GitHub OAuth code exchange failed: ${Q.error}${X}`})}if(typeof Q.access_token!=="string"||Q.access_token.length===0)throw new A1({provider:"github",status:Z,message:"GitHub OAuth code exchange returned no access token"});return{accessToken:Q.access_token,refreshToken:typeof Q.refresh_token==="string"&&Q.refresh_token.length>0?Q.refresh_token:null,expiresIn:typeof Q.expires_in==="number"&&Number.isFinite(Q.expires_in)?Q.expires_in:null,scope:typeof Q.scope==="string"&&Q.scope.length>0?Q.scope:null,tokenEndpoint:$d$}}async function Zd$($){let Z;try{Z=await fetch($d$,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({client_id:$.clientId,client_secret:$.clientSecret,code:$.code,redirect_uri:$.redirectUri}),signal:AbortSignal.timeout(Bp0)})}catch(Y){throw new A1({provider:"github",status:0,message:`GitHub OAuth code exchange failed: ${Y instanceof Error?Y.message:String(Y)}`,cause:Y})}let Q=await Z.text();if(!Z.ok)throw new A1({provider:"github",status:Z.status,message:`GitHub OAuth code exchange failed: ${Z.status} ${Q.slice(0,300)}`});let X;try{X=JSON.parse(Q)}catch(Y){throw new A1({provider:"github",status:Z.status,message:`GitHub OAuth code exchange returned invalid JSON: ${Q.slice(0,300)}`,cause:Y})}return gW6(X,Z.status)}var yW6="https://github.com/login/oauth/authorize",$d$="https://github.com/login/oauth/access_token";var Qd$=D(()=>{lZ();_g()});function Xd$($){let Z=new URL(`https://${$.host}/oauth/authorize`);return Z.searchParams.set("client_id",$.clientId),Z.searchParams.set("redirect_uri",$.redirectUri),Z.searchParams.set("response_type","code"),Z.searchParams.set("state",$.state),Z.searchParams.set("scope",($.scopes??hW6).join(" ")),Z.toString()}function uW6($){return`https://${$}/oauth/token`}async function Yd$($){let Z=uW6($.host),Q=new URLSearchParams({grant_type:"authorization_code",client_id:$.clientId,client_secret:$.clientSecret,code:$.code,redirect_uri:$.redirectUri}),X;try{X=await fetch(Z,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"},body:Q,signal:AbortSignal.timeout(lW6)})}catch(G){throw new A1({provider:"gitlab",status:0,message:`GitLab token exchange failed: ${cW6(G)}`,cause:G})}let Y=await X.json().catch(()=>null);if(!X.ok||!Y||typeof Y.error==="string"){let G=Y&&typeof Y.error_description==="string"?Y.error_description:Y&&typeof Y.error==="string"?Y.error:X.statusText;throw new A1({provider:"gitlab",status:X.status,message:`GitLab token exchange failed (${X.status}): ${G}`})}if(typeof Y.access_token!=="string"||!Y.access_token)throw new A1({provider:"gitlab",status:X.status,message:"GitLab token exchange returned no access_token"});return{accessToken:Y.access_token,refreshToken:typeof Y.refresh_token==="string"&&Y.refresh_token?Y.refresh_token:null,expiresIn:typeof Y.expires_in==="number"&&Number.isFinite(Y.expires_in)?Y.expires_in:null,scope:typeof Y.scope==="string"?Y.scope:null,tokenEndpoint:Z}}function cW6($){return $ instanceof Error?$.message:String($)}var hW6,lW6=15000;var Gd$=D(()=>{lZ();hW6=["api","read_user"]});function I20($){if(!$)return"/";if(!$.startsWith("/")||$.startsWith("//")||$.includes("\\"))return"/";return $}function je($){return`${L5()}/api/_git/${$}/callback`}function Q3($,Z){let Q=new URL($,L5());if(Z)Q.searchParams.set("git_error",Z);return Q.toString()}async function vQ1($,Z){let Q=$.organization?.id,X=$.auth.user?.id;if(!Q||!X)throw Error("Session with an organization is required");return $.storage.gitProviderOAuthStates.create({organizationId:Q,userId:X,...Z})}async function fQ1($,Z,Q){if(!Q)return{ok:!1,error:"missing_state",returnTo:"/"};let X=await $.storage.gitProviderOAuthStates.consume(Q);if(!X||X.provider!==Z)return{ok:!1,error:"invalid_state",returnTo:"/"};let Y=I20(X.returnTo);if($.auth.user?.id!==X.userId)return{ok:!1,error:"session_mismatch",returnTo:Y};return{ok:!0,state:X,returnTo:Y}}var Jd$=()=>{let $=new Q1;return $.get("/git-providers/github/connect",async(Z)=>{let Q=Z.get("studioContext");if(!Q.auth.user)return Z.json({error:"Unauthorized"},401);let X=sO();if(!X)return Z.json({error:"GitHub App is not configured"},503);let Y=await vQ1(Q,{provider:"github",host:"github.com",returnTo:I20(Z.req.query("returnTo"))});return Z.redirect(_Q1({clientId:X.clientId,redirectUri:je("github"),state:Y}))}),$.get("/git-providers/github/install",async(Z)=>{let Q=Z.get("studioContext");if(!Q.auth.user)return Z.json({error:"Unauthorized"},401);let X=sO();if(!X)return Z.json({error:"GitHub App is not configured"},503);let Y=await vQ1(Q,{provider:"github",host:"github.com",returnTo:I20(Z.req.query("returnTo"))}),G=new URL(`https://github.com/apps/${encodeURIComponent(X.slug)}/installations/new`);return G.searchParams.set("state",Y),Z.redirect(G.toString())}),$.get("/git-providers/gitlab/connect",async(Z)=>{let Q=Z.get("studioContext");if(!Q.auth.user)return Z.json({error:"Unauthorized"},401);let X=VQ0(),Y=(Z.req.query("host")??X?.host??"gitlab.com").trim().toLowerCase();if(!X||X.host!==Y)return Z.json({error:`No GitLab OAuth application is configured for ${Y}. Connect with an access token instead.`},503);let G=await vQ1(Q,{provider:"gitlab",host:Y,returnTo:I20(Z.req.query("returnTo"))});return Z.redirect(Xd$({host:Y,clientId:X.clientId,redirectUri:je("gitlab"),state:G}))}),$},ze;var bQ1=D(()=>{u$();mU();C5();zQ0();Qd$();Tj();Gd$();ze=new Q1;ze.get("/github/callback",async($)=>{let Z=await TQ.create($.req.raw),Q=await fQ1(Z,"github",$.req.query("state"));if(!Q.ok)return $.redirect(Q3(Q.returnTo,Q.error));let{returnTo:X,state:Y}=Q,G=sO(),J=vg(),W=$.req.query("code");if(!G||!J)return $.redirect(Q3(X,"not_configured"));if(!W)return $.redirect(Q3(X,$.req.query("error")??"denied"));try{let K=await Zd$({clientId:G.clientId,clientSecret:G.clientSecret,code:W,redirectUri:je("github")}),H=await J.listUserInstallations(K.accessToken);for(let F of H)await Z.storage.gitProviderAccounts.upsert({organizationId:Y.organizationId,type:"github",host:"github.com",authKind:"github_app",externalAccountId:String(F.installationId),login:F.login,avatarUrl:F.avatarUrl,installationId:F.installationId,createdBy:Y.userId});return $.redirect(Q3(X,H.length===0?"no_installations":void 0))}catch(K){return console.error("[git-providers] github callback failed",{message:K instanceof Error?K.message:String(K)}),$.redirect(Q3(X,"exchange_failed"))}});ze.get("/github/setup",async($)=>{let Z=await TQ.create($.req.raw),Q=await fQ1(Z,"github",$.req.query("state"));if(!Q.ok)return $.redirect(Q3(Q.returnTo,Q.error));let{returnTo:X,state:Y}=Q,G=sO();if(!G)return $.redirect(Q3(X,"not_configured"));let J=await Z.storage.gitProviderOAuthStates.create(Y);return $.redirect(_Q1({clientId:G.clientId,redirectUri:je("github"),state:J}))});ze.get("/gitlab/callback",async($)=>{let Z=await TQ.create($.req.raw),Q=await fQ1(Z,"gitlab",$.req.query("state"));if(!Q.ok)return $.redirect(Q3(Q.returnTo,Q.error));let{returnTo:X,state:Y}=Q,{host:G}=Y,J=VQ0(),W=$.req.query("code");if(!J||J.host!==G)return $.redirect(Q3(X,"not_configured"));if(!W)return $.redirect(Q3(X,$.req.query("error")??"denied"));try{let K=await Yd$({host:G,clientId:J.clientId,clientSecret:J.clientSecret,code:W,redirectUri:je("gitlab")}),H=await TQ0(G,K.accessToken),F=await Z.storage.gitProviderAccounts.upsert({organizationId:Y.organizationId,type:"gitlab",host:G,authKind:"oauth",externalAccountId:H.externalAccountId,login:H.login,avatarUrl:H.avatarUrl,createdBy:Y.userId});return await Z.storage.gitProviderAccountCredentials.upsert({connectionId:F.id,accessToken:K.accessToken,refreshToken:K.refreshToken,scope:K.scope,expiresAt:K.expiresIn!==null?new Date(Date.now()+K.expiresIn*1000):null,clientId:J.clientId,clientSecret:J.clientSecret,tokenEndpoint:K.tokenEndpoint}),$.redirect(Q3(X))}catch(K){return console.error("[git-providers] gitlab callback failed",{host:G,message:K instanceof Error?K.message:String(K)}),$.redirect(Q3(X,"exchange_failed"))}})});var Ae=_((tW6)=>{tW6.HttpAuthLocation=void 0;(function($){$.HEADER="header",$.QUERY="query"})(tW6.HttpAuthLocation||(tW6.HttpAuthLocation={}));tW6.HttpApiKeyAuthLocation=void 0;(function($){$.HEADER="header",$.QUERY="query"})(tW6.HttpApiKeyAuthLocation||(tW6.HttpApiKeyAuthLocation={}));tW6.EndpointURLScheme=void 0;(function($){$.HTTP="http",$.HTTPS="https"})(tW6.EndpointURLScheme||(tW6.EndpointURLScheme={}));tW6.AlgorithmId=void 0;(function($){$.MD5="md5",$.CRC32="crc32",$.CRC32C="crc32c",$.SHA1="sha1",$.SHA256="sha256"})(tW6.AlgorithmId||(tW6.AlgorithmId={}));var dW6=($)=>{let Z=[];if($.sha256!==void 0)Z.push({algorithmId:()=>tW6.AlgorithmId.SHA256,checksumConstructor:()=>$.sha256});if($.md5!=null)Z.push({algorithmId:()=>tW6.AlgorithmId.MD5,checksumConstructor:()=>$.md5});return{addChecksumAlgorithm(Q){Z.push(Q)},checksumAlgorithms(){return Z}}},mW6=($)=>{let Z={};return $.checksumAlgorithms().forEach((Q)=>{Z[Q.algorithmId()]=Q.checksumConstructor()}),Z},iW6=($)=>{return dW6($)},pW6=($)=>{return mW6($)};tW6.FieldPosition=void 0;(function($){$[$.HEADER=0]="HEADER",$[$.TRAILER=1]="TRAILER"})(tW6.FieldPosition||(tW6.FieldPosition={}));var nW6="__smithy_context";tW6.IniSectionType=void 0;(function($){$.PROFILE="profile",$.SSO_SESSION="sso-session",$.SERVICES="services"})(tW6.IniSectionType||(tW6.IniSectionType={}));tW6.RequestHandlerProtocol=void 0;(function($){$.HTTP_0_9="http/0.9",$.HTTP_1_0="http/1.0",$.TDS_8_0="tds/8.0"})(tW6.RequestHandlerProtocol||(tW6.RequestHandlerProtocol={}));tW6.SMITHY_CONTEXT_KEY=nW6;tW6.getDefaultClientConfiguration=iW6;tW6.resolveDefaultRuntimeConfig=pW6});var YX1=_((MH6)=>{var iQ1=z0("crypto"),cQ1=z0("fs"),aW6=ke(),eW6=Ve(),aH=z0("stream"),Bd$=($)=>typeof ArrayBuffer==="function"&&$ instanceof ArrayBuffer||Object.prototype.toString.call($)==="[object ArrayBuffer]",ml=($,Z=0,Q=$.byteLength-Z)=>{if(!Bd$($))throw TypeError(`The "input" argument must be ArrayBuffer. Received type ${typeof $} (${$})`);return Buffer.from($,Z,Q)},S20=($,Z)=>{if(typeof $!=="string")throw TypeError(`The "input" argument must be of type string. Received type ${typeof $} (${$})`);return Z?Buffer.from($,Z):Buffer.from($)},$K6=/^[A-Za-z0-9+/]*={0,2}$/,Od$=($)=>{if($.length*3%4!==0)throw TypeError("Incorrect padding on base64 string.");if(!$K6.exec($))throw TypeError("Invalid base64 string.");let Z=S20($,"base64");return new Uint8Array(Z.buffer,Z.byteOffset,Z.byteLength)},C20=($)=>{let Z=S20($,"utf8");return new Uint8Array(Z.buffer,Z.byteOffset,Z.byteLength/Uint8Array.BYTES_PER_ELEMENT)},rQ1=($)=>{let Z;if(typeof $==="string")Z=C20($);else Z=$;if(typeof Z!=="object"||typeof Z.byteOffset!=="number"||typeof Z.byteLength!=="number")throw Error("@smithy/util-base64: toBase64 encoder function only accepts string | Uint8Array.");return ml(Z.buffer,Z.byteOffset,Z.byteLength).toString("base64")};function ZK6($,Z,Q,X){return class Y extends Uint8Array{static fromString(G,J="utf-8"){if(typeof G==="string"){if(J==="base64")return Y.mutate(X(G));return Y.mutate(Z(G))}throw Error(`Unsupported conversion from ${typeof G} to Uint8ArrayBlobAdapter.`)}static mutate(G){return Object.setPrototypeOf(G,Y.prototype),G}transformToString(G="utf-8"){if(G==="base64")return Q(this);return $(this)}}}var Dd$=($)=>{if(typeof $==="string")return $;if(typeof $!=="object"||typeof $.byteOffset!=="number"||typeof $.byteLength!=="number")throw Error("@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.");return ml($.buffer,$.byteOffset,$.byteLength).toString("utf8")},xQ=Array.from({length:256},($,Z)=>Z.toString(16).padStart(2,"0"));function QK6($){if(typeof crypto<"u"&&typeof crypto.randomUUID==="function")return()=>crypto.randomUUID();return()=>{let Z=new Uint8Array(16);return $(Z),Z[6]=Z[6]&15|64,Z[8]=Z[8]&63|128,xQ[Z[0]]+xQ[Z[1]]+xQ[Z[2]]+xQ[Z[3]]+"-"+xQ[Z[4]]+xQ[Z[5]]+"-"+xQ[Z[6]]+xQ[Z[7]]+"-"+xQ[Z[8]]+xQ[Z[9]]+"-"+xQ[Z[10]]+xQ[Z[11]]+xQ[Z[12]]+xQ[Z[13]]+xQ[Z[14]]+xQ[Z[15]]}}var XK6=($,Z,Q=(X)=>X)=>$,YK6=($)=>{switch($){case"true":return!0;case"false":return!1;default:throw Error(`Unable to parse boolean value "${$}"`)}},GK6=($)=>{if($===null||$===void 0)return;if(typeof $==="number"){if($===0||$===1)Me.warn(k20(`Expected boolean, got ${typeof $}: ${$}`));if($===0)return!1;if($===1)return!0}if(typeof $==="string"){let Z=$.toLowerCase();if(Z==="false"||Z==="true")Me.warn(k20(`Expected boolean, got ${typeof $}: ${$}`));if(Z==="false")return!1;if(Z==="true")return!0}if(typeof $==="boolean")return $;throw TypeError(`Expected boolean, got ${typeof $}: ${$}`)},qe=($)=>{if($===null||$===void 0)return;if(typeof $==="string"){let Z=parseFloat($);if(!Number.isNaN(Z)){if(String(Z)!==String($))Me.warn(k20(`Expected number but observed string: ${$}`));return Z}}if(typeof $==="number")return $;throw TypeError(`Expected number, got ${typeof $}: ${$}`)},JK6=Math.ceil(340282346638528860000000000000000000000),M20=($)=>{let Z=qe($);if(Z!==void 0&&!Number.isNaN(Z)&&Z!==1/0&&Z!==-1/0){if(Math.abs(Z)>JK6)throw TypeError(`Expected 32-bit float, got ${$}`)}return Z},Ie=($)=>{if($===null||$===void 0)return;if(Number.isInteger($)&&!Number.isNaN($))return $;throw TypeError(`Expected integer, got ${typeof $}: ${$}`)},WK6=Ie,pQ1=($)=>sQ1($,32),nQ1=($)=>sQ1($,16),tQ1=($)=>sQ1($,8),sQ1=($,Z)=>{let Q=Ie($);if(Q!==void 0&&KK6(Q,Z)!==Q)throw TypeError(`Expected ${Z}-bit integer, got ${$}`);return Q},KK6=($,Z)=>{switch(Z){case 32:return Int32Array.of($)[0];case 16:return Int16Array.of($)[0];case 8:return Int8Array.of($)[0]}},HK6=($,Z)=>{if($===null||$===void 0){if(Z)throw TypeError(`Expected a non-null value for ${Z}`);throw TypeError("Expected a non-null value")}return $},wd$=($)=>{if($===null||$===void 0)return;if(typeof $==="object"&&!Array.isArray($))return $;let Z=Array.isArray($)?"array":typeof $;throw TypeError(`Expected object, got ${Z}: ${$}`)},FK6=($)=>{if($===null||$===void 0)return;if(typeof $==="string")return $;if(["boolean","number","bigint"].includes(typeof $))return Me.warn(k20(`Expected string, got ${typeof $}: ${$}`)),String($);throw TypeError(`Expected string, got ${typeof $}: ${$}`)},UK6=($)=>{if($===null||$===void 0)return;let Z=wd$($),Q=[];for(let X in Z)if(Z[X]!=null)Q.push(X);if(Q.length===0)throw TypeError("Unions must have exactly one non-null member. None were found.");if(Q.length>1)throw TypeError(`Unions must have exactly one non-null member. Keys ${Q} were not null.`);return Z},aQ1=($)=>{if(typeof $=="string")return qe(nl($));return qe($)},NK6=aQ1,Ld$=($)=>{if(typeof $=="string")return M20(nl($));return M20($)},BK6=/(-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)|(-?Infinity)|(NaN)/g,nl=($)=>{let Z=$.match(BK6);if(Z===null||Z[0].length!==$.length)throw TypeError("Expected real number, got implicit NaN");return parseFloat($)},eQ1=($)=>{if(typeof $=="string")return Ed$($);return qe($)},OK6=eQ1,DK6=eQ1,wK6=($)=>{if(typeof $=="string")return Ed$($);return M20($)},Ed$=($)=>{switch($){case"NaN":return NaN;case"Infinity":return 1/0;case"-Infinity":return-1/0;default:throw Error(`Unable to parse float value: ${$}`)}},jd$=($)=>{if(typeof $==="string")return Ie(nl($));return Ie($)},LK6=jd$,EK6=($)=>{if(typeof $==="string")return pQ1(nl($));return pQ1($)},il=($)=>{if(typeof $==="string")return nQ1(nl($));return nQ1($)},zd$=($)=>{if(typeof $==="string")return tQ1(nl($));return tQ1($)},k20=($)=>{return String(TypeError($).stack||$).split(`
2824
+ LIMIT 50`,{slug:$,since:Z,until:Q})).map((G)=>({key:G.key,pageviews:Number(G.pageviews),visitors:Number(G.visitors)}))}async function dc$($){let{since:Z,until:Q}=mc$(90),X=await ic$($,Z,Q);return[...new Set(X.map(LT0))]}async function A20($){let Z=$.get("studioContext");if(!sL(Z))return $.json({error:"Unauthorized"},401);let Q=n(Z),X=$.req.param("site");if(!X)return $.json({error:"site is required"},400);let Y=X.toLowerCase();if(!await Z.storage.orgSites.isOwnedBy(Y,Q.id))return $.json({error:"Site not found in organization"},404);return{slug:Y}}var OW6,DW6,lc$,Z3="site_id IN (SELECT id FROM default.dim_sites WHERE name = {slug:String})",TW6,IW6="https://deco.lilstts.com/plausible",MW6=12000,kW6,pc$=()=>{let $=new Q1;return $.get("/:site/cdn/data",async(Z)=>{let Q=await A20(Z);if(Q instanceof Response)return Q;if(!Jf())return Z.json({available:!1,error:"Monitor is not configured"});let X=Z.req.query("view")??"summary";if(!OW6.has(X))return Z.json({error:`unknown or unavailable view: ${X}`},400);let Y=Z.req.query("range")??"7d",G=kQ1(Y,Z.req.query("since"),Z.req.query("until"));if(!G)return Z.json({error:`unknown range: ${Y}`},400);let{slug:J}=Q,{since:W,until:K}=G,H=cc$(Z.req.query("filters"));try{let F;switch(X){case"summary":F=await LW6(J,W,K,H);break;case"timeline":F=await EW6(J,W,K,G.granularity,H);break;case"cache-status":F=await jW6(J,W,K,H);break;case"status-codes":F=await zW6(J,W,K,H);break;case"top-paths":F=await PW6(J,W,K,Z.req.query("groupByPath")==="1",H);break;case"top-countries":F=await AW6(J,W,K,H);break}return Z.json({available:!0,view:X,range:Y,data:F})}catch(F){return console.error(`[monitor] cdn ${X} query failed for site="${J}":`,F),Z.json({error:"Failed to query monitor warehouse"},502)}}),$.get("/:site/audience/data",async(Z)=>{let Q=await A20(Z);if(Q instanceof Response)return Q;if(!Jf())return Z.json({available:!1,error:"Monitor is not configured"});let X=Z.req.query("view")??"summary";if(!TW6.has(X))return Z.json({error:`unknown or unavailable view: ${X}`},400);let Y=Z.req.query("range")??"7d",G=kQ1(Y,Z.req.query("since"),Z.req.query("until"));if(!G)return Z.json({error:`unknown range: ${Y}`},400);let{slug:J}=Q,{since:W,until:K}=G;try{let H;switch(X){case"summary":H=await RW6(J,W,K);break;case"timeline":H=await qW6(J,W,K);break;case"top-sources":H=await VQ1(J,W,K,"utm_source");break;case"top-countries":H=await VQ1(J,W,K,"country");break;case"devices":H=await VQ1(J,W,K,"device_type");break}return Z.json({available:!0,view:X,range:Y,data:H})}catch(H){return console.error(`[monitor] audience ${X} query failed for site="${J}":`,H),Z.json({error:"Failed to query monitor warehouse"},502)}}),$.get("/:site/hosts",async(Z)=>{let Q=await A20(Z);if(Q instanceof Response)return Q;let{slug:X}=Q;if(!Jf())return Z.json({available:!1,hosts:[]});try{let Y=await dc$(X);return Z.json({available:!0,hosts:Y})}catch(Y){return console.error(`[monitor] hosts failed for site="${X}":`,Y),Z.json({available:!0,hosts:[]})}}),$.get("/:site/onedollar",async(Z)=>{let Q=await A20(Z);if(Q instanceof Response)return Q;let{slug:X}=Q,Y=M0().oneDollarStatsApiKey;if(!Y)return Z.json({available:!1,error:"OneDollarStats not configured"});let G=Z.req.query("report")??"kpis",J=kW6[G];if(!J)return Z.json({error:`unknown report: ${G}`},400);let W=Z.req.query("range")??"7d",K=kQ1(W,Z.req.query("since"),Z.req.query("until"));if(!K)return Z.json({error:`unknown range: ${W}`},400);let H=await dc$(X),F=Z.req.query("host"),U=F&&H.includes(F)?F:H[0];if(!U)return Z.json({available:!0,report:G,range:W,results:[]});let{since:N,until:B}=K,O=G==="timeseries"?K.granularity==="hourly"?"time:hour":"time:day":J.dimension,w={page:"event:page",source:"visit:referrer",referrer:"visit:referrer",country:"visit:country",browser:"visit:browser",os:"visit:os",device:"visit:device",utm_campaign:"visit:utm_campaign",utm_source:"visit:utm_source",utm_medium:"visit:utm_medium",utm_content:"visit:utm_content",utm_term:"visit:utm_term"},L={equals:"is",not_equals:"is_not",contains:"contains",not_contains:"contains_not"},E=cc$(Z.req.query("filters")).map((z)=>{let P=w[z.field],A=L[z.op];return P&&A?[A,P,[z.value]]:null}).filter(Boolean),j=async(z)=>{let P=await fetch(IW6,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":Y,Accept:"application/json"},body:JSON.stringify({site_id:U,metrics:J.metrics,date_range:z,...O?{dimensions:[O]}:{},...J.order?{order_by:[[J.order,"desc"]]}:{},...E.length?{filters:E}:{},pagination:{limit:100,offset:0}}),signal:AbortSignal.timeout(MW6)});if(!P.ok)throw Error(`OneDollarStats ${P.status}`);return(await P.json().catch(()=>null))?.results??[]};try{let z=await j([N,B]),P;if(G==="kpis"||G==="timeseries"&&Z.req.query("compare")==="1"){let q=Date.parse(`${N}T00:00:00Z`),k=86400000,M=T20(new Date(q-86400000)),C=T20(new Date(q-K.days*86400000));P=await j([C,M]).catch(()=>{return})}return Z.json({available:!0,report:G,range:W,host:U,metrics:J.metrics,results:z,...P?{previous:P}:{}})}catch(z){return console.error(`[monitor] onedollar ${G} failed for host="${U}":`,z),Z.json({error:"Failed to reach OneDollarStats"},502)}}),$};var nc$=D(()=>{u$();E$();WZ1();KZ1();OW6=new Set(["summary","timeline","cache-status","status-codes","top-paths","top-countries"]),DW6={today:{days:1,granularity:"hourly"},yesterday:{days:1,granularity:"hourly",endOffsetDays:1},"7d":{days:7,granularity:"daily"},"14d":{days:14,granularity:"daily"},"30d":{days:30,granularity:"daily"},"90d":{days:90,granularity:"daily"},"180d":{days:180,granularity:"daily"},"1y":{days:365,granularity:"daily"}};lc$=/^\d{4}-\d{2}-\d{2}$/;TW6=new Set(["summary","timeline","top-sources","top-countries","devices"]);kW6={kpis:{metrics:["visitors","visits","pageviews","bounce_rate","visit_duration"]},timeseries:{metrics:["pageviews","visits","visitors","bounce_rate","visit_duration"]},pages:{metrics:["pageviews","visitors"],dimension:"event:page",order:"pageviews"},sources:{metrics:["visitors"],dimension:"visit:referrer",order:"visitors"},countries:{metrics:["visitors"],dimension:"visit:country",order:"visitors"},browsers:{metrics:["visitors"],dimension:"visit:browser",order:"visitors"},os:{metrics:["visitors"],dimension:"visit:os",order:"visitors"},devices:{metrics:["visitors"],dimension:"visit:device",order:"visitors"},events:{metrics:["visitors","events"],dimension:"event:name",order:"events"},utm_campaign:{metrics:["visitors","events"],dimension:"visit:utm_campaign",order:"events"},utm_source:{metrics:["visitors","events"],dimension:"visit:utm_source",order:"events"},utm_medium:{metrics:["visitors","events"],dimension:"visit:utm_medium",order:"events"},utm_content:{metrics:["visitors","events"],dimension:"visit:utm_content",order:"events"},utm_term:{metrics:["visitors","events"],dimension:"visit:utm_term",order:"events"}}});import{timingSafeEqual as VW6}from"crypto";function ul($){let Q=$?.match(/^Bearer\s+(.+)$/i)?.[1]?.trim();return Q?Q:null}function SQ1($,Z){let Q=Buffer.from($),X=Buffer.from(Z);return Q.length===X.length&&VW6(Q,X)}function ll($){let Z=process.env.VAULT_SERVICE_TOKEN;return!!Z&&SQ1($,Z)}function tc$($){if(!$)return null;return $ instanceof Date?$.toISOString():$}function SW6($){if(!$)return[];if(Array.isArray($))return $.filter((Z)=>typeof Z==="string");if(typeof $!=="string")return[];try{let Z=JSON.parse($);return Array.isArray(Z)?Z.filter((Q)=>typeof Q==="string"):[]}catch{return[]}}async function oc$($,Z,Q){let X=ul($.req.header("authorization"));if(!X)return{ok:!1,response:$.json({error:"Unauthorized"},401)};let Y=$.get("studioContext"),G=Y.organization?.id;if(!G)return{ok:!1,response:$.json({error:"Organization context required"},403)};if(ll(X))return{ok:!0,ctx:Y,organizationId:G};let J=await Y.storage.connectionCredentialVault.authenticateWorkloadToken(X);if(!J||J.organizationId!==G)return{ok:!1,response:$.json({error:"Unauthorized"},401)};let W=await Y.storage.connections.findById(J.subjectConnectionId,G);if(!W||W.status!=="active")return{ok:!1,response:$.json({error:"Unauthorized"},401)};if(!await Y.storage.connectionCredentialVault.hasGrant({organizationId:G,subjectConnectionId:J.subjectConnectionId,targetConnectionId:Z,scope:Q}))return{ok:!1,response:$.json({error:"Forbidden"},403)};return{ok:!0,ctx:Y,organizationId:G}}var rc$=()=>{let $=new Q1;return $.post("/vault/connections/batch",async(Z)=>{let Q=ul(Z.req.header("authorization"));if(!Q||!ll(Q))return Z.json({error:"Unauthorized"},401);let X=Z.get("studioContext"),Y=X.organization?.id;if(!Y)return Z.json({error:"Organization context required"},403);let G=await Z.req.json().catch(()=>null),J=Array.isArray(G?.connectionIds)?[...new Set(G.connectionIds)].filter((B)=>typeof B==="string"&&B.length>0):[];if(J.length===0||J.length>20)return Z.json({error:"connectionIds must be a non-empty string array (max 20)"},400);let{items:W}=await X.storage.connections.list(Y,{includeVirtual:!0,where:{field:["id"],operator:"in",value:J},limit:J.length}),K=new Map(W.map((B)=>[B.id,B])),H=new Set((await X.db.selectFrom("downstream_tokens").select("connectionId").where("connectionId","in",J).execute()).map((B)=>B.connectionId)),F=new Map((await X.db.selectFrom("connections").select(["id","configuration_state","connection_token"]).where("id","in",J).where("organization_id","=",Y).execute()).map((B)=>[B.id,B])),U=new z5(X.db,X.vault),N={};return await Promise.all(J.map(async(B)=>{try{let O=K.get(B);if(!O||O.status!=="active"){N[B]={error:"Connection not found"};return}if(F.get(B)?.configuration_state&&!O.configuration_state){N[B]={error:"MCP configuration could not be decrypted"};return}let w={type:"mcp_configuration",state:O.configuration_state??{},scopes:O.configuration_scopes??[]},L=null;if(H.has(B)){let E=await HG({connectionId:B,connectionUrl:O.connection_url,tokenStorage:U});if(E.state==="valid"||E.state==="refreshed"){let j=await U.get(B);L={type:"oauth_access_token",tokenType:"Bearer",accessToken:E.accessToken,expiresAt:tc$(j?.expiresAt??null),scope:j?.scope??null}}}else if(O.connection_token)L={type:"static_token",tokenType:"Bearer",accessToken:O.connection_token,expiresAt:null,scope:null};else if(F.get(B)?.connection_token){N[B]={error:"Connection token could not be decrypted"};return}N[B]={configuration:w,accessToken:L}}catch(O){N[B]={error:O instanceof Error?O.message:String(O)}}})),Z.header("Cache-Control","no-store"),Z.header("Pragma","no-cache"),Z.json(N)}),$.post("/vault/connections/:connectionId/access-token",async(Z)=>{let Q=Z.req.param("connectionId"),X=await oc$(Z,Q,a50);if(!X.ok)return X.response;let{ctx:Y,organizationId:G}=X,J=await Y.storage.connections.findById(Q,G);if(!J||J.status!=="active")return Z.json({error:"Connection not found"},404);let W=new z5(Y.db,Y.vault),K=await HG({connectionId:Q,connectionUrl:J.connection_url,tokenStorage:W});if(K.state==="missing"){if(J.connection_token)return Z.header("Cache-Control","no-store"),Z.header("Pragma","no-cache"),Z.json({type:"static_token",tokenType:"Bearer",accessToken:J.connection_token,expiresAt:null,scope:null});if((await Y.db.selectFrom("connections").select("connection_token").where("id","=",Q).where("organization_id","=",G).executeTakeFirst())?.connection_token)return Z.json({error:"Connection token could not be decrypted"},424);return Z.json({error:"Downstream token not found"},409)}if(K.state==="expired_without_refresh"||K.state==="refresh_failed")return Z.json({error:"Downstream token refresh failed"},424);let H=await W.get(Q);return Z.header("Cache-Control","no-store"),Z.header("Pragma","no-cache"),Z.json({type:"oauth_access_token",tokenType:"Bearer",accessToken:K.accessToken,expiresAt:tc$(H?.expiresAt??null),scope:H?.scope??null})}),$.post("/vault/connections/:connectionId/configuration",async(Z)=>{let Q=Z.req.param("connectionId"),X=await oc$(Z,Q,e50);if(!X.ok)return X.response;let{ctx:Y,organizationId:G}=X,J=await Y.db.selectFrom("connections").select(["status","configuration_state","configuration_scopes"]).where("id","=",Q).where("organization_id","=",G).executeTakeFirst();if(!J||J.status!=="active")return Z.json({error:"Connection not found"},404);let W={};if(J.configuration_state)try{let K=await Y.vault.decrypt(J.configuration_state),H=JSON.parse(K);if(typeof H!=="object"||H===null||Array.isArray(H))throw Error("MCP configuration state is not an object");W=H}catch{return Z.json({error:"MCP configuration could not be decrypted"},424)}return Z.header("Cache-Control","no-store"),Z.header("Pragma","no-cache"),Z.json({type:"mcp_configuration",state:W,scopes:SW6(J.configuration_scopes)})}),$};var Ee=D(()=>{u$();LJ();$90();s3()});import{createHmac as CW6}from"crypto";import{mkdir as _W6,writeFile as vW6}from"fs/promises";import{dirname as fW6,join as ec$}from"path";function xW6($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return ec$(bW6,Z)}function sc$($,Z){let Q=xW6($),X=sG(Z);return ec$(Q,X)}function ac$($,Z,Q,X,Y){let G=M0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${X}`,W=CW6("sha256",G).update(J).digest("hex");return SQ1(Y,W)}function CQ1($){let Z=$.split(".").pop()?.toLowerCase()||"";return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",ico:"image/x-icon",bmp:"image/bmp",pdf:"application/pdf",json:"application/json",xml:"application/xml",txt:"text/plain",html:"text/html",htm:"text/html",css:"text/css",csv:"text/csv",md:"text/markdown",js:"application/javascript",mjs:"application/javascript",ts:"application/typescript",mp4:"video/mp4",webm:"video/webm",avi:"video/x-msvideo",mov:"video/quicktime",mp3:"audio/mpeg",wav:"audio/wav",ogg:"audio/ogg",zip:"application/zip",gz:"application/gzip",tar:"application/x-tar",woff:"font/woff",woff2:"font/woff2",ttf:"font/ttf",otf:"font/otf"}[Z]||"application/octet-stream"}var bW6="./data/assets",R20=($)=>{let Z=new Q1,Q=$.orgFromPath?"/*":"/:orgId/*";return Z.get(Q,async(X)=>{let Y=$.orgFromPath?X.get("studioContext")?.organization?.id:X.req.param("orgId");if(!Y)return X.json({error:"Missing organization context"},500);let G=$.orgFromPath?`/api/${X.req.param("org")??""}/dev-assets/`:`/api/dev-assets/${Y}/`,J=X.req.path.replace(G,"");if(!J)return X.json({error:"Missing key"},400);let W=X.req.query("expires"),K=X.req.query("signature"),H=X.req.query("method");if(!W||!K||H!=="GET")return X.json({error:"Invalid or missing signature parameters"},400);let F=parseInt(W,10);if(!Number.isFinite(F))return X.json({error:"Invalid expires parameter"},400);let U=Math.floor(Date.now()/1000);if(F<U)return X.json({error:"URL has expired"},403);if(!ac$(Y,J,F,"GET",K))return X.json({error:"Invalid signature"},403);let N=sc$(Y,J);try{let B=Bun.file(N);if(!await B.exists())return X.json({error:"File not found"},404);let w=CQ1(J);return new Response(B.stream(),{headers:{"Content-Type":w,"Content-Length":B.size.toString(),"Cache-Control":"private, max-age=3600"}})}catch(B){return console.error("Error serving file:",B),X.json({error:"Failed to read file"},500)}}),Z.put(Q,async(X)=>{let Y=$.orgFromPath?X.get("studioContext")?.organization?.id:X.req.param("orgId");if(!Y)return X.json({error:"Missing organization context"},500);let G=$.orgFromPath?`/api/${X.req.param("org")??""}/dev-assets/`:`/api/dev-assets/${Y}/`,J=X.req.path.replace(G,"");if(!J)return X.json({error:"Missing key"},400);let W=X.req.query("expires"),K=X.req.query("signature"),H=X.req.query("method");if(!W||!K||H!=="PUT")return X.json({error:"Invalid or missing signature parameters"},400);let F=parseInt(W,10);if(!Number.isFinite(F))return X.json({error:"Invalid expires parameter"},400);let U=Math.floor(Date.now()/1000);if(F<U)return X.json({error:"URL has expired"},403);if(!ac$(Y,J,F,"PUT",K))return X.json({error:"Invalid signature"},403);let N=sc$(Y,J),B=fW6(N);try{await _W6(B,{recursive:!0});let O=await X.req.arrayBuffer();return await vW6(N,Buffer.from(O)),X.json({success:!0,key:J})}catch(O){return console.error("Error saving file:",O),X.json({error:"Failed to save file"},500)}}),Z};var q20=D(()=>{u$();E$();T3();Ee()});function _Q1($){let Z=new URL(yW6);if(Z.searchParams.set("client_id",$.clientId),Z.searchParams.set("redirect_uri",$.redirectUri),Z.searchParams.set("state",$.state),$.selectAccount)Z.searchParams.set("prompt","select_account");return Z.toString()}function gW6($,Z=200){let Q=$!==null&&typeof $==="object"?$:{};if(typeof Q.error==="string"){let X=typeof Q.error_description==="string"?` (${Q.error_description})`:"";throw new A1({provider:"github",status:400,message:`GitHub OAuth code exchange failed: ${Q.error}${X}`})}if(typeof Q.access_token!=="string"||Q.access_token.length===0)throw new A1({provider:"github",status:Z,message:"GitHub OAuth code exchange returned no access token"});return{accessToken:Q.access_token,refreshToken:typeof Q.refresh_token==="string"&&Q.refresh_token.length>0?Q.refresh_token:null,expiresIn:typeof Q.expires_in==="number"&&Number.isFinite(Q.expires_in)?Q.expires_in:null,scope:typeof Q.scope==="string"&&Q.scope.length>0?Q.scope:null,tokenEndpoint:$d$}}async function Zd$($){let Z;try{Z=await fetch($d$,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({client_id:$.clientId,client_secret:$.clientSecret,code:$.code,redirect_uri:$.redirectUri}),signal:AbortSignal.timeout(Bp0)})}catch(Y){throw new A1({provider:"github",status:0,message:`GitHub OAuth code exchange failed: ${Y instanceof Error?Y.message:String(Y)}`,cause:Y})}let Q=await Z.text();if(!Z.ok)throw new A1({provider:"github",status:Z.status,message:`GitHub OAuth code exchange failed: ${Z.status} ${Q.slice(0,300)}`});let X;try{X=JSON.parse(Q)}catch(Y){throw new A1({provider:"github",status:Z.status,message:`GitHub OAuth code exchange returned invalid JSON: ${Q.slice(0,300)}`,cause:Y})}return gW6(X,Z.status)}var yW6="https://github.com/login/oauth/authorize",$d$="https://github.com/login/oauth/access_token";var Qd$=D(()=>{lZ();_g()});function Xd$($){let Z=new URL(`https://${$.host}/oauth/authorize`);return Z.searchParams.set("client_id",$.clientId),Z.searchParams.set("redirect_uri",$.redirectUri),Z.searchParams.set("response_type","code"),Z.searchParams.set("state",$.state),Z.searchParams.set("scope",($.scopes??hW6).join(" ")),Z.toString()}function uW6($){return`https://${$}/oauth/token`}async function Yd$($){let Z=uW6($.host),Q=new URLSearchParams({grant_type:"authorization_code",client_id:$.clientId,client_secret:$.clientSecret,code:$.code,redirect_uri:$.redirectUri}),X;try{X=await fetch(Z,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"},body:Q,signal:AbortSignal.timeout(lW6)})}catch(G){throw new A1({provider:"gitlab",status:0,message:`GitLab token exchange failed: ${cW6(G)}`,cause:G})}let Y=await X.json().catch(()=>null);if(!X.ok||!Y||typeof Y.error==="string"){let G=Y&&typeof Y.error_description==="string"?Y.error_description:Y&&typeof Y.error==="string"?Y.error:X.statusText;throw new A1({provider:"gitlab",status:X.status,message:`GitLab token exchange failed (${X.status}): ${G}`})}if(typeof Y.access_token!=="string"||!Y.access_token)throw new A1({provider:"gitlab",status:X.status,message:"GitLab token exchange returned no access_token"});return{accessToken:Y.access_token,refreshToken:typeof Y.refresh_token==="string"&&Y.refresh_token?Y.refresh_token:null,expiresIn:typeof Y.expires_in==="number"&&Number.isFinite(Y.expires_in)?Y.expires_in:null,scope:typeof Y.scope==="string"?Y.scope:null,tokenEndpoint:Z}}function cW6($){return $ instanceof Error?$.message:String($)}var hW6,lW6=15000;var Gd$=D(()=>{lZ();hW6=["api","read_user"]});function I20($){if(!$)return"/";if(!$.startsWith("/")||$.startsWith("//")||$.includes("\\"))return"/";return $}function je($){return`${L5()}/api/_git/${$}/callback`}function Q3($,Z){let Q=new URL($,L5());if(Z)Q.searchParams.set("git_error",Z);return Q.toString()}async function vQ1($,Z){let Q=$.organization?.id,X=$.auth.user?.id;if(!Q||!X)throw Error("Session with an organization is required");return $.storage.gitProviderOAuthStates.create({organizationId:Q,userId:X,...Z})}async function fQ1($,Z,Q){if(!Q)return{ok:!1,error:"missing_state",returnTo:"/"};let X=await $.storage.gitProviderOAuthStates.consume(Q);if(!X||X.provider!==Z)return{ok:!1,error:"invalid_state",returnTo:"/"};let Y=I20(X.returnTo);if($.auth.user?.id!==X.userId)return{ok:!1,error:"session_mismatch",returnTo:Y};return{ok:!0,state:X,returnTo:Y}}var Jd$=()=>{let $=new Q1;return $.get("/git-providers/github/connect",async(Z)=>{let Q=Z.get("studioContext");if(!Q.auth.user)return Z.json({error:"Unauthorized"},401);let X=sO();if(!X)return Z.json({error:"GitHub App is not configured"},503);let Y=await vQ1(Q,{provider:"github",host:"github.com",returnTo:I20(Z.req.query("returnTo"))});return Z.redirect(_Q1({clientId:X.clientId,redirectUri:je("github"),state:Y,selectAccount:!0}))}),$.get("/git-providers/github/install",async(Z)=>{let Q=Z.get("studioContext");if(!Q.auth.user)return Z.json({error:"Unauthorized"},401);let X=sO();if(!X)return Z.json({error:"GitHub App is not configured"},503);let Y=await vQ1(Q,{provider:"github",host:"github.com",returnTo:I20(Z.req.query("returnTo"))}),G=new URL(`https://github.com/apps/${encodeURIComponent(X.slug)}/installations/new`);return G.searchParams.set("state",Y),Z.redirect(G.toString())}),$.get("/git-providers/gitlab/connect",async(Z)=>{let Q=Z.get("studioContext");if(!Q.auth.user)return Z.json({error:"Unauthorized"},401);let X=VQ0(),Y=(Z.req.query("host")??X?.host??"gitlab.com").trim().toLowerCase();if(!X||X.host!==Y)return Z.json({error:`No GitLab OAuth application is configured for ${Y}. Connect with an access token instead.`},503);let G=await vQ1(Q,{provider:"gitlab",host:Y,returnTo:I20(Z.req.query("returnTo"))});return Z.redirect(Xd$({host:Y,clientId:X.clientId,redirectUri:je("gitlab"),state:G}))}),$},ze;var bQ1=D(()=>{u$();mU();C5();zQ0();Qd$();Tj();Gd$();ze=new Q1;ze.get("/github/callback",async($)=>{let Z=await TQ.create($.req.raw),Q=await fQ1(Z,"github",$.req.query("state"));if(!Q.ok)return $.redirect(Q3(Q.returnTo,Q.error));let{returnTo:X,state:Y}=Q,G=sO(),J=vg(),W=$.req.query("code");if(!G||!J)return $.redirect(Q3(X,"not_configured"));if(!W)return $.redirect(Q3(X,$.req.query("error")??"denied"));try{let K=await Zd$({clientId:G.clientId,clientSecret:G.clientSecret,code:W,redirectUri:je("github")}),H=await J.listUserInstallations(K.accessToken);for(let F of H)await Z.storage.gitProviderAccounts.upsert({organizationId:Y.organizationId,type:"github",host:"github.com",authKind:"github_app",externalAccountId:String(F.installationId),login:F.login,avatarUrl:F.avatarUrl,installationId:F.installationId,createdBy:Y.userId});return $.redirect(Q3(X,H.length===0?"no_installations":void 0))}catch(K){return console.error("[git-providers] github callback failed",{message:K instanceof Error?K.message:String(K)}),$.redirect(Q3(X,"exchange_failed"))}});ze.get("/github/setup",async($)=>{let Z=await TQ.create($.req.raw),Q=await fQ1(Z,"github",$.req.query("state"));if(!Q.ok)return $.redirect(Q3(Q.returnTo,Q.error));let{returnTo:X,state:Y}=Q,G=sO();if(!G)return $.redirect(Q3(X,"not_configured"));let J=await Z.storage.gitProviderOAuthStates.create(Y);return $.redirect(_Q1({clientId:G.clientId,redirectUri:je("github"),state:J}))});ze.get("/gitlab/callback",async($)=>{let Z=await TQ.create($.req.raw),Q=await fQ1(Z,"gitlab",$.req.query("state"));if(!Q.ok)return $.redirect(Q3(Q.returnTo,Q.error));let{returnTo:X,state:Y}=Q,{host:G}=Y,J=VQ0(),W=$.req.query("code");if(!J||J.host!==G)return $.redirect(Q3(X,"not_configured"));if(!W)return $.redirect(Q3(X,$.req.query("error")??"denied"));try{let K=await Yd$({host:G,clientId:J.clientId,clientSecret:J.clientSecret,code:W,redirectUri:je("gitlab")}),H=await TQ0(G,K.accessToken),F=await Z.storage.gitProviderAccounts.upsert({organizationId:Y.organizationId,type:"gitlab",host:G,authKind:"oauth",externalAccountId:H.externalAccountId,login:H.login,avatarUrl:H.avatarUrl,createdBy:Y.userId});return await Z.storage.gitProviderAccountCredentials.upsert({connectionId:F.id,accessToken:K.accessToken,refreshToken:K.refreshToken,scope:K.scope,expiresAt:K.expiresIn!==null?new Date(Date.now()+K.expiresIn*1000):null,clientId:J.clientId,clientSecret:J.clientSecret,tokenEndpoint:K.tokenEndpoint}),$.redirect(Q3(X))}catch(K){return console.error("[git-providers] gitlab callback failed",{host:G,message:K instanceof Error?K.message:String(K)}),$.redirect(Q3(X,"exchange_failed"))}})});var Ae=_((tW6)=>{tW6.HttpAuthLocation=void 0;(function($){$.HEADER="header",$.QUERY="query"})(tW6.HttpAuthLocation||(tW6.HttpAuthLocation={}));tW6.HttpApiKeyAuthLocation=void 0;(function($){$.HEADER="header",$.QUERY="query"})(tW6.HttpApiKeyAuthLocation||(tW6.HttpApiKeyAuthLocation={}));tW6.EndpointURLScheme=void 0;(function($){$.HTTP="http",$.HTTPS="https"})(tW6.EndpointURLScheme||(tW6.EndpointURLScheme={}));tW6.AlgorithmId=void 0;(function($){$.MD5="md5",$.CRC32="crc32",$.CRC32C="crc32c",$.SHA1="sha1",$.SHA256="sha256"})(tW6.AlgorithmId||(tW6.AlgorithmId={}));var dW6=($)=>{let Z=[];if($.sha256!==void 0)Z.push({algorithmId:()=>tW6.AlgorithmId.SHA256,checksumConstructor:()=>$.sha256});if($.md5!=null)Z.push({algorithmId:()=>tW6.AlgorithmId.MD5,checksumConstructor:()=>$.md5});return{addChecksumAlgorithm(Q){Z.push(Q)},checksumAlgorithms(){return Z}}},mW6=($)=>{let Z={};return $.checksumAlgorithms().forEach((Q)=>{Z[Q.algorithmId()]=Q.checksumConstructor()}),Z},iW6=($)=>{return dW6($)},pW6=($)=>{return mW6($)};tW6.FieldPosition=void 0;(function($){$[$.HEADER=0]="HEADER",$[$.TRAILER=1]="TRAILER"})(tW6.FieldPosition||(tW6.FieldPosition={}));var nW6="__smithy_context";tW6.IniSectionType=void 0;(function($){$.PROFILE="profile",$.SSO_SESSION="sso-session",$.SERVICES="services"})(tW6.IniSectionType||(tW6.IniSectionType={}));tW6.RequestHandlerProtocol=void 0;(function($){$.HTTP_0_9="http/0.9",$.HTTP_1_0="http/1.0",$.TDS_8_0="tds/8.0"})(tW6.RequestHandlerProtocol||(tW6.RequestHandlerProtocol={}));tW6.SMITHY_CONTEXT_KEY=nW6;tW6.getDefaultClientConfiguration=iW6;tW6.resolveDefaultRuntimeConfig=pW6});var YX1=_((MH6)=>{var iQ1=z0("crypto"),cQ1=z0("fs"),aW6=ke(),eW6=Ve(),aH=z0("stream"),Bd$=($)=>typeof ArrayBuffer==="function"&&$ instanceof ArrayBuffer||Object.prototype.toString.call($)==="[object ArrayBuffer]",ml=($,Z=0,Q=$.byteLength-Z)=>{if(!Bd$($))throw TypeError(`The "input" argument must be ArrayBuffer. Received type ${typeof $} (${$})`);return Buffer.from($,Z,Q)},S20=($,Z)=>{if(typeof $!=="string")throw TypeError(`The "input" argument must be of type string. Received type ${typeof $} (${$})`);return Z?Buffer.from($,Z):Buffer.from($)},$K6=/^[A-Za-z0-9+/]*={0,2}$/,Od$=($)=>{if($.length*3%4!==0)throw TypeError("Incorrect padding on base64 string.");if(!$K6.exec($))throw TypeError("Invalid base64 string.");let Z=S20($,"base64");return new Uint8Array(Z.buffer,Z.byteOffset,Z.byteLength)},C20=($)=>{let Z=S20($,"utf8");return new Uint8Array(Z.buffer,Z.byteOffset,Z.byteLength/Uint8Array.BYTES_PER_ELEMENT)},rQ1=($)=>{let Z;if(typeof $==="string")Z=C20($);else Z=$;if(typeof Z!=="object"||typeof Z.byteOffset!=="number"||typeof Z.byteLength!=="number")throw Error("@smithy/util-base64: toBase64 encoder function only accepts string | Uint8Array.");return ml(Z.buffer,Z.byteOffset,Z.byteLength).toString("base64")};function ZK6($,Z,Q,X){return class Y extends Uint8Array{static fromString(G,J="utf-8"){if(typeof G==="string"){if(J==="base64")return Y.mutate(X(G));return Y.mutate(Z(G))}throw Error(`Unsupported conversion from ${typeof G} to Uint8ArrayBlobAdapter.`)}static mutate(G){return Object.setPrototypeOf(G,Y.prototype),G}transformToString(G="utf-8"){if(G==="base64")return Q(this);return $(this)}}}var Dd$=($)=>{if(typeof $==="string")return $;if(typeof $!=="object"||typeof $.byteOffset!=="number"||typeof $.byteLength!=="number")throw Error("@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.");return ml($.buffer,$.byteOffset,$.byteLength).toString("utf8")},xQ=Array.from({length:256},($,Z)=>Z.toString(16).padStart(2,"0"));function QK6($){if(typeof crypto<"u"&&typeof crypto.randomUUID==="function")return()=>crypto.randomUUID();return()=>{let Z=new Uint8Array(16);return $(Z),Z[6]=Z[6]&15|64,Z[8]=Z[8]&63|128,xQ[Z[0]]+xQ[Z[1]]+xQ[Z[2]]+xQ[Z[3]]+"-"+xQ[Z[4]]+xQ[Z[5]]+"-"+xQ[Z[6]]+xQ[Z[7]]+"-"+xQ[Z[8]]+xQ[Z[9]]+"-"+xQ[Z[10]]+xQ[Z[11]]+xQ[Z[12]]+xQ[Z[13]]+xQ[Z[14]]+xQ[Z[15]]}}var XK6=($,Z,Q=(X)=>X)=>$,YK6=($)=>{switch($){case"true":return!0;case"false":return!1;default:throw Error(`Unable to parse boolean value "${$}"`)}},GK6=($)=>{if($===null||$===void 0)return;if(typeof $==="number"){if($===0||$===1)Me.warn(k20(`Expected boolean, got ${typeof $}: ${$}`));if($===0)return!1;if($===1)return!0}if(typeof $==="string"){let Z=$.toLowerCase();if(Z==="false"||Z==="true")Me.warn(k20(`Expected boolean, got ${typeof $}: ${$}`));if(Z==="false")return!1;if(Z==="true")return!0}if(typeof $==="boolean")return $;throw TypeError(`Expected boolean, got ${typeof $}: ${$}`)},qe=($)=>{if($===null||$===void 0)return;if(typeof $==="string"){let Z=parseFloat($);if(!Number.isNaN(Z)){if(String(Z)!==String($))Me.warn(k20(`Expected number but observed string: ${$}`));return Z}}if(typeof $==="number")return $;throw TypeError(`Expected number, got ${typeof $}: ${$}`)},JK6=Math.ceil(340282346638528860000000000000000000000),M20=($)=>{let Z=qe($);if(Z!==void 0&&!Number.isNaN(Z)&&Z!==1/0&&Z!==-1/0){if(Math.abs(Z)>JK6)throw TypeError(`Expected 32-bit float, got ${$}`)}return Z},Ie=($)=>{if($===null||$===void 0)return;if(Number.isInteger($)&&!Number.isNaN($))return $;throw TypeError(`Expected integer, got ${typeof $}: ${$}`)},WK6=Ie,pQ1=($)=>sQ1($,32),nQ1=($)=>sQ1($,16),tQ1=($)=>sQ1($,8),sQ1=($,Z)=>{let Q=Ie($);if(Q!==void 0&&KK6(Q,Z)!==Q)throw TypeError(`Expected ${Z}-bit integer, got ${$}`);return Q},KK6=($,Z)=>{switch(Z){case 32:return Int32Array.of($)[0];case 16:return Int16Array.of($)[0];case 8:return Int8Array.of($)[0]}},HK6=($,Z)=>{if($===null||$===void 0){if(Z)throw TypeError(`Expected a non-null value for ${Z}`);throw TypeError("Expected a non-null value")}return $},wd$=($)=>{if($===null||$===void 0)return;if(typeof $==="object"&&!Array.isArray($))return $;let Z=Array.isArray($)?"array":typeof $;throw TypeError(`Expected object, got ${Z}: ${$}`)},FK6=($)=>{if($===null||$===void 0)return;if(typeof $==="string")return $;if(["boolean","number","bigint"].includes(typeof $))return Me.warn(k20(`Expected string, got ${typeof $}: ${$}`)),String($);throw TypeError(`Expected string, got ${typeof $}: ${$}`)},UK6=($)=>{if($===null||$===void 0)return;let Z=wd$($),Q=[];for(let X in Z)if(Z[X]!=null)Q.push(X);if(Q.length===0)throw TypeError("Unions must have exactly one non-null member. None were found.");if(Q.length>1)throw TypeError(`Unions must have exactly one non-null member. Keys ${Q} were not null.`);return Z},aQ1=($)=>{if(typeof $=="string")return qe(nl($));return qe($)},NK6=aQ1,Ld$=($)=>{if(typeof $=="string")return M20(nl($));return M20($)},BK6=/(-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)|(-?Infinity)|(NaN)/g,nl=($)=>{let Z=$.match(BK6);if(Z===null||Z[0].length!==$.length)throw TypeError("Expected real number, got implicit NaN");return parseFloat($)},eQ1=($)=>{if(typeof $=="string")return Ed$($);return qe($)},OK6=eQ1,DK6=eQ1,wK6=($)=>{if(typeof $=="string")return Ed$($);return M20($)},Ed$=($)=>{switch($){case"NaN":return NaN;case"Infinity":return 1/0;case"-Infinity":return-1/0;default:throw Error(`Unable to parse float value: ${$}`)}},jd$=($)=>{if(typeof $==="string")return Ie(nl($));return Ie($)},LK6=jd$,EK6=($)=>{if(typeof $==="string")return pQ1(nl($));return pQ1($)},il=($)=>{if(typeof $==="string")return nQ1(nl($));return nQ1($)},zd$=($)=>{if(typeof $==="string")return tQ1(nl($));return tQ1($)},k20=($)=>{return String(TypeError($).stack||$).split(`
2825
2825
  `).slice(0,5).filter((Z)=>!Z.includes("stackTraceWarning")).join(`
2826
2826
  `)},Me={warn:console.warn},jK6=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],$X1=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function zK6($){let Z=$.getUTCFullYear(),Q=$.getUTCMonth(),X=$.getUTCDay(),Y=$.getUTCDate(),G=$.getUTCHours(),J=$.getUTCMinutes(),W=$.getUTCSeconds(),K=Y<10?`0${Y}`:`${Y}`,H=G<10?`0${G}`:`${G}`,F=J<10?`0${J}`:`${J}`,U=W<10?`0${W}`:`${W}`;return`${jK6[X]}, ${K} ${$X1[Q]} ${Z} ${H}:${F}:${U} GMT`}var PK6=new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?[zZ]$/),AK6=($)=>{if($===null||$===void 0)return;if(typeof $!=="string")throw TypeError("RFC-3339 date-times must be expressed as strings");let Z=PK6.exec($);if(!Z)throw TypeError("Invalid RFC-3339 date-time value");let[Q,X,Y,G,J,W,K,H]=Z,F=il(pl(X)),U=eH(Y,"month",1,12),N=eH(G,"day",1,31);return Te(F,U,N,{hours:J,minutes:W,seconds:K,fractionalMilliseconds:H})},TK6=new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?(([-+]\d{2}\:\d{2})|[zZ])$/),RK6=($)=>{if($===null||$===void 0)return;if(typeof $!=="string")throw TypeError("RFC-3339 date-times must be expressed as strings");let Z=TK6.exec($);if(!Z)throw TypeError("Invalid RFC-3339 date-time value");let[Q,X,Y,G,J,W,K,H,F]=Z,U=il(pl(X)),N=eH(Y,"month",1,12),B=eH(G,"day",1,31),O=Te(U,N,B,{hours:J,minutes:W,seconds:K,fractionalMilliseconds:H});if(F.toUpperCase()!="Z")O.setTime(O.getTime()-yK6(F));return O},qK6=new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/),IK6=new RegExp(/^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/),MK6=new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( [1-9]|\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? (\d{4})$/),kK6=($)=>{if($===null||$===void 0)return;if(typeof $!=="string")throw TypeError("RFC-7231 date-times must be expressed as strings");let Z=qK6.exec($);if(Z){let[Q,X,Y,G,J,W,K,H]=Z;return Te(il(pl(G)),dQ1(Y),eH(X,"day",1,31),{hours:J,minutes:W,seconds:K,fractionalMilliseconds:H})}if(Z=IK6.exec($),Z){let[Q,X,Y,G,J,W,K,H]=Z;return _K6(Te(SK6(G),dQ1(Y),eH(X,"day",1,31),{hours:J,minutes:W,seconds:K,fractionalMilliseconds:H}))}if(Z=MK6.exec($),Z){let[Q,X,Y,G,J,W,K,H]=Z;return Te(il(pl(H)),dQ1(X),eH(Y.trimLeft(),"day",1,31),{hours:G,minutes:J,seconds:W,fractionalMilliseconds:K})}throw TypeError("Invalid RFC-7231 date-time value")},VK6=($)=>{if($===null||$===void 0)return;let Z;if(typeof $==="number")Z=$;else if(typeof $==="string")Z=aQ1($);else if(typeof $==="object"&&$.tag===1)Z=$.value;else throw TypeError("Epoch timestamps must be expressed as floating point numbers or their string representation");if(Number.isNaN(Z)||Z===1/0||Z===-1/0)throw TypeError("Epoch timestamps must be valid, non-Infinite, non-NaN numerics");return new Date(Math.round(Z*1000))},Te=($,Z,Q,X)=>{let Y=Z-1;return fK6($,Y,Q),new Date(Date.UTC($,Y,Q,eH(X.hours,"hour",0,23),eH(X.minutes,"minute",0,59),eH(X.seconds,"seconds",0,60),xK6(X.fractionalMilliseconds)))},SK6=($)=>{let Z=new Date().getUTCFullYear(),Q=Math.floor(Z/100)*100+il(pl($));if(Q<Z)return Q+100;return Q},CK6=1576800000000,_K6=($)=>{if($.getTime()-new Date().getTime()>CK6)return new Date(Date.UTC($.getUTCFullYear()-100,$.getUTCMonth(),$.getUTCDate(),$.getUTCHours(),$.getUTCMinutes(),$.getUTCSeconds(),$.getUTCMilliseconds()));return $},dQ1=($)=>{let Z=$X1.indexOf($);if(Z<0)throw TypeError(`Invalid month: ${$}`);return Z+1},vK6=[31,28,31,30,31,30,31,31,30,31,30,31],fK6=($,Z,Q)=>{let X=vK6[Z];if(Z===1&&bK6($))X=29;if(Q>X)throw TypeError(`Invalid day for ${$X1[Z]} in ${$}: ${Q}`)},bK6=($)=>{return $%4===0&&($%100!==0||$%400===0)},eH=($,Z,Q,X)=>{let Y=zd$(pl($));if(Y<Q||Y>X)throw TypeError(`${Z} must be between ${Q} and ${X}, inclusive`);return Y},xK6=($)=>{if($===null||$===void 0)return 0;return Ld$("0."+$)*1000},yK6=($)=>{let Z=$[0],Q=1;if(Z=="+")Q=1;else if(Z=="-")Q=-1;else throw TypeError(`Offset direction, ${Z}, must be "+" or "-"`);let X=Number($.substring(1,3)),Y=Number($.substring(4,6));return Q*(X*60+Y)*60*1000},pl=($)=>{let Z=0;while(Z<$.length-1&&$.charAt(Z)==="0")Z++;if(Z===0)return $;return $.slice(Z)},Lf=function(Z){return Object.assign(new String(Z),{deserializeJSON(){return JSON.parse(String(Z))},toString(){return String(Z)},toJSON(){return String(Z)}})};Lf.from=($)=>{if($&&typeof $==="object"&&($ instanceof Lf||("deserializeJSON"in $)))return $;else if(typeof $==="string"||Object.getPrototypeOf($)===String.prototype)return Lf(String($));return Lf(JSON.stringify($))};Lf.fromObject=Lf.from;function gK6($){if($.includes(",")||$.includes('"'))$=`"${$.replace(/"/g,"\\\"")}"`;return $}var ZX1="(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)(?:[ne|u?r]?s?day)?",QX1="(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)",XX1="(\\d?\\d):(\\d{2}):(\\d{2})(?:\\.(\\d+))?",Pd$="(\\d?\\d)",Ad$="(\\d{4})",hK6=new RegExp(/^(\d{4})-(\d\d)-(\d\d)[tT](\d\d):(\d\d):(\d\d)(\.(\d+))?(([-+]\d\d:\d\d)|[zZ])$/),uK6=new RegExp(`^${ZX1}, ${Pd$} ${QX1} ${Ad$} ${XX1} GMT$`),lK6=new RegExp(`^${ZX1}, ${Pd$}-${QX1}-(\\d\\d) ${XX1} GMT$`),cK6=new RegExp(`^${ZX1} ${QX1} ( [1-9]|\\d\\d) ${XX1} ${Ad$}$`),dK6=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],mK6=($)=>{if($==null)return;let Z=NaN;if(typeof $==="number")Z=$;else if(typeof $==="string"){if(!/^-?\d*\.?\d+$/.test($))throw TypeError("parseEpochTimestamp - numeric string invalid.");Z=Number.parseFloat($)}else if(typeof $==="object"&&$.tag===1)Z=$.value;if(isNaN(Z)||Math.abs(Z)===1/0)throw TypeError("Epoch timestamps must be valid finite numbers.");return new Date(Math.round(Z*1000))},iK6=($)=>{if($==null)return;if(typeof $!=="string")throw TypeError("RFC3339 timestamps must be strings");let Z=hK6.exec($);if(!Z)throw TypeError(`Invalid RFC3339 timestamp format ${$}`);let[,Q,X,Y,G,J,W,,K,H]=Z;zN(X,1,12),zN(Y,1,31),zN(G,0,23),zN(J,0,59),zN(W,0,60);let F=new Date(Date.UTC(Number(Q),Number(X)-1,Number(Y),Number(G),Number(J),Number(W),Number(K)?Math.round(parseFloat(`0.${K}`)*1000):0));if(F.setUTCFullYear(Number(Q)),H.toUpperCase()!="Z"){let[,U,N,B]=/([+-])(\d\d):(\d\d)/.exec(H)||[void 0,"+",0,0],O=U==="-"?1:-1;F.setTime(F.getTime()+O*(Number(N)*60*60*1000+Number(B)*60*1000))}return F},pK6=($)=>{if($==null)return;if(typeof $!=="string")throw TypeError("RFC7231 timestamps must be strings.");let Z,Q,X,Y,G,J,W,K;if(K=uK6.exec($))[,Z,Q,X,Y,G,J,W]=K;else if(K=lK6.exec($))[,Z,Q,X,Y,G,J,W]=K,X=(Number(X)+1900).toString();else if(K=cK6.exec($))[,Q,Z,Y,G,J,W,X]=K;if(X&&J){let H=Date.UTC(Number(X),dK6.indexOf(Q),Number(Z),Number(Y),Number(G),Number(J),W?Math.round(parseFloat(`0.${W}`)*1000):0);zN(Z,1,31),zN(Y,0,23),zN(G,0,59),zN(J,0,60);let F=new Date(H);return F.setUTCFullYear(Number(X)),F}throw TypeError(`Invalid RFC7231 date-time value ${$}.`)};function zN($,Z,Q){let X=Number($);if(X<Z||X>Q)throw Error(`Value ${X} out of range [${Z}, ${Q}]`)}function nK6($,Z,Q){if(Q<=0||!Number.isInteger(Q))throw Error("Invalid number of delimiters ("+Q+") for splitEvery.");let X=$.split(Z);if(Q===1)return X;let Y=[],G="";for(let J=0;J<X.length;J++){if(G==="")G=X[J];else G+=Z+X[J];if((J+1)%Q===0)Y.push(G),G=""}if(G!=="")Y.push(G);return Y}var tK6=($)=>{let Z=$.length,Q=[],X=!1,Y=void 0,G=0;for(let J=0;J<Z;++J){let W=$[J];switch(W){case'"':if(Y!=="\\")X=!X;break;case",":if(!X)Q.push($.slice(G,J)),G=J+1;break}Y=W}return Q.push($.slice(G)),Q.map((J)=>{J=J.trim();let W=J.length;if(W<2)return J;if(J[0]==='"'&&J[W-1]==='"')J=J.slice(1,W-1);return J.replace(/\\"/g,'"')})},Wd$=/^-?\d*(\.\d+)?$/;class _20{string;type;constructor($,Z){if(this.string=$,this.type=Z,!Wd$.test($))throw Error('@smithy/core/serde - NumericValue must only contain [0-9], at most one decimal point ".", and an optional negation prefix "-".')}toString(){return this.string}static[Symbol.hasInstance]($){if(!$||typeof $!=="object")return!1;let Z=$;return _20.prototype.isPrototypeOf($)||Z.type==="bigDecimal"&&Wd$.test(Z.string)}}function oK6($){return new _20(String($),"bigDecimal")}var Td$={},oQ1={};for(let $=0;$<256;$++){let Z=$.toString(16).toLowerCase();if(Z.length===1)Z=`0${Z}`;Td$[$]=Z,oQ1[Z]=$}function rK6($){if($.length%2!==0)throw Error("Hex encoded strings must have an even number length");let Z=new Uint8Array($.length/2);for(let Q=0;Q<$.length;Q+=2){let X=$.slice(Q,Q+2).toLowerCase();if(X in oQ1)Z[Q/2]=oQ1[X];else throw Error(`Cannot decode unrecognized sequence ${X} as hexadecimal`)}return Z}function Rd$($){let Z="";for(let Q=0;Q<$.byteLength;Q++)Z+=Td$[$[Q]];return Z}var sK6=($)=>{if(!$)return 0;if(typeof $==="string")return Buffer.byteLength($);else if(typeof $.byteLength==="number")return $.byteLength;else if(typeof $.size==="number")return $.size;else if(typeof $.start==="number"&&typeof $.end==="number")return $.end+1-$.start;else if($ instanceof cQ1.ReadStream){if($.path!=null)return cQ1.lstatSync($.path).size;else if(typeof $.fd==="number")return cQ1.fstatSync($.fd).size}throw Error(`Body Length computation failed for ${$}`)},qd$=($)=>{if(typeof $==="string")return C20($);if(ArrayBuffer.isView($))return new Uint8Array($.buffer,$.byteOffset,$.byteLength/Uint8Array.BYTES_PER_ELEMENT);return new Uint8Array($)},Id$=($,Z)=>(Q,X)=>async(Y)=>{let{response:G}=await Q(Y);try{let J=await Z(G,$);return{response:G,output:J}}catch(J){if(Object.defineProperty(J,"$response",{value:G,enumerable:!1,writable:!1,configurable:!1}),!("$metadata"in J)){try{J.message+=`
2827
2827
  Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.`}catch(K){if(!X.logger||X.logger?.constructor?.name==="NoOpLogger")console.warn("Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.");else X.logger?.warn?.("Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.")}if(typeof J.$responseBodyText<"u"){if(J.$response)J.$response.body=J.$responseBodyText}try{if(aW6.HttpResponse.isInstance(G)){let{headers:K={}}=G,H=Object.entries(K);J.$metadata={httpStatusCode:G.statusCode,requestId:mQ1(/^x-[\w-]+-request-?id$/,H),extendedRequestId:mQ1(/^x-[\w-]+-id-2$/,H),cfId:mQ1(/^x-[\w-]+-cf-id$/,H)}}}catch(K){}}throw J}},mQ1=($,Z)=>{return(Z.find(([Q])=>{return Q.match($)})||[void 0,void 0])[1]},Md$=($,Z)=>(Q,X)=>async(Y)=>{let G=$,J=X.endpointV2?async()=>eW6.toEndpointV1(X.endpointV2):G.endpoint;if(!J)throw Error("No valid endpoint provider available.");let W=await Z(Y.input,{...$,endpoint:J});return Q({...Y,request:W})},kd$={name:"deserializerMiddleware",step:"deserialize",tags:["DESERIALIZER"],override:!0},Vd$={name:"serializerMiddleware",step:"serialize",tags:["SERIALIZER"],override:!0};function aK6($,Z,Q){return{applyToStack:(X)=>{X.add(Id$($,Q),kd$),X.add(Md$($,Z),Vd$)}}}class Sd${algorithmIdentifier;secret;hash;constructor($,Z){this.algorithmIdentifier=$,this.secret=Z,this.reset()}update($,Z){this.hash.update(qd$(Kd$($,Z)))}digest(){return Promise.resolve(this.hash.digest())}reset(){this.hash=this.secret?iQ1.createHmac(this.algorithmIdentifier,Kd$(this.secret)):iQ1.createHash(this.algorithmIdentifier)}}function Kd$($,Z){if(Buffer.isBuffer($))return $;if(typeof $==="string")return S20($,Z);if(ArrayBuffer.isView($))return ml($.buffer,$.byteOffset,$.byteLength);return ml($)}var Cd$=class extends aH.Duplex{expectedChecksum;checksumSourceLocation;checksum;source;base64Encoder;pendingCallback=null;constructor({expectedChecksum:Z,checksum:Q,source:X,checksumSourceLocation:Y,base64Encoder:G}){super();if(typeof X.pipe==="function")this.source=X;else throw Error(`@smithy/util-stream: unsupported source type ${X?.constructor?.name??X} in ChecksumStream.`);this.base64Encoder=G??rQ1,this.expectedChecksum=Z,this.checksum=Q,this.checksumSourceLocation=Y,this.source.pipe(this)}_read(Z){if(this.pendingCallback){let Q=this.pendingCallback;this.pendingCallback=null,Q()}}_write(Z,Q,X){try{if(this.checksum.update(Z),!this.push(Z)){this.pendingCallback=X;return}}catch(Y){return X(Y)}return X()}async _final(Z){try{let Q=await this.checksum.digest(),X=this.base64Encoder(Q);if(this.expectedChecksum!==X)return Z(Error(`Checksum mismatch: expected "${this.expectedChecksum}" but received "${X}" in response header "${this.checksumSourceLocation}".`))}catch(Q){return Z(Q)}return this.push(null),Z()}},PN=($)=>typeof ReadableStream==="function"&&($?.constructor?.name===ReadableStream.name||$ instanceof ReadableStream),_d$=($)=>{return typeof Blob==="function"&&($?.constructor?.name===Blob.name||$ instanceof Blob)},eK6=($)=>new TextEncoder().encode($),vd$="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Hd$=Object.entries(vd$).reduce(($,[Z,Q])=>{return $[Q]=Number(Z),$},{}),$H6=vd$.split(""),cl=6,Re=8,ZH6=63;function fd$($){let Z;if(typeof $==="string")Z=eK6($);else Z=$;let Q=typeof Z==="object"&&typeof Z.length==="number",X=typeof Z==="object"&&typeof Z.byteOffset==="number"&&typeof Z.byteLength==="number";if(!Q&&!X)throw Error("@smithy/util-base64: toBase64 encoder function only accepts string | Uint8Array.");let Y="";for(let G=0;G<Z.length;G+=3){let J=0,W=0;for(let H=G,F=Math.min(G+3,Z.length);H<F;H++)J|=Z[H]<<(F-H-1)*Re,W+=Re;let K=Math.ceil(W/cl);J<<=K*cl-W;for(let H=1;H<=K;H++){let F=(K-H)*cl;Y+=$H6[(J&ZH6<<F)>>F]}Y+="==".slice(0,4-K)}return Y}var QH6=typeof ReadableStream==="function"?ReadableStream:function(){};class bd$ extends QH6{}var XH6=({expectedChecksum:$,checksum:Z,source:Q,checksumSourceLocation:X,base64Encoder:Y})=>{if(!PN(Q))throw Error(`@smithy/util-stream: unsupported source type ${Q?.constructor?.name??Q} in ChecksumStream.`);let G=Y??fd$;if(typeof TransformStream!=="function")throw Error("@smithy/util-stream: unable to instantiate ChecksumStream because API unavailable: ReadableStream/TransformStream.");let J=new TransformStream({start(){},async transform(K,H){Z.update(K),H.enqueue(K)},async flush(K){let H=await Z.digest(),F=G(H);if($!==F){let U=Error(`Checksum mismatch: expected "${$}" but received "${F}" in response header "${X}".`);K.error(U)}else K.terminate()}});Q.pipeThrough(J);let W=J.readable;return Object.setPrototypeOf(W,bd$.prototype),W};function YH6($){if(typeof ReadableStream==="function"&&PN($.source))return XH6($);return new Cd$($)}class V20{allocByteArray;byteLength=0;byteArrays=[];constructor($){this.allocByteArray=$}push($){this.byteArrays.push($),this.byteLength+=$.byteLength}flush(){if(this.byteArrays.length===1){let Q=this.byteArrays[0];return this.reset(),Q}let $=this.allocByteArray(this.byteLength),Z=0;for(let Q=0;Q<this.byteArrays.length;++Q){let X=this.byteArrays[Q];$.set(X,Z),Z+=X.byteLength}return this.reset(),$}reset(){this.byteArrays=[],this.byteLength=0}}function GH6($,Z,Q){let X=$.getReader(),Y=!1,G=0,J=["",new V20((H)=>new Uint8Array(H))],W=-1,K=async(H)=>{let{value:F,done:U}=await X.read(),N=F;if(U){if(W!==-1){let B=dl(J,W);if(vw(B)>0)H.enqueue(B)}H.close()}else{let B=yd$(N,!1);if(W!==B){if(W>=0)H.enqueue(dl(J,W));W=B}if(W===-1){H.enqueue(N);return}let O=vw(N);G+=O;let w=vw(J[W]);if(O>=Z&&w===0)H.enqueue(N);else{let L=xd$(J,W,N);if(!Y&&G>Z*2)Y=!0,Q?.warn(`@smithy/util-stream - stream chunk size ${O} is below threshold of ${Z}, automatically buffering.`);if(L>=Z)H.enqueue(dl(J,W));else await K(H)}}};return new ReadableStream({pull:K})}function xd$($,Z,Q){switch(Z){case 0:return $[0]+=Q,vw($[0]);case 1:case 2:return $[Z].push(Q),vw($[Z])}}function dl($,Z){switch(Z){case 0:let Q=$[0];return $[0]="",Q;case 1:case 2:return $[Z].flush()}throw Error(`@smithy/util-stream - invalid index ${Z} given to flush()`)}function vw($){return $?.byteLength??$?.length??0}function yd$($,Z=!0){if(Z&&typeof Buffer<"u"&&$ instanceof Buffer)return 2;if($ instanceof Uint8Array)return 1;if(typeof $==="string")return 0;return-1}function JH6($,Z,Q){if(PN($))return GH6($,Z,Q);let X=new aH.Readable({read(){}}),Y=!1,G=0,J=["",new V20((K)=>new Uint8Array(K)),new V20((K)=>Buffer.from(new Uint8Array(K)))],W=-1;return $.on("data",(K)=>{let H=yd$(K,!0);if(W!==H){if(W>=0)X.push(dl(J,W));W=H}if(W===-1){X.push(K);return}let F=vw(K);G+=F;let U=vw(J[W]);if(F>=Z&&U===0)X.push(K);else{let N=xd$(J,W,K);if(!Y&&G>Z*2)Y=!0,Q?.warn(`@smithy/util-stream - stream chunk size ${F} is below threshold of ${Z}, automatically buffering.`);if(N>=Z)X.push(dl(J,W))}}),$.on("end",()=>{if(W!==-1){let K=dl(J,W);if(vw(K)>0)X.push(K)}X.push(null)}),X}var WH6=($,Z)=>{let{base64Encoder:Q,bodyLengthChecker:X,checksumAlgorithmFn:Y,checksumLocationName:G,streamHasher:J}=Z,W=Q!==void 0&&X!==void 0&&Y!==void 0&&G!==void 0&&J!==void 0,K=W?J(Y,$):void 0,H=$.getReader();return new ReadableStream({async pull(F){let{value:U,done:N}=await H.read();if(N){if(F.enqueue(`0\r
@@ -2926,7 +2926,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
2926
2926
  ${G.join(`
2927
2927
  `)}`:Y}function Jj6($){let Z=new Set;for(let Q of $)for(let X of Q.split(`
2928
2928
  `)){let Y=X.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var Ln$=200,rE6=12,aE6,$j6=300,wR0=3;var kY1=D(()=>{tZ();DR0();aE6={aheadBy:0,behindBy:0,files:[]}});function Kj6($){if(!$||$.includes(".."))return!1;return Wj6.test($)}function jn$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!Kj6(Z))return null;let{__resolveType:Q,...X}=$;return{resolveType:Z,payload:X}}function zn$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Wj6;var Pn$=D(()=>{Wj6=/^[\w./@-]+$/});function $00($,Z){let Q=$?.githubRepo;if(!Q?.owner||!Q?.name)return null;if(!Q.connectionId)return Q;if(!Z.includes(Q.connectionId))return null;return Q}async function Tn$($,Z,Q,X){let Y=$.organization?.id;if(!Y)throw new gw(wZ);let G=await GD($.storage,Y,X);if(G&&await EU($.storage,G)){let F=await tK($,G,{forceRefresh:!0}).catch((U)=>{throw new gw(U instanceof Error?U.message:wZ)});await An$($,Z,Q,F);return}let J=X.connectionId??G?.legacyConnectionId;if(!J)throw new gw("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await gg({ctx:$,connectionId:J,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:wZ;throw new gw(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await oK(J,X.owner,X.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=p4$(F instanceof Error?F.message:String(F));throw U?new gw(N):F});await An$($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function An$($,Z,Q,X){let{cloneUrl:Y,gitUserName:G,gitUserEmail:J}=X,W=Yc($),K=await Z.proxyDaemonRequest(Q,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Y},identity:{userName:G,userEmail:J}},...W?{operator:W}:{}})});if(!K.ok){let H=await bD(K,Hj6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var Hj6=10485760,gw;var VY1=D(()=>{LJ();JR0();Po();vQ0();Dt();tZ();gw=class gw extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function Uj6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!Fj6.test(Z))throw Error(`Invalid branch name: ${$}`)}function If($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Bj6)])}async function Dj6($,Z){let Q=$.var.studioContext,X=XH(Z.branch),Y=$.req.query("thread")??X,G=Y&&Y===X?Z.branchThread:Y?await Q.storage.threads.get(Y).catch(()=>null):null,J=G?.virtual_mcp_id===Z.virtualMcpId?G:null,W=R_(J?.metadata?.runtime);if(W)return W;let K=AL0(Z.virtualMcpMetadata),H=K==="cms"?await KY1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!J&&(H==="gone"||H==="alive"&&K==="cms");if(U&&J)Ao(Q,J.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:H,resolved:F,stamped:U});return F}async function wj6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await EX($.var.studioContext)}catch{return null}}function Mf($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Hc($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),X=$.var.studioContext,Y=$00(Z,Q);if(!Y)throw new A1({provider:"github",status:404,message:"Project has no GitHub repository"});let G=n(X);return xg(X,G.id,Y)}function SY1($,Z){let Q=Z instanceof Error?Z.message:String(Z),X=f8$(Z);if(X!==void 0)return $.json({error:Q},429,{...N5,...X===null?{}:{"Retry-After":String(Math.ceil(X/1000))}});if(Z instanceof x5)return $.json({error:Q},409,N5);let Y=zJ(Z);if(Y!==null){let G=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},G,N5)}return $.json({error:Q},502,N5)}async function In$($,Z,Q){let X;try{X=await fetch(Z,Q)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await X.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:X.status,headers:{"content-type":X.headers.get("content-type")??"application/json"}})}async function Mn$($){try{let Z=await Hc($),Q=await LR0(Z,$.get("vmClaim").branch);return $.json(Q,200,N5)}catch(Z){return SY1($,Z)}}function Z00($,Z){let X=(zR0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=X.catch(()=>{});return zR0.set($,Y),Y.finally(()=>{if(zR0.get($)===Y)zR0.delete($)}),X}async function G7($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,N5);let X=Q?.runner??Mf($);if(X instanceof Response)return X;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=Q?.method??"POST",K=null,H=new Headers;if(Q?.jsonBody!==void 0)K=Q.jsonBody,H.set("content-type","application/json");else if(Q?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=Q?.signal,U={method:W,headers:H,body:K,...F?{signal:F}:{}},N=async()=>{let B=await X.proxyDaemonRequest(Y,Z,U);if(Q?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await X.adoptLiveClaim({userId:G,projectRef:J},Y))B=await X.proxyDaemonRequest(Y,Z,U);if(B.status===404){try{await B.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...N5}})}}let O=await B.text(),w=Q?.redactRepoDir?Lj6(O):O,L=B.headers.get("content-type")??"application/json";return new Response(w,{status:B.status,headers:{"content-type":L,...N5}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((w,L)=>{if(F.aborted)return L(F.reason);F.addEventListener("abort",()=>L(F.reason),{once:!0})})])}return await N()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function Lj6($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function PR0($,Z,Q,X="GET",Y){let G=await $.proxyDaemonRequest(Z,Q,{method:X,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim(Y,Z))G=await $.proxyDaemonRequest(Z,Q,{method:X,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function Ej6($){return kn$.includes($)}var Fj6,Rn$=524288,Nj6=65536,Bj6=1e4,qn$=2000,Oj6,zR0,N5,kn$,Vn$=()=>{let $=new Q1;$.use("/:virtualMcpId/:branch/*",Oj6),$.post("/:virtualMcpId/:branch/write",(Q)=>G7(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:If(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>G7(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:If(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>G7(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:If(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>G7(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:If(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>G7(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:If(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>G7(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:If(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>G7(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:If(Q)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Q)=>{let X=Q.req.param("script");if(!X)return Q.json({error:"missing script name"},400);return G7(Q,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Q)=>{let X=Q.req.param("script");if(!X)return Q.json({error:"missing script name"},400);return G7(Q,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>G7(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>G7(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let X=Q.req.param("step");if(!X||!Ej6(X))return Q.json({error:`step must be one of: ${kn$.join(", ")}`},400);let Y=Q.get("vmClaim"),G=await KY1(Q.var.studioContext,{claimName:Y.claimName})==="gone"?null:await wj6(Q);if(!G)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,N5);if(X==="start"){let J=n(Q.var.studioContext),W=zh(Y.virtualMcpMetadata);try{await EL0({ctx:Q.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return Q.json({error:`Failed to push env to daemon: ${H}`},502)}}return G7(Q,`/_sandbox/setup/${X}`,{signal:Q.req.raw.signal,map404to410:!0,runner:G})}),$.get("/:virtualMcpId/:branch/events",(Q)=>{let X=Q.get("vmClaim");if(!X.runner)return MN(Q,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return kp$(Q,{ctx:Q.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Mn$(Q);return Z(Q)});let Z=(Q)=>G7(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(qn$)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Mn$(Q);return G7(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(qn$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(Q)=>{let X=Q.get("vmClaim");if(X.runtime==="cms")try{let Y=await Q.req.json().catch(()=>({})),G=await Hc(Q),J=await ER0(G,X.branch,Y.base);return Q.json(J,200,N5)}catch(Y){return SY1(Q,Y)}return G7(Q,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Q.json({ok:!0},200,N5);let X=Mf(Q);if(X instanceof Response)return X;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=Q.get("vmClaim"),W=Q.var.studioContext;return Z00(Y,async()=>{try{await HY1(W,X,Y);let K=$00(G,J);if(K)await Tn$(W,X,Y,K)}catch(K){if(K instanceof gw)return Q.json({error:K.message},403,N5);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,N5)}return G7(Q,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(Q)=>{let X=Q.get("vmClaim");if(X.runtime==="cms")return Z00(X.claimName,async()=>{let Y=await Q.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return Q.json({error:"filepaths is required"},400,N5);try{let J=await Hc(Q);return await En$(J,X.branch,G),Q.json({ok:!0},200,N5)}catch(J){let W=zJ(J)===409||J instanceof x5?409:502,K=J instanceof Error?J.message:String(J);return Q.json({error:K},W,N5)}});return Z00(X.claimName,()=>G7(Q,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Q)=>{let X=Q.get("vmClaim");if(X.runtime==="cms")return Z00(X.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await Hc(Q),H=W.base??await K.getDefaultBranch();return await jR0(K,X.branch,H),Q.json({ok:!0},200,N5)}catch(W){return SY1(Q,W)}});let Y=Mf(Q);if(Y instanceof Response)return Y;let{claimName:G}=Q.get("vmClaim"),J=Q.var.studioContext;return Z00(G,async()=>{try{await HY1(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,N5)}return G7(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",Z9({maxSize:Rn$,onError:(Q)=>Q.json({error:"Payload too large"},413,N5)}),async(Q)=>{let X=Q.get("vmClaim"),Y=null;if(X.runtime!=="cms"){let H=Mf(Q);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=X,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=NY1(F)&&N?[F,U]:Y?await Promise.all([PR0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),PR0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Hc(Q);return Promise.all([LR0(L,X.branch),ER0(L,X.branch)])})(),w=await vp$(K,B,O);return Q.json(w,200,N5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,N5);return Q.json({error:F},502,N5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",Z9({maxSize:Rn$,onError:(Q)=>Q.json({error:"Payload too large"},413,N5)}),async(Q)=>{let X=Q.get("vmClaim"),Y=null;if(X.runtime!=="cms"){let H=Mf(Q);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=X,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=NY1(F)&&N?[F,U]:Y?await Promise.all([PR0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),PR0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Hc(Q);return Promise.all([LR0(L,X.branch),ER0(L,X.branch)])})(),w=await bp$(K,B,O,typeof H.language==="string"?H.language:void 0);return Q.json(w,200,N5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,N5);return Q.json({error:F},502,N5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let X=Mf(Q);if(X instanceof Response)return X;let{claimName:Y}=Q.get("vmClaim"),G=Q.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return Q.json({error:"Path not allowed"},403);let J;try{J=await X.getPreviewUrl(Y)}catch{return Q.json({error:"Preview not available"},502)}if(!J)return Q.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,"");return In$(Q,`${W}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",Z9({maxSize:Nj6,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let X=Mf(Q);if(X instanceof Response)return X;let{claimName:Y}=Q.get("vmClaim"),G;try{G=await X.getPreviewUrl(Y)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let J;try{J=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return Q.json({error:"Invalid JSON body"},400);let W=jn$(J);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=zn$(G,W.resolveType);return In$(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var Sn$=D(()=>{u$();rH();Xc();WY1();Lo();qp$();RJ();Ph();Ip$();FW();Mp$();Vp$();ar0();jo();DY1();xp$();tZ();lZ();kY1();Pn$();VY1();Fj6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Oj6=GR0(async($,Z)=>{let Q=$.var.studioContext;try{t(Q)}catch{return $.json({error:"Unauthorized"},401)}let X=n0(Q);if(!X)return $.json({error:"Unauthorized"},401);let Y;try{Y=n(Q)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{Uj6(J)}catch(w){let L=w instanceof Error?w.message:String(w);return $.json({error:L},400)}let W=await Q.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=ut({orgId:Y.id,virtualMcpId:G,branch:J}),H=await Bo0(Q,J),F=Oo0(H,X),U=Rp$({userId:F,projectRef:K}),N=W.metadata??null,B=await Dj6($,{claimName:U,branch:J,virtualMcpId:G,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:X,runner:null,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((w)=>w.connection_id)??[],runtime:B}),Z();let O;try{O=await EX(Q)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:X,runner:O,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((w)=>w.connection_id)??[],runtime:B}),Z()});zR0=new Map;N5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};kn$=["clone","install","start"]});function Cn$($,Z,Q){let X=CY1.get($);if(!X)X={pending:null,running:!1},CY1.set($,X);if(!X.pending)X.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=X.pending;Y.deps=Z;for(let[J,W]of Object.entries(Q.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of Q.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!X.running)zj6($,X);return G}async function zj6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let X=await Pj6(Q);for(let Y of Q.resolvers)Y(X)}catch(X){for(let Y of Q.rejecters)Y(X)}}}finally{if(Z.running=!1,!Z.pending)CY1.delete($)}}async function Pj6($){let{client:Z,branch:Q,packagePath:X}=$.deps,Y=new Map;for(let G=0;;G++){let J=await Kc(Z,Q),W=await Z.listDecofileEntries(J,X),K=qY1(W,X),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let O=IY1(K,N),w=`${JSON.stringify(B,null,2)}
2929
- `;await Bn$(Z.repo,w);let L=O[0]??`${OR0(X)}/${EY1(N)}.json`;H.push({path:L,content:w});let E=L.slice(L.lastIndexOf("/")+1,-5);F.set(L,{stem:E,content:w});for(let j of O.slice(1))H.push({path:j,deleted:!0}),F.delete(j)}for(let N of $.del)for(let B of IY1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return J;let U=X?`${X}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await On$(Z,F.values(),Y),{decofile:B,skipped:O}=te(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:XW(Z.repo),branch:Q,packagePath:X,blocks:O.map((w)=>w.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:Aj6($),expectedHead:J,changes:H});return N}catch(N){if(!(N instanceof x5)||G>=jj6-1)throw N;await z$(K7(2000,200,G,2,0.5))}}}function Aj6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let X=`chore(decofile): ${Q.join("; ")}`;return ut0(X,$.deps.coAuthor)}var jj6=3,CY1;var _n$=D(()=>{Jw0();KR0();y5();f8();tZ();DR0();CY1=new Map});import{createHmac as vn$,randomBytes as Tj6,timingSafeEqual as Rj6}from"crypto";function fn$(){if(AR0)return AR0;let $;try{let Z=M0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return AR0=$?Buffer.from($):Tj6(32),AR0}function _Y1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+qj6)/1000)},X=Buffer.from(JSON.stringify(Q)).toString("base64url"),Y=vn$("sha256",fn$()).update(X).digest("base64url");return`${X}.${Y}`}function bn$($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let X=$.slice(0,Q),Y=Buffer.from($.slice(Q+1)),G=Buffer.from(vn$("sha256",fn$()).update(X).digest("base64url"));if(Y.length!==G.length||!Rj6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(X,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var qj6=21600000,AR0=null;var xn$=D(()=>{E$()});import{z as Fc}from"zod";function Mj6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&Ij6.test($)}function ln$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Q00($){let Z=$.get("decofileScope");return xg($.var.studioContext,Z.organizationId,Z.githubRepo)}function X00($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof x5)return $.json({error:Q},409);let X=zJ(Z);if(X!==null){let Y=X===404?404:X===409||X===422?409:502;return $.json({error:Q},Y)}return $.json({error:Q},500)}function cn$(){let $=new Q1;return $.use("/:virtualMcpId/:branch",un$),$.use("/:virtualMcpId/:branch/*",un$),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await Q00(Z),Y=await Dn$(X,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!Q.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=_Y1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(ln$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(X){return X00(Z,X)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),X=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await Q00(Z),G=await Y.readFileAtRef(Q.branch,X);if(G===null){let J=await Y.getDefaultBranch();if(J!==Q.branch)G=await Y.readFileAtRef(J,X)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return X00(Z,Y)}}),$.patch("/:virtualMcpId/:branch",Vj6,async(Z)=>{let Q=Z.get("decofileScope"),X=Z.var.studioContext,Y=Sj6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{WR0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);if(LY1(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await Q00(Z),W=await Cn$(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:J,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Yc(X)},G),K=_Y1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:ln$(Z)})}catch(J){return X00(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await Q00(Z),Y=await X.getDefaultBranch();if(Y===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${Q.branch}`;try{let J;try{J=await X.mergeBranches(Y,Q.branch,G)}catch(W){if(zJ(W)!==409)throw W;await jR0(X,Q.branch,Y),J=await X.mergeBranches(Y,Q.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(zJ(J)===409)return Z.json({error:"merge-conflict"},409);if(zJ(J)===405){let K=await X.findOpenChangeRequest(Y,Q.branch)??await X.createChangeRequest({base:Y,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw J}}catch(X){return X00(Z,X)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await Q00(Z),Y=await X.getDefaultBranch();if(Y===Q.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([X.compare(Y,Q.branch),X.getBranch(Q.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W?.committedAt??null})}catch(G){if(zJ(G)===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(X){return X00(Z,X)}}),$}var Ij6,yn$=500,gn$=1048576,hn$=1024,kj6=8388608,Vj6,Sj6,un$;var dn$=D(()=>{er0();KR0();u$();rH();WY1();JR0();VY1();tZ();_n$();xn$();kY1();DR0();Ij6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Vj6=Z9({maxSize:kj6,onError:($)=>$.json({error:"Payload too large"},413)}),Sj6=Fc.object({set:Fc.record(Fc.string(),Fc.unknown()).optional(),delete:Fc.array(Fc.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=yn$,{message:`Patch cannot touch more than ${yn$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=gn$),{message:`Each block must be at most ${gn$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=hn$),{message:`Each block key must be at most ${hn$} characters`}),un$=GR0(async($,Z)=>{let Q=$.var.studioContext,X=Q.organization;if(!X)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!Mj6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=Q.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!bn$(B,{organizationId:X.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await Q.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!PL0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=$00(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:X.id,virtualMcpId:Y,branch:G,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:J}),Z()})});var mn$=($)=>{let Z=new Q1;if(Z.use("*",Uf),Z.use("*",Ic$),Z.route("/",E20()),Z.route("/",Jd$()),Z.route("/",rc$()),Z.route("/",Up$()),Z.route("/",Kp$()),Z.route("/",QR0()),Z.route("/tools",Ep$()),Z.route("/",Dp$()),Z.route("/",hi$({kvStorage:$.kvStorage})),Z.route("/",yi$()),Z.route("/fs",ei$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Vn$()),Z.route("/decofile",cn$()),Z.route("/",Gp$()),Z.route("/",Zp$()),Z.route("/deco-sites",z20()),Z.route("/hosting",hc$()),Z.route("/monitor",pc$()),Z.route("/sso",N20()),Z.route("/",XR0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",fc$()),$.mountDevAssets)Z.route("/dev-assets",R20({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",ah$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",Xp$()),Z.route("/mcp",Rj0()),Z.route("/mcp/self",ZR0()),Z.route("/mcp",Mj0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var in$=D(()=>{u$();Mc$();K20();bc$();MQ1();uc$();nc$();q20();Ee();AQ1();bQ1();gi$();ui$();$p$();Qp$();Tr();wQ1();kj0();$Y1();Yp$();Jp$();Hp$();Np$();wp$();QY1();jp$();XY1();qj0();Sn$();dn$()});function Cj6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var _j6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},pn$=()=>{let $=new Q1;return $.use("*",_j6),$.get("/",async(Z)=>{let Q=M0(),X=Q.decoSupabaseUrl,Y=Q.decoSupabaseServiceKey;if(!X||!Y)return Z.json({apps:[]});try{let G=await _Y(X,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Cj6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var nn$=D(()=>{u$();E$();ET0()});import{z as M1}from"zod";function QF($,Z="invalid_request_error",Q=null,X=null){return{error:{message:$,type:Z,param:Q,code:X}}}function cj6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),X=$.substring(Z+1);if(!Q||!X)return null;return{credentialId:Q,modelId:X}}function dj6($,Z,Q){try{return JSON.parse($)}catch{throw new rn$(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function mj6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let X of Q.tool_calls)Z[X.id]=X.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:dj6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let X=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:X,output:{type:"text",value:Q.content}}]}}})}function ij6($){let Z=$.map((Q)=>{let X=Q.function.parameters?LG(Q.function.parameters):LG({type:"object",properties:{}});return[Q.function.name,W$({description:Q.function.description,inputSchema:X})]});return Object.fromEntries(Z)}function pj6($){if(!$)return;return{openai:{response_format:$}}}function nj6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function tn$($,Z,Q,X,Y,G){let J={model:$,messages:Z,tools:Q,temperature:X.temperature,maxTokens:X.max_tokens,topP:X.top_p,frequencyPenalty:X.frequency_penalty,presencePenalty:X.presence_penalty,stopSequences:X.stop?Array.isArray(X.stop)?X.stop:[X.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function on$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var vj6=256,fj6,bj6,xj6,yj6,gj6,hj6,uj6,lj6,rn$,sn$,an$;var en$=D(()=>{S4();u$();Xc();GN();fj6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),bj6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),xj6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(bj6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),yj6=M1.object({type:M1.literal("text")}),gj6=M1.object({type:M1.literal("json_object")}),hj6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),uj6=M1.union([yj6,gj6,hj6]),lj6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(xj6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(fj6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:uj6.optional(),user:M1.string().optional()});rn$=class rn$ extends Error{constructor($){super($);this.name="MessageConversionError"}};sn$=new Q1;sn$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(QF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(QF("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(QF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let X=await $.req.json(),Y=lj6.safeParse(X);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(QF(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=cj6(G.model);if(!J)return $.json(QF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>tL(j.providerId));if(!E)return $.json(QF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(QF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=mj6(G.messages),N=G.tools?ij6(G.tools):void 0,B=pj6(G.response_format),O=nj6(),w=Math.floor(Date.now()/1000);if(G.stream)return MN($,async(L)=>{let E=tn$(F,U,N,G,B,$.req.raw.signal);try{let j=SD(E),z=!1,P=0,A="",q=async()=>{if(A.length===0)return;let k=A;A="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=vj6)await q()}else if(k.type==="tool-call"){await q();let M=P++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{},finish_reason:on$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=tn$(F,U,N,G,B,$.req.raw.signal),E=await kD(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:w,model:G.model,choices:[{index:0,message:j,finish_reason:on$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(X){let Y=X;if(Y.name==="AbortError")return $.json(QF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(QF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(QF(Y.message,"server_error"),500)}});an$=sn$});function tj6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function $t$(){let $=new Q1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),X=n0(Q);if(!X)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!WX(G))return Z.json({error:"Invalid site slug"},400);let J=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",X).execute(),W=[];for(let H of J){if(!H.slug||n9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(A$$(U)!==G)continue;if(!tj6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Zt$=D(()=>{u$();HU()});var Xt$;var Qt$=D(()=>{Xt$={name:"decocms",version:"4.344.3",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function sj6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??rj6}}var Yt$,rj6="https://ph.studio.decocms.com",Gt$;var Jt$=D(()=>{u$();kZ0();r_();C5();E$();WQ1();Qt$();Yt$=new Q1;Yt$.get("/",($)=>{let Z={version:Xt$.version,theme:it1(),...XU().logo&&{logo:XU().logo},...pU()&&{internalUrl:Bb1()},...M0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!M0().firecrawlApiKey,hostingEnabled:!!M0().controlplaneRestUrl&&!!M0().controlplaneServiceToken,hostingControlPlaneGa:M0().hostingControlPlaneGa,monitorEnabled:!!M0().clickhouseAnalyticsUrl&&!!M0().clickhouseAnalyticsPassword,monitorGa:M0().monitorGa,auth:bl$(),posthog:sj6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:U00()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Gt$=Yt$});function Uc($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function vY1($){return(Uc($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function Kt$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Uc($))}&sz=${Z}`}function Wt$($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let X=Q.slice(0,Z-1),Y=X.lastIndexOf(" ");return`${(Y>Z*0.6?X.slice(0,Y):X).trimEnd()}\u2026`}function Ht$($){let{brand:Z,domain:Q,score:X,verdict:Y}=$,G=typeof X==="number"?`${Z} commerce report \u2014 ${Math.round(X)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?Wt$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Wt$(`How does ${Q} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var kf,aj6,ej6,$z6,Zz6,Ft$;var Ut$=D(()=>{kf=c0.enum(["good","bad","neutral"]),aj6=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((Q)=>Q!==null&&typeof Q!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:kf.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),ej6=c0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},c0.array(aj6)),$z6={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},Zz6=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:kf.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:kf.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:kf.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:kf.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(ej6).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:kf.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:kf.optional()})).min(1)})]),Ft$=c0.object({...$z6,template:Zz6})});function TR0($){let Z=[],Q=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Ft$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),X=Q.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:X},slides:Q},drops:Z}}var fY1=D(()=>{Ut$()});import{join as Nt$}from"path";async function Xz6($){try{let Z=await fetch(`${xK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(Qz6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:X}=TR0(Q);if(!X.slides.length)return null;let Y=X.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:X.meta.brand?.trim()||vY1($),score:X.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function xG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function Yz6($,Z){let Q=Uc($),X=Z?.brand?.trim()||vY1(Q),Y=Kt$(Q,128),J=`${(M0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=Ht$({brand:X,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${X} commerce report by decocms`;return[`<title>${xG(W)}</title>`,`<meta name="description" content="${xG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${xG(W)}" />`,`<meta property="og:description" content="${xG(K)}" />`,`<meta property="og:url" content="${xG(J)}" />`,`<meta property="og:image" content="${xG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${xG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${xG(W)}" />`,`<meta name="twitter:description" content="${xG(K)}" />`,`<meta name="twitter:image" content="${xG(H)}" />`,`<meta name="twitter:image:alt" content="${xG(F)}" />`,`<link rel="canonical" href="${xG(J)}" />`,`<link rel="icon" href="${xG(Y)}" sizes="any" />`].join(`
2929
+ `;await Bn$(Z.repo,w);let L=O[0]??`${OR0(X)}/${EY1(N)}.json`;H.push({path:L,content:w});let E=L.slice(L.lastIndexOf("/")+1,-5);F.set(L,{stem:E,content:w});for(let j of O.slice(1))H.push({path:j,deleted:!0}),F.delete(j)}for(let N of $.del)for(let B of IY1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return J;let U=X?`${X}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await On$(Z,F.values(),Y),{decofile:B,skipped:O}=te(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:XW(Z.repo),branch:Q,packagePath:X,blocks:O.map((w)=>w.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:Aj6($),expectedHead:J,changes:H});return N}catch(N){if(!(N instanceof x5)||G>=jj6-1)throw N;await z$(K7(2000,200,G,2,0.5))}}}function Aj6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let X=`chore(decofile): ${Q.join("; ")}`;return ut0(X,$.deps.coAuthor)}var jj6=3,CY1;var _n$=D(()=>{Jw0();KR0();y5();f8();tZ();DR0();CY1=new Map});import{createHmac as vn$,randomBytes as Tj6,timingSafeEqual as Rj6}from"crypto";function fn$(){if(AR0)return AR0;let $;try{let Z=M0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return AR0=$?Buffer.from($):Tj6(32),AR0}function _Y1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+qj6)/1000)},X=Buffer.from(JSON.stringify(Q)).toString("base64url"),Y=vn$("sha256",fn$()).update(X).digest("base64url");return`${X}.${Y}`}function bn$($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let X=$.slice(0,Q),Y=Buffer.from($.slice(Q+1)),G=Buffer.from(vn$("sha256",fn$()).update(X).digest("base64url"));if(Y.length!==G.length||!Rj6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(X,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var qj6=21600000,AR0=null;var xn$=D(()=>{E$()});import{z as Fc}from"zod";function Mj6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&Ij6.test($)}function ln$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Q00($){let Z=$.get("decofileScope");return xg($.var.studioContext,Z.organizationId,Z.githubRepo)}function X00($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof x5)return $.json({error:Q},409);let X=zJ(Z);if(X!==null){let Y=X===404?404:X===409||X===422?409:502;return $.json({error:Q},Y)}return $.json({error:Q},500)}function cn$(){let $=new Q1;return $.use("/:virtualMcpId/:branch",un$),$.use("/:virtualMcpId/:branch/*",un$),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await Q00(Z),Y=await Dn$(X,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!Q.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=_Y1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(ln$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(X){return X00(Z,X)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),X=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await Q00(Z),G=await Y.readFileAtRef(Q.branch,X);if(G===null){let J=await Y.getDefaultBranch();if(J!==Q.branch)G=await Y.readFileAtRef(J,X)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return X00(Z,Y)}}),$.patch("/:virtualMcpId/:branch",Vj6,async(Z)=>{let Q=Z.get("decofileScope"),X=Z.var.studioContext,Y=Sj6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{WR0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);if(LY1(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await Q00(Z),W=await Cn$(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:J,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Yc(X)},G),K=_Y1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:ln$(Z)})}catch(J){return X00(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await Q00(Z),Y=await X.getDefaultBranch();if(Y===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${Q.branch}`;try{let J;try{J=await X.mergeBranches(Y,Q.branch,G)}catch(W){if(zJ(W)!==409)throw W;await jR0(X,Q.branch,Y),J=await X.mergeBranches(Y,Q.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(zJ(J)===409)return Z.json({error:"merge-conflict"},409);if(zJ(J)===405){let K=await X.findOpenChangeRequest(Y,Q.branch)??await X.createChangeRequest({base:Y,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw J}}catch(X){return X00(Z,X)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await Q00(Z),Y=await X.getDefaultBranch();if(Y===Q.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([X.compare(Y,Q.branch),X.getBranch(Q.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W?.committedAt??null})}catch(G){if(zJ(G)===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(X){return X00(Z,X)}}),$}var Ij6,yn$=500,gn$=1048576,hn$=1024,kj6=8388608,Vj6,Sj6,un$;var dn$=D(()=>{er0();KR0();u$();rH();WY1();JR0();VY1();tZ();_n$();xn$();kY1();DR0();Ij6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Vj6=Z9({maxSize:kj6,onError:($)=>$.json({error:"Payload too large"},413)}),Sj6=Fc.object({set:Fc.record(Fc.string(),Fc.unknown()).optional(),delete:Fc.array(Fc.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=yn$,{message:`Patch cannot touch more than ${yn$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=gn$),{message:`Each block must be at most ${gn$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=hn$),{message:`Each block key must be at most ${hn$} characters`}),un$=GR0(async($,Z)=>{let Q=$.var.studioContext,X=Q.organization;if(!X)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!Mj6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=Q.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!bn$(B,{organizationId:X.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await Q.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!PL0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=$00(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:X.id,virtualMcpId:Y,branch:G,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:J}),Z()})});var mn$=($)=>{let Z=new Q1;if(Z.use("*",Uf),Z.use("*",Ic$),Z.route("/",E20()),Z.route("/",Jd$()),Z.route("/",rc$()),Z.route("/",Up$()),Z.route("/",Kp$()),Z.route("/",QR0()),Z.route("/tools",Ep$()),Z.route("/",Dp$()),Z.route("/",hi$({kvStorage:$.kvStorage})),Z.route("/",yi$()),Z.route("/fs",ei$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Vn$()),Z.route("/decofile",cn$()),Z.route("/",Gp$()),Z.route("/",Zp$()),Z.route("/deco-sites",z20()),Z.route("/hosting",hc$()),Z.route("/monitor",pc$()),Z.route("/sso",N20()),Z.route("/",XR0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",fc$()),$.mountDevAssets)Z.route("/dev-assets",R20({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",ah$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",Xp$()),Z.route("/mcp",Rj0()),Z.route("/mcp/self",ZR0()),Z.route("/mcp",Mj0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var in$=D(()=>{u$();Mc$();K20();bc$();MQ1();uc$();nc$();q20();Ee();AQ1();bQ1();gi$();ui$();$p$();Qp$();Tr();wQ1();kj0();$Y1();Yp$();Jp$();Hp$();Np$();wp$();QY1();jp$();XY1();qj0();Sn$();dn$()});function Cj6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var _j6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},pn$=()=>{let $=new Q1;return $.use("*",_j6),$.get("/",async(Z)=>{let Q=M0(),X=Q.decoSupabaseUrl,Y=Q.decoSupabaseServiceKey;if(!X||!Y)return Z.json({apps:[]});try{let G=await _Y(X,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Cj6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var nn$=D(()=>{u$();E$();ET0()});import{z as M1}from"zod";function QF($,Z="invalid_request_error",Q=null,X=null){return{error:{message:$,type:Z,param:Q,code:X}}}function cj6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),X=$.substring(Z+1);if(!Q||!X)return null;return{credentialId:Q,modelId:X}}function dj6($,Z,Q){try{return JSON.parse($)}catch{throw new rn$(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function mj6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let X of Q.tool_calls)Z[X.id]=X.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:dj6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let X=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:X,output:{type:"text",value:Q.content}}]}}})}function ij6($){let Z=$.map((Q)=>{let X=Q.function.parameters?LG(Q.function.parameters):LG({type:"object",properties:{}});return[Q.function.name,W$({description:Q.function.description,inputSchema:X})]});return Object.fromEntries(Z)}function pj6($){if(!$)return;return{openai:{response_format:$}}}function nj6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function tn$($,Z,Q,X,Y,G){let J={model:$,messages:Z,tools:Q,temperature:X.temperature,maxTokens:X.max_tokens,topP:X.top_p,frequencyPenalty:X.frequency_penalty,presencePenalty:X.presence_penalty,stopSequences:X.stop?Array.isArray(X.stop)?X.stop:[X.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function on$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var vj6=256,fj6,bj6,xj6,yj6,gj6,hj6,uj6,lj6,rn$,sn$,an$;var en$=D(()=>{S4();u$();Xc();GN();fj6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),bj6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),xj6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(bj6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),yj6=M1.object({type:M1.literal("text")}),gj6=M1.object({type:M1.literal("json_object")}),hj6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),uj6=M1.union([yj6,gj6,hj6]),lj6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(xj6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(fj6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:uj6.optional(),user:M1.string().optional()});rn$=class rn$ extends Error{constructor($){super($);this.name="MessageConversionError"}};sn$=new Q1;sn$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(QF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(QF("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(QF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let X=await $.req.json(),Y=lj6.safeParse(X);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(QF(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=cj6(G.model);if(!J)return $.json(QF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>tL(j.providerId));if(!E)return $.json(QF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(QF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=mj6(G.messages),N=G.tools?ij6(G.tools):void 0,B=pj6(G.response_format),O=nj6(),w=Math.floor(Date.now()/1000);if(G.stream)return MN($,async(L)=>{let E=tn$(F,U,N,G,B,$.req.raw.signal);try{let j=SD(E),z=!1,P=0,A="",q=async()=>{if(A.length===0)return;let k=A;A="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=vj6)await q()}else if(k.type==="tool-call"){await q();let M=P++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{},finish_reason:on$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=tn$(F,U,N,G,B,$.req.raw.signal),E=await kD(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:w,model:G.model,choices:[{index:0,message:j,finish_reason:on$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(X){let Y=X;if(Y.name==="AbortError")return $.json(QF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(QF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(QF(Y.message,"server_error"),500)}});an$=sn$});function tj6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function $t$(){let $=new Q1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),X=n0(Q);if(!X)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!WX(G))return Z.json({error:"Invalid site slug"},400);let J=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",X).execute(),W=[];for(let H of J){if(!H.slug||n9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(A$$(U)!==G)continue;if(!tj6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Zt$=D(()=>{u$();HU()});var Xt$;var Qt$=D(()=>{Xt$={name:"decocms",version:"4.344.4",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function sj6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??rj6}}var Yt$,rj6="https://ph.studio.decocms.com",Gt$;var Jt$=D(()=>{u$();kZ0();r_();C5();E$();WQ1();Qt$();Yt$=new Q1;Yt$.get("/",($)=>{let Z={version:Xt$.version,theme:it1(),...XU().logo&&{logo:XU().logo},...pU()&&{internalUrl:Bb1()},...M0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!M0().firecrawlApiKey,hostingEnabled:!!M0().controlplaneRestUrl&&!!M0().controlplaneServiceToken,hostingControlPlaneGa:M0().hostingControlPlaneGa,monitorEnabled:!!M0().clickhouseAnalyticsUrl&&!!M0().clickhouseAnalyticsPassword,monitorGa:M0().monitorGa,auth:bl$(),posthog:sj6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:U00()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Gt$=Yt$});function Uc($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function vY1($){return(Uc($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function Kt$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Uc($))}&sz=${Z}`}function Wt$($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let X=Q.slice(0,Z-1),Y=X.lastIndexOf(" ");return`${(Y>Z*0.6?X.slice(0,Y):X).trimEnd()}\u2026`}function Ht$($){let{brand:Z,domain:Q,score:X,verdict:Y}=$,G=typeof X==="number"?`${Z} commerce report \u2014 ${Math.round(X)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?Wt$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Wt$(`How does ${Q} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var kf,aj6,ej6,$z6,Zz6,Ft$;var Ut$=D(()=>{kf=c0.enum(["good","bad","neutral"]),aj6=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((Q)=>Q!==null&&typeof Q!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:kf.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),ej6=c0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},c0.array(aj6)),$z6={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},Zz6=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:kf.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:kf.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:kf.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:kf.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(ej6).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:kf.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:kf.optional()})).min(1)})]),Ft$=c0.object({...$z6,template:Zz6})});function TR0($){let Z=[],Q=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Ft$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),X=Q.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:X},slides:Q},drops:Z}}var fY1=D(()=>{Ut$()});import{join as Nt$}from"path";async function Xz6($){try{let Z=await fetch(`${xK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(Qz6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:X}=TR0(Q);if(!X.slides.length)return null;let Y=X.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:X.meta.brand?.trim()||vY1($),score:X.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function xG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function Yz6($,Z){let Q=Uc($),X=Z?.brand?.trim()||vY1(Q),Y=Kt$(Q,128),J=`${(M0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=Ht$({brand:X,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${X} commerce report by decocms`;return[`<title>${xG(W)}</title>`,`<meta name="description" content="${xG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${xG(W)}" />`,`<meta property="og:description" content="${xG(K)}" />`,`<meta property="og:url" content="${xG(J)}" />`,`<meta property="og:image" content="${xG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${xG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${xG(W)}" />`,`<meta name="twitter:description" content="${xG(K)}" />`,`<meta name="twitter:image" content="${xG(H)}" />`,`<meta name="twitter:image:alt" content="${xG(F)}" />`,`<link rel="canonical" href="${xG(J)}" />`,`<link rel="icon" href="${xG(Y)}" sizes="any" />`].join(`
2930
2930
  `)}function Gz6($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
2931
2931
  </head>`)}function Bt$($){let Z=new Q1;return Z.get("/:domain/og.png",async(Q)=>{let X=Uc(Q.req.param("domain")),Y=async()=>{let G=$?Bun.file(Nt$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return Q.notFound();return Q.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${xK({})}/api/v2/public/diagnostics/${encodeURIComponent(X)}/og.png`,{signal:AbortSignal.timeout(Jz6)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return Q.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(Q)=>{let X=Q.req.param("domain"),Y=$?Nt$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return Q.notFound();let J=await G.text();try{let W=await Xz6(Uc(X)),K=Yz6(X,W);return Q.html(Gz6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(J)}}),Z}var Qz6=2500,Jz6=1e4;var Ot$=D(()=>{u$();fY1();eE();E$()});function Y00($,Z){return fetch(`${xK({})}${$}`,Z)}async function Wz6($,Z,Q){let X=new URLSearchParams;if(Z)X.set("pw",Z);if(Q)X.set("lang",Q);let Y=X.toString()?`?${X.toString()}`:"",G=await Y00(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=TR0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var Kz6,VN,Dt$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},wt$;var Lt$=D(()=>{u$();JG();eE();fY1();Kz6=new Set(["complete","errored","terminated","unknown"]),VN=new Q1;VN.use("*",async($,Z)=>{let Q=await Q8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});VN.use("/link-token/*",Dt$);VN.use("/suggest",Dt$);VN.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let Q=$.get("reportUser"),X=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await Wz6(Z,X,Y);if($.header("Cache-Control","private, no-store"),Q||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});VN.post("/run",async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let X=typeof Q.domain==="string"?Q.domain.trim():"";if(!X)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof Q.distinctId==="string"&&Q.distinctId.trim()&&Q.distinctId.length<=200?Q.distinctId.trim():void 0;try{let J=await Y00("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${aE({})}`},body:JSON.stringify({url:X,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});VN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await Y00(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${aE({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let Y=(await Q.json()).status??"unknown",G={done:Kz6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});VN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await Y00(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(Q.status===404)return $.json(null);if(!Q.ok)return $.json({error:`link token HTTP ${Q.status}`},502);return $.json(await Q.json())}catch{return $.json({error:"link token resolve failed"},502)}});VN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await Y00(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let X=await Q.json();return $.json({suggestions:Array.isArray(X.suggestions)?X.suggestions:[]})}catch{return $.json({suggestions:[]})}});wt$=VN});import{createHmac as Hz6,timingSafeEqual as Fz6}from"crypto";function jt$($,Z,Q,X=Date.now()){if(!Z||!Q)return!1;let Y,G=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let U=H.slice(0,F).trim(),N=H.slice(F+1).trim();if(U==="t")Y=N;else if(U==="v1")G.push(N)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(X/1000-J)>Uz6)return!1;let W=Hz6("sha256",Q).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&Fz6(K,F)})}function zt$($){let Z;try{Z=JSON.parse($)}catch{return null}let Q=Y3(Z),X=Y3(Y3(Q?.data)?.object);if(!Q||typeof Q.type!=="string"||!X)return null;return{id:XF(Q.id),type:Q.type,created:typeof Q.created==="number"?Q.created:void 0,livemode:typeof Q.livemode==="boolean"?Q.livemode:void 0,data:{object:X}}}function Pt$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function XF($){return typeof $==="string"?$:void 0}function Y3($){return typeof $==="object"&&$!==null?$:void 0}function RR0($){return typeof $==="number"?new Date($*1000):null}function yY1($){return XF($)??XF(Y3($)?.id)}function Nz6($){return yY1($.subscription)??XF(Y3(Y3($.parent)?.subscription_details)?.subscription)}function Bz6($){let Z=RR0($.current_period_end);if(Z)return Z;let Q=Y3($.items)?.data;if(!Array.isArray(Q))return null;let X=0;for(let Y of Q){let G=Y3(Y)?.current_period_end;if(typeof G==="number"&&G>X)X=G}return X>0?new Date(X*1000):null}function bY1($,Z){let Q=RR0($.created);return!!Q&&!!Z.lastStripeEventAt&&Q<Z.lastStripeEventAt}function xY1($,Z){let Q=RR0($.created);if(!Q)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>Q?void 0:Q}async function Oz6($,Z){let Q=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let X=XF(Y3(Q.metadata)?.orgId);if(!X)return{handled:!1,reason:"no orgId"};if(XF(Y3(Q.metadata)?.kind)==="topup"){if(Q.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(XF(Q.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=XF(Q.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:X}),{handled:!1,reason:"topup session without id"};let W=Number(Y3(Q.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:X,creditCents:Y3(Q.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:X,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(Q.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(XF(Q.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(X);if(!Y)return{handled:!1,reason:"unknown org"};let G=yY1(Q.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:X,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(bY1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(X,{stripeCustomerId:yY1(Q.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:xY1(Z,Y)}),{handled:!0,organizationId:X}}case"customer.subscription.updated":case"customer.subscription.deleted":{let X=XF(Q.id);if(!X)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(X);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&bY1(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Pt$(Q.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:Bz6(Q),...G&&{stripeSubscriptionId:null},lastStripeEventAt:xY1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let X=Nz6(Q);if(!X)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(X);if(!Y)return{handled:!1,reason:"unknown subscription"};if(bY1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:RR0(Q.period_end),lastStripeEventAt:xY1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function Dz6($,Z){if(!Z.handled||$.livemode===!1)return null;let Q=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:Pt$(Q.status),...typeof Q.cancel_at_period_end==="boolean"?{cancel_at_period_end:Q.cancel_at_period_end}:{}}};case"invoice.paid":if(Q.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function Et$($,Z){let Q=Dz6($,Z);if(!Q)return;ZG({event:Q.name,organizationId:Q.organizationId,...$.id?{uuid:er1(`stripe:${$.id}:${Q.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:Q.properties})}async function At$($){let Z=new _K(Z8().db),Q=await Oz6(Z,$);if(!(Q.handled&&Q.topUp))Et$($,Q);if(Q.handled&&Q.topUp)await FT$({organizationId:Q.organizationId,amountCents:Q.topUp.creditCents,referenceId:Q.topUp.referenceId}),Et$($,Q);if(!Q.handled&&Q.orphanSubscriptionId)try{await w8$(Q.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:Q.orphanSubscriptionId,eventId:$.id})}catch(X){if(!(X instanceof WG&&(X.status===400||X.status===404)))throw X}return Q}var Uz6=300;var Tt$=D(()=>{NJ();g4();FZ0();Pj();u81()});var wz6=1048576,gY1;var Rt$=D(()=>{u$();rH();E$();Tt$();gY1=new Q1;gY1.post("/webhook",Z9({maxSize:wz6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=M0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!jt$(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=zt$(Q);if(!Y)return $.json({error:"invalid payload"},400);let G=await At$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as Lz6}from"crypto";function zz6($,Z,Q){if(!Z?.startsWith("sha256="))return!1;let X=new Bun.CryptoHasher("sha256",Q).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==X.length)return!1;return Lz6(Buffer.from(Y),Buffer.from(X))}function Pz6($,Z){let Q=Z,X=Q?.repository?.name,Y=Q?.repository?.owner?.login;if(typeof X!=="string"||typeof Y!=="string")return[];let G=[];if($==="check_suite"){if(Q.action!=="completed")return[];let J=Q.check_suite?.pull_requests;for(let W of Array.isArray(J)?J:[]){let K=W?.number;if(typeof K==="number")G.push(K)}}else if($==="issue_comment"&&Q.issue?.pull_request){let J=Q.issue.number;if(typeof J==="number")G.push(J)}return[...new Set(G)].map((J)=>({repoOwner:Y,repoName:X,number:J}))}function qt$($){let Z=new Q1;return Z.post("/webhook",Z9({maxSize:Ez6,onError:(Q)=>Q.json({error:"payload too large"},413)}),async(Q)=>{let X=process.env.GITHUB_WEBHOOK_SECRET;if(!X)return Q.json({error:"github webhook not configured"},503);let Y=await Q.req.text();if(!zz6(Y,Q.req.header("x-hub-signature-256"),X))return Q.json({error:"invalid signature"},400);let G=Q.req.header("x-github-event");if(G!=="push"&&!jz6.has(G??""))return Q.json({ok:!0,ignored:"event"});let J;try{J=JSON.parse(Y)}catch{return Q.json({error:"invalid payload"},400)}if(G==="push"){let H=J.ref,F=J.repository?.full_name;if(!H||!F)return Q.json({ok:!0,ignored:"shape"});let N=(await Fo0())?.markTenantPoolsDirty(F,H)??[];return Q.json({ok:!0,pools:N})}let W=Pz6(G??"",J);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await Az6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function Az6($,Z){let Q=0;for(let X of Z){let Y=$.taskBoard(),G;try{G=await Y.findPrLinks(X)}catch(J){console.error("[github-webhook] pr link lookup failed:",J);continue}for(let J of G)try{let W=await Y.getById(J.taskBoardItemId,J.organizationId),K=W?await $.contextFactory()(J.organizationId,W.assignedBy??W.createdBy):null;if(!K)continue;if(await lB$(K,J.organizationId,J.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${J.taskBoardItemId}:`,W)}}return Q}var Ez6=5242880,jz6;var It$=D(()=>{u$();rH();FW();AZ();jz6=new Set(["check_suite","issue_comment"])});function Mt$($){let Z=new EN($.db,new oQ($.encryptionKey)),Q=new Q1;return Q.get("/attachments/:token",async(X)=>{let Y=NN$(X.req.param("token"));if(!Y)return X.json({error:"Invalid or expired link"},404);let G=await Z.getByOrg(Y.organizationId);if(!G)return X.json({error:"Jira is not connected"},404);let W=await new zG(G.siteUrl,G.email,G.apiToken).downloadAttachment(Y.attachmentId);if(!W.ok||!W.body)return X.json({error:"Jira refused the download"},502);let K=new Headers;for(let H of["content-type","content-length","content-disposition"]){let F=W.headers.get(H);if(F)K.set(H,F)}return K.set("cache-control","no-store"),new Response(W.body,{status:200,headers:K})}),Q}var kt$=D(()=>{u$();zB();Is0();v_()});function Vt$($){if(typeof $!=="object"||$===null)return null;let Z=$;if(Z.webhookEvent!=="jira:issue_updated")return null;let Q=Z.issue?.id,X=Z.issue?.key,Y=Z.changelog?.id;if(typeof Q!=="string"&&typeof Q!=="number"||typeof X!=="string"||typeof Y!=="string"&&typeof Y!=="number")return null;let G=Z.changelog?.items?.find((J)=>J.field==="status");if(!G||typeof G.toString!=="string")return null;return{issueId:String(Q),issueKey:X,toStatus:G.toString,changelogId:String(Y)}}function St$($,Z,Q){let X=[];for(let Y of Z){if(new Date(Y.created).getTime()<Q.getTime())continue;let G=Y.items.find((J)=>J.field==="status");if(!G||typeof G.toString!=="string")continue;X.push({issueId:$.id,issueKey:$.key,toStatus:G.toString,changelogId:Y.id})}return X.sort((Y,G)=>Number(Y.changelogId)-Number(G.changelogId))}function qz6($){return`Jira ${$.key}: ${$.summary}`}async function qR0($,Z,Q){if(!Z.enabled)return"disabled";let X=Z.organizationId,Y=await $.storage.jiraIntegrations.getAutomation(X,Q.toStatus);if(!Y)return"no_rule";let G=new zG(Z.siteUrl,Z.email,Z.apiToken),J=await dL0(G,Z.siteUrl,Q.issueId),W=await Iz6($,Z,Q,J);if(!await $.storage.jiraIntegrations.claimTrigger(X,Q.issueId,Q.changelogId))return"duplicate";let H=await $.storage.taskBoard.update(W.id,X,{assigneeId:n$,assignedBy:Z.createdBy},Z.createdBy);try{await TW($,H,{instruction:Y.prompt??Tz6,source:{kind:"jira",issueKey:J.key,title:qz6(J),body:`${mL0(J)}
2932
2932
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.344.3",
3
+ "version": "4.344.4",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- import{c as o,j as r}from"./index-B_lUDZ9B.js";import{O as m}from"./api-keys-D7tL_p1k.js";import{R as p}from"./require-capability-D7WPxMT8.js";import"./AlertCircle-C3hNX-U3.js";import"./Copy01-B-07BGuw.js";import"./Key01-CL0l8cke.js";import"./Plus-UnZHTGwg.js";import"./Trash01-CRSthTGO.js";import"./alert-dialog-B6LS36Sm.js";import"./dialog-CIbVvLCQ.js";import"./input-COX_MHDV.js";import"./label-BWr2mmGs.js";import"./use-mcp-client-xRPKqtBd.js";import"./constants-Daqiz8AS.js";import"./auth-DBYGTgFE.js";import"./access-gate-LG7Db20W.js";import"./capability-load-error-BeQsW5u1.js";function A(){const t=o.c(1);let i;return t[0]===Symbol.for("react.memo_cache_sentinel")?(i=r.jsx(p,{capability:"api-keys:manage",area:"api-keys",children:r.jsx(m,{})}),t[0]=i):i=t[0],i}export{A as default};
@@ -1 +0,0 @@
1
- import{c as jt,b as Bt,r as A,j as o,l as _t,h as wt,t as ht}from"./index-B_lUDZ9B.js";import{b as At}from"./chat-context-DU7jeH6U.js";import{i as Et}from"./ChevronRight-zWIGH7_7.js";import{S as Nt}from"./scroll-area-BV67BPd_.js";import{u as Rt,A as Tt}from"./use-section-preview-base-C_rHbM66.js";import{n as Ct,r as Kt,c as Pt,d as Ft,e as Ot,g as Ut,h as $t,S as It,i as zt,j as Lt}from"./index-DSjfYpae.js";import"./use-panel-navigate-DufE4TQe.js";import"./use-destination-route-OdrYRKi6.js";import"./autosend-9lrcbCup.js";import"./thread-intent-CFtt_nS5.js";import"./slugify-CEUa2lfQ.js";import"./hooks-Dx8_BRAv.js";import"./use-mcp-client-xRPKqtBd.js";import"./constants-Daqiz8AS.js";import"./auth-DBYGTgFE.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-C6z-rtNE.js";import"./task-board-DZmRPJBt.js";import"./schema-7gcATtGd.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-8rv5G58S.js";import"./use-ai-providers-dsyrDnO9.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-CrymWsPY.js";import"./thread-route-Cqs0O0Ez.js";import"./dialog-CIbVvLCQ.js";import"./Check-BcH3mbli.js";import"./Copy01-B-07BGuw.js";import"./Download01-BH00OOK2.js";import"./use-organization-settings-DeqTyhDT.js";import"./select-DrcEVnZ2.js";import"./ChevronUp-CcnNOmjW.js";import"./agent-icon-B0j2UorE.js";import"./AlertCircle-C3hNX-U3.js";import"./Tool01-DXqO9hP4.js";import"./ArrowUp-CYfoVlFX.js";import"./ArrowLeft-xkekPehv.js";import"./Tool02-B4NLpHjP.js";import"./XCircle-TCv3gxEk.js";import"./TrendUp01-Dug8rn5Y.js";import"./ZoomOut-DC7lYRrH.js";import"./Users03-CoUu6iB3.js";import"./CheckCircle-efnyoYbr.js";import"./ChevronSelectorVertical-Q_MhqA-g.js";import"./DotsVertical-Cha1vnex.js";import"./UserSquare-CWhx4AsN.js";import"./CreditCard01-DZdhUpRr.js";import"./Settings02-CRvAtfO0.js";import"./Eye-s_5OI3rP.js";import"./Share07-CTpIecy0.js";import"./GitBranch01-DPsdhEPj.js";import"./Globe01-BOLRhWz3.js";import"./XClose-DqZ5Ef7p.js";import"./HardDrive-Jz5aKVF-.js";import"./Image01-Dde0njV5.js";import"./Key01-CL0l8cke.js";import"./Link01-c7H6evzR.js";import"./LinkExternal01-mF6LE9cE.js";import"./Monitor01-CxZPUqxw.js";import"./Sun-cPKIj7uq.js";import"./Package-D1Oz_AXu.js";import"./Palette-BZi2CQIb.js";import"./Play-DL08uuDR.js";import"./Plus-UnZHTGwg.js";import"./SearchMd-BoghbLrR.js";import"./Shield01-DPL17IT0.js";import"./Stars01-DveEX2vy.js";import"./Trash01-CRSthTGO.js";import"./Upload01-D_Fv189I.js";import"./User01-CDa2pgjQ.js";import"./Users01-DZlH1wbC.js";import"./Zap-HRAvXFnr.js";import"./input-COX_MHDV.js";import"./automation-runs-DBYd6ygh.js";import"./useInfiniteQuery-D-5t1K3F.js";import"./infiniteQueryObserver-CwY974C7.js";import"./use-connection-BRJSF7XV.js";import"./table-CiqNoZ31.js";import"./empty-state-BOUJ1IRI.js";import"./use-infinite-scroll-DQ_XrNCL.js";import"./use-members-CTCpXWvz.js";import"./use-org-auth-client-tX4pyhvY.js";import"./use-automations-GJZG9mot.js";import"./useSuspenseInfiniteQuery-CzeWzIJb.js";import"./avatar-BusY4imm.js";import"./format-time-BtXRrtv4.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-copy-BYPpXCK2.js";import"./markdown-BYbXDv7N.js";import"./monaco-editor-YC0wWRXT.js";import"./editor-D6mstx7z.js";import"./mcp-app-renderer-C-wnTv6N.js";import"./types-CXQqC75q.js";import"./shell-layout-Bx5eb743.js";import"./project-icon-mS3w82ZB.js";import"./github-repo-CTPv5ZM2.js";import"./source-system-tabs-CnEGUb4r.js";import"./command-M5Hy4Bca.js";import"./index-scWMkxhM.js";import"./required-auth-layout-BzHLhAY7.js";import"./use-org-sso-ax_WPM-e.js";import"./use-org-notice-BrqrQNrZ.js";import"./integration-icon-DCPy_52o.js";import"./use-navigate-to-agent-DEnupm5-.js";import"./use-mcp-prompts-BH2161nI.js";import"./form-BLZF8D8t.js";import"./label-BWr2mmGs.js";import"./file-type-icon-VaomZQ4k.js";import"./drawer-CJFC-0Fv.js";import"./collection-search-CkYj4zLQ.js";import"./tabs-Bkqs8f-5.js";import"./toggle-group-dwqfI-na.js";import"./task-route-DFWTcvum.js";import"./extract-connection-data-BAwcjEs9.js";import"./metadata-dUsYcpuu.js";import"./connection-Cimig8VQ.js";import"./connection-card-kDFhfbya.js";import"./use-registry-connections-CnQcaAch.js";import"./retry-CErkP7V6.js";import"./connection-slug-CITJ0kGN.js";import"./textarea-BPKnRKFj.js";import"./connection-form-helpers-Bb00vWyO.js";import"./authenticate-and-persist-oauth-AGm_2YIv.js";import"./mcp-oauth-D4bG2HDW.js";import"./collection-tabs-N31SqJ5M.js";import"./badge-COtyjjy2.js";import"./use-file-configs-B8jXjEAi.js";import"./site-slug-uya6Wp4-.js";import"./dropdown-menu-BHHO3QAR.js";import"./popover-BGEouS4O.js";import"./github-icon-BMwS5NHP.js";import"./get-initials-D-f_fDFw.js";import"./select-model-BxS8auXw.js";import"./checkbox-D1r9ixw9.js";import"./ai-providers-logos-DD3qZ33J.js";import"./folder-icon-BPPBLsSQ.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-Cw977hrS.js";import"./toolbar-ClAV86ux.js";import"./use-mcp-tools-DhWg8eQ9.js";import"./skill-preview-DttG8VYN.js";import"./use-date-fns-locale-xY0hnak0.js";import"./alert-dialog-B6LS36Sm.js";import"./use-debounced-autosave-BZz1Sh5T.js";import"./search-input-D-ESO_3b.js";import"./use-mcp-auth-status-nQqJOE5j.js";import"./switch-6gOY7p_B.js";import"./repository-import-picker-DKCHkj_0.js";import"./repository-picker-hMZKUmSe.js";import"./use-debounced-value-BBOX-Vjy.js";import"./use-secrets-BKeXLH1Q.js";import"./client-icons-CqD2Q5XK.js";import"./connect-layout-Z933g_CV.js";import"./self-tool-result-BJzf7f_D.js";import"./provision-repo-scoped-github-connection-WQFARyHG.js";import"./track-DR1-LwVK.js";import"./use-tags-C-FksPQ4.js";import"./breadcrumb-aEyQOqqG.js";import"./toolbar-icon-button-_od4zlTM.js";import"./safe-image-url-D5z803Ot.js";import"./automation-list-row-yl7Jr9Us.js";import"./site-error--i37Vnuw.js";import"./cards-CAtXduAN.js";function Vt(n,t){const m=(n.title||n.resolveType.split("/").pop()||"").replace(/\.(tsx?|jsx?)$/,"").replace(/[^A-Za-z0-9_-]/g,""),i=/^[A-Za-z]/.test(m)&&m.length>0?m:"Section",s=Ct(t,i);return{blockKey:s,data:{__resolveType:n.resolveType,name:s}}}function Gr(n){const t=jt.c(79),{orgSlug:m,virtualMcpId:i,branch:s,blockKey:p,block:x,meta:a,decofile:l,title:bt,excludeFields:Z,schemaPending:lt,previewBaseUrl:ct}=n,D=lt===void 0?!1:lt,H=ct===void 0?null:ct,G=At()?.taskId??null,c=Bt();let N;t[0]!==H||t[1]!==i?(N={virtualMcpId:i,sandboxUrl:H},t[0]=H,t[1]=i,t[2]=N):N=t[2];const h=Rt(N),v=typeof x?.__resolveType=="string"?x.__resolveType:"";let R;t[3]!==Z||t[4]!==a||t[5]!==v?(R=Kt(v,a,Z),t[3]=Z,t[4]=a,t[5]=v,t[6]=R):R=t[6];const b=R;let T;t[7]!==b?(T=!!b&&Object.keys(b.properties??{}).length>0,t[7]=b,t[8]=T):T=t[8];const J=T,dt=bt??(x?Pt(p,x,a):p);let C;t[9]!==s||t[10]!==m||t[11]!==i?(C={orgSlug:m,virtualMcpId:i,branch:s},t[9]=s,t[10]=m,t[11]=i,t[12]=C):C=t[12];const{save:S,flush:Q,isPending:W}=Ft(C);let K;t[13]!==s||t[14]!==m||t[15]!==i?(K={orgSlug:m,virtualMcpId:i,branch:s},t[13]=s,t[14]=m,t[15]=i,t[16]=K):K=t[16];const X=Ot(K);let P;t[17]!==S?(P=zt((e,r)=>S(e,r)),t[17]=S,t[18]=P):P=t[18];const Y=P,[vt,St]=A.useState(p),[tt,ut]=A.useState(null),[et,ft]=A.useState(0);let F;t[19]===Symbol.for("react.memo_cache_sentinel")?(F=[],t[19]=F):F=t[19];const[g,xt]=A.useState(F),[ot,d]=A.useState(!1),O=A.useRef(null);vt!==p&&(St(p),ut(null),ft(Mt),xt([]));let U;t[20]!==x?(U=x??{},t[20]=x,t[21]=U):U=t[21];const rt=U;let y;t[22]!==tt?(y=tt??{},t[22]=tt,t[23]=y):y=t[23];let $;t[24]!==rt||t[25]!==y?($={...rt,...y},t[24]=rt,t[25]=y,t[26]=$):$=t[26];const it=$;let I;t[27]!==p||t[28]!==v||t[29]!==S?(I=e=>{const r=e;ut(r),S(p,{...r,__resolveType:v})},t[27]=p,t[28]=v,t[29]=S,t[30]=I):I=t[30];const mt=I;let z;t[31]===Symbol.for("react.memo_cache_sentinel")?(z=e=>{xt(e)},t[31]=z):z=t[31];const E=z;let L;t[32]!==l||t[33]!==Q||t[34]!==X||t[35]!==c?(L=async(e,r)=>{try{const{blockKey:u,data:f}=Vt(e,l);await X.mutateAsync({blockKey:u,data:f}),ht.success(c("sandbox.appEditor.createdSection",{name:u})),r({__resolveType:u}),Q()}catch(u){const f=u,kt=f instanceof Error?f.message:c("sandbox.appEditor.failedAddSection");throw ht.error(kt),f}},t[32]=l,t[33]=Q,t[34]=X,t[35]=c,t[36]=L):L=t[36];const k=L;let V;t[37]!==d?(V=e=>{O.current=e.append,d(!0)},t[37]=d,t[38]=V):V=t[38];const st=V;let q;t[39]!==k||t[40]!==d?(q=async e=>{const r=O.current;if(r)try{await k(e,u=>{r(u),d(!1),O.current=null})}catch{}},t[39]=k,t[40]=d,t[41]=q):q=t[41];const pt=q,at=g.length>0?[dt,...g]:[],gt="flex h-full flex-col",yt="flex h-12 shrink-0 items-center justify-between border-b px-6",nt=at.length>0?o.jsx("nav",{"aria-label":c("sandbox.appEditor.editingBreadcrumb"),className:"flex min-w-0 flex-1 items-center gap-1 overflow-hidden text-sm",children:at.map((e,r)=>{const u=r===at.length-1,f=Ut(e);return o.jsxs("span",{className:"flex min-w-0 items-center gap-1 overflow-hidden",children:[r>0&&o.jsx(Et,{className:"size-3 shrink-0 text-muted-foreground/60"}),o.jsx("button",{type:"button",onClick:()=>{E(r===0?[]:$t(g,r)),ft(qt)},title:f,className:_t("min-w-0 truncate rounded-md px-1 py-0.5 text-left transition-colors",u?"font-medium text-foreground":"text-muted-foreground hover:bg-accent hover:text-accent-foreground"),children:f})]},`${f}-${r}`)})}):o.jsx("span",{className:"text-sm font-medium",children:dt});let j;t[42]!==W?(j=o.jsx(Lt,{isPending:W,isError:!1}),t[42]=W,t[43]=j):j=t[43];let B;t[44]!==nt||t[45]!==j?(B=o.jsxs("div",{className:yt,children:[nt,j]}),t[44]=nt,t[45]=j,t[46]=B):B=t[46];let _;t[47]!==p||t[48]!==s||t[49]!==g||t[50]!==l||t[51]!==it||t[52]!==et||t[53]!==k||t[54]!==E||t[55]!==mt||t[56]!==st||t[57]!==J||t[58]!==a||t[59]!==m||t[60]!==Y||t[61]!==b||t[62]!==D||t[63]!==h||t[64]!==c||t[65]!==G||t[66]!==i?(_=o.jsx(Nt,{className:"min-h-0 min-w-0 flex-1 [&_[data-slot=scroll-area-viewport]>div]:!block",children:o.jsx("div",{className:"px-6 py-6",children:o.jsx("div",{className:"mx-auto max-w-xl",children:J?o.jsx(It,{schema:b,value:it,onChange:mt,basePath:"",breadcrumbPath:g,onBreadcrumbChange:E,decofile:l,meta:a,onSaveReferencedBlock:Y,previewBaseUrl:h,onAddSectionItem:k,onRequestAddSection:st,sandbox:{orgSlug:m,virtualMcpId:i,branch:s,threadId:G}},`${p}:${et}`):D?o.jsxs("div",{className:"flex flex-col items-center gap-2 py-6 text-center text-xs text-muted-foreground",children:[o.jsx(wt,{className:"size-4"}),c("sandbox.appEditor.loadingSchema")]}):o.jsx("div",{className:"py-6 text-center text-xs text-muted-foreground",children:c("sandbox.appEditor.noEditableSchema")})})})}),t[47]=p,t[48]=s,t[49]=g,t[50]=l,t[51]=it,t[52]=et,t[53]=k,t[54]=E,t[55]=mt,t[56]=st,t[57]=J,t[58]=a,t[59]=m,t[60]=Y,t[61]=b,t[62]=D,t[63]=h,t[64]=c,t[65]=G,t[66]=i,t[67]=_):_=t[67];let w;t[68]!==ot||t[69]!==l||t[70]!==pt||t[71]!==a||t[72]!==h||t[73]!==d?(w=h&&o.jsx(Tt,{open:ot,onOpenChange:e=>{d(e),e||(O.current=null)},meta:a,decofile:l,previewBaseUrl:h,onSelect:e=>{pt(e)}}),t[68]=ot,t[69]=l,t[70]=pt,t[71]=a,t[72]=h,t[73]=d,t[74]=w):w=t[74];let M;return t[75]!==B||t[76]!==_||t[77]!==w?(M=o.jsxs("div",{className:gt,children:[B,_,w]}),t[75]=B,t[76]=_,t[77]=w,t[78]=M):M=t[78],M}function qt(n){return n+1}function Mt(n){return n+1}export{Gr as AppEditor};
@@ -1 +0,0 @@
1
- import{c as B,b as L,j as r}from"./index-B_lUDZ9B.js";import{I as A}from"./input-COX_MHDV.js";import{L as F}from"./label-BWr2mmGs.js";import{S as R,b as z,a as J,d as O,c as V}from"./select-DrcEVnZ2.js";import{T as D}from"./textarea-BPKnRKFj.js";import{e as M,w as $,j as q,y as G,J as H}from"./index-DSjfYpae.js";import{s as P}from"./primitives-BFeFdEFz.js";import{u as Q}from"./use-autosave-edA5EL24.js";import"./Check-BcH3mbli.js";import"./ChevronUp-CcnNOmjW.js";import"./ArrowUp-CYfoVlFX.js";import"./chat-context-DU7jeH6U.js";import"./use-panel-navigate-DufE4TQe.js";import"./use-destination-route-OdrYRKi6.js";import"./autosend-9lrcbCup.js";import"./thread-intent-CFtt_nS5.js";import"./slugify-CEUa2lfQ.js";import"./hooks-Dx8_BRAv.js";import"./use-mcp-client-xRPKqtBd.js";import"./constants-Daqiz8AS.js";import"./auth-DBYGTgFE.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-C6z-rtNE.js";import"./task-board-DZmRPJBt.js";import"./schema-7gcATtGd.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-8rv5G58S.js";import"./use-ai-providers-dsyrDnO9.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-CrymWsPY.js";import"./thread-route-Cqs0O0Ez.js";import"./dialog-CIbVvLCQ.js";import"./Copy01-B-07BGuw.js";import"./Download01-BH00OOK2.js";import"./use-organization-settings-DeqTyhDT.js";import"./automation-runs-DBYd6ygh.js";import"./agent-icon-B0j2UorE.js";import"./AlertCircle-C3hNX-U3.js";import"./Tool01-DXqO9hP4.js";import"./ArrowLeft-xkekPehv.js";import"./Tool02-B4NLpHjP.js";import"./XCircle-TCv3gxEk.js";import"./TrendUp01-Dug8rn5Y.js";import"./ZoomOut-DC7lYRrH.js";import"./Users03-CoUu6iB3.js";import"./CheckCircle-efnyoYbr.js";import"./ChevronRight-zWIGH7_7.js";import"./ChevronSelectorVertical-Q_MhqA-g.js";import"./DotsVertical-Cha1vnex.js";import"./UserSquare-CWhx4AsN.js";import"./CreditCard01-DZdhUpRr.js";import"./Settings02-CRvAtfO0.js";import"./Eye-s_5OI3rP.js";import"./Share07-CTpIecy0.js";import"./GitBranch01-DPsdhEPj.js";import"./Globe01-BOLRhWz3.js";import"./XClose-DqZ5Ef7p.js";import"./HardDrive-Jz5aKVF-.js";import"./Image01-Dde0njV5.js";import"./Key01-CL0l8cke.js";import"./Link01-c7H6evzR.js";import"./LinkExternal01-mF6LE9cE.js";import"./Monitor01-CxZPUqxw.js";import"./Sun-cPKIj7uq.js";import"./Package-D1Oz_AXu.js";import"./Palette-BZi2CQIb.js";import"./Play-DL08uuDR.js";import"./Plus-UnZHTGwg.js";import"./SearchMd-BoghbLrR.js";import"./Shield01-DPL17IT0.js";import"./Stars01-DveEX2vy.js";import"./Trash01-CRSthTGO.js";import"./Upload01-D_Fv189I.js";import"./User01-CDa2pgjQ.js";import"./Users01-DZlH1wbC.js";import"./Zap-HRAvXFnr.js";import"./useInfiniteQuery-D-5t1K3F.js";import"./infiniteQueryObserver-CwY974C7.js";import"./use-connection-BRJSF7XV.js";import"./table-CiqNoZ31.js";import"./empty-state-BOUJ1IRI.js";import"./use-infinite-scroll-DQ_XrNCL.js";import"./use-members-CTCpXWvz.js";import"./use-org-auth-client-tX4pyhvY.js";import"./use-automations-GJZG9mot.js";import"./useSuspenseInfiniteQuery-CzeWzIJb.js";import"./avatar-BusY4imm.js";import"./format-time-BtXRrtv4.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-copy-BYPpXCK2.js";import"./markdown-BYbXDv7N.js";import"./monaco-editor-YC0wWRXT.js";import"./editor-D6mstx7z.js";import"./mcp-app-renderer-C-wnTv6N.js";import"./types-CXQqC75q.js";import"./shell-layout-Bx5eb743.js";import"./project-icon-mS3w82ZB.js";import"./github-repo-CTPv5ZM2.js";import"./source-system-tabs-CnEGUb4r.js";import"./command-M5Hy4Bca.js";import"./index-scWMkxhM.js";import"./required-auth-layout-BzHLhAY7.js";import"./use-org-sso-ax_WPM-e.js";import"./use-org-notice-BrqrQNrZ.js";import"./integration-icon-DCPy_52o.js";import"./use-navigate-to-agent-DEnupm5-.js";import"./use-mcp-prompts-BH2161nI.js";import"./form-BLZF8D8t.js";import"./file-type-icon-VaomZQ4k.js";import"./drawer-CJFC-0Fv.js";import"./collection-search-CkYj4zLQ.js";import"./tabs-Bkqs8f-5.js";import"./toggle-group-dwqfI-na.js";import"./task-route-DFWTcvum.js";import"./extract-connection-data-BAwcjEs9.js";import"./metadata-dUsYcpuu.js";import"./connection-Cimig8VQ.js";import"./connection-card-kDFhfbya.js";import"./use-registry-connections-CnQcaAch.js";import"./retry-CErkP7V6.js";import"./connection-slug-CITJ0kGN.js";import"./connection-form-helpers-Bb00vWyO.js";import"./authenticate-and-persist-oauth-AGm_2YIv.js";import"./mcp-oauth-D4bG2HDW.js";import"./collection-tabs-N31SqJ5M.js";import"./badge-COtyjjy2.js";import"./use-file-configs-B8jXjEAi.js";import"./site-slug-uya6Wp4-.js";import"./dropdown-menu-BHHO3QAR.js";import"./popover-BGEouS4O.js";import"./github-icon-BMwS5NHP.js";import"./get-initials-D-f_fDFw.js";import"./select-model-BxS8auXw.js";import"./checkbox-D1r9ixw9.js";import"./ai-providers-logos-DD3qZ33J.js";import"./folder-icon-BPPBLsSQ.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-Cw977hrS.js";import"./toolbar-ClAV86ux.js";import"./use-mcp-tools-DhWg8eQ9.js";import"./skill-preview-DttG8VYN.js";import"./use-date-fns-locale-xY0hnak0.js";import"./alert-dialog-B6LS36Sm.js";import"./use-debounced-autosave-BZz1Sh5T.js";import"./scroll-area-BV67BPd_.js";import"./search-input-D-ESO_3b.js";import"./use-mcp-auth-status-nQqJOE5j.js";import"./switch-6gOY7p_B.js";import"./repository-import-picker-DKCHkj_0.js";import"./repository-picker-hMZKUmSe.js";import"./use-debounced-value-BBOX-Vjy.js";import"./use-secrets-BKeXLH1Q.js";import"./client-icons-CqD2Q5XK.js";import"./connect-layout-Z933g_CV.js";import"./self-tool-result-BJzf7f_D.js";import"./provision-repo-scoped-github-connection-WQFARyHG.js";import"./track-DR1-LwVK.js";import"./use-tags-C-FksPQ4.js";import"./breadcrumb-aEyQOqqG.js";import"./toolbar-icon-button-_od4zlTM.js";import"./safe-image-url-D5z803Ot.js";import"./automation-list-row-yl7Jr9Us.js";import"./site-error--i37Vnuw.js";import"./cards-CAtXduAN.js";const U={authors:[{key:"name",labelKey:"sandbox.recordEditor.fieldName",widget:"text"},{key:"type",labelKey:"sandbox.recordEditor.fieldType",widget:"select",options:[{value:"Person",labelKey:"sandbox.recordEditor.optionPerson"},{value:"Organization",labelKey:"sandbox.recordEditor.optionOrganization"}]},{key:"email",labelKey:"sandbox.recordEditor.fieldEmail",widget:"text",placeholderKey:"sandbox.recordEditor.placeholderEmail"},{key:"jobTitle",labelKey:"sandbox.recordEditor.fieldJobTitle",widget:"text"},{key:"company",labelKey:"sandbox.recordEditor.fieldCompany",widget:"text"},{key:"avatar",labelKey:"sandbox.recordEditor.fieldAvatar",widget:"image"}]},W={authors:"sandbox.recordEditor.titleAuthor"};function ti(I){const t=B.c(39),{orgSlug:E,virtualMcpId:K,branch:w,kind:a,blockKey:b,block:f}=I,i=L();let h;t[0]!==w||t[1]!==E||t[2]!==K?(h={orgSlug:E,virtualMcpId:K,branch:w},t[0]=w,t[1]=E,t[2]=K,t[3]=h):h=t[3];const p=M(h);let g;t[4]!==f||t[5]!==a?(g=$(f,a),t[4]=f,t[5]=a,t[6]=g):g=t[6];const C=g;let k;t[7]!==b||t[8]!==a||t[9]!==p?(k=l=>{p.mutate({blockKey:b,data:G(b,a,l)})},t[7]=b,t[8]=a,t[9]=p,t[10]=k):k=t[10];const[e,S]=Q(C,k);let v;t[11]!==e||t[12]!==S?(v=(l,o)=>S({...e,[l]:o}),t[11]=e,t[12]=S,t[13]=v):v=t[13];const s=v,N=W[a];let n;t[14]!==i||t[15]!==N?(n=i(N),t[14]=i,t[15]=N,t[16]=n):n=t[16];let c;t[17]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[17]=n,t[18]=c):c=t[18];let d;t[19]!==p.isError||t[20]!==p.isPending?(d=r.jsx(q,{isPending:p.isPending,isError:p.isError}),t[19]=p.isError,t[20]=p.isPending,t[21]=d):d=t[21];let y;t[22]!==c||t[23]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[22]=c,t[23]=d,t[24]=y):y=t[24];const T=U[a];let x;if(t[25]!==e||t[26]!==s||t[27]!==i||t[28]!==T){let l;t[30]!==e||t[31]!==s||t[32]!==i?(l=o=>r.jsx("div",{className:"space-y-2",children:o.widget==="image"?r.jsx(H,{schema:{type:"string",format:"image-uri",title:i(o.labelKey)},value:e[o.key],onChange:m=>s(o.key,m),path:o.key,label:i(o.labelKey)}):o.widget==="select"?r.jsxs(r.Fragment,{children:[r.jsx(F,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(R,{value:P(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(z,{id:o.key,className:"h-10 w-full",children:r.jsx(J,{placeholder:i(o.labelKey)})}),r.jsx(O,{children:(o.options??[]).map(m=>r.jsx(V,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(F,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(D,{id:o.key,value:P(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(A,{id:o.key,value:P(e[o.key]),placeholder:o.placeholderKey?i(o.placeholderKey):void 0,onChange:m=>s(o.key,m.target.value),className:"h-10"})]})},o.key),t[30]=e,t[31]=s,t[32]=i,t[33]=l):l=t[33],x=T.map(l),t[25]=e,t[26]=s,t[27]=i,t[28]=T,t[29]=x}else x=t[29];let u;t[34]!==x?(u=r.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto px-6 py-6",children:r.jsx("div",{className:"mx-auto max-w-xl space-y-6",children:x})}),t[34]=x,t[35]=u):u=t[35];let j;return t[36]!==u||t[37]!==y?(j=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[36]=u,t[37]=y,t[38]=j):j=t[38],j}export{ti as RecordEditor};