@zmeel/server 0.3.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/registry.d.ts.map +1 -1
- package/dist/adapters/registry.js +11 -0
- package/dist/adapters/registry.js.map +1 -1
- package/dist/app.d.ts +1 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +10 -1
- package/dist/app.js.map +1 -1
- package/dist/auth/better-auth.d.ts +1 -1
- package/dist/auth/better-auth.d.ts.map +1 -1
- package/dist/auth/better-auth.js +13 -1
- package/dist/auth/better-auth.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -2
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +83 -0
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/billing.d.ts +3 -0
- package/dist/routes/billing.d.ts.map +1 -0
- package/dist/routes/billing.js +69 -0
- package/dist/routes/billing.js.map +1 -0
- package/dist/routes/companies.d.ts +3 -1
- package/dist/routes/companies.d.ts.map +1 -1
- package/dist/routes/companies.js +8 -3
- package/dist/routes/companies.js.map +1 -1
- package/dist/routes/employee-files.d.ts +3 -0
- package/dist/routes/employee-files.d.ts.map +1 -0
- package/dist/routes/employee-files.js +49 -0
- package/dist/routes/employee-files.js.map +1 -0
- package/dist/routes/health.d.ts +1 -0
- package/dist/routes/health.d.ts.map +1 -1
- package/dist/routes/health.js +7 -1
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/index.d.ts +1 -0
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +1 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/role-templates.d.ts +2 -0
- package/dist/routes/role-templates.d.ts.map +1 -0
- package/dist/routes/role-templates.js +18 -0
- package/dist/routes/role-templates.js.map +1 -0
- package/dist/routes/tool-connections.d.ts +3 -0
- package/dist/routes/tool-connections.d.ts.map +1 -0
- package/dist/routes/tool-connections.js +117 -0
- package/dist/routes/tool-connections.js.map +1 -0
- package/dist/services/activity.d.ts +3 -3
- package/dist/services/agents.d.ts +3 -3
- package/dist/services/approvals.d.ts +2 -2
- package/dist/services/billing.d.ts +35 -0
- package/dist/services/billing.d.ts.map +1 -0
- package/dist/services/billing.js +62 -0
- package/dist/services/billing.js.map +1 -0
- package/dist/services/composio.d.ts +40 -0
- package/dist/services/composio.d.ts.map +1 -0
- package/dist/services/composio.js +241 -0
- package/dist/services/composio.js.map +1 -0
- package/dist/services/costs.d.ts +2 -2
- package/dist/services/employee-files.d.ts +31 -0
- package/dist/services/employee-files.d.ts.map +1 -0
- package/dist/services/employee-files.js +69 -0
- package/dist/services/employee-files.js.map +1 -0
- package/dist/services/feedback.d.ts +2 -2
- package/dist/services/finance.d.ts +2 -2
- package/dist/services/goals.d.ts +6 -6
- package/dist/services/heartbeat.d.ts +17 -17
- package/dist/services/heartbeat.d.ts.map +1 -1
- package/dist/services/heartbeat.js +39 -1
- package/dist/services/heartbeat.js.map +1 -1
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/issues.d.ts +3 -3
- package/dist/services/managed-api-keys.d.ts +18 -0
- package/dist/services/managed-api-keys.d.ts.map +1 -0
- package/dist/services/managed-api-keys.js +51 -0
- package/dist/services/managed-api-keys.js.map +1 -0
- package/dist/services/plugin-registry.d.ts +73 -73
- package/dist/services/role-templates.d.ts +24 -0
- package/dist/services/role-templates.d.ts.map +1 -0
- package/dist/services/role-templates.js +969 -0
- package/dist/services/role-templates.js.map +1 -0
- package/dist/services/routines.d.ts +15 -15
- package/dist/services/saas-provisioning.d.ts +16 -0
- package/dist/services/saas-provisioning.d.ts.map +1 -0
- package/dist/services/saas-provisioning.js +21 -0
- package/dist/services/saas-provisioning.js.map +1 -0
- package/dist/services/workspace-runtime.d.ts +2 -2
- package/package.json +39 -32
- package/ui-dist/assets/{_basePickBy-D2fZf0o0.js → _basePickBy-CMk22i5t.js} +1 -1
- package/ui-dist/assets/{_baseUniq-CWLG_Xqf.js → _baseUniq-BRF60Jak.js} +1 -1
- package/ui-dist/assets/{arc-DeECLtLk.js → arc-BzLMeDv5.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-VXUJARFQ-a4Gzo-8u.js → architectureDiagram-VXUJARFQ-DInJrxvO.js} +1 -1
- package/ui-dist/assets/{blockDiagram-VD42YOAC-tsACr-ke.js → blockDiagram-VD42YOAC-vXi5zaBG.js} +1 -1
- package/ui-dist/assets/{c4Diagram-YG6GDRKO-CxIEiGp0.js → c4Diagram-YG6GDRKO-BJG8J9ib.js} +1 -1
- package/ui-dist/assets/channel-DrNAM91H.js +1 -0
- package/ui-dist/assets/{chunk-4BX2VUAB-DXyq1OVE.js → chunk-4BX2VUAB-CVqGTOhG.js} +1 -1
- package/ui-dist/assets/{chunk-55IACEB6-DE0IJwCp.js → chunk-55IACEB6-DdPau3JC.js} +1 -1
- package/ui-dist/assets/{chunk-B4BG7PRW-C4VgkuRm.js → chunk-B4BG7PRW-9mSiYUJq.js} +1 -1
- package/ui-dist/assets/{chunk-DI55MBZ5-DUnVODLP.js → chunk-DI55MBZ5-D-JZMTva.js} +1 -1
- package/ui-dist/assets/{chunk-FMBD7UC4-D14U1wU8.js → chunk-FMBD7UC4-CebhDcDU.js} +1 -1
- package/ui-dist/assets/{chunk-QN33PNHL--9Fa_-d7.js → chunk-QN33PNHL-C-TCIW_q.js} +1 -1
- package/ui-dist/assets/{chunk-QZHKN3VN-6vF9hrbB.js → chunk-QZHKN3VN-pYW0vu4N.js} +1 -1
- package/ui-dist/assets/{chunk-TZMSLE5B-BOKdVMfQ.js → chunk-TZMSLE5B-CJuXCdVr.js} +1 -1
- package/ui-dist/assets/classDiagram-2ON5EDUG-Bv0OJ-at.js +1 -0
- package/ui-dist/assets/classDiagram-v2-WZHVMYZB-Bv0OJ-at.js +1 -0
- package/ui-dist/assets/clone-zJKi4Z7Y.js +1 -0
- package/ui-dist/assets/{cose-bilkent-S5V4N54A-BSFYrItZ.js → cose-bilkent-S5V4N54A-CjBOmbda.js} +1 -1
- package/ui-dist/assets/{dagre-6UL2VRFP-D8xEb_jz.js → dagre-6UL2VRFP-Dnp0GsR_.js} +1 -1
- package/ui-dist/assets/{diagram-PSM6KHXK-kkdfif_P.js → diagram-PSM6KHXK-BXZZpwx8.js} +1 -1
- package/ui-dist/assets/{diagram-QEK2KX5R-BOA1wTkn.js → diagram-QEK2KX5R-qRdZZtvc.js} +1 -1
- package/ui-dist/assets/{diagram-S2PKOQOG-BMxIrdD_.js → diagram-S2PKOQOG-D_09g7dR.js} +1 -1
- package/ui-dist/assets/{erDiagram-Q2GNP2WA-O1OwJuJt.js → erDiagram-Q2GNP2WA-Ko72NRnY.js} +1 -1
- package/ui-dist/assets/{flowDiagram-NV44I4VS-Ca9TsVEe.js → flowDiagram-NV44I4VS-0djOGxYO.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-JELNMOA3-CZ3k4lR4.js → ganttDiagram-JELNMOA3-DGShyPo5.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-V2S2FVAM-CYXpu5VF.js → gitGraphDiagram-V2S2FVAM-o1Ofh8BV.js} +1 -1
- package/ui-dist/assets/{graph-Ct1Mwc2w.js → graph-SsVnC_wA.js} +1 -1
- package/ui-dist/assets/{index-2BV3lexL.js → index-B8jvXnJM.js} +1 -1
- package/ui-dist/assets/index-B8oh85kW.js +1262 -0
- package/ui-dist/assets/{index-B3cKIXfV.js → index-BKh69TGx.js} +1 -1
- package/ui-dist/assets/{index-ChGANpP5.js → index-BVJCR9-5.js} +1 -1
- package/ui-dist/assets/{index-b-wjeoWr.js → index-BZO7ebib.js} +1 -1
- package/ui-dist/assets/{index-CU0xjnJx.js → index-BgpO4lCF.js} +1 -1
- package/ui-dist/assets/{index-DZ5z-1W5.js → index-BkhtXozO.js} +1 -1
- package/ui-dist/assets/{index-zAFj8SiW.js → index-CAwQRx1H.js} +1 -1
- package/ui-dist/assets/{index-Cyi4EPvJ.js → index-CGzKzWEI.js} +1 -1
- package/ui-dist/assets/{index-DYf-Vmt-.js → index-CH6qpD_O.js} +1 -1
- package/ui-dist/assets/{index-BKVrlVnm.js → index-CKRSx4E0.js} +1 -1
- package/ui-dist/assets/{index-DcJU9_Xw.js → index-Ce3cNGGf.js} +1 -1
- package/ui-dist/assets/{index-DzvAUKSy.js → index-CfTkAwgM.js} +1 -1
- package/ui-dist/assets/{index-BoQp7qpa.js → index-CgYMoxFD.js} +1 -1
- package/ui-dist/assets/{index-1-xGTyG8.js → index-CmzUmqke.js} +1 -1
- package/ui-dist/assets/{index-Dbx0Jq5s.js → index-Cw_pE1Cj.js} +1 -1
- package/ui-dist/assets/{index-C016T1QA.js → index-Cyp3WxFA.js} +1 -1
- package/ui-dist/assets/{index-CKShy7qg.js → index-D9oAsAw_.js} +1 -1
- package/ui-dist/assets/{index-Bso7Ph2z.js → index-DFAXMkw_.js} +1 -1
- package/ui-dist/assets/index-DRwR8MX2.css +1 -0
- package/ui-dist/assets/{index-CTeTAOP4.js → index-DfZDOeuL.js} +1 -1
- package/ui-dist/assets/{index-DAhE9Tae.js → index-KUPFoIYr.js} +1 -1
- package/ui-dist/assets/{index-CX3xG_nU.js → index-x9SZ5O1I.js} +1 -1
- package/ui-dist/assets/{index-D4ERoZ49.js → index-yp89SiAI.js} +1 -1
- package/ui-dist/assets/{infoDiagram-HS3SLOUP-BBoge3td.js → infoDiagram-HS3SLOUP-BvBgHbDr.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-XKPGCS4Q-D6qBxJvS.js → journeyDiagram-XKPGCS4Q-CqqEPjJY.js} +1 -1
- package/ui-dist/assets/{kanban-definition-3W4ZIXB7-BKw70hff.js → kanban-definition-3W4ZIXB7-CXcCv_Ip.js} +1 -1
- package/ui-dist/assets/{layout-C-MelZ5a.js → layout-BSP84oTG.js} +1 -1
- package/ui-dist/assets/{linear-BDJBF_lN.js → linear-BXMkYkHB.js} +1 -1
- package/ui-dist/assets/{mermaid.core-C_LSSro9.js → mermaid.core-gUe3q3NG.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-VGOIOE7T-DKTz8YjL.js → mindmap-definition-VGOIOE7T-BkVsCY6g.js} +1 -1
- package/ui-dist/assets/{pieDiagram-ADFJNKIX-COzMH2F2.js → pieDiagram-ADFJNKIX-DbyIYf3g.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-AYHSOK5B-I8FRTFaI.js → quadrantDiagram-AYHSOK5B-D8PrHyHa.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-UZGBJVZJ-DI3nQy2l.js → requirementDiagram-UZGBJVZJ-CqHxrd_k.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-TZEHDZUN-Pf_PmYIt.js → sankeyDiagram-TZEHDZUN-YmSuzjgS.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-WL72ISMW-DLgaS7kB.js → sequenceDiagram-WL72ISMW-B-_tiWIt.js} +1 -1
- package/ui-dist/assets/{stateDiagram-FKZM4ZOC-BvMa1uU-.js → stateDiagram-FKZM4ZOC-lSSuHsyv.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-DolpXHAz.js +1 -0
- package/ui-dist/assets/{timeline-definition-IT6M3QCI-JQUCAkOQ.js → timeline-definition-IT6M3QCI-BOWlxdTv.js} +1 -1
- package/ui-dist/assets/{treemap-GDKQZRPO-BK87qA0V.js → treemap-GDKQZRPO-Bf4ApA1I.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-PRI3JC2R-UI3XP-6x.js → xychartDiagram-PRI3JC2R-CB-X3oO_.js} +1 -1
- package/ui-dist/index.html +2 -2
- package/LICENSE +0 -21
- package/ui-dist/assets/channel-B8aOlvkH.js +0 -1
- package/ui-dist/assets/classDiagram-2ON5EDUG-CNtVQyHf.js +0 -1
- package/ui-dist/assets/classDiagram-v2-WZHVMYZB-CNtVQyHf.js +0 -1
- package/ui-dist/assets/clone-DbnZAhBs.js +0 -1
- package/ui-dist/assets/index-7nZVjhgZ.js +0 -1227
- package/ui-dist/assets/index-Ip5TfL79.css +0 -1
- package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-BKAZNp5l.js +0 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Router } from "express";
|
|
2
|
+
import { employeeFileService } from "../services/employee-files.js";
|
|
3
|
+
import { agentService } from "../services/agents.js";
|
|
4
|
+
import { assertBoard, assertCompanyAccess } from "./authz.js";
|
|
5
|
+
import { notFound } from "../errors.js";
|
|
6
|
+
const VALID_FILE_TYPES = ["soul", "procedures", "heartbeat", "memory", "tools", "learning"];
|
|
7
|
+
function isValidFileType(value) {
|
|
8
|
+
return VALID_FILE_TYPES.includes(value);
|
|
9
|
+
}
|
|
10
|
+
export function employeeFileRoutes(db) {
|
|
11
|
+
const router = Router();
|
|
12
|
+
const fileSvc = employeeFileService(db);
|
|
13
|
+
const agents = agentService(db);
|
|
14
|
+
// GET /companies/:companyId/agents/:agentId/brain
|
|
15
|
+
router.get("/companies/:companyId/agents/:agentId/brain", async (req, res) => {
|
|
16
|
+
assertBoard(req);
|
|
17
|
+
assertCompanyAccess(req, req.params.companyId);
|
|
18
|
+
const agent = await agents.getById(req.params.agentId);
|
|
19
|
+
if (!agent || agent.companyId !== req.params.companyId) {
|
|
20
|
+
throw notFound("Agent not found");
|
|
21
|
+
}
|
|
22
|
+
const files = await fileSvc.getAllFiles(agent.id);
|
|
23
|
+
res.json({ files });
|
|
24
|
+
});
|
|
25
|
+
// PUT /companies/:companyId/agents/:agentId/brain/:fileType
|
|
26
|
+
router.put("/companies/:companyId/agents/:agentId/brain/:fileType", async (req, res) => {
|
|
27
|
+
assertBoard(req);
|
|
28
|
+
assertCompanyAccess(req, req.params.companyId);
|
|
29
|
+
const { fileType } = req.params;
|
|
30
|
+
if (!isValidFileType(fileType)) {
|
|
31
|
+
res.status(400).json({ error: `Invalid file type: ${fileType}` });
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const agent = await agents.getById(req.params.agentId);
|
|
35
|
+
if (!agent || agent.companyId !== req.params.companyId) {
|
|
36
|
+
throw notFound("Agent not found");
|
|
37
|
+
}
|
|
38
|
+
const { content } = req.body;
|
|
39
|
+
if (typeof content !== "string") {
|
|
40
|
+
res.status(400).json({ error: "content must be a string" });
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
await fileSvc.updateFile(agent.id, fileType, content, "user");
|
|
44
|
+
const updated = await fileSvc.getFile(agent.id, fileType);
|
|
45
|
+
res.json({ file: updated });
|
|
46
|
+
});
|
|
47
|
+
return router;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=employee-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"employee-files.js","sourceRoot":"","sources":["../../src/routes/employee-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAU,CAAC;AAGrG,SAAS,eAAe,CAAC,KAAa;IACpC,OAAQ,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAM;IACvC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,OAAO,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;IAEhC,kDAAkD;IAClD,MAAM,CAAC,GAAG,CAAC,6CAA6C,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3E,WAAW,CAAC,GAAG,CAAC,CAAC;QACjB,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE/C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACvD,MAAM,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClD,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,4DAA4D;IAC5D,MAAM,CAAC,GAAG,CAAC,uDAAuD,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACrF,WAAW,CAAC,GAAG,CAAC,CAAC;QACjB,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE/C,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,QAAQ,EAAE,EAAE,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACvD,MAAM,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,IAA2B,CAAC;QACpD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/routes/health.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAKxE,wBAAgB,YAAY,CAC1B,EAAE,CAAC,EAAE,EAAE,EACP,IAAI,GAAE;IACJ,cAAc,EAAE,cAAc,CAAC;IAC/B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,sBAAsB,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAKxE,wBAAgB,YAAY,CAC1B,EAAE,CAAC,EAAE,EAAE,EACP,IAAI,GAAE;IACJ,cAAc,EAAE,cAAc,CAAC;IAC/B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,sBAAsB,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAOpB,8CAsFF"}
|
package/dist/routes/health.js
CHANGED
|
@@ -9,6 +9,7 @@ export function healthRoutes(db, opts = {
|
|
|
9
9
|
deploymentExposure: "private",
|
|
10
10
|
authReady: true,
|
|
11
11
|
companyDeletionEnabled: true,
|
|
12
|
+
saasMode: false,
|
|
12
13
|
}) {
|
|
13
14
|
const router = Router();
|
|
14
15
|
router.get("/", async (_req, res) => {
|
|
@@ -29,7 +30,11 @@ export function healthRoutes(db, opts = {
|
|
|
29
30
|
}
|
|
30
31
|
let bootstrapStatus = "ready";
|
|
31
32
|
let bootstrapInviteActive = false;
|
|
32
|
-
if (opts.
|
|
33
|
+
if (opts.saasMode) {
|
|
34
|
+
// SaaS mode: auto-provisioning handles admin creation, skip bootstrap check
|
|
35
|
+
bootstrapStatus = "ready";
|
|
36
|
+
}
|
|
37
|
+
else if (opts.deploymentMode === "authenticated") {
|
|
33
38
|
const roleCount = await db
|
|
34
39
|
.select({ count: count() })
|
|
35
40
|
.from(instanceUserRoles)
|
|
@@ -69,6 +74,7 @@ export function healthRoutes(db, opts = {
|
|
|
69
74
|
authReady: opts.authReady,
|
|
70
75
|
bootstrapStatus,
|
|
71
76
|
bootstrapInviteActive,
|
|
77
|
+
saasMode: opts.saasMode ?? false,
|
|
72
78
|
features: {
|
|
73
79
|
companyDeletionEnabled: opts.companyDeletionEnabled,
|
|
74
80
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEtE,OAAO,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,UAAU,YAAY,CAC1B,EAAO,EACP,
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/index.d.ts
CHANGED
|
@@ -14,5 +14,6 @@ export { dashboardRoutes } from "./dashboard.js";
|
|
|
14
14
|
export { sidebarBadgeRoutes } from "./sidebar-badges.js";
|
|
15
15
|
export { llmRoutes } from "./llms.js";
|
|
16
16
|
export { accessRoutes } from "./access.js";
|
|
17
|
+
export { billingRoutes } from "./billing.js";
|
|
17
18
|
export { instanceSettingsRoutes } from "./instance-settings.js";
|
|
18
19
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/routes/index.js
CHANGED
|
@@ -14,5 +14,6 @@ export { dashboardRoutes } from "./dashboard.js";
|
|
|
14
14
|
export { sidebarBadgeRoutes } from "./sidebar-badges.js";
|
|
15
15
|
export { llmRoutes } from "./llms.js";
|
|
16
16
|
export { accessRoutes } from "./access.js";
|
|
17
|
+
export { billingRoutes } from "./billing.js";
|
|
17
18
|
export { instanceSettingsRoutes } from "./instance-settings.js";
|
|
18
19
|
//# sourceMappingURL=index.js.map
|
package/dist/routes/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-templates.d.ts","sourceRoot":"","sources":["../../src/routes/role-templates.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,+CAiBjC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Router } from "express";
|
|
2
|
+
import { getRoleTemplates, getRoleTemplate } from "../services/role-templates.js";
|
|
3
|
+
export function roleTemplateRoutes() {
|
|
4
|
+
const router = Router();
|
|
5
|
+
router.get("/role-templates", (_req, res) => {
|
|
6
|
+
res.json(getRoleTemplates());
|
|
7
|
+
});
|
|
8
|
+
router.get("/role-templates/:id", (req, res) => {
|
|
9
|
+
const template = getRoleTemplate(req.params.id);
|
|
10
|
+
if (!template) {
|
|
11
|
+
res.status(404).json({ error: "Role template not found" });
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
res.json(template);
|
|
15
|
+
});
|
|
16
|
+
return router;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=role-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-templates.js","sourceRoot":"","sources":["../../src/routes/role-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAElF,MAAM,UAAU,kBAAkB;IAChC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC1C,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-connections.d.ts","sourceRoot":"","sources":["../../src/routes/tool-connections.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,EAAE,8CAiI1C"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { Router } from "express";
|
|
2
|
+
import { eq, and } from "drizzle-orm";
|
|
3
|
+
import { toolConnections } from "@zmeel/db";
|
|
4
|
+
import { assertBoard, assertCompanyAccess } from "./authz.js";
|
|
5
|
+
export function toolConnectionRoutes(db) {
|
|
6
|
+
const router = Router();
|
|
7
|
+
// GET /companies/:companyId/tools — list connected tools
|
|
8
|
+
router.get("/companies/:companyId/tools", async (req, res) => {
|
|
9
|
+
const companyId = req.params.companyId;
|
|
10
|
+
assertCompanyAccess(req, companyId);
|
|
11
|
+
assertBoard(req);
|
|
12
|
+
try {
|
|
13
|
+
const connections = await db
|
|
14
|
+
.select()
|
|
15
|
+
.from(toolConnections)
|
|
16
|
+
.where(eq(toolConnections.companyId, companyId));
|
|
17
|
+
res.json(connections);
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
console.error("[tool-connections] list failed:", err);
|
|
21
|
+
res.status(500).json({ error: "Failed to list tool connections" });
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
// POST /companies/:companyId/tools/:appName/connect — initiate OAuth
|
|
25
|
+
router.post("/companies/:companyId/tools/:appName/connect", async (req, res) => {
|
|
26
|
+
const companyId = req.params.companyId;
|
|
27
|
+
const appName = req.params.appName;
|
|
28
|
+
assertCompanyAccess(req, companyId);
|
|
29
|
+
assertBoard(req);
|
|
30
|
+
try {
|
|
31
|
+
const composioService = await import("../services/composio.js");
|
|
32
|
+
const userId = req.actor.userId ?? "board";
|
|
33
|
+
const redirectUrl = req.body?.redirectUrl ||
|
|
34
|
+
`${req.protocol}://${req.get("host")}/api/tools/oauth/callback`;
|
|
35
|
+
const result = await composioService.initiateConnection(userId, appName, redirectUrl);
|
|
36
|
+
if (!result) {
|
|
37
|
+
res.status(503).json({ error: "Composio service not available" });
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
await db.insert(toolConnections).values({
|
|
41
|
+
companyId,
|
|
42
|
+
userId,
|
|
43
|
+
appName,
|
|
44
|
+
composioEntityId: userId,
|
|
45
|
+
composioConnectionId: result.connectedAccountId,
|
|
46
|
+
status: "pending",
|
|
47
|
+
});
|
|
48
|
+
res.json({
|
|
49
|
+
redirectUrl: result.redirectUrl,
|
|
50
|
+
connectedAccountId: result.connectedAccountId,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
console.error("[tool-connections] connect failed:", err);
|
|
55
|
+
res.status(500).json({ error: "Failed to initiate connection" });
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
// DELETE /companies/:companyId/tools/:appName — disconnect a tool
|
|
59
|
+
router.delete("/companies/:companyId/tools/:appName", async (req, res) => {
|
|
60
|
+
const companyId = req.params.companyId;
|
|
61
|
+
const appName = req.params.appName;
|
|
62
|
+
assertCompanyAccess(req, companyId);
|
|
63
|
+
assertBoard(req);
|
|
64
|
+
try {
|
|
65
|
+
const deleted = await db
|
|
66
|
+
.delete(toolConnections)
|
|
67
|
+
.where(and(eq(toolConnections.companyId, companyId), eq(toolConnections.appName, appName)))
|
|
68
|
+
.returning();
|
|
69
|
+
if (deleted.length === 0) {
|
|
70
|
+
res.status(404).json({ error: "Tool connection not found" });
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
res.json({ ok: true });
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
console.error("[tool-connections] disconnect failed:", err);
|
|
77
|
+
res.status(500).json({ error: "Failed to disconnect tool" });
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
// GET /tools/available — list all available apps from Composio
|
|
81
|
+
router.get("/tools/available", async (req, res) => {
|
|
82
|
+
assertBoard(req);
|
|
83
|
+
try {
|
|
84
|
+
const composioService = await import("../services/composio.js");
|
|
85
|
+
const apps = await composioService.listAvailableApps();
|
|
86
|
+
res.json(apps);
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
console.error("[tool-connections] listAvailableApps failed:", err);
|
|
90
|
+
res.status(500).json({ error: "Failed to list available apps" });
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
// GET /tools/oauth/callback — OAuth callback redirect
|
|
94
|
+
router.get("/tools/oauth/callback", async (req, res) => {
|
|
95
|
+
try {
|
|
96
|
+
const connectionId = req.query.connectedAccountId;
|
|
97
|
+
if (connectionId) {
|
|
98
|
+
await db
|
|
99
|
+
.update(toolConnections)
|
|
100
|
+
.set({
|
|
101
|
+
status: "active",
|
|
102
|
+
connectedAt: new Date(),
|
|
103
|
+
updatedAt: new Date(),
|
|
104
|
+
})
|
|
105
|
+
.where(eq(toolConnections.composioConnectionId, connectionId));
|
|
106
|
+
}
|
|
107
|
+
// Redirect back to the UI
|
|
108
|
+
res.redirect("/settings/tools?connected=true");
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
console.error("[tool-connections] oauth callback failed:", err);
|
|
112
|
+
res.redirect("/settings/tools?error=callback_failed");
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
return router;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=tool-connections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-connections.js","sourceRoot":"","sources":["../../src/routes/tool-connections.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,9 +13,9 @@ export declare function activityService(db: Db): {
|
|
|
13
13
|
companyId: string;
|
|
14
14
|
agentId: string | null;
|
|
15
15
|
runId: string | null;
|
|
16
|
-
action: string;
|
|
17
16
|
actorType: string;
|
|
18
17
|
actorId: string;
|
|
18
|
+
action: string;
|
|
19
19
|
entityType: string;
|
|
20
20
|
entityId: string;
|
|
21
21
|
details: Record<string, unknown> | null;
|
|
@@ -216,9 +216,9 @@ export declare function activityService(db: Db): {
|
|
|
216
216
|
companyId: string;
|
|
217
217
|
agentId: string | null;
|
|
218
218
|
runId: string | null;
|
|
219
|
-
action: string;
|
|
220
219
|
actorType: string;
|
|
221
220
|
actorId: string;
|
|
221
|
+
action: string;
|
|
222
222
|
entityType: string;
|
|
223
223
|
entityId: string;
|
|
224
224
|
details: Record<string, unknown> | null;
|
|
@@ -753,9 +753,9 @@ export declare function activityService(db: Db): {
|
|
|
753
753
|
companyId: string;
|
|
754
754
|
agentId: string | null;
|
|
755
755
|
runId: string | null;
|
|
756
|
-
action: string;
|
|
757
756
|
actorType: string;
|
|
758
757
|
actorId: string;
|
|
758
|
+
action: string;
|
|
759
759
|
entityType: string;
|
|
760
760
|
entityId: string;
|
|
761
761
|
details: Record<string, unknown> | null;
|
|
@@ -1047,17 +1047,17 @@ export declare function agentService(db: Db): {
|
|
|
1047
1047
|
generated: undefined;
|
|
1048
1048
|
}, {}, {}>;
|
|
1049
1049
|
}, "single", Record<"heartbeat_runs", "not-null">, false, "where", {
|
|
1050
|
+
error: string | null;
|
|
1050
1051
|
id: string;
|
|
1051
1052
|
status: string;
|
|
1052
1053
|
createdAt: Date;
|
|
1053
1054
|
updatedAt: Date;
|
|
1054
1055
|
companyId: string;
|
|
1055
1056
|
agentId: string;
|
|
1056
|
-
triggerDetail: string | null;
|
|
1057
|
-
finishedAt: Date | null;
|
|
1058
|
-
error: string | null;
|
|
1059
1057
|
invocationSource: string;
|
|
1058
|
+
triggerDetail: string | null;
|
|
1060
1059
|
startedAt: Date | null;
|
|
1060
|
+
finishedAt: Date | null;
|
|
1061
1061
|
wakeupRequestId: string | null;
|
|
1062
1062
|
exitCode: number | null;
|
|
1063
1063
|
signal: string | null;
|
|
@@ -525,9 +525,9 @@ export declare function approvalService(db: Db): {
|
|
|
525
525
|
updatedAt: Date;
|
|
526
526
|
companyId: string;
|
|
527
527
|
approvalId: string;
|
|
528
|
-
body: string;
|
|
529
528
|
authorAgentId: string | null;
|
|
530
529
|
authorUserId: string | null;
|
|
530
|
+
body: string;
|
|
531
531
|
}[]>;
|
|
532
532
|
addComment: (approvalId: string, body: string, actor: {
|
|
533
533
|
agentId?: string;
|
|
@@ -538,9 +538,9 @@ export declare function approvalService(db: Db): {
|
|
|
538
538
|
updatedAt: Date;
|
|
539
539
|
companyId: string;
|
|
540
540
|
approvalId: string;
|
|
541
|
-
body: string;
|
|
542
541
|
authorAgentId: string | null;
|
|
543
542
|
authorUserId: string | null;
|
|
543
|
+
body: string;
|
|
544
544
|
}>;
|
|
545
545
|
};
|
|
546
546
|
//# sourceMappingURL=approvals.d.ts.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Db } from "@zmeel/db";
|
|
2
|
+
export interface Subscription {
|
|
3
|
+
id: string;
|
|
4
|
+
companyId: string;
|
|
5
|
+
stripeCustomerId: string | null;
|
|
6
|
+
stripeSubscriptionId: string | null;
|
|
7
|
+
plan: string;
|
|
8
|
+
status: string;
|
|
9
|
+
currentPeriodStart: Date | null;
|
|
10
|
+
currentPeriodEnd: Date | null;
|
|
11
|
+
monthlyBudgetCents: number;
|
|
12
|
+
apiKeyMode: string;
|
|
13
|
+
anthropicApiKey: string | null;
|
|
14
|
+
createdAt: Date;
|
|
15
|
+
updatedAt: Date;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Retrieve the subscription for a given company.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getSubscription(db: Db, companyId: string): Promise<Subscription | null>;
|
|
21
|
+
/**
|
|
22
|
+
* Create a free-tier subscription for a newly provisioned company.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createFreeSubscription(db: Db, companyId: string): Promise<Subscription>;
|
|
25
|
+
/**
|
|
26
|
+
* Returns the API key a company should use for Anthropic calls.
|
|
27
|
+
* If BYOK mode and key is set, returns the BYOK key.
|
|
28
|
+
* Otherwise returns the platform managed key.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getApiKeyForCompany(db: Db, companyId: string, provider?: string): Promise<string | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Switch between managed and BYOK API key modes.
|
|
33
|
+
*/
|
|
34
|
+
export declare function updateApiKeyMode(db: Db, companyId: string, mode: "managed" | "byok", apiKey?: string): Promise<Subscription | null>;
|
|
35
|
+
//# sourceMappingURL=billing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../src/services/billing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,IAAI,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,IAAI,GAAG,IAAI,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAO7F;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAe7F;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,MAAM,EACjB,QAAQ,SAAc,GACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMxB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,SAAS,GAAG,MAAM,EACxB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAY9B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { eq } from "drizzle-orm";
|
|
2
|
+
import { subscriptions } from "@zmeel/db";
|
|
3
|
+
import { getManagedApiKey } from "./managed-api-keys.js";
|
|
4
|
+
/**
|
|
5
|
+
* Retrieve the subscription for a given company.
|
|
6
|
+
*/
|
|
7
|
+
export async function getSubscription(db, companyId) {
|
|
8
|
+
const rows = await db
|
|
9
|
+
.select()
|
|
10
|
+
.from(subscriptions)
|
|
11
|
+
.where(eq(subscriptions.companyId, companyId))
|
|
12
|
+
.limit(1);
|
|
13
|
+
return rows[0] ?? null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Create a free-tier subscription for a newly provisioned company.
|
|
17
|
+
*/
|
|
18
|
+
export async function createFreeSubscription(db, companyId) {
|
|
19
|
+
const now = new Date();
|
|
20
|
+
const rows = await db
|
|
21
|
+
.insert(subscriptions)
|
|
22
|
+
.values({
|
|
23
|
+
companyId,
|
|
24
|
+
plan: "free",
|
|
25
|
+
status: "active",
|
|
26
|
+
monthlyBudgetCents: 500, // $5 free tier
|
|
27
|
+
apiKeyMode: "managed",
|
|
28
|
+
createdAt: now,
|
|
29
|
+
updatedAt: now,
|
|
30
|
+
})
|
|
31
|
+
.returning();
|
|
32
|
+
return rows[0];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Returns the API key a company should use for Anthropic calls.
|
|
36
|
+
* If BYOK mode and key is set, returns the BYOK key.
|
|
37
|
+
* Otherwise returns the platform managed key.
|
|
38
|
+
*/
|
|
39
|
+
export async function getApiKeyForCompany(db, companyId, provider = "anthropic") {
|
|
40
|
+
const sub = await getSubscription(db, companyId);
|
|
41
|
+
if (sub && sub.apiKeyMode === "byok" && sub.anthropicApiKey) {
|
|
42
|
+
return sub.anthropicApiKey;
|
|
43
|
+
}
|
|
44
|
+
return getManagedApiKey(provider);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Switch between managed and BYOK API key modes.
|
|
48
|
+
*/
|
|
49
|
+
export async function updateApiKeyMode(db, companyId, mode, apiKey) {
|
|
50
|
+
const now = new Date();
|
|
51
|
+
const rows = await db
|
|
52
|
+
.update(subscriptions)
|
|
53
|
+
.set({
|
|
54
|
+
apiKeyMode: mode,
|
|
55
|
+
anthropicApiKey: mode === "byok" ? (apiKey ?? null) : null,
|
|
56
|
+
updatedAt: now,
|
|
57
|
+
})
|
|
58
|
+
.where(eq(subscriptions.companyId, companyId))
|
|
59
|
+
.returning();
|
|
60
|
+
return rows[0] ?? null;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=billing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/services/billing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAkBzD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAM,EAAE,SAAiB;IAC7D,MAAM,IAAI,GAAG,MAAM,EAAE;SAClB,MAAM,EAAE;SACR,IAAI,CAAC,aAAa,CAAC;SACnB,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;SAC7C,KAAK,CAAC,CAAC,CAAC,CAAC;IACZ,OAAQ,IAAI,CAAC,CAAC,CAA8B,IAAI,IAAI,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAAM,EAAE,SAAiB;IACpE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,MAAM,EAAE;SAClB,MAAM,CAAC,aAAa,CAAC;SACrB,MAAM,CAAC;QACN,SAAS;QACT,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,QAAQ;QAChB,kBAAkB,EAAE,GAAG,EAAE,eAAe;QACxC,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;SACD,SAAS,EAAE,CAAC;IACf,OAAO,IAAI,CAAC,CAAC,CAAiB,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAM,EACN,SAAiB,EACjB,QAAQ,GAAG,WAAW;IAEtB,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACjD,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,MAAM,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;QAC5D,OAAO,GAAG,CAAC,eAAe,CAAC;IAC7B,CAAC;IACD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAM,EACN,SAAiB,EACjB,IAAwB,EACxB,MAAe;IAEf,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,MAAM,EAAE;SAClB,MAAM,CAAC,aAAa,CAAC;SACrB,GAAG,CAAC;QACH,UAAU,EAAE,IAAI;QAChB,eAAe,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;QAC1D,SAAS,EAAE,GAAG;KACf,CAAC;SACD,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;SAC7C,SAAS,EAAE,CAAC;IACf,OAAQ,IAAI,CAAC,CAAC,CAA8B,IAAI,IAAI,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a Composio entity for a given user. In Composio's model, an "entity"
|
|
3
|
+
* represents an end-user who can connect apps and execute actions.
|
|
4
|
+
*/
|
|
5
|
+
export declare function getComposioSession(userId: string): import("composio-core").Entity | null;
|
|
6
|
+
/**
|
|
7
|
+
* Get tool/action definitions for a set of apps, scoped to a user entity.
|
|
8
|
+
* `apps` is a comma-separated string of app keys (e.g. "github,slack").
|
|
9
|
+
*/
|
|
10
|
+
export declare function getToolsForApps(userId: string, apps: string[]): Promise<unknown[]>;
|
|
11
|
+
/**
|
|
12
|
+
* Initiate an OAuth connection for a user with a specific app.
|
|
13
|
+
* Returns a ConnectionRequest with a redirectUrl the user should visit.
|
|
14
|
+
*/
|
|
15
|
+
export declare function initiateConnection(userId: string, appName: string, redirectUrl: string): Promise<{
|
|
16
|
+
redirectUrl: string | null;
|
|
17
|
+
connectedAccountId: string;
|
|
18
|
+
} | null>;
|
|
19
|
+
/**
|
|
20
|
+
* List all connected accounts for a given user entity.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getConnectedApps(userId: string): Promise<unknown[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Execute a tool call (action) on behalf of a user.
|
|
25
|
+
*/
|
|
26
|
+
export declare function executeToolCall(userId: string, toolName: string, toolInput: Record<string, unknown>): Promise<unknown>;
|
|
27
|
+
interface NormalizedApp {
|
|
28
|
+
appName: string;
|
|
29
|
+
displayName: string;
|
|
30
|
+
description: string;
|
|
31
|
+
logoUrl: string | null;
|
|
32
|
+
categories: string[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* List all available apps from the Composio platform (250+ integrations).
|
|
36
|
+
* Normalizes the response to a consistent shape with logo URLs.
|
|
37
|
+
*/
|
|
38
|
+
export declare function listAvailableApps(): Promise<NormalizedApp[]>;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=composio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composio.d.ts","sourceRoot":"","sources":["../../src/services/composio.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,yCAIhD;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,OAAO,EAAE,CAAC,CAapB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAmB5E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,EAAE,CAAC,CAYpB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,OAAO,CAAC,CAelB;AAmHD,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAsBlE"}
|