@inkeep/agents-manage-api 0.39.5 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/create-app.d.ts +21 -0
  2. package/dist/create-app.js +144 -0
  3. package/dist/data/agentFull.d.ts +15 -0
  4. package/dist/data/agentFull.js +84 -0
  5. package/dist/data/conversations.d.ts +77 -0
  6. package/dist/data/conversations.js +152 -0
  7. package/dist/data/db/dbClient.d.ts +6 -0
  8. package/dist/data/db/dbClient.js +17 -0
  9. package/dist/env.d.ts +61 -0
  10. package/dist/env.js +55 -0
  11. package/dist/factory.d.ts +17 -2
  12. package/dist/factory.js +35 -2
  13. package/dist/index.d.ts +119 -22
  14. package/dist/index.js +8 -5
  15. package/dist/initialization.d.ts +6 -0
  16. package/dist/initialization.js +79 -0
  17. package/dist/logger.d.ts +2 -0
  18. package/dist/logger.js +3 -0
  19. package/dist/middleware/auth.d.ts +24 -0
  20. package/dist/middleware/auth.js +55 -0
  21. package/dist/middleware/error-handler.d.ts +12 -0
  22. package/dist/middleware/error-handler.js +88 -0
  23. package/dist/middleware/require-permission.d.ts +19 -0
  24. package/dist/middleware/require-permission.js +80 -0
  25. package/dist/middleware/session-auth.d.ts +6 -0
  26. package/dist/middleware/session-auth.js +26 -0
  27. package/dist/middleware/tenant-access.d.ts +12 -0
  28. package/dist/middleware/tenant-access.js +54 -0
  29. package/dist/openapi.d.ts +7 -0
  30. package/dist/openapi.js +157 -0
  31. package/dist/routes/agent.d.ts +9 -0
  32. package/dist/routes/agent.js +244 -0
  33. package/dist/routes/agentFull.d.ts +9 -0
  34. package/dist/routes/agentFull.js +188 -0
  35. package/dist/routes/agentToolRelations.d.ts +9 -0
  36. package/dist/routes/agentToolRelations.js +284 -0
  37. package/dist/routes/apiKeys.d.ts +9 -0
  38. package/dist/routes/apiKeys.js +217 -0
  39. package/dist/routes/artifactComponents.d.ts +9 -0
  40. package/dist/routes/artifactComponents.js +204 -0
  41. package/dist/routes/cliAuth.d.ts +9 -0
  42. package/dist/routes/cliAuth.js +60 -0
  43. package/dist/routes/contextConfigs.d.ts +9 -0
  44. package/dist/routes/contextConfigs.js +175 -0
  45. package/dist/routes/conversations.d.ts +7 -0
  46. package/dist/routes/conversations.js +59 -0
  47. package/dist/routes/credentialStores.d.ts +9 -0
  48. package/dist/routes/credentialStores.js +81 -0
  49. package/dist/routes/credentials.d.ts +9 -0
  50. package/dist/routes/credentials.js +204 -0
  51. package/dist/routes/dataComponents.d.ts +9 -0
  52. package/dist/routes/dataComponents.js +188 -0
  53. package/dist/routes/externalAgents.d.ts +9 -0
  54. package/dist/routes/externalAgents.js +195 -0
  55. package/dist/routes/functionTools.d.ts +9 -0
  56. package/dist/routes/functionTools.js +252 -0
  57. package/dist/routes/functions.d.ts +9 -0
  58. package/dist/routes/functions.js +281 -0
  59. package/dist/routes/index.d.ts +7 -0
  60. package/dist/routes/index.js +54 -0
  61. package/dist/routes/invitations.d.ts +9 -0
  62. package/dist/routes/invitations.js +41 -0
  63. package/dist/routes/mcp.d.ts +7 -0
  64. package/dist/routes/mcp.js +45 -0
  65. package/dist/routes/mcpCatalog.d.ts +13 -0
  66. package/dist/routes/mcpCatalog.js +454 -0
  67. package/dist/routes/oauth.d.ts +10 -0
  68. package/dist/routes/oauth.js +314 -0
  69. package/dist/routes/playgroundToken.d.ts +9 -0
  70. package/dist/routes/playgroundToken.js +108 -0
  71. package/dist/routes/projectFull.d.ts +9 -0
  72. package/dist/routes/projectFull.js +193 -0
  73. package/dist/routes/projects.d.ts +9 -0
  74. package/dist/routes/projects.js +188 -0
  75. package/dist/routes/shared.d.ts +93 -0
  76. package/dist/routes/shared.js +44 -0
  77. package/dist/routes/signoz.d.ts +10 -0
  78. package/dist/routes/signoz.js +155 -0
  79. package/dist/routes/subAgentArtifactComponents.d.ts +9 -0
  80. package/dist/routes/subAgentArtifactComponents.js +198 -0
  81. package/dist/routes/subAgentDataComponents.d.ts +9 -0
  82. package/dist/routes/subAgentDataComponents.js +197 -0
  83. package/dist/routes/subAgentExternalAgentRelations.d.ts +9 -0
  84. package/dist/routes/subAgentExternalAgentRelations.js +213 -0
  85. package/dist/routes/subAgentRelations.d.ts +9 -0
  86. package/dist/routes/subAgentRelations.js +259 -0
  87. package/dist/routes/subAgentTeamAgentRelations.d.ts +9 -0
  88. package/dist/routes/subAgentTeamAgentRelations.js +213 -0
  89. package/dist/routes/subAgentToolRelations.d.ts +9 -0
  90. package/dist/routes/subAgentToolRelations.js +284 -0
  91. package/dist/routes/subAgents.d.ts +9 -0
  92. package/dist/routes/subAgents.js +210 -0
  93. package/dist/routes/thirdPartyMCPServers.d.ts +14 -0
  94. package/dist/routes/thirdPartyMCPServers.js +72 -0
  95. package/dist/routes/tools.d.ts +9 -0
  96. package/dist/routes/tools.js +256 -0
  97. package/dist/routes/userOrganizations.d.ts +9 -0
  98. package/dist/routes/userOrganizations.js +58 -0
  99. package/dist/sso-helpers.d.ts +20 -0
  100. package/dist/sso-helpers.js +51 -0
  101. package/dist/types/app.d.ts +47 -0
  102. package/dist/types/app.js +1 -0
  103. package/dist/utils/cors.d.ts +33 -0
  104. package/dist/utils/cors.js +98 -0
  105. package/dist/utils/oauth-service.d.ts +71 -0
  106. package/dist/utils/oauth-service.js +106 -0
  107. package/dist/utils/signoz-helpers.d.ts +9 -0
  108. package/dist/utils/signoz-helpers.js +33 -0
  109. package/dist/utils/temp-api-keys.d.ts +17 -0
  110. package/dist/utils/temp-api-keys.js +26 -0
  111. package/package.json +6 -13
  112. package/dist/chunk-VBDAOXYI.js +0 -832
  113. package/dist/chunk-VBDAOXYI.js.map +0 -1
  114. package/dist/factory2.d.ts +0 -41
  115. package/dist/factory2.d.ts.map +0 -1
  116. package/dist/factory2.js +0 -37085
  117. package/dist/factory2.js.map +0 -1
  118. package/dist/index.d.ts.map +0 -1
  119. package/dist/index.js.map +0 -1
  120. package/dist/nodefs.js +0 -27
  121. package/dist/nodefs.js.map +0 -1
  122. package/dist/opfs-ahp.js +0 -368
  123. package/dist/opfs-ahp.js.map +0 -1
@@ -0,0 +1,188 @@
1
+ import { getLogger as getLogger$1 } from "../logger.js";
2
+ import dbClient_default from "../data/db/dbClient.js";
3
+ import { requirePermission } from "../middleware/require-permission.js";
4
+ import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
5
+ import { AgentWithinContextOfProjectResponse, AgentWithinContextOfProjectSchema, ErrorResponseSchema, TenantProjectAgentParamsSchema, TenantProjectParamsSchema, commonGetErrorResponses, createApiError, createFullAgentServerSide, deleteFullAgent, getFullAgent, updateFullAgentServerSide } from "@inkeep/agents-core";
6
+
7
+ //#region src/routes/agentFull.ts
8
+ const logger = getLogger$1("agentFull");
9
+ const app = new OpenAPIHono();
10
+ app.use("/", async (c, next) => {
11
+ if (c.req.method === "POST") return requirePermission({ agent: ["create"] })(c, next);
12
+ return next();
13
+ });
14
+ app.use("/:agentId", async (c, next) => {
15
+ if (c.req.method === "PUT") return requirePermission({ agent: ["update"] })(c, next);
16
+ if (c.req.method === "DELETE") return requirePermission({ agent: ["delete"] })(c, next);
17
+ return next();
18
+ });
19
+ app.openapi(createRoute({
20
+ method: "post",
21
+ path: "/",
22
+ summary: "Create Full Agent",
23
+ operationId: "create-full-agent",
24
+ tags: ["Full Agent"],
25
+ description: "Create a complete agent with all agents, tools, and relationships from JSON definition",
26
+ request: {
27
+ params: TenantProjectParamsSchema,
28
+ body: { content: { "application/json": { schema: AgentWithinContextOfProjectSchema } } }
29
+ },
30
+ responses: {
31
+ 201: {
32
+ description: "Full agent created successfully",
33
+ content: { "application/json": { schema: AgentWithinContextOfProjectResponse } }
34
+ },
35
+ 409: {
36
+ description: "Agent already exists",
37
+ content: { "application/json": { schema: ErrorResponseSchema } }
38
+ },
39
+ ...commonGetErrorResponses
40
+ }
41
+ }), async (c) => {
42
+ const { tenantId, projectId } = c.req.valid("param");
43
+ const agentData = c.req.valid("json");
44
+ const validatedAgentData = AgentWithinContextOfProjectSchema.parse(agentData);
45
+ const createdAgent = await createFullAgentServerSide(dbClient_default, logger)({
46
+ tenantId,
47
+ projectId
48
+ }, validatedAgentData);
49
+ return c.json({ data: createdAgent }, 201);
50
+ });
51
+ app.openapi(createRoute({
52
+ method: "get",
53
+ path: "/{agentId}",
54
+ summary: "Get Full Agent",
55
+ operationId: "get-full-agent",
56
+ tags: ["Full Agent"],
57
+ description: "Retrieve a complete agent definition with all agents, tools, and relationships",
58
+ request: { params: TenantProjectAgentParamsSchema },
59
+ responses: {
60
+ 200: {
61
+ description: "Full agent found",
62
+ content: { "application/json": { schema: AgentWithinContextOfProjectResponse } }
63
+ },
64
+ ...commonGetErrorResponses
65
+ }
66
+ }), async (c) => {
67
+ const { tenantId, projectId, agentId } = c.req.valid("param");
68
+ try {
69
+ const agent = await getFullAgent(dbClient_default, logger)({ scopes: {
70
+ tenantId,
71
+ projectId,
72
+ agentId
73
+ } });
74
+ if (!agent) throw createApiError({
75
+ code: "not_found",
76
+ message: "Agent not found"
77
+ });
78
+ return c.json({ data: agent });
79
+ } catch (error) {
80
+ if (error instanceof Error && error.message.includes("not found")) throw createApiError({
81
+ code: "not_found",
82
+ message: "Agent not found"
83
+ });
84
+ throw createApiError({
85
+ code: "internal_server_error",
86
+ message: error instanceof Error ? error.message : "Failed to retrieve agent"
87
+ });
88
+ }
89
+ });
90
+ app.openapi(createRoute({
91
+ method: "put",
92
+ path: "/{agentId}",
93
+ summary: "Update Full Agent",
94
+ operationId: "update-full-agent",
95
+ tags: ["Full Agent"],
96
+ description: "Update or create a complete agent with all agents, tools, and relationships from JSON definition",
97
+ request: {
98
+ params: TenantProjectAgentParamsSchema,
99
+ body: { content: { "application/json": { schema: AgentWithinContextOfProjectSchema } } }
100
+ },
101
+ responses: {
102
+ 200: {
103
+ description: "Full agent updated successfully",
104
+ content: { "application/json": { schema: AgentWithinContextOfProjectResponse } }
105
+ },
106
+ 201: {
107
+ description: "Full agent created successfully",
108
+ content: { "application/json": { schema: AgentWithinContextOfProjectResponse } }
109
+ },
110
+ ...commonGetErrorResponses
111
+ }
112
+ }), async (c) => {
113
+ const { tenantId, projectId, agentId } = c.req.valid("param");
114
+ const agentData = c.req.valid("json");
115
+ try {
116
+ logger.info({}, "test agent data");
117
+ const validatedAgentData = AgentWithinContextOfProjectSchema.parse(agentData);
118
+ if (agentId !== validatedAgentData.id) throw createApiError({
119
+ code: "bad_request",
120
+ message: `Agent ID mismatch: expected ${agentId}, got ${validatedAgentData.id}`
121
+ });
122
+ const isCreate = !await getFullAgent(dbClient_default, logger)({ scopes: {
123
+ tenantId,
124
+ projectId,
125
+ agentId
126
+ } });
127
+ const updatedAgent = isCreate ? await createFullAgentServerSide(dbClient_default, logger)({
128
+ tenantId,
129
+ projectId
130
+ }, validatedAgentData) : await updateFullAgentServerSide(dbClient_default, logger)({
131
+ tenantId,
132
+ projectId
133
+ }, validatedAgentData);
134
+ return c.json({ data: updatedAgent }, isCreate ? 201 : 200);
135
+ } catch (error) {
136
+ if (error instanceof z.ZodError) throw createApiError({
137
+ code: "bad_request",
138
+ message: "Invalid agent definition"
139
+ });
140
+ if (error instanceof Error && error.message.includes("ID mismatch")) throw createApiError({
141
+ code: "bad_request",
142
+ message: error.message
143
+ });
144
+ throw createApiError({
145
+ code: "internal_server_error",
146
+ message: error instanceof Error ? error.message : "Failed to update agent"
147
+ });
148
+ }
149
+ });
150
+ app.openapi(createRoute({
151
+ method: "delete",
152
+ path: "/{agentId}",
153
+ summary: "Delete Full Agent",
154
+ operationId: "delete-full-agent",
155
+ tags: ["Full Agent"],
156
+ description: "Delete a complete agent and cascade to all related entities (relationships, not other agents/tools)",
157
+ request: { params: TenantProjectAgentParamsSchema },
158
+ responses: {
159
+ 204: { description: "Agent deleted successfully" },
160
+ ...commonGetErrorResponses
161
+ }
162
+ }), async (c) => {
163
+ const { tenantId, projectId, agentId } = c.req.valid("param");
164
+ try {
165
+ if (!await deleteFullAgent(dbClient_default, logger)({ scopes: {
166
+ tenantId,
167
+ projectId,
168
+ agentId
169
+ } })) throw createApiError({
170
+ code: "not_found",
171
+ message: "Agent not found"
172
+ });
173
+ return c.body(null, 204);
174
+ } catch (error) {
175
+ if (error instanceof Error && error.message.includes("not found")) throw createApiError({
176
+ code: "not_found",
177
+ message: "Agent not found"
178
+ });
179
+ throw createApiError({
180
+ code: "internal_server_error",
181
+ message: error instanceof Error ? error.message : "Failed to delete agent"
182
+ });
183
+ }
184
+ });
185
+ var agentFull_default = app;
186
+
187
+ //#endregion
188
+ export { agentFull_default as default };
@@ -0,0 +1,9 @@
1
+ import { BaseAppVariables } from "../types/app.js";
2
+ import { OpenAPIHono } from "@hono/zod-openapi";
3
+
4
+ //#region src/routes/agentToolRelations.d.ts
5
+ declare const app: OpenAPIHono<{
6
+ Variables: BaseAppVariables;
7
+ }, {}, "/">;
8
+ //#endregion
9
+ export { app as default };
@@ -0,0 +1,284 @@
1
+ import dbClient_default from "../data/db/dbClient.js";
2
+ import { requirePermission } from "../middleware/require-permission.js";
3
+ import { speakeasyOffsetLimitPagination } from "./shared.js";
4
+ import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
5
+ import { ErrorResponseSchema, PaginationQueryParamsSchema, SubAgentToolRelationApiInsertSchema, SubAgentToolRelationApiUpdateSchema, SubAgentToolRelationListResponse, SubAgentToolRelationResponse, TenantProjectAgentIdParamsSchema, TenantProjectAgentParamsSchema, commonGetErrorResponses, createAgentToolRelation, createApiError, deleteAgentToolRelation, getAgentToolRelationByAgent, getAgentToolRelationById, getAgentToolRelationByTool, getAgentsForTool, listAgentToolRelations, updateAgentToolRelation } from "@inkeep/agents-core";
6
+
7
+ //#region src/routes/agentToolRelations.ts
8
+ const app = new OpenAPIHono();
9
+ app.use("/", async (c, next) => {
10
+ if (c.req.method === "POST") return requirePermission({ agent: ["create"] })(c, next);
11
+ return next();
12
+ });
13
+ app.use("/:id", async (c, next) => {
14
+ if (c.req.method === "PUT") return requirePermission({ agent: ["update"] })(c, next);
15
+ if (c.req.method === "DELETE") return requirePermission({ agent: ["delete"] })(c, next);
16
+ return next();
17
+ });
18
+ app.openapi(createRoute({
19
+ method: "get",
20
+ path: "/",
21
+ summary: "List Agent Tool Relations",
22
+ operationId: "list-agent-tool-relations",
23
+ tags: ["Agent Tool Relations"],
24
+ request: {
25
+ params: TenantProjectAgentParamsSchema,
26
+ query: PaginationQueryParamsSchema.extend({
27
+ subAgentId: z.string().optional(),
28
+ toolId: z.string().optional()
29
+ })
30
+ },
31
+ responses: {
32
+ 200: {
33
+ description: "List of agent tool relations retrieved successfully",
34
+ content: { "application/json": { schema: SubAgentToolRelationListResponse } }
35
+ },
36
+ ...commonGetErrorResponses
37
+ },
38
+ ...speakeasyOffsetLimitPagination
39
+ }), async (c) => {
40
+ const { tenantId, projectId, agentId } = c.req.valid("param");
41
+ const { page, limit, subAgentId, toolId } = c.req.valid("query");
42
+ let result;
43
+ if (subAgentId) {
44
+ const dbResult = await getAgentToolRelationByAgent(dbClient_default)({
45
+ scopes: {
46
+ tenantId,
47
+ projectId,
48
+ agentId,
49
+ subAgentId
50
+ },
51
+ pagination: {
52
+ page,
53
+ limit
54
+ }
55
+ });
56
+ result = {
57
+ data: dbResult.data,
58
+ pagination: dbResult.pagination
59
+ };
60
+ } else if (toolId) {
61
+ const dbResult = await getAgentToolRelationByTool(dbClient_default)({
62
+ scopes: {
63
+ tenantId,
64
+ projectId,
65
+ agentId
66
+ },
67
+ toolId,
68
+ pagination: {
69
+ page,
70
+ limit
71
+ }
72
+ });
73
+ result = {
74
+ data: dbResult.data,
75
+ pagination: dbResult.pagination
76
+ };
77
+ } else {
78
+ const dbResult = await listAgentToolRelations(dbClient_default)({
79
+ scopes: {
80
+ tenantId,
81
+ projectId,
82
+ agentId
83
+ },
84
+ pagination: {
85
+ page,
86
+ limit
87
+ }
88
+ });
89
+ result = {
90
+ data: dbResult.data,
91
+ pagination: dbResult.pagination
92
+ };
93
+ }
94
+ return c.json(result);
95
+ });
96
+ app.openapi(createRoute({
97
+ method: "get",
98
+ path: "/{id}",
99
+ summary: "Get Agent Tool Relation",
100
+ operationId: "get-agent-tool-relation",
101
+ tags: ["Agent Tool Relations"],
102
+ request: { params: TenantProjectAgentIdParamsSchema },
103
+ responses: {
104
+ 200: {
105
+ description: "Agent tool relation found",
106
+ content: { "application/json": { schema: SubAgentToolRelationResponse } }
107
+ },
108
+ ...commonGetErrorResponses
109
+ }
110
+ }), async (c) => {
111
+ const { tenantId, projectId, agentId, id } = c.req.valid("param");
112
+ const agentToolRelation = await getAgentToolRelationById(dbClient_default)({
113
+ scopes: {
114
+ tenantId,
115
+ projectId,
116
+ agentId,
117
+ subAgentId: id
118
+ },
119
+ relationId: id
120
+ });
121
+ if (!agentToolRelation) throw createApiError({
122
+ code: "not_found",
123
+ message: "Agent tool relation not found"
124
+ });
125
+ return c.json({ data: agentToolRelation });
126
+ });
127
+ app.openapi(createRoute({
128
+ method: "get",
129
+ path: "/tool/{toolId}/agents",
130
+ summary: "Get Agents for Tool",
131
+ operationId: "get-agents-for-tool",
132
+ tags: ["Agent Tool Relations"],
133
+ request: {
134
+ params: TenantProjectAgentParamsSchema.extend({ toolId: z.string() }),
135
+ query: PaginationQueryParamsSchema
136
+ },
137
+ responses: {
138
+ 200: {
139
+ description: "Agents for tool retrieved successfully",
140
+ content: { "application/json": { schema: SubAgentToolRelationListResponse } }
141
+ },
142
+ ...commonGetErrorResponses
143
+ }
144
+ }), async (c) => {
145
+ const { tenantId, projectId, agentId, toolId } = c.req.valid("param");
146
+ const { page, limit } = c.req.valid("query");
147
+ const dbResult = await getAgentsForTool(dbClient_default)({
148
+ scopes: {
149
+ tenantId,
150
+ projectId,
151
+ agentId
152
+ },
153
+ toolId,
154
+ pagination: {
155
+ page,
156
+ limit
157
+ }
158
+ });
159
+ return c.json(dbResult);
160
+ });
161
+ app.openapi(createRoute({
162
+ method: "post",
163
+ path: "/",
164
+ summary: "Create Agent Tool Relation",
165
+ operationId: "create-agent-tool-relation",
166
+ tags: ["Agent Tool Relations"],
167
+ request: {
168
+ params: TenantProjectAgentParamsSchema,
169
+ body: { content: { "application/json": { schema: SubAgentToolRelationApiInsertSchema } } }
170
+ },
171
+ responses: {
172
+ 201: {
173
+ description: "Agent tool relation created successfully",
174
+ content: { "application/json": { schema: SubAgentToolRelationResponse } }
175
+ },
176
+ ...commonGetErrorResponses
177
+ }
178
+ }), async (c) => {
179
+ const { tenantId, projectId, agentId } = c.req.valid("param");
180
+ const body = c.req.valid("json");
181
+ if ((await listAgentToolRelations(dbClient_default)({
182
+ scopes: {
183
+ tenantId,
184
+ projectId,
185
+ agentId
186
+ },
187
+ pagination: { limit: 1e3 }
188
+ })).data.some((relation) => {
189
+ const typedRelation = relation;
190
+ return typedRelation.subAgentId === body.subAgentId && typedRelation.toolId === body.toolId;
191
+ })) throw createApiError({
192
+ code: "unprocessable_entity",
193
+ message: "Agent tool relation already exists"
194
+ });
195
+ try {
196
+ const agentToolRelation = await createAgentToolRelation(dbClient_default)({
197
+ scopes: {
198
+ tenantId,
199
+ projectId,
200
+ agentId
201
+ },
202
+ data: body
203
+ });
204
+ return c.json({ data: agentToolRelation }, 201);
205
+ } catch (error) {
206
+ if (error?.cause?.code === "23503") throw createApiError({
207
+ code: "bad_request",
208
+ message: "Invalid agent ID or tool ID - referenced entity does not exist"
209
+ });
210
+ throw error;
211
+ }
212
+ });
213
+ app.openapi(createRoute({
214
+ method: "put",
215
+ path: "/{id}",
216
+ summary: "Update Agent Tool Relation",
217
+ operationId: "update-agent-tool-relation",
218
+ tags: ["Agent Tool Relations"],
219
+ request: {
220
+ params: TenantProjectAgentIdParamsSchema,
221
+ body: { content: { "application/json": { schema: SubAgentToolRelationApiUpdateSchema } } }
222
+ },
223
+ responses: {
224
+ 200: {
225
+ description: "Agent tool relation updated successfully",
226
+ content: { "application/json": { schema: SubAgentToolRelationResponse } }
227
+ },
228
+ ...commonGetErrorResponses
229
+ }
230
+ }), async (c) => {
231
+ const { tenantId, projectId, agentId, id } = c.req.valid("param");
232
+ const body = await c.req.valid("json");
233
+ if (Object.keys(body).length === 0) throw createApiError({
234
+ code: "bad_request",
235
+ message: "No fields to update"
236
+ });
237
+ const updatedSubAgentToolRelation = await updateAgentToolRelation(dbClient_default)({
238
+ scopes: {
239
+ tenantId,
240
+ projectId,
241
+ agentId
242
+ },
243
+ relationId: id,
244
+ data: body
245
+ });
246
+ if (!updatedSubAgentToolRelation) throw createApiError({
247
+ code: "not_found",
248
+ message: "Agent tool relation not found"
249
+ });
250
+ return c.json({ data: updatedSubAgentToolRelation });
251
+ });
252
+ app.openapi(createRoute({
253
+ method: "delete",
254
+ path: "/{id}",
255
+ summary: "Delete Agent Tool Relation",
256
+ operationId: "delete-agent-tool-relation",
257
+ tags: ["Agent Tool Relations"],
258
+ request: { params: TenantProjectAgentIdParamsSchema },
259
+ responses: {
260
+ 204: { description: "Agent tool relation deleted successfully" },
261
+ 404: {
262
+ description: "Agent tool relation not found",
263
+ content: { "application/json": { schema: ErrorResponseSchema } }
264
+ }
265
+ }
266
+ }), async (c) => {
267
+ const { tenantId, projectId, agentId, id } = c.req.valid("param");
268
+ if (!await deleteAgentToolRelation(dbClient_default)({
269
+ scopes: {
270
+ tenantId,
271
+ projectId,
272
+ agentId
273
+ },
274
+ relationId: id
275
+ })) throw createApiError({
276
+ code: "not_found",
277
+ message: "Agent tool relation not found"
278
+ });
279
+ return c.body(null, 204);
280
+ });
281
+ var agentToolRelations_default = app;
282
+
283
+ //#endregion
284
+ export { agentToolRelations_default as default };
@@ -0,0 +1,9 @@
1
+ import { BaseAppVariables } from "../types/app.js";
2
+ import { OpenAPIHono } from "@hono/zod-openapi";
3
+
4
+ //#region src/routes/apiKeys.d.ts
5
+ declare const app: OpenAPIHono<{
6
+ Variables: BaseAppVariables;
7
+ }, {}, "/">;
8
+ //#endregion
9
+ export { app as default };
@@ -0,0 +1,217 @@
1
+ import dbClient_default from "../data/db/dbClient.js";
2
+ import { requirePermission } from "../middleware/require-permission.js";
3
+ import { speakeasyOffsetLimitPagination } from "./shared.js";
4
+ import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
5
+ import { ApiKeyApiCreationResponseSchema, ApiKeyApiInsertSchema, ApiKeyApiUpdateSchema, ApiKeyListResponse, ApiKeyResponse, ErrorResponseSchema, PaginationQueryParamsSchema, TenantProjectIdParamsSchema, TenantProjectParamsSchema, commonGetErrorResponses, createApiError, createApiKey, deleteApiKey, generateApiKey, getApiKeyById, listApiKeysPaginated, updateApiKey } from "@inkeep/agents-core";
6
+
7
+ //#region src/routes/apiKeys.ts
8
+ const app = new OpenAPIHono();
9
+ app.use("/", async (c, next) => {
10
+ if (c.req.method === "POST") return requirePermission({ api_key: ["create"] })(c, next);
11
+ return next();
12
+ });
13
+ app.use("/:id", async (c, next) => {
14
+ if (c.req.method === "PATCH") return requirePermission({ api_key: ["update"] })(c, next);
15
+ if (c.req.method === "DELETE") return requirePermission({ api_key: ["delete"] })(c, next);
16
+ return next();
17
+ });
18
+ app.openapi(createRoute({
19
+ method: "get",
20
+ path: "/",
21
+ summary: "List API Keys",
22
+ description: "List all API keys for a tenant with optional pagination",
23
+ operationId: "list-api-keys",
24
+ tags: ["API Keys"],
25
+ request: {
26
+ params: TenantProjectParamsSchema,
27
+ query: PaginationQueryParamsSchema.extend({ agentId: z.string().optional().describe("Filter by agent ID") })
28
+ },
29
+ responses: {
30
+ 200: {
31
+ description: "List of API keys retrieved successfully",
32
+ content: { "application/json": { schema: ApiKeyListResponse } }
33
+ },
34
+ ...commonGetErrorResponses
35
+ },
36
+ ...speakeasyOffsetLimitPagination
37
+ }), async (c) => {
38
+ const { tenantId, projectId } = c.req.valid("param");
39
+ const page = Number(c.req.query("page")) || 1;
40
+ const limit = Math.min(Number(c.req.query("limit")) || 10, 100);
41
+ const agentId = c.req.query("agentId");
42
+ const result = await listApiKeysPaginated(dbClient_default)({
43
+ scopes: {
44
+ tenantId,
45
+ projectId
46
+ },
47
+ pagination: {
48
+ page,
49
+ limit
50
+ },
51
+ agentId
52
+ });
53
+ const sanitizedData = result.data.map(({ keyHash, tenantId: tenantId$1, projectId: projectId$1, ...apiKey }) => apiKey);
54
+ return c.json({
55
+ data: sanitizedData,
56
+ pagination: result.pagination
57
+ });
58
+ });
59
+ app.openapi(createRoute({
60
+ method: "get",
61
+ path: "/{id}",
62
+ summary: "Get API Key",
63
+ description: "Get a specific API key by ID (does not return the actual key)",
64
+ operationId: "get-api-key-by-id",
65
+ tags: ["API Keys"],
66
+ request: { params: TenantProjectIdParamsSchema },
67
+ responses: {
68
+ 200: {
69
+ description: "API key found",
70
+ content: { "application/json": { schema: ApiKeyResponse } }
71
+ },
72
+ ...commonGetErrorResponses
73
+ }
74
+ }), async (c) => {
75
+ const { tenantId, projectId, id } = c.req.valid("param");
76
+ const apiKey = await getApiKeyById(dbClient_default)({
77
+ scopes: {
78
+ tenantId,
79
+ projectId
80
+ },
81
+ id
82
+ });
83
+ if (!apiKey || apiKey === void 0) throw createApiError({
84
+ code: "not_found",
85
+ message: "API key not found"
86
+ });
87
+ const { keyHash: _, tenantId: __, projectId: ___, ...sanitizedApiKey } = apiKey;
88
+ return c.json({ data: {
89
+ ...sanitizedApiKey,
90
+ lastUsedAt: sanitizedApiKey.lastUsedAt ?? null,
91
+ expiresAt: sanitizedApiKey.expiresAt ?? null
92
+ } });
93
+ });
94
+ app.openapi(createRoute({
95
+ method: "post",
96
+ path: "/",
97
+ summary: "Create API Key",
98
+ description: "Create a new API key for an agent. Returns the full key (shown only once).",
99
+ operationId: "create-api-key",
100
+ tags: ["API Keys"],
101
+ request: {
102
+ params: TenantProjectParamsSchema,
103
+ body: { content: { "application/json": { schema: ApiKeyApiInsertSchema } } }
104
+ },
105
+ responses: {
106
+ 201: {
107
+ description: "API key created successfully",
108
+ content: { "application/json": { schema: ApiKeyApiCreationResponseSchema } }
109
+ },
110
+ ...commonGetErrorResponses
111
+ }
112
+ }), async (c) => {
113
+ const { tenantId, projectId } = c.req.valid("param");
114
+ const body = c.req.valid("json");
115
+ const { key, ...keyDataWithoutKey } = await generateApiKey();
116
+ const insertData = {
117
+ tenantId,
118
+ projectId,
119
+ name: body.name,
120
+ agentId: body.agentId,
121
+ ...keyDataWithoutKey,
122
+ expiresAt: body.expiresAt || void 0
123
+ };
124
+ try {
125
+ const { keyHash: _, tenantId: __, projectId: ___, ...sanitizedApiKey } = await createApiKey(dbClient_default)(insertData);
126
+ return c.json({ data: {
127
+ apiKey: {
128
+ ...sanitizedApiKey,
129
+ lastUsedAt: sanitizedApiKey.lastUsedAt ?? null,
130
+ expiresAt: sanitizedApiKey.expiresAt ?? null
131
+ },
132
+ key
133
+ } }, 201);
134
+ } catch (error) {
135
+ if (error?.cause?.code === "23503") throw createApiError({
136
+ code: "bad_request",
137
+ message: "Invalid agentId - agent does not exist"
138
+ });
139
+ throw error;
140
+ }
141
+ });
142
+ app.openapi(createRoute({
143
+ method: "put",
144
+ path: "/{id}",
145
+ summary: "Update API Key",
146
+ description: "Update an API key (currently only expiration date can be changed)",
147
+ operationId: "update-api-key",
148
+ tags: ["API Keys"],
149
+ request: {
150
+ params: TenantProjectIdParamsSchema,
151
+ body: { content: { "application/json": { schema: ApiKeyApiUpdateSchema } } }
152
+ },
153
+ responses: {
154
+ 200: {
155
+ description: "API key updated successfully",
156
+ content: { "application/json": { schema: ApiKeyResponse } }
157
+ },
158
+ ...commonGetErrorResponses
159
+ }
160
+ }), async (c) => {
161
+ const { tenantId, projectId, id } = c.req.valid("param");
162
+ const body = c.req.valid("json");
163
+ const updatedApiKey = await updateApiKey(dbClient_default)({
164
+ scopes: {
165
+ tenantId,
166
+ projectId
167
+ },
168
+ id,
169
+ data: {
170
+ expiresAt: body.expiresAt,
171
+ name: body.name
172
+ }
173
+ });
174
+ if (!updatedApiKey) throw createApiError({
175
+ code: "not_found",
176
+ message: "API key not found"
177
+ });
178
+ const { keyHash: _, tenantId: __, projectId: ___, ...sanitizedApiKey } = updatedApiKey;
179
+ return c.json({ data: {
180
+ ...sanitizedApiKey,
181
+ lastUsedAt: sanitizedApiKey.lastUsedAt ?? null,
182
+ expiresAt: sanitizedApiKey.expiresAt ?? null
183
+ } });
184
+ });
185
+ app.openapi(createRoute({
186
+ method: "delete",
187
+ path: "/{id}",
188
+ summary: "Delete API Key",
189
+ description: "Delete an API key permanently",
190
+ operationId: "delete-api-key",
191
+ tags: ["API Keys"],
192
+ request: { params: TenantProjectIdParamsSchema },
193
+ responses: {
194
+ 204: { description: "API key deleted successfully" },
195
+ 404: {
196
+ description: "API key not found",
197
+ content: { "application/json": { schema: ErrorResponseSchema } }
198
+ }
199
+ }
200
+ }), async (c) => {
201
+ const { tenantId, projectId, id } = c.req.valid("param");
202
+ if (!await deleteApiKey(dbClient_default)({
203
+ scopes: {
204
+ tenantId,
205
+ projectId
206
+ },
207
+ id
208
+ })) throw createApiError({
209
+ code: "not_found",
210
+ message: "API key not found"
211
+ });
212
+ return c.body(null, 204);
213
+ });
214
+ var apiKeys_default = app;
215
+
216
+ //#endregion
217
+ export { apiKeys_default as default };