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.
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{mfAEx0Kz.js → -JdScH3W.js} +1 -1
- package/.output/public/_nuxt/{CYQP4zpi.js → 0EY9Msdx.js} +1 -1
- package/.output/public/_nuxt/{BwyXWqBY.js → 1lOC4Si0.js} +1 -1
- package/.output/public/_nuxt/{DaBSQDif.js → 1zIQX9mh.js} +1 -1
- package/.output/public/_nuxt/{B9zgEO8N.js → 4Qy4OdWt.js} +1 -1
- package/.output/public/_nuxt/{DmDPSvxi.js → 4nN41Tyd.js} +1 -1
- package/.output/public/_nuxt/{cPPThz84.js → 5MZBbx-H.js} +1 -1
- package/.output/public/_nuxt/{DtJnWtpL.js → 6lIxuL6n.js} +1 -1
- package/.output/public/_nuxt/AUdD1uDD.js +1 -0
- package/.output/public/_nuxt/{D2kQkOaG.js → B-513wJW.js} +1 -1
- package/.output/public/_nuxt/{BBDxhFYY.js → B1vDCixB.js} +1 -1
- package/.output/public/_nuxt/{BjnQ1pI1.js → B2MVZlI-.js} +1 -1
- package/.output/public/_nuxt/{DmOS3vFH.js → B5JDxHxC.js} +1 -1
- package/.output/public/_nuxt/{njnzCNrH.js → B63LIwsW.js} +3 -3
- package/.output/public/_nuxt/{BqTdsCnW.js → B6bnHNWY.js} +1 -1
- package/.output/public/_nuxt/{SfaNtyKS.js → B6wYZD_K.js} +1 -1
- package/.output/public/_nuxt/{D4_89MZm.js → B8Ou5yh2.js} +1 -1
- package/.output/public/_nuxt/{zXvvpsZj.js → BE4Ndhrq.js} +1 -1
- package/.output/public/_nuxt/{DwIYtFfA.js → BES6FzF5.js} +1 -1
- package/.output/public/_nuxt/{BdxP21ep.js → BE_OHTBv.js} +1 -1
- package/.output/public/_nuxt/{BmdlymIW.js → BJ8jbKuq.js} +1 -1
- package/.output/public/_nuxt/{U3f6dy8i.js → BNBGEa-U.js} +1 -1
- package/.output/public/_nuxt/{C6FFW_cO.js → BOGXUgGg.js} +1 -1
- package/.output/public/_nuxt/{Cr0NfhPB.js → BQ1T6zWA.js} +1 -1
- package/.output/public/_nuxt/{B5SnZL2l.js → BVc_fOF1.js} +1 -1
- package/.output/public/_nuxt/{D4X6ONPF.js → BX6vcvkp.js} +1 -1
- package/.output/public/_nuxt/{GGcn5KPW.js → BYIq3eP8.js} +1 -1
- package/.output/public/_nuxt/{C24so3m7.js → BZqdzrSw.js} +2 -2
- package/.output/public/_nuxt/{BUC36BHp.js → BaYtugUf.js} +1 -1
- package/.output/public/_nuxt/{eE8TtXgC.js → Be5L93GM.js} +3 -3
- package/.output/public/_nuxt/{C1tCdK-M.js → BfECQayu.js} +1 -1
- package/.output/public/_nuxt/{CDkyQ1eQ.js → BgG2k-zy.js} +1 -1
- package/.output/public/_nuxt/{CewcVxDS.js → BhnONkIm.js} +1 -1
- package/.output/public/_nuxt/{-2AbaFNH.js → BjI5wb_q.js} +1 -1
- package/.output/public/_nuxt/{BnJ-6YDw.js → Bk9-HxOg.js} +1 -1
- package/.output/public/_nuxt/{nHSiDk8N.js → BltasKce.js} +1 -1
- package/.output/public/_nuxt/{CF33v_m5.js → Bp9kHdw6.js} +1 -1
- package/.output/public/_nuxt/{C7qhmmZh.js → Bsdcw5gr.js} +1 -1
- package/.output/public/_nuxt/{yJ9vRvHj.js → BsnhHCOa.js} +1 -1
- package/.output/public/_nuxt/{CSHcfejh.js → BwJVN9k0.js} +1 -1
- package/.output/public/_nuxt/{KEeoKtq_.js → BwVt3BzR.js} +1 -1
- package/.output/public/_nuxt/{BefOhWHD.js → BwdxQyyo.js} +1 -1
- package/.output/public/_nuxt/{BE1CVWts.js → BzTjmQCD.js} +1 -1
- package/.output/public/_nuxt/{B-AlyT2D.js → C1FhgWcI.js} +1 -1
- package/.output/public/_nuxt/{D_obX2Hj.js → C2DZeD9G.js} +1 -1
- package/.output/public/_nuxt/{BXtZVbmx.js → C3JOLqW1.js} +1 -1
- package/.output/public/_nuxt/{pHCJ6lhw.js → C4ScCUjy.js} +1 -1
- package/.output/public/_nuxt/{ImPsUDiH.js → C6HEirAm.js} +1 -1
- package/.output/public/_nuxt/{ijmD2cEW.js → C6UTTaCP.js} +1 -1
- package/.output/public/_nuxt/{CVYcsqmL.js → C8gtQaKB.js} +1 -1
- package/.output/public/_nuxt/{MWUW1sIF.js → C8tXHRIo.js} +1 -1
- package/.output/public/_nuxt/{36ZHqDPo.js → C8wa4Wh4.js} +1 -1
- package/.output/public/_nuxt/{D887s9k9.js → CDradKPE.js} +1 -1
- package/.output/public/_nuxt/{Dbfwn2zk.js → CEJh-OAl.js} +1 -1
- package/.output/public/_nuxt/{mT7Mt2d7.js → CGfVTQUF.js} +1 -1
- package/.output/public/_nuxt/{C075hYlX.js → CGgZuPnb.js} +1 -1
- package/.output/public/_nuxt/{CqFcWBkW.js → CH8kNq6W.js} +1 -1
- package/.output/public/_nuxt/{CO3hceDE.js → CIJ2MJdc.js} +1 -1
- package/.output/public/_nuxt/{DX_9SfFb.js → CIUZAp6g.js} +1 -1
- package/.output/public/_nuxt/{DtyyytRx.js → CXBOHJ2W.js} +1 -1
- package/.output/public/_nuxt/{BYtVdUIW.js → CY3x8iy3.js} +1 -1
- package/.output/public/_nuxt/{CQ3tAemj.js → CaLO8sre.js} +1 -1
- package/.output/public/_nuxt/{D4Cizi4y.js → CbTu13wM.js} +1 -1
- package/.output/public/_nuxt/{Dt5mOzXj.js → CfO_d5gC.js} +1 -1
- package/.output/public/_nuxt/{it8syoZI.js → Clr3MHUr.js} +1 -1
- package/.output/public/_nuxt/{B0xuHXvN.js → Cmdr5BNz.js} +1 -1
- package/.output/public/_nuxt/{2QHXgMyi.js → Cmj-BR0q.js} +1 -1
- package/.output/public/_nuxt/{CAfyXyeo.js → Cn83lLUb.js} +1 -1
- package/.output/public/_nuxt/{C21BjagS.js → CqMgz85Z.js} +1 -1
- package/.output/public/_nuxt/{BCCYopTB.js → CrW6y2-s.js} +1 -1
- package/.output/public/_nuxt/{CSjOaBKu.js → CrjNndEO.js} +1 -1
- package/.output/public/_nuxt/{DqzomZoo.js → Cs_udj6A.js} +1 -1
- package/.output/public/_nuxt/{BkO884Ds.js → CsbHYpNi.js} +3 -3
- package/.output/public/_nuxt/{BhYoxmLV.js → CwKe2KkK.js} +1 -1
- package/.output/public/_nuxt/{D79lbuWG.js → CwOUYOe5.js} +1 -1
- package/.output/public/_nuxt/{Drxf7nJz.js → CybU4a95.js} +1 -1
- package/.output/public/_nuxt/{Bwn-CRYH.js → CziltI1u.js} +1 -1
- package/.output/public/_nuxt/{BlsIfvSf.js → CzurfTnt.js} +1 -1
- package/.output/public/_nuxt/{D7pKT3IW.js → D-O8wAju.js} +1 -1
- package/.output/public/_nuxt/{BZBNJD7U.js → D1t0272g.js} +1 -1
- package/.output/public/_nuxt/{BLwctszt.js → D3RROe4s.js} +1 -1
- package/.output/public/_nuxt/{C6sX7TYf.js → D5G5UL_g.js} +1 -1
- package/.output/public/_nuxt/{CfY_bsV0.js → D76Dw8rw.js} +1 -1
- package/.output/public/_nuxt/{Pn7VD6uQ.js → D7DTZ0iS.js} +1 -1
- package/.output/public/_nuxt/{BxShcW0K.js → D7WbsJsa.js} +1 -1
- package/.output/public/_nuxt/{4XnyUc7C.js → D7iYVmH6.js} +1 -1
- package/.output/public/_nuxt/{CrmE-JGu.js → D8gh62A0.js} +1 -1
- package/.output/public/_nuxt/{Cve4psva.js → DA2RowFe.js} +1 -1
- package/.output/public/_nuxt/{ClGn48iq.js → DBKxzQ3U.js} +1 -1
- package/.output/public/_nuxt/{CbvNJVrk.js → DBuW01Fx.js} +1 -1
- package/.output/public/_nuxt/{Buf1PAiO.js → DCL9gWFw.js} +1 -1
- package/.output/public/_nuxt/{C-HCArYP.js → DGJKfutb.js} +1 -1
- package/.output/public/_nuxt/{0dqQoCHY.js → DHScQdvh.js} +1 -1
- package/.output/public/_nuxt/{BF3tVKtX.js → DI1FIvaM.js} +1 -1
- package/.output/public/_nuxt/{CY7f553E.js → DJ4pqxg-.js} +1 -1
- package/.output/public/_nuxt/{D9aYkNhQ.js → DJoRBCVm.js} +1 -1
- package/.output/public/_nuxt/{CXTrUfQ5.js → DLuRYg2p.js} +1 -1
- package/.output/public/_nuxt/DMy2sxuC.js +1 -0
- package/.output/public/_nuxt/{DLUvsixu.js → DQd-GXKJ.js} +1 -1
- package/.output/public/_nuxt/{DZEuR9ms.js → DSgubznn.js} +1 -1
- package/.output/public/_nuxt/{DKKY8zWm.js → DSynhNOO.js} +1 -1
- package/.output/public/_nuxt/{CzAZpALW.js → DTrFhdRO.js} +1 -1
- package/.output/public/_nuxt/{Bkc1Hpcf.js → DTu0K_pX.js} +1 -1
- package/.output/public/_nuxt/{BSA-U0so.js → DUDbJONU.js} +1 -1
- package/.output/public/_nuxt/{C13FKhqK.js → DYu_NYj3.js} +1 -1
- package/.output/public/_nuxt/{LQNRVThr.js → D_tCgCFX.js} +1 -1
- package/.output/public/_nuxt/{GYf-vnR6.js → DdXVAzIg.js} +1 -1
- package/.output/public/_nuxt/{DmlZSBjF.js → DfIqFkyp.js} +1 -1
- package/.output/public/_nuxt/{DJt7Rogf.js → Dj2opPDu.js} +1 -1
- package/.output/public/_nuxt/{C3tximD1.js → DjmFlCHK.js} +1 -1
- package/.output/public/_nuxt/{6QDVg5TO.js → DkhxRAb3.js} +1 -1
- package/.output/public/_nuxt/DlSJ4TF_.js +1 -0
- package/.output/public/_nuxt/{D-5A6cMB.js → DmmQUhEb.js} +1 -1
- package/.output/public/_nuxt/{BJUff9Ku.js → DvATBMPl.js} +1 -1
- package/.output/public/_nuxt/{dB7G4iIC.js → DwAJIRGg.js} +1 -1
- package/.output/public/_nuxt/{BrOKokPO.js → FYOLNuMV.js} +1 -1
- package/.output/public/_nuxt/{B8TQvzYX.js → Gy6_ehml.js} +1 -1
- package/.output/public/_nuxt/{DMb_1D81.js → HPOXd4gt.js} +1 -1
- package/.output/public/_nuxt/{BHn8tRjg.js → HlbU_z9a.js} +1 -1
- package/.output/public/_nuxt/{BwC62XRN.js → JQV21WEV.js} +1 -1
- package/.output/public/_nuxt/{CEDw8osP.js → NusIKwmA.js} +1 -1
- package/.output/public/_nuxt/{D-Ge96eV.js → OrcbFmB1.js} +1 -1
- package/.output/public/_nuxt/{D04CyXmf.js → Oy4_RPEZ.js} +1 -1
- package/.output/public/_nuxt/{BahXyh-A.js → Pa936BQP.js} +1 -1
- package/.output/public/_nuxt/PzQHm02e.js +1 -0
- package/.output/public/_nuxt/{BmaHzvZM.js → REP2-rzf.js} +1 -1
- package/.output/public/_nuxt/{DcbbfwCe.js → RRbnMIVe.js} +1 -1
- package/.output/public/_nuxt/{BVEFmI4I.js → TGVM5w2K.js} +1 -1
- package/.output/public/_nuxt/UbZP7wjm.js +1 -0
- package/.output/public/_nuxt/{B2Xfh7am.js → XJYoLoTi.js} +1 -1
- package/.output/public/_nuxt/{BLm0UviR.js → a9_LvIZ4.js} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/613faa5d-8ace-45e0-8274-b611cc4fd1ad.json +1 -0
- package/.output/public/_nuxt/entry.DkvuF_CR.css +1 -0
- package/.output/public/_nuxt/{CEz288t8.js → fVkHtgGF.js} +1 -1
- package/.output/public/_nuxt/{C-Ygk9x5.js → hm3ShyaF.js} +1 -1
- package/.output/public/_nuxt/{BvstjGHC.js → k16puyWi.js} +1 -1
- package/.output/public/_nuxt/{zO9MgHj2.js → myNwwtfj.js} +1 -1
- package/.output/public/_nuxt/{CClsKJ9A.js → nTCVPCKg.js} +1 -1
- package/.output/public/_nuxt/{CH_jROT9.js → pHQcHl8n.js} +1 -1
- package/.output/public/_nuxt/{B6G3NLfW.js → pNqWPbXW.js} +1 -1
- package/.output/public/_nuxt/{vES4kgx7.js → qWWnsfRV.js} +1 -1
- package/.output/public/_nuxt/{D_O7SlHm.js → rRYEvKFu.js} +1 -1
- package/.output/public/_nuxt/{JReYPlwF.js → svWfwR0T.js} +1 -1
- package/.output/public/_nuxt/{Bhhg7oSf.js → wgX1ldgZ.js} +1 -1
- package/.output/public/_nuxt/{B6-U3KqJ.js → xrh9hzzH.js} +2 -2
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/server.mjs +1 -1
- package/.output/server/chunks/build/{settings-ByUXa46k.mjs → settings-B2KXoGcz.mjs} +213 -26
- package/.output/server/chunks/build/settings-B2KXoGcz.mjs.map +1 -0
- package/.output/server/chunks/build/styles.mjs +2 -2
- package/.output/server/chunks/nitro/nitro.mjs +926 -870
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/package.json +1 -1
- package/app/pages/settings.vue +148 -9
- package/package.json +1 -1
- package/server/bridge/adapters/telegram.ts +83 -8
- package/.output/public/_nuxt/BIo-9u_O.js +0 -1
- package/.output/public/_nuxt/BMs0mHEp.js +0 -1
- package/.output/public/_nuxt/CE9_ECxx.js +0 -1
- package/.output/public/_nuxt/DmcMCO8x.js +0 -1
- package/.output/public/_nuxt/builds/meta/410e449d-9fe8-43a0-ae07-80797693b9b8.json +0 -1
- package/.output/public/_nuxt/entry._7ZkP07A.css +0 -1
- package/.output/public/_nuxt/iBaivqi8.js +0 -1
- 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]}
|
package/app/pages/settings.vue
CHANGED
|
@@ -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
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
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 → 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 &&
|
|
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
|
|
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
|
@@ -56,10 +56,11 @@ interface TelegramDocument {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
/**
|
|
59
|
-
* Telegram adapter
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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":[]}
|