cognova 0.2.8 → 0.2.9

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 (166) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{mfAEx0Kz.js → -JdScH3W.js} +1 -1
  3. package/.output/public/_nuxt/{CYQP4zpi.js → 0EY9Msdx.js} +1 -1
  4. package/.output/public/_nuxt/{BwyXWqBY.js → 1lOC4Si0.js} +1 -1
  5. package/.output/public/_nuxt/{DaBSQDif.js → 1zIQX9mh.js} +1 -1
  6. package/.output/public/_nuxt/{B9zgEO8N.js → 4Qy4OdWt.js} +1 -1
  7. package/.output/public/_nuxt/{DmDPSvxi.js → 4nN41Tyd.js} +1 -1
  8. package/.output/public/_nuxt/{cPPThz84.js → 5MZBbx-H.js} +1 -1
  9. package/.output/public/_nuxt/{DtJnWtpL.js → 6lIxuL6n.js} +1 -1
  10. package/.output/public/_nuxt/AUdD1uDD.js +1 -0
  11. package/.output/public/_nuxt/{D2kQkOaG.js → B-513wJW.js} +1 -1
  12. package/.output/public/_nuxt/{BBDxhFYY.js → B1vDCixB.js} +1 -1
  13. package/.output/public/_nuxt/{BjnQ1pI1.js → B2MVZlI-.js} +1 -1
  14. package/.output/public/_nuxt/{DmOS3vFH.js → B5JDxHxC.js} +1 -1
  15. package/.output/public/_nuxt/{njnzCNrH.js → B63LIwsW.js} +3 -3
  16. package/.output/public/_nuxt/{BqTdsCnW.js → B6bnHNWY.js} +1 -1
  17. package/.output/public/_nuxt/{SfaNtyKS.js → B6wYZD_K.js} +1 -1
  18. package/.output/public/_nuxt/{D4_89MZm.js → B8Ou5yh2.js} +1 -1
  19. package/.output/public/_nuxt/{zXvvpsZj.js → BE4Ndhrq.js} +1 -1
  20. package/.output/public/_nuxt/{DwIYtFfA.js → BES6FzF5.js} +1 -1
  21. package/.output/public/_nuxt/{BdxP21ep.js → BE_OHTBv.js} +1 -1
  22. package/.output/public/_nuxt/{BmdlymIW.js → BJ8jbKuq.js} +1 -1
  23. package/.output/public/_nuxt/{U3f6dy8i.js → BNBGEa-U.js} +1 -1
  24. package/.output/public/_nuxt/{C6FFW_cO.js → BOGXUgGg.js} +1 -1
  25. package/.output/public/_nuxt/{Cr0NfhPB.js → BQ1T6zWA.js} +1 -1
  26. package/.output/public/_nuxt/{B5SnZL2l.js → BVc_fOF1.js} +1 -1
  27. package/.output/public/_nuxt/{D4X6ONPF.js → BX6vcvkp.js} +1 -1
  28. package/.output/public/_nuxt/{GGcn5KPW.js → BYIq3eP8.js} +1 -1
  29. package/.output/public/_nuxt/{C24so3m7.js → BZqdzrSw.js} +2 -2
  30. package/.output/public/_nuxt/{BUC36BHp.js → BaYtugUf.js} +1 -1
  31. package/.output/public/_nuxt/{eE8TtXgC.js → Be5L93GM.js} +3 -3
  32. package/.output/public/_nuxt/{C1tCdK-M.js → BfECQayu.js} +1 -1
  33. package/.output/public/_nuxt/{CDkyQ1eQ.js → BgG2k-zy.js} +1 -1
  34. package/.output/public/_nuxt/{CewcVxDS.js → BhnONkIm.js} +1 -1
  35. package/.output/public/_nuxt/{-2AbaFNH.js → BjI5wb_q.js} +1 -1
  36. package/.output/public/_nuxt/{BnJ-6YDw.js → Bk9-HxOg.js} +1 -1
  37. package/.output/public/_nuxt/{nHSiDk8N.js → BltasKce.js} +1 -1
  38. package/.output/public/_nuxt/{CF33v_m5.js → Bp9kHdw6.js} +1 -1
  39. package/.output/public/_nuxt/{C7qhmmZh.js → Bsdcw5gr.js} +1 -1
  40. package/.output/public/_nuxt/{yJ9vRvHj.js → BsnhHCOa.js} +1 -1
  41. package/.output/public/_nuxt/{CSHcfejh.js → BwJVN9k0.js} +1 -1
  42. package/.output/public/_nuxt/{KEeoKtq_.js → BwVt3BzR.js} +1 -1
  43. package/.output/public/_nuxt/{BefOhWHD.js → BwdxQyyo.js} +1 -1
  44. package/.output/public/_nuxt/{BE1CVWts.js → BzTjmQCD.js} +1 -1
  45. package/.output/public/_nuxt/{B-AlyT2D.js → C1FhgWcI.js} +1 -1
  46. package/.output/public/_nuxt/{D_obX2Hj.js → C2DZeD9G.js} +1 -1
  47. package/.output/public/_nuxt/{BXtZVbmx.js → C3JOLqW1.js} +1 -1
  48. package/.output/public/_nuxt/{pHCJ6lhw.js → C4ScCUjy.js} +1 -1
  49. package/.output/public/_nuxt/{ImPsUDiH.js → C6HEirAm.js} +1 -1
  50. package/.output/public/_nuxt/{ijmD2cEW.js → C6UTTaCP.js} +1 -1
  51. package/.output/public/_nuxt/{CVYcsqmL.js → C8gtQaKB.js} +1 -1
  52. package/.output/public/_nuxt/{MWUW1sIF.js → C8tXHRIo.js} +1 -1
  53. package/.output/public/_nuxt/{36ZHqDPo.js → C8wa4Wh4.js} +1 -1
  54. package/.output/public/_nuxt/{D887s9k9.js → CDradKPE.js} +1 -1
  55. package/.output/public/_nuxt/{Dbfwn2zk.js → CEJh-OAl.js} +1 -1
  56. package/.output/public/_nuxt/{mT7Mt2d7.js → CGfVTQUF.js} +1 -1
  57. package/.output/public/_nuxt/{C075hYlX.js → CGgZuPnb.js} +1 -1
  58. package/.output/public/_nuxt/{CqFcWBkW.js → CH8kNq6W.js} +1 -1
  59. package/.output/public/_nuxt/{CO3hceDE.js → CIJ2MJdc.js} +1 -1
  60. package/.output/public/_nuxt/{DX_9SfFb.js → CIUZAp6g.js} +1 -1
  61. package/.output/public/_nuxt/{DtyyytRx.js → CXBOHJ2W.js} +1 -1
  62. package/.output/public/_nuxt/{BYtVdUIW.js → CY3x8iy3.js} +1 -1
  63. package/.output/public/_nuxt/{CQ3tAemj.js → CaLO8sre.js} +1 -1
  64. package/.output/public/_nuxt/{D4Cizi4y.js → CbTu13wM.js} +1 -1
  65. package/.output/public/_nuxt/{Dt5mOzXj.js → CfO_d5gC.js} +1 -1
  66. package/.output/public/_nuxt/{it8syoZI.js → Clr3MHUr.js} +1 -1
  67. package/.output/public/_nuxt/{B0xuHXvN.js → Cmdr5BNz.js} +1 -1
  68. package/.output/public/_nuxt/{2QHXgMyi.js → Cmj-BR0q.js} +1 -1
  69. package/.output/public/_nuxt/{CAfyXyeo.js → Cn83lLUb.js} +1 -1
  70. package/.output/public/_nuxt/{C21BjagS.js → CqMgz85Z.js} +1 -1
  71. package/.output/public/_nuxt/{BCCYopTB.js → CrW6y2-s.js} +1 -1
  72. package/.output/public/_nuxt/{CSjOaBKu.js → CrjNndEO.js} +1 -1
  73. package/.output/public/_nuxt/{DqzomZoo.js → Cs_udj6A.js} +1 -1
  74. package/.output/public/_nuxt/{BkO884Ds.js → CsbHYpNi.js} +3 -3
  75. package/.output/public/_nuxt/{BhYoxmLV.js → CwKe2KkK.js} +1 -1
  76. package/.output/public/_nuxt/{D79lbuWG.js → CwOUYOe5.js} +1 -1
  77. package/.output/public/_nuxt/{Drxf7nJz.js → CybU4a95.js} +1 -1
  78. package/.output/public/_nuxt/{Bwn-CRYH.js → CziltI1u.js} +1 -1
  79. package/.output/public/_nuxt/{BlsIfvSf.js → CzurfTnt.js} +1 -1
  80. package/.output/public/_nuxt/{D7pKT3IW.js → D-O8wAju.js} +1 -1
  81. package/.output/public/_nuxt/{BZBNJD7U.js → D1t0272g.js} +1 -1
  82. package/.output/public/_nuxt/{BLwctszt.js → D3RROe4s.js} +1 -1
  83. package/.output/public/_nuxt/{C6sX7TYf.js → D5G5UL_g.js} +1 -1
  84. package/.output/public/_nuxt/{CfY_bsV0.js → D76Dw8rw.js} +1 -1
  85. package/.output/public/_nuxt/{Pn7VD6uQ.js → D7DTZ0iS.js} +1 -1
  86. package/.output/public/_nuxt/{BxShcW0K.js → D7WbsJsa.js} +1 -1
  87. package/.output/public/_nuxt/{4XnyUc7C.js → D7iYVmH6.js} +1 -1
  88. package/.output/public/_nuxt/{CrmE-JGu.js → D8gh62A0.js} +1 -1
  89. package/.output/public/_nuxt/{Cve4psva.js → DA2RowFe.js} +1 -1
  90. package/.output/public/_nuxt/{ClGn48iq.js → DBKxzQ3U.js} +1 -1
  91. package/.output/public/_nuxt/{CbvNJVrk.js → DBuW01Fx.js} +1 -1
  92. package/.output/public/_nuxt/{Buf1PAiO.js → DCL9gWFw.js} +1 -1
  93. package/.output/public/_nuxt/{C-HCArYP.js → DGJKfutb.js} +1 -1
  94. package/.output/public/_nuxt/{0dqQoCHY.js → DHScQdvh.js} +1 -1
  95. package/.output/public/_nuxt/{BF3tVKtX.js → DI1FIvaM.js} +1 -1
  96. package/.output/public/_nuxt/{CY7f553E.js → DJ4pqxg-.js} +1 -1
  97. package/.output/public/_nuxt/{D9aYkNhQ.js → DJoRBCVm.js} +1 -1
  98. package/.output/public/_nuxt/{CXTrUfQ5.js → DLuRYg2p.js} +1 -1
  99. package/.output/public/_nuxt/DMy2sxuC.js +1 -0
  100. package/.output/public/_nuxt/{DLUvsixu.js → DQd-GXKJ.js} +1 -1
  101. package/.output/public/_nuxt/{DZEuR9ms.js → DSgubznn.js} +1 -1
  102. package/.output/public/_nuxt/{DKKY8zWm.js → DSynhNOO.js} +1 -1
  103. package/.output/public/_nuxt/{CzAZpALW.js → DTrFhdRO.js} +1 -1
  104. package/.output/public/_nuxt/{Bkc1Hpcf.js → DTu0K_pX.js} +1 -1
  105. package/.output/public/_nuxt/{BSA-U0so.js → DUDbJONU.js} +1 -1
  106. package/.output/public/_nuxt/{C13FKhqK.js → DYu_NYj3.js} +1 -1
  107. package/.output/public/_nuxt/{LQNRVThr.js → D_tCgCFX.js} +1 -1
  108. package/.output/public/_nuxt/{GYf-vnR6.js → DdXVAzIg.js} +1 -1
  109. package/.output/public/_nuxt/{DmlZSBjF.js → DfIqFkyp.js} +1 -1
  110. package/.output/public/_nuxt/{DJt7Rogf.js → Dj2opPDu.js} +1 -1
  111. package/.output/public/_nuxt/{C3tximD1.js → DjmFlCHK.js} +1 -1
  112. package/.output/public/_nuxt/{6QDVg5TO.js → DkhxRAb3.js} +1 -1
  113. package/.output/public/_nuxt/DlSJ4TF_.js +1 -0
  114. package/.output/public/_nuxt/{D-5A6cMB.js → DmmQUhEb.js} +1 -1
  115. package/.output/public/_nuxt/{BJUff9Ku.js → DvATBMPl.js} +1 -1
  116. package/.output/public/_nuxt/{dB7G4iIC.js → DwAJIRGg.js} +1 -1
  117. package/.output/public/_nuxt/{BrOKokPO.js → FYOLNuMV.js} +1 -1
  118. package/.output/public/_nuxt/{B8TQvzYX.js → Gy6_ehml.js} +1 -1
  119. package/.output/public/_nuxt/{DMb_1D81.js → HPOXd4gt.js} +1 -1
  120. package/.output/public/_nuxt/{BHn8tRjg.js → HlbU_z9a.js} +1 -1
  121. package/.output/public/_nuxt/{BwC62XRN.js → JQV21WEV.js} +1 -1
  122. package/.output/public/_nuxt/{CEDw8osP.js → NusIKwmA.js} +1 -1
  123. package/.output/public/_nuxt/{D-Ge96eV.js → OrcbFmB1.js} +1 -1
  124. package/.output/public/_nuxt/{D04CyXmf.js → Oy4_RPEZ.js} +1 -1
  125. package/.output/public/_nuxt/{BahXyh-A.js → Pa936BQP.js} +1 -1
  126. package/.output/public/_nuxt/PzQHm02e.js +1 -0
  127. package/.output/public/_nuxt/{BmaHzvZM.js → REP2-rzf.js} +1 -1
  128. package/.output/public/_nuxt/{DcbbfwCe.js → RRbnMIVe.js} +1 -1
  129. package/.output/public/_nuxt/{BVEFmI4I.js → TGVM5w2K.js} +1 -1
  130. package/.output/public/_nuxt/UbZP7wjm.js +1 -0
  131. package/.output/public/_nuxt/{B2Xfh7am.js → XJYoLoTi.js} +1 -1
  132. package/.output/public/_nuxt/{BLm0UviR.js → a9_LvIZ4.js} +1 -1
  133. package/.output/public/_nuxt/builds/latest.json +1 -1
  134. package/.output/public/_nuxt/builds/meta/613faa5d-8ace-45e0-8274-b611cc4fd1ad.json +1 -0
  135. package/.output/public/_nuxt/entry.DkvuF_CR.css +1 -0
  136. package/.output/public/_nuxt/{CEz288t8.js → fVkHtgGF.js} +1 -1
  137. package/.output/public/_nuxt/{C-Ygk9x5.js → hm3ShyaF.js} +1 -1
  138. package/.output/public/_nuxt/{BvstjGHC.js → k16puyWi.js} +1 -1
  139. package/.output/public/_nuxt/{zO9MgHj2.js → myNwwtfj.js} +1 -1
  140. package/.output/public/_nuxt/{CClsKJ9A.js → nTCVPCKg.js} +1 -1
  141. package/.output/public/_nuxt/{CH_jROT9.js → pHQcHl8n.js} +1 -1
  142. package/.output/public/_nuxt/{B6G3NLfW.js → pNqWPbXW.js} +1 -1
  143. package/.output/public/_nuxt/{vES4kgx7.js → qWWnsfRV.js} +1 -1
  144. package/.output/public/_nuxt/{D_O7SlHm.js → rRYEvKFu.js} +1 -1
  145. package/.output/public/_nuxt/{JReYPlwF.js → svWfwR0T.js} +1 -1
  146. package/.output/public/_nuxt/{Bhhg7oSf.js → wgX1ldgZ.js} +1 -1
  147. package/.output/public/_nuxt/{B6-U3KqJ.js → xrh9hzzH.js} +2 -2
  148. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  149. package/.output/server/chunks/build/server.mjs +1 -1
  150. package/.output/server/chunks/build/{settings-ByUXa46k.mjs → settings-B2KXoGcz.mjs} +213 -26
  151. package/.output/server/chunks/build/settings-B2KXoGcz.mjs.map +1 -0
  152. package/.output/server/chunks/build/styles.mjs +2 -2
  153. package/.output/server/chunks/nitro/nitro.mjs +926 -870
  154. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  155. package/.output/server/package.json +1 -1
  156. package/app/pages/settings.vue +148 -9
  157. package/package.json +1 -1
  158. package/server/bridge/adapters/telegram.ts +83 -8
  159. package/.output/public/_nuxt/BIo-9u_O.js +0 -1
  160. package/.output/public/_nuxt/BMs0mHEp.js +0 -1
  161. package/.output/public/_nuxt/CE9_ECxx.js +0 -1
  162. package/.output/public/_nuxt/DmcMCO8x.js +0 -1
  163. package/.output/public/_nuxt/builds/meta/410e449d-9fe8-43a0-ae07-80797693b9b8.json +0 -1
  164. package/.output/public/_nuxt/entry._7ZkP07A.css +0 -1
  165. package/.output/public/_nuxt/iBaivqi8.js +0 -1
  166. package/.output/server/chunks/build/settings-ByUXa46k.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"nitro.mjs","sources":["../../../../node_modules/.pnpm/uncrypto@0.1.3/node_modules/uncrypto/dist/crypto.node.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.DfCzGthR.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.D9ehKjSh.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.By9qWDAI.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.CipVM6lf.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/adapters/node.mjs","../../../../node_modules/.pnpm/destr@2.0.5/node_modules/destr/dist/index.mjs","../../../../node_modules/.pnpm/ufo@1.6.1/node_modules/ufo/dist/index.mjs","../../../../node_modules/.pnpm/cookie-es@1.2.2/node_modules/cookie-es/dist/index.mjs","../../../../node_modules/.pnpm/radix3@1.1.2/node_modules/radix3/dist/index.mjs","../../../../node_modules/.pnpm/defu@6.1.4/node_modules/defu/dist/defu.mjs","../../../../node_modules/.pnpm/node-mock-http@1.0.4/node_modules/node-mock-http/dist/index.mjs","../../../../node_modules/.pnpm/h3@1.15.4/node_modules/h3/dist/index.mjs","../../../../node_modules/.pnpm/hookable@5.5.3/node_modules/hookable/dist/index.mjs","../../../../node_modules/.pnpm/node-fetch-native@1.6.7/node_modules/node-fetch-native/dist/native.mjs","../../../../node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch/dist/shared/ofetch.CWycOUEr.mjs","../../../../node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch/dist/node.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/dist/shared/unstorage.zVDD2mZo.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/dist/index.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/drivers/utils/index.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/drivers/utils/node-fs.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/drivers/fs-lite.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/storage.mjs","../../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/shared/ohash.D__AXeF1.mjs","../../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/crypto/node/index.mjs","../../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/hash.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/cache.mjs","../../../../node_modules/.pnpm/klona@2.0.6/node_modules/klona/dist/index.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___d_a6b79d18884e342815abf8a85cd13f2d/node_modules/@nuxt/nitro-server/dist/runtime/utils/config.js","../../../../app/app.config.ts","../../../../node_modules/.pnpm/scule@1.3.0/node_modules/scule/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/utils.env.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/config.mjs","../../../../node_modules/.pnpm/unctx@2.5.0/node_modules/unctx/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/context.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/route-rules.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/utils.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___d_a6b79d18884e342815abf8a85cd13f2d/node_modules/@nuxt/nitro-server/dist/runtime/utils/error.js","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___d_a6b79d18884e342815abf8a85cd13f2d/node_modules/@nuxt/nitro-server/dist/runtime/handlers/error.js","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/error/utils.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/error/prod.mjs","../../../../node_modules/.pnpm/@nuxtjs+color-mode@3.5.2_magicast@0.5.1/node_modules/@nuxtjs/color-mode/dist/runtime/nitro-plugin.js","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/plugin.mjs","../../../../server/plugins/00.env-validate.ts","../../../../server/plugins/01.api-token.ts","../../../../server/db/schema.ts","../../../../server/utils/db-state.ts","../../../../server/db/index.ts","../../../../server/db/migrate.ts","../../../../server/utils/auth.ts","../../../../server/db/seed.ts","../../../../server/plugins/02.database.ts","../../../../server/utils/path-validator.ts","../../../../server/utils/frontmatter.ts","../../../../server/utils/document-sync.ts","../../../../server/plugins/03.file-watcher.ts","../../../../server/utils/agent-registry.ts","../../../../server/utils/notification-bus.ts","../../../../server/utils/notify-resource.ts","../../../../server/utils/log-token-usage.ts","../../../../server/services/agent-executor.ts","../../../../server/services/cron-scheduler.ts","../../../../server/utils/agent-cleanup.ts","../../../../server/plugins/04.cron-agents.ts","../../../../server/plugins/05.skills-catalog.ts","../../../../server/bridge/registry.ts","../../../../server/utils/crypto.ts","../../../../server/utils/get-secret.ts","../../../../server/bridge/router.ts","../../../../server/bridge/adapters/telegram.ts","../../../../server/bridge/adapters/discord.ts","../../../../server/bridge/adapters/imessage.ts","../../../../server/bridge/adapters/google.ts","../../../../server/bridge/adapters/email.ts","../../../../server/bridge/lifecycle.ts","../../../../server/plugins/06.message-bridge.ts","../../../../node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/static.mjs","../../../../server/middleware/auth.ts","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/renderer.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___d_a6b79d18884e342815abf8a85cd13f2d/node_modules/@nuxt/nitro-server/dist/runtime/utils/paths.js","../../../../node_modules/.pnpm/ufo@1.6.3/node_modules/ufo/dist/index.mjs","../../../../shared/utils/language-detection.ts","../../../../shared/utils/notification-defaults.ts","../../../../server/utils/chat-session-manager.ts","../../../../server/utils/db-guard.ts","../../../../server/utils/pty-manager.ts","../../../../server/utils/skills-path.ts","../../../../node_modules/.cache/nuxt/.nuxt/nuxt-icon-server-bundle.mjs","../../../../node_modules/.pnpm/@nuxt+icon@2.1.1_magicast@0.5.1_vite@7.3.0_@types+node@25.0.8_jiti@2.6.1_lightningcss@1_01287b657f4a2f684624a151274b0e62/node_modules/@nuxt/icon/dist/runtime/server/api.js","../../../../node_modules/.pnpm/@nuxtjs+mdc@0.20.0_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/highlighter/event-handler.js","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/app.mjs","../../../../node_modules/.pnpm/cookie-es@2.0.0/node_modules/cookie-es/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/lib/http-graceful-shutdown.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/shutdown.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/presets/node/runtime/node-server.mjs"],"names":["isPlainObject","decode","JOIN_LEADING_SLASH_RE","withTrailingSlash","hasLeadingSlash","withLeadingSlash","joinURL","getQuery","isNonEmptyURL","parse","tryDecode","serialize","createRouter","f","h","c","i","l","createError","process","parse$1","mergeHeaders","s","nodeFetch","fetch","Headers","Headers$1","AbortController$1","$fetch","normalizeKey","defineDriver","DRIVER_NAME","dirname","fsPromises","resolve","fsp","hash","_inlineAppConfig","createRadixRouter","join","schema.user","schema.session","schema.account","schema.verification","existsSync","createHash","basename","readFile","schema.documents","writeFile","readdir","watch","__publicField","EventEmitter","schema.tokenUsage","schema.cronAgentRuns","schema.cronAgents","schema.skillsCatalog","schema.bridgeMessages","_a","_b","_c","_d","normalized","schema.bridges","session","pty","colonIdx","key","val","nitroApp","callNodeRequestHandler","fetchNodeRequestHandler","gracefulShutdown","HttpsServer","HttpServer","wsAdapter"],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,40,41,42,43,77,78,80,81,82,89,90,91,92,93,94,95,96]}
1
+ {"version":3,"file":"nitro.mjs","sources":["../../../../node_modules/.pnpm/uncrypto@0.1.3/node_modules/uncrypto/dist/crypto.node.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.DfCzGthR.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.D9ehKjSh.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.By9qWDAI.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.CipVM6lf.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/adapters/node.mjs","../../../../node_modules/.pnpm/destr@2.0.5/node_modules/destr/dist/index.mjs","../../../../node_modules/.pnpm/ufo@1.6.1/node_modules/ufo/dist/index.mjs","../../../../node_modules/.pnpm/cookie-es@1.2.2/node_modules/cookie-es/dist/index.mjs","../../../../node_modules/.pnpm/radix3@1.1.2/node_modules/radix3/dist/index.mjs","../../../../node_modules/.pnpm/defu@6.1.4/node_modules/defu/dist/defu.mjs","../../../../node_modules/.pnpm/node-mock-http@1.0.4/node_modules/node-mock-http/dist/index.mjs","../../../../node_modules/.pnpm/h3@1.15.4/node_modules/h3/dist/index.mjs","../../../../node_modules/.pnpm/hookable@5.5.3/node_modules/hookable/dist/index.mjs","../../../../node_modules/.pnpm/node-fetch-native@1.6.7/node_modules/node-fetch-native/dist/native.mjs","../../../../node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch/dist/shared/ofetch.CWycOUEr.mjs","../../../../node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch/dist/node.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/dist/shared/unstorage.zVDD2mZo.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/dist/index.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/drivers/utils/index.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/drivers/utils/node-fs.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/drivers/fs-lite.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/storage.mjs","../../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/shared/ohash.D__AXeF1.mjs","../../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/crypto/node/index.mjs","../../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/hash.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/cache.mjs","../../../../node_modules/.pnpm/klona@2.0.6/node_modules/klona/dist/index.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___d_a6b79d18884e342815abf8a85cd13f2d/node_modules/@nuxt/nitro-server/dist/runtime/utils/config.js","../../../../app/app.config.ts","../../../../node_modules/.pnpm/scule@1.3.0/node_modules/scule/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/utils.env.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/config.mjs","../../../../node_modules/.pnpm/unctx@2.5.0/node_modules/unctx/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/context.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/route-rules.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/utils.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___d_a6b79d18884e342815abf8a85cd13f2d/node_modules/@nuxt/nitro-server/dist/runtime/utils/error.js","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___d_a6b79d18884e342815abf8a85cd13f2d/node_modules/@nuxt/nitro-server/dist/runtime/handlers/error.js","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/error/utils.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/error/prod.mjs","../../../../node_modules/.pnpm/@nuxtjs+color-mode@3.5.2_magicast@0.5.1/node_modules/@nuxtjs/color-mode/dist/runtime/nitro-plugin.js","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/plugin.mjs","../../../../server/plugins/00.env-validate.ts","../../../../server/plugins/01.api-token.ts","../../../../server/db/schema.ts","../../../../server/utils/db-state.ts","../../../../server/db/index.ts","../../../../server/db/migrate.ts","../../../../server/utils/auth.ts","../../../../server/db/seed.ts","../../../../server/plugins/02.database.ts","../../../../server/utils/path-validator.ts","../../../../server/utils/frontmatter.ts","../../../../server/utils/document-sync.ts","../../../../server/plugins/03.file-watcher.ts","../../../../server/utils/agent-registry.ts","../../../../server/utils/notification-bus.ts","../../../../server/utils/notify-resource.ts","../../../../server/utils/log-token-usage.ts","../../../../server/services/agent-executor.ts","../../../../server/services/cron-scheduler.ts","../../../../server/utils/agent-cleanup.ts","../../../../server/plugins/04.cron-agents.ts","../../../../server/plugins/05.skills-catalog.ts","../../../../server/bridge/registry.ts","../../../../server/utils/crypto.ts","../../../../server/utils/get-secret.ts","../../../../server/bridge/router.ts","../../../../server/bridge/adapters/telegram.ts","../../../../server/bridge/adapters/discord.ts","../../../../server/bridge/adapters/imessage.ts","../../../../server/bridge/adapters/google.ts","../../../../server/bridge/adapters/email.ts","../../../../server/bridge/lifecycle.ts","../../../../server/plugins/06.message-bridge.ts","../../../../node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/static.mjs","../../../../server/middleware/auth.ts","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/renderer.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___d_a6b79d18884e342815abf8a85cd13f2d/node_modules/@nuxt/nitro-server/dist/runtime/utils/paths.js","../../../../node_modules/.pnpm/ufo@1.6.3/node_modules/ufo/dist/index.mjs","../../../../shared/utils/language-detection.ts","../../../../shared/utils/notification-defaults.ts","../../../../server/utils/chat-session-manager.ts","../../../../server/utils/db-guard.ts","../../../../server/utils/pty-manager.ts","../../../../server/utils/skills-path.ts","../../../../node_modules/.cache/nuxt/.nuxt/nuxt-icon-server-bundle.mjs","../../../../node_modules/.pnpm/@nuxt+icon@2.1.1_magicast@0.5.1_vite@7.3.0_@types+node@25.0.8_jiti@2.6.1_lightningcss@1_01287b657f4a2f684624a151274b0e62/node_modules/@nuxt/icon/dist/runtime/server/api.js","../../../../node_modules/.pnpm/@nuxtjs+mdc@0.20.0_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/highlighter/event-handler.js","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/app.mjs","../../../../node_modules/.pnpm/cookie-es@2.0.0/node_modules/cookie-es/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/lib/http-graceful-shutdown.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/shutdown.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/presets/node/runtime/node-server.mjs"],"names":["isPlainObject","decode","JOIN_LEADING_SLASH_RE","withTrailingSlash","hasLeadingSlash","withLeadingSlash","joinURL","getQuery","isNonEmptyURL","parse","tryDecode","serialize","createRouter","f","h","c","i","l","createError","process","parse$1","mergeHeaders","s","nodeFetch","fetch","Headers","Headers$1","AbortController","AbortController$1","$fetch","normalizeKey","defineDriver","DRIVER_NAME","dirname","fsPromises","resolve","fsp","hash","_inlineAppConfig","createRadixRouter","join","schema.user","schema.session","schema.account","schema.verification","existsSync","createHash","basename","readFile","schema.documents","writeFile","readdir","watch","__publicField","EventEmitter","schema.tokenUsage","schema.cronAgentRuns","schema.cronAgents","schema.skillsCatalog","schema.bridgeMessages","_a","_b","_c","_d","normalized","schema.bridges","session","pty","colonIdx","key","val","nitroApp","callNodeRequestHandler","fetchNodeRequestHandler","gracefulShutdown","HttpsServer","HttpServer","wsAdapter"],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,40,41,42,43,77,78,80,81,82,89,90,91,92,93,94,95,96]}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cognova-prod",
3
- "version": "0.2.8",
3
+ "version": "0.2.9",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "dependencies": {
@@ -195,6 +195,50 @@ function formatDate(dateStr: string) {
195
195
  })
196
196
  }
197
197
 
198
+ // === App URL ===
199
+ const appUrl = ref('')
200
+ const appUrlSaving = ref(false)
201
+
202
+ async function loadAppUrl() {
203
+ try {
204
+ const { data } = await $fetch<{ data: { key: string, value: string } }>('/api/secrets/APP_URL')
205
+ appUrl.value = data.value || ''
206
+ } catch {
207
+ appUrl.value = ''
208
+ }
209
+ }
210
+
211
+ async function saveAppUrl() {
212
+ appUrlSaving.value = true
213
+ try {
214
+ if (appUrl.value) {
215
+ // Upsert the APP_URL secret
216
+ const exists = secretsData.value.some(s => s.key === 'APP_URL')
217
+ if (exists) {
218
+ await $fetch('/api/secrets/APP_URL', {
219
+ method: 'PUT',
220
+ body: { value: appUrl.value, description: 'Public URL for webhooks and auth callbacks' }
221
+ })
222
+ } else {
223
+ await $fetch('/api/secrets', {
224
+ method: 'POST',
225
+ body: { key: 'APP_URL', value: appUrl.value, description: 'Public URL for webhooks and auth callbacks' }
226
+ })
227
+ }
228
+ } else {
229
+ // Remove the secret if cleared
230
+ const exists = secretsData.value.some(s => s.key === 'APP_URL')
231
+ if (exists)
232
+ await $fetch('/api/secrets/APP_URL', { method: 'DELETE' })
233
+ }
234
+ toast.add({ title: 'Public URL saved', description: 'Restart running integrations for changes to take effect.', color: 'success' })
235
+ await fetchSecrets()
236
+ } catch {
237
+ toast.add({ title: 'Failed to save URL', color: 'error' })
238
+ }
239
+ appUrlSaving.value = false
240
+ }
241
+
198
242
  // === Notification Preferences ===
199
243
  const notifPrefs = ref<NotificationPreferences>({ ...defaultNotificationPreferences })
200
244
  const notifLoading = ref(false)
@@ -328,12 +372,13 @@ const platformNamePlaceholders: Record<BridgePlatform, string> = {
328
372
  email: 'Work Email'
329
373
  }
330
374
 
331
- const platformSecretHints: Record<BridgePlatform, string | null> = {
332
- telegram: 'TELEGRAM_BOT_TOKEN',
333
- discord: 'DISCORD_BOT_TOKEN',
334
- imessage: null,
335
- google: null,
336
- email: null
375
+ // Secrets required to create a bridge (blocks creation if missing)
376
+ const platformRequiredSecrets: Record<BridgePlatform, string[]> = {
377
+ telegram: ['TELEGRAM_BOT_TOKEN'],
378
+ discord: ['DISCORD_BOT_TOKEN'],
379
+ imessage: [],
380
+ google: [],
381
+ email: []
337
382
  }
338
383
 
339
384
  const platformOptions: { value: BridgePlatform, label: string, icon: string }[] = [
@@ -344,6 +389,13 @@ const platformOptions: { value: BridgePlatform, label: string, icon: string }[]
344
389
  { value: 'email', label: 'Email (IMAP)', icon: 'i-lucide-at-sign' }
345
390
  ]
346
391
 
392
+ function getMissingSecrets(platform: BridgePlatform): string[] {
393
+ const required = platformRequiredSecrets[platform]
394
+ if (!required.length) return []
395
+ const existing = new Set(secretsData.value.map(s => s.key))
396
+ return required.filter(k => !existing.has(k))
397
+ }
398
+
347
399
  const healthColors: Record<string, string> = {
348
400
  connected: 'text-success',
349
401
  disconnected: 'text-dimmed',
@@ -486,6 +538,15 @@ async function handleBridgeCreate() {
486
538
  toast.add({ title: 'Name is required', color: 'error' })
487
539
  return
488
540
  }
541
+ const missing = getMissingSecrets(bridgeForm.platform)
542
+ if (missing.length) {
543
+ toast.add({
544
+ title: 'Missing required secrets',
545
+ description: `Add ${missing.join(', ')} in the Secrets tab first.`,
546
+ color: 'error'
547
+ })
548
+ return
549
+ }
489
550
  bridgeSaving.value = true
490
551
  try {
491
552
  await $fetch('/api/bridges', {
@@ -532,11 +593,12 @@ async function handleDeleteBridge() {
532
593
  }
533
594
  }
534
595
 
535
- // Load secrets + notification prefs + bridges when component mounts
596
+ // Load secrets + notification prefs + bridges + app url when component mounts
536
597
  onMounted(() => {
537
598
  fetchSecrets()
538
599
  loadNotificationPrefs()
539
600
  fetchBridges()
601
+ loadAppUrl()
540
602
  })
541
603
 
542
604
  // Form handlers
@@ -943,6 +1005,35 @@ async function handlePasswordSubmit() {
943
1005
  <!-- App Tab -->
944
1006
  <template #app>
945
1007
  <div class="max-w-2xl mx-auto py-6">
1008
+ <!-- Public URL -->
1009
+ <div class="mb-8">
1010
+ <h3 class="text-lg font-semibold mb-1">
1011
+ Public URL
1012
+ </h3>
1013
+ <p class="text-sm text-dimmed mb-4">
1014
+ The publicly accessible URL for this instance. Used for Telegram webhooks, auth callbacks, and other integrations that need to reach your server.
1015
+ </p>
1016
+ <div class="flex gap-2">
1017
+ <UInput
1018
+ v-model="appUrl"
1019
+ placeholder="https://example.com"
1020
+ class="flex-1"
1021
+ />
1022
+ <UButton
1023
+ :loading="appUrlSaving"
1024
+ @click="saveAppUrl"
1025
+ >
1026
+ Save
1027
+ </UButton>
1028
+ </div>
1029
+ <p class="text-xs text-dimmed mt-2">
1030
+ Leave empty to use long-polling for Telegram instead of webhooks. Changes require restarting running integrations.
1031
+ </p>
1032
+ </div>
1033
+
1034
+ <USeparator class="mb-8" />
1035
+
1036
+ <!-- Notification Preferences -->
946
1037
  <div class="mb-6">
947
1038
  <h3 class="text-lg font-semibold mb-1">
948
1039
  Notification Preferences
@@ -1153,6 +1244,34 @@ async function handlePasswordSubmit() {
1153
1244
  class="w-full"
1154
1245
  />
1155
1246
  </UFormField>
1247
+
1248
+ <!-- Missing secrets warning -->
1249
+ <div
1250
+ v-if="getMissingSecrets(bridgeForm.platform).length"
1251
+ class="flex items-start gap-2 rounded-lg bg-error/10 border border-error/20 p-3 text-sm"
1252
+ >
1253
+ <UIcon
1254
+ name="i-lucide-alert-triangle"
1255
+ class="size-4 mt-0.5 text-error shrink-0"
1256
+ />
1257
+ <div>
1258
+ <p class="font-medium text-error">
1259
+ Missing required secrets
1260
+ </p>
1261
+ <p class="text-dimmed mt-1">
1262
+ Add the following in Settings &rarr; Secrets before creating:
1263
+ </p>
1264
+ <ul class="mt-1 space-y-0.5">
1265
+ <li
1266
+ v-for="key in getMissingSecrets(bridgeForm.platform)"
1267
+ :key="key"
1268
+ >
1269
+ <code class="text-xs bg-elevated px-1.5 py-0.5 rounded">{{ key }}</code>
1270
+ </li>
1271
+ </ul>
1272
+ </div>
1273
+ </div>
1274
+
1156
1275
  <UFormField
1157
1276
  label="Name"
1158
1277
  name="name"
@@ -1172,6 +1291,7 @@ async function handlePasswordSubmit() {
1172
1291
  </UButton>
1173
1292
  <UButton
1174
1293
  :loading="bridgeSaving"
1294
+ :disabled="getMissingSecrets(bridgeForm.platform).length > 0"
1175
1295
  @click="handleBridgeCreate"
1176
1296
  >
1177
1297
  Create
@@ -1229,7 +1349,7 @@ async function handlePasswordSubmit() {
1229
1349
  <div class="space-y-4">
1230
1350
  <!-- Secret hint -->
1231
1351
  <div
1232
- v-if="editingBridge && platformSecretHints[editingBridge.platform]"
1352
+ v-if="editingBridge && platformRequiredSecrets[editingBridge.platform].length"
1233
1353
  class="flex items-start gap-2 rounded-lg bg-elevated p-3 text-sm"
1234
1354
  >
1235
1355
  <UIcon
@@ -1237,7 +1357,14 @@ async function handlePasswordSubmit() {
1237
1357
  class="size-4 mt-0.5 text-dimmed shrink-0"
1238
1358
  />
1239
1359
  <span class="text-dimmed">
1240
- Requires secret <code class="bg-elevated px-1 py-0.5 rounded text-xs">{{ platformSecretHints[editingBridge.platform] }}</code> in the Secrets tab.
1360
+ Requires
1361
+ <template
1362
+ v-for="(key, i) in platformRequiredSecrets[editingBridge.platform]"
1363
+ :key="key"
1364
+ >
1365
+ <code class="bg-elevated px-1 py-0.5 rounded text-xs">{{ key }}</code><template v-if="i < platformRequiredSecrets[editingBridge.platform].length - 1">, </template>
1366
+ </template>
1367
+ in the Secrets tab.
1241
1368
  </span>
1242
1369
  </div>
1243
1370
 
@@ -1329,6 +1456,18 @@ async function handlePasswordSubmit() {
1329
1456
  class="w-full"
1330
1457
  />
1331
1458
  </UFormField>
1459
+ <div
1460
+ v-if="bridgeConfigForm.strategy === 'bluebubbles' && !secretsData.some(s => s.key === 'BLUEBUBBLES_PASSWORD')"
1461
+ class="flex items-start gap-2 rounded-lg bg-error/10 border border-error/20 p-3 text-sm"
1462
+ >
1463
+ <UIcon
1464
+ name="i-lucide-alert-triangle"
1465
+ class="size-4 mt-0.5 text-error shrink-0"
1466
+ />
1467
+ <span class="text-dimmed">
1468
+ BlueBubbles requires secret <code class="text-xs bg-elevated px-1.5 py-0.5 rounded">BLUEBUBBLES_PASSWORD</code> in the Secrets tab.
1469
+ </span>
1470
+ </div>
1332
1471
  <UFormField
1333
1472
  v-if="bridgeConfigForm.strategy === 'bluebubbles'"
1334
1473
  label="BlueBubbles URL"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cognova",
3
3
  "type": "module",
4
- "version": "0.2.8",
4
+ "version": "0.2.9",
5
5
  "description": "Personal knowledge management system with Claude Code integration",
6
6
  "repository": {
7
7
  "type": "git",
@@ -56,10 +56,11 @@ interface TelegramDocument {
56
56
  }
57
57
 
58
58
  /**
59
- * Telegram adapter using the Bot API webhook mode.
59
+ * Telegram adapter supporting both webhook and long-polling modes.
60
+ *
61
+ * - If a public APP_URL is configured, registers a webhook with Telegram.
62
+ * - Otherwise, falls back to long-polling via getUpdates.
60
63
  *
61
- * When started, registers a webhook with Telegram so they push updates to us.
62
- * When stopped, removes the webhook.
63
64
  * Messages are sent via the Bot API sendMessage endpoint.
64
65
  */
65
66
  export class TelegramAdapter implements BridgeAdapter {
@@ -70,6 +71,9 @@ export class TelegramAdapter implements BridgeAdapter {
70
71
  private botToken: string | null = null
71
72
  private webhookSecret: string
72
73
  private healthy = false
74
+ private polling = false
75
+ private pollAbort: AbortController | null = null
76
+ private pollOffset = 0
73
77
 
74
78
  constructor(
75
79
  bridgeId: string,
@@ -92,6 +96,11 @@ export class TelegramAdapter implements BridgeAdapter {
92
96
  throw new Error('TELEGRAM_BOT_TOKEN secret not found. Add it in Settings → Secrets.')
93
97
  }
94
98
 
99
+ // Also check for APP_URL in secrets store (set via Settings → App)
100
+ const appUrlSecret = await getSecretValue('APP_URL')
101
+ if (appUrlSecret && !process.env.APP_URL)
102
+ process.env.APP_URL = appUrlSecret
103
+
95
104
  // Validate token by calling getMe
96
105
  const me = await this.apiCall('getMe')
97
106
  if (!me.ok) {
@@ -105,7 +114,7 @@ export class TelegramAdapter implements BridgeAdapter {
105
114
 
106
115
  console.log(`[telegram] Bot @${me.result?.username} authenticated`)
107
116
 
108
- // Register webhook
117
+ // Register webhook or start polling
109
118
  const webhookUrl = this.getWebhookUrl()
110
119
  if (webhookUrl) {
111
120
  const setResult = await this.apiCall('setWebhook', {
@@ -120,13 +129,19 @@ export class TelegramAdapter implements BridgeAdapter {
120
129
 
121
130
  console.log(`[telegram] Webhook registered: ${webhookUrl}`)
122
131
  } else {
123
- console.log('[telegram] No webhook URL configured using polling or manual webhook setup')
132
+ // Delete any existing webhook before polling (Telegram requires this)
133
+ await this.apiCall('deleteWebhook')
134
+ console.log('[telegram] No public URL configured — starting long-polling')
135
+ this.startPolling()
124
136
  }
125
137
 
126
138
  this.healthy = true
127
139
  }
128
140
 
129
141
  async stop(): Promise<void> {
142
+ // Stop polling loop if running
143
+ this.stopPolling()
144
+
130
145
  if (this.botToken) {
131
146
  try {
132
147
  await this.apiCall('deleteWebhook')
@@ -238,6 +253,54 @@ export class TelegramAdapter implements BridgeAdapter {
238
253
  return headerValue === this.webhookSecret
239
254
  }
240
255
 
256
+ // ─── Polling ─────────────────────────────────────
257
+
258
+ private startPolling(): void {
259
+ this.polling = true
260
+ this.pollAbort = new AbortController()
261
+ void this.pollLoop()
262
+ }
263
+
264
+ private stopPolling(): void {
265
+ this.polling = false
266
+ if (this.pollAbort) {
267
+ this.pollAbort.abort()
268
+ this.pollAbort = null
269
+ }
270
+ }
271
+
272
+ private async pollLoop(): Promise<void> {
273
+ while (this.polling && this.botToken) {
274
+ try {
275
+ const result = await this.apiCall('getUpdates', {
276
+ offset: this.pollOffset,
277
+ timeout: 30,
278
+ allowed_updates: ['message', 'edited_message']
279
+ }, this.pollAbort?.signal)
280
+
281
+ if (!this.polling) break
282
+
283
+ if (result.ok && Array.isArray(result.result)) {
284
+ for (const update of result.result as TelegramUpdate[]) {
285
+ this.pollOffset = update.update_id + 1
286
+ await this.handleUpdate(update).catch((error: unknown) => {
287
+ console.error('[telegram] Error handling polled update:', error)
288
+ })
289
+ }
290
+ } else if (!result.ok) {
291
+ console.error('[telegram] Polling error:', result.description)
292
+ // Back off on error to avoid hammering the API
293
+ await sleep(5000)
294
+ }
295
+ } catch (error) {
296
+ if (!this.polling) break
297
+ // Network error — back off and retry
298
+ console.error('[telegram] Poll network error:', error instanceof Error ? error.message : error)
299
+ await sleep(5000)
300
+ }
301
+ }
302
+ }
303
+
241
304
  // ─── Private helpers ───────────────────────────
242
305
 
243
306
  private getWebhookUrl(): string | null {
@@ -253,18 +316,25 @@ export class TelegramAdapter implements BridgeAdapter {
253
316
  return null
254
317
  }
255
318
 
256
- private async apiCall(method: string, body?: Record<string, unknown>): Promise<TelegramApiResponse> {
319
+ private async apiCall(
320
+ method: string,
321
+ body?: Record<string, unknown>,
322
+ signal?: AbortSignal
323
+ ): Promise<TelegramApiResponse> {
257
324
  const url = `${TELEGRAM_API}/bot${this.botToken}/${method}`
258
325
 
259
326
  try {
260
327
  const response = await fetch(url, {
261
328
  method: 'POST',
262
329
  headers: { 'Content-Type': 'application/json' },
263
- body: body ? JSON.stringify(body) : undefined
330
+ body: body ? JSON.stringify(body) : undefined,
331
+ signal
264
332
  })
265
333
 
266
334
  return await response.json() as TelegramApiResponse
267
335
  } catch (error) {
336
+ if (error instanceof DOMException && error.name === 'AbortError')
337
+ return { ok: false, description: 'Request aborted' }
268
338
  return {
269
339
  ok: false,
270
340
  description: error instanceof Error ? error.message : 'Network error'
@@ -283,7 +353,8 @@ export class TelegramAdapter implements BridgeAdapter {
283
353
  interface TelegramApiResponse {
284
354
  ok: boolean
285
355
  description?: string
286
- result?: Record<string, unknown>
356
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
357
+ result?: any
287
358
  }
288
359
 
289
360
  function formatTelegramName(from?: TelegramMessage['from']): string {
@@ -292,3 +363,7 @@ function formatTelegramName(from?: TelegramMessage['from']): string {
292
363
  if (from.last_name) parts.push(from.last_name)
293
364
  return parts.join(' ')
294
365
  }
366
+
367
+ function sleep(ms: number): Promise<void> {
368
+ return new Promise(resolve => setTimeout(resolve, ms))
369
+ }
@@ -1 +0,0 @@
1
- import{X as e}from"./njnzCNrH.js";function a(r,u="reka"){return r||`${u}-${e?.()}`}export{a as u};
@@ -1 +0,0 @@
1
- import{d as a,n as i}from"./njnzCNrH.js";import{u}from"./Bkc1Hpcf.js";const r=a(()=>{const{isAuthenticated:e,isPending:t}=u();if(!t.value&&!e.value)return i("/login")});export{r as default};
@@ -1 +0,0 @@
1
- import{_ as Xe}from"./BLm0UviR.js";import{_ as Ze,a as el}from"./B0xuHXvN.js";import{_ as ll}from"./SfaNtyKS.js";import{_ as tl}from"./D-5A6cMB.js";import{a as al,ag as sl,ah as B,e as u,f as ol,q as nl,Q as ce,S as n,R as m,T as a,ab as o,G as f,C as t,ai as x,aj as T,a9 as S,W as il,_ as dl,ae as _,aa as p,U as rl,ak as pe,al as K}from"./njnzCNrH.js";import{_ as ul}from"./BhYoxmLV.js";import{_ as ml}from"./Bhhg7oSf.js";import{_ as cl}from"./BxShcW0K.js";import{_ as pl}from"./DqzomZoo.js";import{_ as fl}from"./BUC36BHp.js";import{_ as gl}from"./C7qhmmZh.js";import{_ as vl}from"./B5SnZL2l.js";import{_ as bl}from"./GYf-vnR6.js";import{_ as yl}from"./DmDPSvxi.js";import{u as wl,d as de}from"./it8syoZI.js";import{u as _l}from"./Bkc1Hpcf.js";import"./C-Ygk9x5.js";import"./BHn8tRjg.js";import"./vES4kgx7.js";import"./Pn7VD6uQ.js";import"./88opOQSr.js";import"./D2kQkOaG.js";import"./iBaivqi8.js";import"./dB7G4iIC.js";import"./D7pKT3IW.js";import"./Bwn-CRYH.js";import"./ImPsUDiH.js";import"./CClsKJ9A.js";import"./BIo-9u_O.js";import"./yJ9vRvHj.js";import"./BZBNJD7U.js";import"./BYtVdUIW.js";import"./DLUvsixu.js";import"./B9zgEO8N.js";import"./D9aYkNhQ.js";import"./CrmE-JGu.js";import"./BCCYopTB.js";import"./DmcMCO8x.js";const hl={class:"p-6"},kl={class:"space-y-8 max-w-2xl mx-auto py-6"},xl={class:"py-6"},Vl={class:"flex items-center justify-between mb-6"},Pl={class:"text-sm bg-elevated px-2 py-0.5 rounded"},Sl={class:"text-dimmed"},Cl={class:"text-dimmed text-sm"},Ul={class:"flex gap-2 justify-end"},Il={class:"py-12 text-center"},$l={class:"py-6"},El={class:"flex items-center justify-between mb-6"},Dl={key:0,class:"space-y-3"},Nl={key:1,class:"py-12 text-center"},Al={key:2,class:"space-y-3"},Ml=["onClick"],Bl={class:"flex items-center justify-between"},Tl={class:"flex items-center gap-3"},Hl={class:"font-medium"},Ll={class:"text-sm text-dimmed ml-2"},Fl={class:"flex items-center gap-3"},Ol={key:0,class:"text-xs text-dimmed mt-1 pl-8"},jl={class:"max-w-2xl mx-auto py-6"},zl={key:0,class:"space-y-3"},Kl={key:1,class:"space-y-2"},Rl={class:"flex items-center justify-between px-4 py-3"},ql={class:"flex items-center gap-3"},Gl={class:"font-medium"},Yl={key:0,class:"border-t border-default px-4 py-3 space-y-2 bg-elevated/50"},Wl={class:"text-sm text-dimmed capitalize"},Jl={class:"mt-6"},Ql={class:"space-y-8 max-w-xl mx-auto py-6"},Xl={class:"space-y-4"},Zl={class:"text-lg font-semibold"},et={class:"flex justify-end gap-2 pt-4"},lt={class:"mb-4"},tt={class:"bg-elevated px-2 py-0.5 rounded"},at={class:"flex justify-end gap-2 pt-6"},st={class:"space-y-4"},ot={class:"flex justify-end gap-2 pt-4"},nt={class:"mb-4"},it={class:"flex justify-end gap-2 pt-6"},dt={class:"flex items-center gap-2"},rt={class:"text-lg font-semibold"},ut={class:"space-y-4"},mt={key:0,class:"flex items-start gap-2 rounded-lg bg-elevated p-3 text-sm"},ct={class:"text-dimmed"},pt={class:"bg-elevated px-1 py-0.5 rounded text-xs"},ft={class:"space-y-2"},gt=["checked","onChange"],vt={class:"text-sm"},bt={class:"grid grid-cols-2 gap-4"},yt={class:"grid grid-cols-2 gap-4"},wt={class:"flex justify-end gap-2 pt-4"},oa=al({__name:"settings",setup(_t){const{user:fe,updateProfile:ge,changeEmail:ve,changePassword:be}=_l(),d=sl(),{updatePreferences:ye}=wl(),H=B({name:""}),G=u(!1),U=B({newEmail:""}),Y=u(!1),y=B({currentPassword:"",newPassword:"",confirmPassword:""}),W=u(!1),re=u([]),J=u(!1),C=u(!1),I=u(!1),L=u(null),Q=u(!1),h=u(null),g=B({key:"",value:"",description:""});ol(()=>fe.value,i=>{i&&(H.name=i.name||"",U.newEmail=i.email||"")},{immediate:!0});async function X(){J.value=!0;try{const{data:i}=await $fetch("/api/secrets");re.value=i}catch{d.add({title:"Failed to load secrets",color:"error"})}J.value=!1}const we=[{label:"Account",icon:"i-lucide-user",value:"account",slot:"account"},{label:"Secrets",icon:"i-lucide-key",value:"secrets",slot:"secrets"},{label:"Integrations",icon:"i-lucide-plug",value:"integrations",slot:"integrations"},{label:"App",icon:"i-lucide-settings",value:"app",slot:"app"}],_e=[{accessorKey:"key",header:"Key"},{accessorKey:"description",header:"Description"},{accessorKey:"updatedAt",header:"Last Updated"},{accessorKey:"actions",header:""}];function he(){h.value=null,g.key="",g.value="",g.description="",C.value=!0}function ke(i){h.value=i,g.key=i.key,g.value="",g.description=i.description||"",C.value=!0}function xe(i){L.value=i,I.value=!0}async function Ve(){if(!g.key||!h.value&&!g.value){d.add({title:"Missing fields",description:h.value?"Key is required.":"Key and value are required.",color:"error"});return}Q.value=!0;try{h.value?(await $fetch(`/api/secrets/${h.value.key}`,{method:"PUT",body:{value:g.value||void 0,description:g.description||void 0}}),d.add({title:"Secret updated",color:"success"})):(await $fetch("/api/secrets",{method:"POST",body:{key:g.key,value:g.value,description:g.description||void 0}}),d.add({title:"Secret created",color:"success"})),C.value=!1,await X()}catch(i){const e=i;d.add({title:h.value?"Failed to update secret":"Failed to create secret",description:e.data?.message||"An error occurred",color:"error"})}Q.value=!1}async function Pe(){if(L.value)try{await $fetch(`/api/secrets/${L.value.key}`,{method:"DELETE"}),d.add({title:"Secret deleted",color:"success"}),I.value=!1,L.value=null,await X()}catch{d.add({title:"Failed to delete secret",color:"error"})}}function Se(i){return new Date(i).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}const k=u({...de}),Z=u(!1),ee=u(!1),F=u(new Set),Ce=[{key:"task",label:"Tasks",icon:"i-lucide-check-square",subtypes:["create","edit","delete","restore"]},{key:"project",label:"Projects",icon:"i-lucide-folder",subtypes:["create","edit","delete"]},{key:"agent",label:"Agents",icon:"i-lucide-bot",subtypes:["create","edit","delete","run","complete","fail","cancel"]},{key:"document",label:"Documents",icon:"i-lucide-file-text",subtypes:["edit","delete","restore"]},{key:"memory",label:"Memories",icon:"i-lucide-brain",subtypes:["create","delete"]},{key:"reminder",label:"Reminders",icon:"i-lucide-bell",subtypes:["create"]},{key:"secret",label:"Secrets",icon:"i-lucide-key-round",subtypes:["create","edit","delete"]},{key:"hook",label:"Hooks",icon:"i-lucide-webhook",subtypes:["create"]},{key:"conversation",label:"Conversations",icon:"i-lucide-message-square",subtypes:["delete"]},{key:"bridge",label:"Bridges",icon:"i-lucide-plug",subtypes:["create","edit","delete","complete","fail"]}];async function Ue(){Z.value=!0;try{const{data:i}=await $fetch("/api/settings");k.value={...de,...i.notifications}}catch{k.value={...de}}Z.value=!1}async function Ie(){ee.value=!0;try{await $fetch("/api/settings",{method:"PUT",body:{notifications:k.value}}),ye(k.value),d.add({title:"Notification preferences saved",color:"success"})}catch{d.add({title:"Failed to save preferences",color:"error"})}ee.value=!1}function $e(i){F.value.has(i)?F.value.delete(i):F.value.add(i)}function Ee(i,e){k.value[i]={...k.value[i],enabled:e}}function De(i,e,P){const N=k.value[i];k.value[i]={...N,subtypes:{...N?.subtypes,[e]:P}}}const le=u([]),te=u(!1),$=u(!1),ae=u(!1),E=u(!1),O=u(null),V=B({platform:"telegram",name:""}),D=u(!1),w=u(null),se=u(!1),s=B({name:"",botUsername:"",allowedChatIds:"",listenMode:"mentions",guildId:"",channelId:"",strategy:"imsg",allowedNumbers:"",blueBubblesUrl:"",enabledServices:[],account:"",imapHost:"",imapPort:"",smtpHost:"",smtpPort:"",emailAddress:""}),Ne=[{value:"mentions",label:"Mentions & DMs"},{value:"dm",label:"DMs only"},{value:"all",label:"All messages"}],Ae=[{value:"imsg",label:"Local (imsg CLI)"},{value:"bluebubbles",label:"BlueBubbles"}],Me=[{value:"gmail",label:"Gmail"},{value:"calendar",label:"Calendar"},{value:"drive",label:"Drive"},{value:"contacts",label:"Contacts"},{value:"tasks",label:"Tasks"}],Be={telegram:"My Telegram Bot",discord:"My Discord Bot",imessage:"iMessage Bridge",google:"Google Suite",email:"Work Email"},ue={telegram:"TELEGRAM_BOT_TOKEN",discord:"DISCORD_BOT_TOKEN",imessage:null,google:null,email:null},R=[{value:"telegram",label:"Telegram",icon:"i-lucide-send"},{value:"discord",label:"Discord",icon:"i-lucide-message-circle"},{value:"imessage",label:"iMessage",icon:"i-lucide-smartphone"},{value:"google",label:"Google Suite",icon:"i-lucide-mail"},{value:"email",label:"Email (IMAP)",icon:"i-lucide-at-sign"}],Te={connected:"text-success",disconnected:"text-dimmed",error:"text-error",unconfigured:"text-dimmed"};async function j(){te.value=!0;try{const{data:i}=await $fetch("/api/bridges");le.value=i}catch{d.add({title:"Failed to load integrations",color:"error"})}te.value=!1}function He(i){w.value=i,s.name=i.name;const e=i.config?JSON.parse(i.config):{};switch(s.botUsername="",s.allowedChatIds="",s.listenMode="mentions",s.guildId="",s.channelId="",s.strategy="imsg",s.allowedNumbers="",s.blueBubblesUrl="",s.enabledServices=[],s.account="",s.imapHost="",s.imapPort="",s.smtpHost="",s.smtpPort="",s.emailAddress="",i.platform){case"telegram":s.botUsername=e.botUsername||"",s.allowedChatIds=(e.allowedChatIds||[]).join(", ");break;case"discord":s.listenMode=e.listenMode||"mentions",s.guildId=e.guildId||"",s.channelId=e.channelId||"";break;case"imessage":s.strategy=e.strategy||"imsg",s.allowedNumbers=(e.allowedNumbers||[]).join(", "),s.blueBubblesUrl=e.blueBubblesUrl||"";break;case"google":s.enabledServices=e.enabledServices||[],s.account=e.account||"";break;case"email":s.imapHost=e.imapHost||"",s.imapPort=e.imapPort?.toString()||"",s.smtpHost=e.smtpHost||"",s.smtpPort=e.smtpPort?.toString()||"",s.emailAddress=e.emailAddress||"";break}D.value=!0}async function Le(){if(!w.value)return;const i=w.value.platform;let e={};switch(w.value.config&&(e=JSON.parse(w.value.config)),i){case"telegram":e.botUsername=s.botUsername||void 0,e.allowedChatIds=s.allowedChatIds?s.allowedChatIds.split(",").map(P=>P.trim()).filter(Boolean):void 0;break;case"discord":e.listenMode=s.listenMode,e.guildId=s.guildId||void 0,e.channelId=s.channelId||void 0;break;case"imessage":e.strategy=s.strategy,e.allowedNumbers=s.allowedNumbers?s.allowedNumbers.split(",").map(P=>P.trim()).filter(Boolean):void 0,e.blueBubblesUrl=s.blueBubblesUrl||void 0;break;case"google":e.enabledServices=s.enabledServices,e.account=s.account||void 0;break;case"email":e.imapHost=s.imapHost||void 0,e.imapPort=s.imapPort?Number(s.imapPort):void 0,e.smtpHost=s.smtpHost||void 0,e.smtpPort=s.smtpPort?Number(s.smtpPort):void 0,e.emailAddress=s.emailAddress||void 0;break}se.value=!0;try{await $fetch(`/api/bridges/${w.value.id}`,{method:"PUT",body:{name:s.name,config:e}}),d.add({title:"Integration updated",color:"success"}),D.value=!1,await j()}catch(P){const N=P;d.add({title:"Failed to update integration",description:N.data?.message,color:"error"})}se.value=!1}function Fe(){V.platform="telegram",V.name="",$.value=!0}async function Oe(){if(!V.name){d.add({title:"Name is required",color:"error"});return}ae.value=!0;try{await $fetch("/api/bridges",{method:"POST",body:{platform:V.platform,name:V.name}}),d.add({title:"Integration created",color:"success"}),$.value=!1,await j()}catch(i){const e=i;d.add({title:"Failed to create integration",description:e.data?.message,color:"error"})}ae.value=!1}async function je(i){try{await $fetch(`/api/bridges/${i.id}`,{method:"PUT",body:{enabled:!i.enabled}}),await j()}catch{d.add({title:"Failed to update integration",color:"error"})}}function ze(i){O.value=i,E.value=!0}async function Ke(){if(O.value)try{await $fetch(`/api/bridges/${O.value.id}`,{method:"DELETE"}),d.add({title:"Integration deleted",color:"success"}),E.value=!1,O.value=null,await j()}catch{d.add({title:"Failed to delete integration",color:"error"})}}nl(()=>{X(),Ue(),j()});async function Re(){G.value=!0;const i=await ge({name:H.name});i.error?d.add({title:"Update failed",description:i.error.message,color:"error"}):d.add({title:"Profile updated",description:"Your name has been updated successfully.",color:"success"}),G.value=!1}async function qe(){if(!U.newEmail){d.add({title:"Email required",description:"Please enter a new email address.",color:"error"});return}Y.value=!0;const i=await ve(U.newEmail);i.error?d.add({title:"Email change failed",description:i.error.message,color:"error"}):d.add({title:"Email updated",description:"Your email has been changed successfully.",color:"success"}),Y.value=!1}async function Ge(){if(y.newPassword!==y.confirmPassword){d.add({title:"Passwords do not match",description:"Please make sure your new passwords match.",color:"error"});return}if(!y.currentPassword||!y.newPassword){d.add({title:"Missing fields",description:"Please fill in all password fields.",color:"error"});return}W.value=!0;const i=await be({currentPassword:y.currentPassword,newPassword:y.newPassword});i.error?d.add({title:"Password change failed",description:i.error.message,color:"error"}):(d.add({title:"Password changed",description:"Your password has been changed successfully.",color:"success"}),y.currentPassword="",y.newPassword="",y.confirmPassword=""),W.value=!1}return(i,e)=>{const P=Xe,N=el,c=ll,r=tl,v=il,q=ul,me=ml,A=dl,Ye=cl,M=pl,oe=fl,We=gl,Je=vl,z=bl,ne=yl,Qe=Ze;return m(),ce(Qe,{id:"settings",grow:""},{default:n(()=>[a(N,{title:"Settings"},{right:n(()=>[a(P)]),_:1}),o("div",hl,[a(Je,null,{fallback:n(()=>[o("div",Ql,[a(M,{class:"h-10 w-full"}),o("div",Xl,[a(M,{class:"h-5 w-20"}),a(M,{class:"h-10 w-full"}),a(M,{class:"h-10 w-28"})])])]),default:n(()=>[a(We,{items:we,"default-value":"account",class:"w-full mx-auto",ui:{list:"max-w-xl"}},{account:n(()=>[o("div",kl,[o("div",null,[e[37]||(e[37]=o("h3",{class:"text-lg font-semibold mb-4"}," Profile ",-1)),a(q,{state:t(H),class:"space-y-4",onSubmit:Re},{default:n(()=>[a(r,{label:"Name",name:"name"},{default:n(()=>[a(c,{modelValue:t(H).name,"onUpdate:modelValue":e[0]||(e[0]=l=>t(H).name=l),placeholder:"Your name",class:"w-full"},null,8,["modelValue"])]),_:1}),a(v,{type:"submit",loading:t(G)},{default:n(()=>[...e[36]||(e[36]=[p(" Save Name ",-1)])]),_:1},8,["loading"])]),_:1},8,["state"])]),a(me),o("div",null,[e[39]||(e[39]=o("h3",{class:"text-lg font-semibold mb-4"}," Email Address ",-1)),a(q,{state:t(U),class:"space-y-4",onSubmit:qe},{default:n(()=>[a(r,{label:"Email",name:"newEmail"},{default:n(()=>[a(c,{modelValue:t(U).newEmail,"onUpdate:modelValue":e[1]||(e[1]=l=>t(U).newEmail=l),type:"email",placeholder:"your@email.com",class:"w-full"},null,8,["modelValue"])]),_:1}),a(v,{type:"submit",loading:t(Y)},{default:n(()=>[...e[38]||(e[38]=[p(" Change Email ",-1)])]),_:1},8,["loading"])]),_:1},8,["state"])]),a(me),o("div",null,[e[41]||(e[41]=o("h3",{class:"text-lg font-semibold mb-4"}," Change Password ",-1)),a(q,{state:t(y),class:"space-y-4",onSubmit:Ge},{default:n(()=>[a(r,{label:"Current Password",name:"currentPassword"},{default:n(()=>[a(c,{modelValue:t(y).currentPassword,"onUpdate:modelValue":e[2]||(e[2]=l=>t(y).currentPassword=l),type:"password",class:"w-full"},null,8,["modelValue"])]),_:1}),a(r,{label:"New Password",name:"newPassword"},{default:n(()=>[a(c,{modelValue:t(y).newPassword,"onUpdate:modelValue":e[3]||(e[3]=l=>t(y).newPassword=l),type:"password",class:"w-full"},null,8,["modelValue"])]),_:1}),a(r,{label:"Confirm New Password",name:"confirmPassword"},{default:n(()=>[a(c,{modelValue:t(y).confirmPassword,"onUpdate:modelValue":e[4]||(e[4]=l=>t(y).confirmPassword=l),type:"password",class:"w-full"},null,8,["modelValue"])]),_:1}),a(v,{type:"submit",loading:t(W)},{default:n(()=>[...e[40]||(e[40]=[p(" Change Password ",-1)])]),_:1},8,["loading"])]),_:1},8,["state"])])])]),secrets:n(()=>[o("div",xl,[o("div",Vl,[e[43]||(e[43]=o("div",null,[o("h3",{class:"text-lg font-semibold"}," Secrets "),o("p",{class:"text-sm text-dimmed"}," Encrypted key-value store for skills and integrations. ")],-1)),a(v,{icon:"i-lucide-plus",onClick:he},{default:n(()=>[...e[42]||(e[42]=[p(" Add Secret ",-1)])]),_:1})]),a(Ye,{columns:_e,data:t(re),loading:t(J)},{"key-cell":n(({row:l})=>[o("code",Pl,_(l.original.key),1)]),"description-cell":n(({row:l})=>[o("span",Sl,_(l.original.description||"—"),1)]),"updatedAt-cell":n(({row:l})=>[o("span",Cl,_(Se(l.original.updatedAt)),1)]),"actions-cell":n(({row:l})=>[o("div",Ul,[a(v,{variant:"ghost",icon:"i-lucide-pencil",size:"xs",onClick:b=>ke(l.original)},null,8,["onClick"]),a(v,{variant:"ghost",color:"error",icon:"i-lucide-trash-2",size:"xs",onClick:b=>xe(l.original)},null,8,["onClick"])])]),empty:n(()=>[o("div",Il,[a(A,{name:"i-lucide-key",class:"size-12 mx-auto mb-4 text-dimmed"}),e[44]||(e[44]=o("p",{class:"text-dimmed"}," No secrets yet. Add one to get started. ",-1))])]),_:1},8,["data","loading"])])]),integrations:n(()=>[o("div",$l,[o("div",El,[e[46]||(e[46]=o("div",null,[o("h3",{class:"text-lg font-semibold"}," Integrations "),o("p",{class:"text-sm text-dimmed"}," Connect external platforms to the message bridge. ")],-1)),a(v,{icon:"i-lucide-plus",onClick:Fe},{default:n(()=>[...e[45]||(e[45]=[p(" Add Integration ",-1)])]),_:1})]),t(te)?(m(),f("div",Dl,[(m(),f(x,null,T(3,l=>a(M,{key:l,class:"h-16 w-full"})),64))])):t(le).length===0?(m(),f("div",Nl,[a(A,{name:"i-lucide-plug",class:"size-12 mx-auto mb-4 text-dimmed"}),e[47]||(e[47]=o("p",{class:"text-dimmed"}," No integrations configured. ",-1)),e[48]||(e[48]=o("p",{class:"text-sm text-dimmed mt-1"}," Connect Telegram, Discord, iMessage, or Google Suite. ",-1))])):(m(),f("div",Al,[(m(!0),f(x,null,T(t(le),l=>(m(),f("div",{key:l.id,class:"border border-default rounded-lg px-4 py-3 cursor-pointer hover:bg-elevated/50 transition-colors",onClick:b=>He(l)},[o("div",Bl,[o("div",Tl,[a(A,{name:R.find(b=>b.value===l.platform)?.icon||"i-lucide-plug",class:"size-5 text-dimmed"},null,8,["name"]),o("div",null,[o("span",Hl,_(l.name),1),o("span",Ll,_(R.find(b=>b.value===l.platform)?.label),1)])]),o("div",Fl,[o("span",{class:rl(["text-xs capitalize",Te[l.healthStatus]||"text-dimmed"])},_(l.healthStatus),3),a(oe,{"model-value":l.enabled,onClick:e[5]||(e[5]=pe(()=>{},["stop"])),"onUpdate:modelValue":b=>je(l)},null,8,["model-value","onUpdate:modelValue"]),a(v,{variant:"ghost",color:"error",icon:"i-lucide-trash-2",size:"xs",onClick:pe(b=>ze(l),["stop"])},null,8,["onClick"])])]),l.healthMessage?(m(),f("p",Ol,_(l.healthMessage),1)):S("",!0)],8,Ml))),128))]))])]),app:n(()=>[o("div",jl,[e[50]||(e[50]=o("div",{class:"mb-6"},[o("h3",{class:"text-lg font-semibold mb-1"}," Notification Preferences "),o("p",{class:"text-sm text-dimmed"}," Choose which resource changes show toast notifications. ")],-1)),t(Z)?(m(),f("div",zl,[(m(),f(x,null,T(5,l=>a(M,{key:l,class:"h-12 w-full"})),64))])):(m(),f("div",Kl,[(m(),f(x,null,T(Ce,l=>o("div",{key:l.key,class:"border border-default rounded-lg"},[o("div",Rl,[o("div",ql,[a(v,{variant:"ghost",size:"xs",icon:t(F).has(l.key)?"i-lucide-chevron-down":"i-lucide-chevron-right",onClick:b=>$e(l.key)},null,8,["icon","onClick"]),a(A,{name:l.icon,class:"size-5 text-dimmed"},null,8,["name"]),o("span",Gl,_(l.label),1)]),a(oe,{"model-value":t(k)[l.key]?.enabled??!1,"onUpdate:modelValue":b=>Ee(l.key,b)},null,8,["model-value","onUpdate:modelValue"])]),t(F).has(l.key)&&t(k)[l.key]?.enabled?(m(),f("div",Yl,[(m(!0),f(x,null,T(l.subtypes,b=>(m(),f("div",{key:b,class:"flex items-center justify-between pl-11"},[o("span",Wl,_(b),1),a(oe,{"model-value":t(k)[l.key]?.subtypes?.[b]!==!1,size:"sm","onUpdate:modelValue":ie=>De(l.key,b,ie)},null,8,["model-value","onUpdate:modelValue"])]))),128))])):S("",!0)])),64))])),o("div",Jl,[a(v,{loading:t(ee),onClick:Ie},{default:n(()=>[...e[49]||(e[49]=[p(" Save Preferences ",-1)])]),_:1},8,["loading"])])])]),_:1})]),_:1})]),a(z,{open:t(C),"onUpdate:open":e[10]||(e[10]=l=>K(C)?C.value=l:null)},{header:n(()=>[o("h3",Zl,_(t(h)?"Edit Secret":"Add Secret"),1)]),body:n(()=>[a(q,{state:t(g),class:"space-y-4",onSubmit:Ve},{default:n(()=>[a(r,{label:"Key",name:"key",hint:t(h)?"":"SCREAMING_SNAKE_CASE"},{default:n(()=>[a(c,{modelValue:t(g).key,"onUpdate:modelValue":e[6]||(e[6]=l=>t(g).key=l),disabled:!!t(h),placeholder:"MY_API_KEY",class:"w-full font-mono"},null,8,["modelValue","disabled"])]),_:1},8,["hint"]),a(r,{label:"Value",name:"value",hint:t(h)?"Leave empty to keep current value":""},{default:n(()=>[a(c,{modelValue:t(g).value,"onUpdate:modelValue":e[7]||(e[7]=l=>t(g).value=l),type:"password",placeholder:t(h)?"••••••••":"Secret value",class:"w-full"},null,8,["modelValue","placeholder"])]),_:1},8,["hint"]),a(r,{label:"Description",name:"description"},{default:n(()=>[a(c,{modelValue:t(g).description,"onUpdate:modelValue":e[8]||(e[8]=l=>t(g).description=l),placeholder:"Optional description",class:"w-full"},null,8,["modelValue"])]),_:1}),o("div",et,[a(v,{variant:"ghost",onClick:e[9]||(e[9]=l=>C.value=!1)},{default:n(()=>[...e[51]||(e[51]=[p(" Cancel ",-1)])]),_:1}),a(v,{type:"submit",loading:t(Q)},{default:n(()=>[p(_(t(h)?"Update":"Create"),1)]),_:1},8,["loading"])])]),_:1},8,["state"])]),_:1},8,["open"]),a(z,{open:t(I),"onUpdate:open":e[12]||(e[12]=l=>K(I)?I.value=l:null)},{header:n(()=>[...e[52]||(e[52]=[o("h3",{class:"text-lg font-semibold"}," Delete Secret ",-1)])]),body:n(()=>[o("p",lt,[e[53]||(e[53]=p(" Are you sure you want to delete ",-1)),o("code",tt,_(t(L)?.key),1),e[54]||(e[54]=p("? ",-1))]),e[57]||(e[57]=o("p",{class:"text-sm text-dimmed"}," This action cannot be undone. Any skills using this secret will stop working. ",-1)),o("div",at,[a(v,{variant:"ghost",onClick:e[11]||(e[11]=l=>I.value=!1)},{default:n(()=>[...e[55]||(e[55]=[p(" Cancel ",-1)])]),_:1}),a(v,{color:"error",onClick:Pe},{default:n(()=>[...e[56]||(e[56]=[p(" Delete ",-1)])]),_:1})])]),_:1},8,["open"]),a(z,{open:t($),"onUpdate:open":e[16]||(e[16]=l=>K($)?$.value=l:null)},{header:n(()=>[...e[58]||(e[58]=[o("h3",{class:"text-lg font-semibold"}," Add Integration ",-1)])]),body:n(()=>[o("div",st,[a(r,{label:"Platform",name:"platform"},{default:n(()=>[a(ne,{modelValue:t(V).platform,"onUpdate:modelValue":e[13]||(e[13]=l=>t(V).platform=l),items:R,"value-key":"value",class:"w-full"},null,8,["modelValue"])]),_:1}),a(r,{label:"Name",name:"name"},{default:n(()=>[a(c,{modelValue:t(V).name,"onUpdate:modelValue":e[14]||(e[14]=l=>t(V).name=l),placeholder:Be[t(V).platform],class:"w-full"},null,8,["modelValue","placeholder"])]),_:1}),o("div",ot,[a(v,{variant:"ghost",onClick:e[15]||(e[15]=l=>$.value=!1)},{default:n(()=>[...e[59]||(e[59]=[p(" Cancel ",-1)])]),_:1}),a(v,{loading:t(ae),onClick:Oe},{default:n(()=>[...e[60]||(e[60]=[p(" Create ",-1)])]),_:1},8,["loading"])])])]),_:1},8,["open"]),a(z,{open:t(E),"onUpdate:open":e[18]||(e[18]=l=>K(E)?E.value=l:null)},{header:n(()=>[...e[61]||(e[61]=[o("h3",{class:"text-lg font-semibold"}," Delete Integration ",-1)])]),body:n(()=>[o("p",nt,[e[62]||(e[62]=p(" Are you sure you want to delete ",-1)),o("strong",null,_(t(O)?.name),1),e[63]||(e[63]=p("? ",-1))]),e[66]||(e[66]=o("p",{class:"text-sm text-dimmed"}," This will remove the integration and all associated message history. ",-1)),o("div",it,[a(v,{variant:"ghost",onClick:e[17]||(e[17]=l=>E.value=!1)},{default:n(()=>[...e[64]||(e[64]=[p(" Cancel ",-1)])]),_:1}),a(v,{color:"error",onClick:Ke},{default:n(()=>[...e[65]||(e[65]=[p(" Delete ",-1)])]),_:1})])]),_:1},8,["open"]),a(z,{open:t(D),"onUpdate:open":e[35]||(e[35]=l=>K(D)?D.value=l:null)},{header:n(()=>[o("div",dt,[a(A,{name:R.find(l=>l.value===t(w)?.platform)?.icon||"i-lucide-plug",class:"size-5"},null,8,["name"]),o("h3",rt," Configure "+_(t(w)?.name),1)])]),body:n(()=>[o("div",ut,[t(w)&&ue[t(w).platform]?(m(),f("div",mt,[a(A,{name:"i-lucide-info",class:"size-4 mt-0.5 text-dimmed shrink-0"}),o("span",ct,[e[67]||(e[67]=p(" Requires secret ",-1)),o("code",pt,_(ue[t(w).platform]),1),e[68]||(e[68]=p(" in the Secrets tab. ",-1))])])):S("",!0),a(r,{label:"Name",name:"name"},{default:n(()=>[a(c,{modelValue:t(s).name,"onUpdate:modelValue":e[19]||(e[19]=l=>t(s).name=l),placeholder:"Integration name",class:"w-full"},null,8,["modelValue"])]),_:1}),t(w)?.platform==="telegram"?(m(),f(x,{key:1},[a(r,{label:"Bot Username",name:"botUsername",hint:"Without the @ prefix"},{default:n(()=>[a(c,{modelValue:t(s).botUsername,"onUpdate:modelValue":e[20]||(e[20]=l=>t(s).botUsername=l),placeholder:"my_bot",class:"w-full"},null,8,["modelValue"])]),_:1}),a(r,{label:"Allowed Chat IDs",name:"allowedChatIds",hint:"Comma-separated. Leave empty for all."},{default:n(()=>[a(c,{modelValue:t(s).allowedChatIds,"onUpdate:modelValue":e[21]||(e[21]=l=>t(s).allowedChatIds=l),placeholder:"123456, -100789",class:"w-full"},null,8,["modelValue"])]),_:1})],64)):S("",!0),t(w)?.platform==="discord"?(m(),f(x,{key:2},[a(r,{label:"Listen Mode",name:"listenMode"},{default:n(()=>[a(ne,{modelValue:t(s).listenMode,"onUpdate:modelValue":e[22]||(e[22]=l=>t(s).listenMode=l),items:Ne,"value-key":"value",class:"w-full"},null,8,["modelValue"])]),_:1}),a(r,{label:"Server ID",name:"guildId",hint:"Optional. Limit to one server."},{default:n(()=>[a(c,{modelValue:t(s).guildId,"onUpdate:modelValue":e[23]||(e[23]=l=>t(s).guildId=l),placeholder:"Discord server ID",class:"w-full"},null,8,["modelValue"])]),_:1}),a(r,{label:"Channel ID",name:"channelId",hint:"Optional. Limit to one channel (for 'all' mode)."},{default:n(()=>[a(c,{modelValue:t(s).channelId,"onUpdate:modelValue":e[24]||(e[24]=l=>t(s).channelId=l),placeholder:"Discord channel ID",class:"w-full"},null,8,["modelValue"])]),_:1})],64)):S("",!0),t(w)?.platform==="imessage"?(m(),f(x,{key:3},[a(r,{label:"Strategy",name:"strategy"},{default:n(()=>[a(ne,{modelValue:t(s).strategy,"onUpdate:modelValue":e[25]||(e[25]=l=>t(s).strategy=l),items:Ae,"value-key":"value",class:"w-full"},null,8,["modelValue"])]),_:1}),t(s).strategy==="bluebubbles"?(m(),ce(r,{key:0,label:"BlueBubbles URL",name:"blueBubblesUrl"},{default:n(()=>[a(c,{modelValue:t(s).blueBubblesUrl,"onUpdate:modelValue":e[26]||(e[26]=l=>t(s).blueBubblesUrl=l),placeholder:"http://192.168.1.100:1234",class:"w-full"},null,8,["modelValue"])]),_:1})):S("",!0),a(r,{label:"Allowed Numbers",name:"allowedNumbers",hint:"Comma-separated. Leave empty for all."},{default:n(()=>[a(c,{modelValue:t(s).allowedNumbers,"onUpdate:modelValue":e[27]||(e[27]=l=>t(s).allowedNumbers=l),placeholder:"+15551234567, +15559876543",class:"w-full"},null,8,["modelValue"])]),_:1})],64)):S("",!0),t(w)?.platform==="google"?(m(),f(x,{key:4},[a(r,{label:"Enabled Services",name:"enabledServices"},{default:n(()=>[o("div",ft,[(m(),f(x,null,T(Me,l=>o("label",{key:l.value,class:"flex items-center gap-2 cursor-pointer"},[o("input",{type:"checkbox",checked:t(s).enabledServices.includes(l.value),class:"rounded",onChange:b=>t(s).enabledServices.includes(l.value)?t(s).enabledServices=t(s).enabledServices.filter(ie=>ie!==l.value):t(s).enabledServices.push(l.value)},null,40,gt),o("span",vt,_(l.label),1)])),64))])]),_:1}),a(r,{label:"Google Account",name:"account",hint:"Email used with gogcli"},{default:n(()=>[a(c,{modelValue:t(s).account,"onUpdate:modelValue":e[28]||(e[28]=l=>t(s).account=l),placeholder:"user@gmail.com",class:"w-full"},null,8,["modelValue"])]),_:1})],64)):S("",!0),t(w)?.platform==="email"?(m(),f(x,{key:5},[a(r,{label:"Email Address",name:"emailAddress"},{default:n(()=>[a(c,{modelValue:t(s).emailAddress,"onUpdate:modelValue":e[29]||(e[29]=l=>t(s).emailAddress=l),placeholder:"user@example.com",class:"w-full"},null,8,["modelValue"])]),_:1}),o("div",bt,[a(r,{label:"IMAP Host",name:"imapHost"},{default:n(()=>[a(c,{modelValue:t(s).imapHost,"onUpdate:modelValue":e[30]||(e[30]=l=>t(s).imapHost=l),placeholder:"imap.example.com",class:"w-full"},null,8,["modelValue"])]),_:1}),a(r,{label:"IMAP Port",name:"imapPort"},{default:n(()=>[a(c,{modelValue:t(s).imapPort,"onUpdate:modelValue":e[31]||(e[31]=l=>t(s).imapPort=l),placeholder:"993",class:"w-full"},null,8,["modelValue"])]),_:1})]),o("div",yt,[a(r,{label:"SMTP Host",name:"smtpHost"},{default:n(()=>[a(c,{modelValue:t(s).smtpHost,"onUpdate:modelValue":e[32]||(e[32]=l=>t(s).smtpHost=l),placeholder:"smtp.example.com",class:"w-full"},null,8,["modelValue"])]),_:1}),a(r,{label:"SMTP Port",name:"smtpPort"},{default:n(()=>[a(c,{modelValue:t(s).smtpPort,"onUpdate:modelValue":e[33]||(e[33]=l=>t(s).smtpPort=l),placeholder:"587",class:"w-full"},null,8,["modelValue"])]),_:1})])],64)):S("",!0),o("div",wt,[a(v,{variant:"ghost",onClick:e[34]||(e[34]=l=>D.value=!1)},{default:n(()=>[...e[69]||(e[69]=[p(" Cancel ",-1)])]),_:1}),a(v,{loading:t(se),onClick:Le},{default:n(()=>[...e[70]||(e[70]=[p(" Save ",-1)])]),_:1},8,["loading"])])])]),_:1},8,["open"])]),_:1})}}});export{oa as default};
@@ -1 +0,0 @@
1
- import"./njnzCNrH.js";const s=globalThis.setInterval;export{s};
@@ -1 +0,0 @@
1
- {"id":"410e449d-9fe8-43a0-ae07-80797693b9b8","timestamp":1771731269203,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}