@inkeep/agents-core 0.0.0-dev-20260204182014 → 0.0.0-dev-20260204185956

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 (55) hide show
  1. package/dist/auth/auth.d.ts +54 -54
  2. package/dist/auth/permissions.d.ts +13 -13
  3. package/dist/client-exports.d.ts +4 -3
  4. package/dist/data-access/index.d.ts +1 -3
  5. package/dist/data-access/index.js +1 -3
  6. package/dist/data-access/manage/agents.d.ts +10 -10
  7. package/dist/data-access/manage/artifactComponents.d.ts +4 -4
  8. package/dist/data-access/manage/contextConfigs.d.ts +8 -8
  9. package/dist/data-access/manage/dataComponents.d.ts +2 -2
  10. package/dist/data-access/manage/functionTools.d.ts +6 -6
  11. package/dist/data-access/manage/subAgentExternalAgentRelations.d.ts +12 -12
  12. package/dist/data-access/manage/subAgentRelations.d.ts +6 -6
  13. package/dist/data-access/manage/subAgentTeamAgentRelations.d.ts +6 -6
  14. package/dist/data-access/manage/subAgents.d.ts +6 -6
  15. package/dist/data-access/manage/tools.d.ts +18 -18
  16. package/dist/data-access/runtime/apiKeys.d.ts +8 -8
  17. package/dist/data-access/runtime/conversations.d.ts +20 -20
  18. package/dist/data-access/runtime/messages.d.ts +15 -15
  19. package/dist/data-access/runtime/tasks.d.ts +4 -4
  20. package/dist/db/manage/manage-schema.d.ts +380 -600
  21. package/dist/db/manage/manage-schema.js +2 -27
  22. package/dist/db/runtime/runtime-schema.d.ts +234 -1147
  23. package/dist/db/runtime/runtime-schema.js +2 -98
  24. package/dist/index.d.ts +5 -10
  25. package/dist/index.js +4 -9
  26. package/dist/types/entities.d.ts +2 -8
  27. package/dist/types/index.d.ts +2 -2
  28. package/dist/utils/index.d.ts +1 -4
  29. package/dist/utils/index.js +1 -4
  30. package/dist/utils/trigger-auth.d.ts +1 -1
  31. package/dist/validation/index.d.ts +2 -2
  32. package/dist/validation/index.js +2 -2
  33. package/dist/validation/schemas.d.ts +1352 -3912
  34. package/dist/validation/schemas.js +3 -65
  35. package/drizzle/manage/meta/_journal.json +0 -7
  36. package/drizzle/runtime/meta/_journal.json +0 -14
  37. package/package.json +1 -1
  38. package/dist/auth/create-test-users.d.ts +0 -1
  39. package/dist/auth/create-test-users.js +0 -102
  40. package/dist/data-access/manage/workAppConfigs.d.ts +0 -228
  41. package/dist/data-access/manage/workAppConfigs.js +0 -120
  42. package/dist/data-access/runtime/workAppSlack.d.ts +0 -45
  43. package/dist/data-access/runtime/workAppSlack.js +0 -154
  44. package/dist/utils/slack-link-token.d.ts +0 -60
  45. package/dist/utils/slack-link-token.js +0 -124
  46. package/dist/utils/slack-user-token.d.ts +0 -87
  47. package/dist/utils/slack-user-token.js +0 -156
  48. package/dist/utils/sse-parser.d.ts +0 -35
  49. package/dist/utils/sse-parser.js +0 -71
  50. package/drizzle/manage/0007_whole_skreet.sql +0 -17
  51. package/drizzle/manage/meta/0007_snapshot.json +0 -3265
  52. package/drizzle/runtime/0011_grey_energizer.sql +0 -131
  53. package/drizzle/runtime/0012_salty_zuras.sql +0 -6
  54. package/drizzle/runtime/meta/0011_snapshot.json +0 -3747
  55. package/drizzle/runtime/meta/0012_snapshot.json +0 -3747
@@ -1,45 +0,0 @@
1
- import { workAppSlackChannelAgentConfigs, workAppSlackUserMappings, workAppSlackUserSettings, workAppSlackWorkspaces } from "../../db/runtime/runtime-schema.js";
2
- import { AgentsRunDatabaseClient } from "../../db/runtime/runtime-client.js";
3
-
4
- //#region src/data-access/runtime/workAppSlack.d.ts
5
- type WorkAppSlackWorkspaceInsert = typeof workAppSlackWorkspaces.$inferInsert;
6
- type WorkAppSlackWorkspaceSelect = typeof workAppSlackWorkspaces.$inferSelect;
7
- type WorkAppSlackUserMappingInsert = typeof workAppSlackUserMappings.$inferInsert;
8
- type WorkAppSlackUserMappingSelect = typeof workAppSlackUserMappings.$inferSelect;
9
- type WorkAppSlackChannelAgentConfigInsert = typeof workAppSlackChannelAgentConfigs.$inferInsert;
10
- type WorkAppSlackChannelAgentConfigSelect = typeof workAppSlackChannelAgentConfigs.$inferSelect;
11
- type WorkAppSlackUserSettingsInsert = typeof workAppSlackUserSettings.$inferInsert;
12
- type WorkAppSlackUserSettingsSelect = typeof workAppSlackUserSettings.$inferSelect;
13
- declare const createWorkAppSlackWorkspace: (db: AgentsRunDatabaseClient) => (data: Omit<WorkAppSlackWorkspaceInsert, "id" | "createdAt" | "updatedAt">) => Promise<WorkAppSlackWorkspaceSelect>;
14
- declare const findWorkAppSlackWorkspaceByTeamId: (db: AgentsRunDatabaseClient) => (tenantId: string, slackTeamId: string) => Promise<WorkAppSlackWorkspaceSelect | null>;
15
- declare const findWorkAppSlackWorkspaceByNangoConnectionId: (db: AgentsRunDatabaseClient) => (nangoConnectionId: string) => Promise<WorkAppSlackWorkspaceSelect | null>;
16
- declare const listWorkAppSlackWorkspacesByTenant: (db: AgentsRunDatabaseClient) => (tenantId: string) => Promise<WorkAppSlackWorkspaceSelect[]>;
17
- declare const updateWorkAppSlackWorkspace: (db: AgentsRunDatabaseClient) => (id: string, data: Partial<Pick<WorkAppSlackWorkspaceInsert, "status" | "slackTeamName">>) => Promise<WorkAppSlackWorkspaceSelect | null>;
18
- declare const deleteWorkAppSlackWorkspace: (db: AgentsRunDatabaseClient) => (id: string) => Promise<boolean>;
19
- declare const deleteWorkAppSlackWorkspaceByNangoConnectionId: (db: AgentsRunDatabaseClient) => (nangoConnectionId: string) => Promise<boolean>;
20
- declare const findWorkAppSlackUserMapping: (db: AgentsRunDatabaseClient) => (tenantId: string, slackUserId: string, slackTeamId: string, clientId?: string) => Promise<WorkAppSlackUserMappingSelect | null>;
21
- declare const findWorkAppSlackUserMappingByInkeepUserId: (db: AgentsRunDatabaseClient) => (inkeepUserId: string) => Promise<WorkAppSlackUserMappingSelect[]>;
22
- /**
23
- * Find a user mapping by Slack user ID and team ID only (ignores tenant).
24
- * Use this when you need to find the user's tenant from their mapping.
25
- */
26
- declare const findWorkAppSlackUserMappingBySlackUser: (db: AgentsRunDatabaseClient) => (slackUserId: string, slackTeamId: string, clientId?: string) => Promise<WorkAppSlackUserMappingSelect | null>;
27
- declare const listWorkAppSlackUserMappingsByTeam: (db: AgentsRunDatabaseClient) => (tenantId: string, slackTeamId: string) => Promise<WorkAppSlackUserMappingSelect[]>;
28
- declare const createWorkAppSlackUserMapping: (db: AgentsRunDatabaseClient) => (data: Omit<WorkAppSlackUserMappingInsert, "id" | "clientId" | "createdAt" | "updatedAt"> & {
29
- clientId?: string;
30
- }) => Promise<WorkAppSlackUserMappingSelect>;
31
- declare const updateWorkAppSlackUserMappingLastUsed: (db: AgentsRunDatabaseClient) => (tenantId: string, slackUserId: string, slackTeamId: string, clientId?: string) => Promise<void>;
32
- declare const deleteWorkAppSlackUserMapping: (db: AgentsRunDatabaseClient) => (tenantId: string, slackUserId: string, slackTeamId: string, clientId?: string) => Promise<boolean>;
33
- declare const deleteAllWorkAppSlackUserMappingsByTeam: (db: AgentsRunDatabaseClient) => (tenantId: string, slackTeamId: string, clientId?: string) => Promise<number>;
34
- declare const createWorkAppSlackChannelAgentConfig: (db: AgentsRunDatabaseClient) => (data: Omit<WorkAppSlackChannelAgentConfigInsert, "id" | "createdAt" | "updatedAt">) => Promise<WorkAppSlackChannelAgentConfigSelect>;
35
- declare const findWorkAppSlackChannelAgentConfig: (db: AgentsRunDatabaseClient) => (tenantId: string, slackTeamId: string, slackChannelId: string) => Promise<WorkAppSlackChannelAgentConfigSelect | null>;
36
- declare const listWorkAppSlackChannelAgentConfigsByTeam: (db: AgentsRunDatabaseClient) => (tenantId: string, slackTeamId: string) => Promise<WorkAppSlackChannelAgentConfigSelect[]>;
37
- declare const upsertWorkAppSlackChannelAgentConfig: (db: AgentsRunDatabaseClient) => (data: Omit<WorkAppSlackChannelAgentConfigInsert, "id" | "createdAt" | "updatedAt">) => Promise<WorkAppSlackChannelAgentConfigSelect>;
38
- declare const deleteWorkAppSlackChannelAgentConfig: (db: AgentsRunDatabaseClient) => (tenantId: string, slackTeamId: string, slackChannelId: string) => Promise<boolean>;
39
- declare const deleteAllWorkAppSlackChannelAgentConfigsByTeam: (db: AgentsRunDatabaseClient) => (tenantId: string, slackTeamId: string) => Promise<number>;
40
- declare const createWorkAppSlackUserSettings: (db: AgentsRunDatabaseClient) => (data: Omit<WorkAppSlackUserSettingsInsert, "id" | "createdAt" | "updatedAt">) => Promise<WorkAppSlackUserSettingsSelect>;
41
- declare const findWorkAppSlackUserSettings: (db: AgentsRunDatabaseClient) => (tenantId: string, slackTeamId: string, slackUserId: string) => Promise<WorkAppSlackUserSettingsSelect | null>;
42
- declare const upsertWorkAppSlackUserSettings: (db: AgentsRunDatabaseClient) => (data: Omit<WorkAppSlackUserSettingsInsert, "id" | "createdAt" | "updatedAt">) => Promise<WorkAppSlackUserSettingsSelect>;
43
- declare const deleteWorkAppSlackUserSettings: (db: AgentsRunDatabaseClient) => (tenantId: string, slackTeamId: string, slackUserId: string) => Promise<boolean>;
44
- //#endregion
45
- export { WorkAppSlackChannelAgentConfigInsert, WorkAppSlackChannelAgentConfigSelect, WorkAppSlackUserMappingInsert, WorkAppSlackUserMappingSelect, WorkAppSlackUserSettingsInsert, WorkAppSlackUserSettingsSelect, WorkAppSlackWorkspaceInsert, WorkAppSlackWorkspaceSelect, createWorkAppSlackChannelAgentConfig, createWorkAppSlackUserMapping, createWorkAppSlackUserSettings, createWorkAppSlackWorkspace, deleteAllWorkAppSlackChannelAgentConfigsByTeam, deleteAllWorkAppSlackUserMappingsByTeam, deleteWorkAppSlackChannelAgentConfig, deleteWorkAppSlackUserMapping, deleteWorkAppSlackUserSettings, deleteWorkAppSlackWorkspace, deleteWorkAppSlackWorkspaceByNangoConnectionId, findWorkAppSlackChannelAgentConfig, findWorkAppSlackUserMapping, findWorkAppSlackUserMappingByInkeepUserId, findWorkAppSlackUserMappingBySlackUser, findWorkAppSlackUserSettings, findWorkAppSlackWorkspaceByNangoConnectionId, findWorkAppSlackWorkspaceByTeamId, listWorkAppSlackChannelAgentConfigsByTeam, listWorkAppSlackUserMappingsByTeam, listWorkAppSlackWorkspacesByTenant, updateWorkAppSlackUserMappingLastUsed, updateWorkAppSlackWorkspace, upsertWorkAppSlackChannelAgentConfig, upsertWorkAppSlackUserSettings };
@@ -1,154 +0,0 @@
1
- import { workAppSlackChannelAgentConfigs, workAppSlackUserMappings, workAppSlackUserSettings, workAppSlackWorkspaces } from "../../db/runtime/runtime-schema.js";
2
- import { and, eq } from "drizzle-orm";
3
- import { nanoid } from "nanoid";
4
-
5
- //#region src/data-access/runtime/workAppSlack.ts
6
- const DEFAULT_CLIENT_ID = "work-apps-slack";
7
- const createWorkAppSlackWorkspace = (db) => async (data) => {
8
- const id = `wsw_${nanoid(21)}`;
9
- const now = (/* @__PURE__ */ new Date()).toISOString();
10
- const [result] = await db.insert(workAppSlackWorkspaces).values({
11
- id,
12
- ...data,
13
- createdAt: now,
14
- updatedAt: now
15
- }).returning();
16
- return result;
17
- };
18
- const findWorkAppSlackWorkspaceByTeamId = (db) => async (tenantId, slackTeamId) => {
19
- return (await db.select().from(workAppSlackWorkspaces).where(and(eq(workAppSlackWorkspaces.tenantId, tenantId), eq(workAppSlackWorkspaces.slackTeamId, slackTeamId))).limit(1))[0] || null;
20
- };
21
- const findWorkAppSlackWorkspaceByNangoConnectionId = (db) => async (nangoConnectionId) => {
22
- return (await db.select().from(workAppSlackWorkspaces).where(eq(workAppSlackWorkspaces.nangoConnectionId, nangoConnectionId)).limit(1))[0] || null;
23
- };
24
- const listWorkAppSlackWorkspacesByTenant = (db) => async (tenantId) => {
25
- return db.select().from(workAppSlackWorkspaces).where(eq(workAppSlackWorkspaces.tenantId, tenantId));
26
- };
27
- const updateWorkAppSlackWorkspace = (db) => async (id, data) => {
28
- const [result] = await db.update(workAppSlackWorkspaces).set({
29
- ...data,
30
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
31
- }).where(eq(workAppSlackWorkspaces.id, id)).returning();
32
- return result || null;
33
- };
34
- const deleteWorkAppSlackWorkspace = (db) => async (id) => {
35
- return (await db.delete(workAppSlackWorkspaces).where(eq(workAppSlackWorkspaces.id, id)).returning()).length > 0;
36
- };
37
- const deleteWorkAppSlackWorkspaceByNangoConnectionId = (db) => async (nangoConnectionId) => {
38
- return (await db.delete(workAppSlackWorkspaces).where(eq(workAppSlackWorkspaces.nangoConnectionId, nangoConnectionId)).returning()).length > 0;
39
- };
40
- const findWorkAppSlackUserMapping = (db) => async (tenantId, slackUserId, slackTeamId, clientId = DEFAULT_CLIENT_ID) => {
41
- return (await db.select().from(workAppSlackUserMappings).where(and(eq(workAppSlackUserMappings.tenantId, tenantId), eq(workAppSlackUserMappings.clientId, clientId), eq(workAppSlackUserMappings.slackUserId, slackUserId), eq(workAppSlackUserMappings.slackTeamId, slackTeamId))).limit(1))[0] || null;
42
- };
43
- const findWorkAppSlackUserMappingByInkeepUserId = (db) => async (inkeepUserId) => {
44
- return db.select().from(workAppSlackUserMappings).where(eq(workAppSlackUserMappings.inkeepUserId, inkeepUserId));
45
- };
46
- /**
47
- * Find a user mapping by Slack user ID and team ID only (ignores tenant).
48
- * Use this when you need to find the user's tenant from their mapping.
49
- */
50
- const findWorkAppSlackUserMappingBySlackUser = (db) => async (slackUserId, slackTeamId, clientId = DEFAULT_CLIENT_ID) => {
51
- return (await db.select().from(workAppSlackUserMappings).where(and(eq(workAppSlackUserMappings.clientId, clientId), eq(workAppSlackUserMappings.slackUserId, slackUserId), eq(workAppSlackUserMappings.slackTeamId, slackTeamId))).limit(1))[0] || null;
52
- };
53
- const listWorkAppSlackUserMappingsByTeam = (db) => async (tenantId, slackTeamId) => {
54
- return db.select().from(workAppSlackUserMappings).where(and(eq(workAppSlackUserMappings.tenantId, tenantId), eq(workAppSlackUserMappings.slackTeamId, slackTeamId)));
55
- };
56
- const createWorkAppSlackUserMapping = (db) => async (data) => {
57
- const id = `wsum_${nanoid(21)}`;
58
- const now = (/* @__PURE__ */ new Date()).toISOString();
59
- const [result] = await db.insert(workAppSlackUserMappings).values({
60
- id,
61
- clientId: data.clientId || DEFAULT_CLIENT_ID,
62
- ...data,
63
- linkedAt: now,
64
- createdAt: now,
65
- updatedAt: now
66
- }).returning();
67
- return result;
68
- };
69
- const updateWorkAppSlackUserMappingLastUsed = (db) => async (tenantId, slackUserId, slackTeamId, clientId = DEFAULT_CLIENT_ID) => {
70
- const now = (/* @__PURE__ */ new Date()).toISOString();
71
- await db.update(workAppSlackUserMappings).set({
72
- lastUsedAt: now,
73
- updatedAt: now
74
- }).where(and(eq(workAppSlackUserMappings.tenantId, tenantId), eq(workAppSlackUserMappings.clientId, clientId), eq(workAppSlackUserMappings.slackUserId, slackUserId), eq(workAppSlackUserMappings.slackTeamId, slackTeamId)));
75
- };
76
- const deleteWorkAppSlackUserMapping = (db) => async (tenantId, slackUserId, slackTeamId, clientId = DEFAULT_CLIENT_ID) => {
77
- return (await db.delete(workAppSlackUserMappings).where(and(eq(workAppSlackUserMappings.tenantId, tenantId), eq(workAppSlackUserMappings.clientId, clientId), eq(workAppSlackUserMappings.slackUserId, slackUserId), eq(workAppSlackUserMappings.slackTeamId, slackTeamId))).returning()).length > 0;
78
- };
79
- const deleteAllWorkAppSlackUserMappingsByTeam = (db) => async (tenantId, slackTeamId, clientId = DEFAULT_CLIENT_ID) => {
80
- return (await db.delete(workAppSlackUserMappings).where(and(eq(workAppSlackUserMappings.tenantId, tenantId), eq(workAppSlackUserMappings.clientId, clientId), eq(workAppSlackUserMappings.slackTeamId, slackTeamId))).returning()).length;
81
- };
82
- const createWorkAppSlackChannelAgentConfig = (db) => async (data) => {
83
- const id = `wscac_${nanoid(21)}`;
84
- const now = (/* @__PURE__ */ new Date()).toISOString();
85
- const [result] = await db.insert(workAppSlackChannelAgentConfigs).values({
86
- id,
87
- ...data,
88
- createdAt: now,
89
- updatedAt: now
90
- }).returning();
91
- return result;
92
- };
93
- const findWorkAppSlackChannelAgentConfig = (db) => async (tenantId, slackTeamId, slackChannelId) => {
94
- return (await db.select().from(workAppSlackChannelAgentConfigs).where(and(eq(workAppSlackChannelAgentConfigs.tenantId, tenantId), eq(workAppSlackChannelAgentConfigs.slackTeamId, slackTeamId), eq(workAppSlackChannelAgentConfigs.slackChannelId, slackChannelId))).limit(1))[0] || null;
95
- };
96
- const listWorkAppSlackChannelAgentConfigsByTeam = (db) => async (tenantId, slackTeamId) => {
97
- return db.select().from(workAppSlackChannelAgentConfigs).where(and(eq(workAppSlackChannelAgentConfigs.tenantId, tenantId), eq(workAppSlackChannelAgentConfigs.slackTeamId, slackTeamId)));
98
- };
99
- const upsertWorkAppSlackChannelAgentConfig = (db) => async (data) => {
100
- const existing = await findWorkAppSlackChannelAgentConfig(db)(data.tenantId, data.slackTeamId, data.slackChannelId);
101
- if (existing) {
102
- const [updated] = await db.update(workAppSlackChannelAgentConfigs).set({
103
- projectId: data.projectId,
104
- agentId: data.agentId,
105
- agentName: data.agentName,
106
- slackChannelName: data.slackChannelName,
107
- slackChannelType: data.slackChannelType,
108
- enabled: data.enabled,
109
- configuredByUserId: data.configuredByUserId,
110
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
111
- }).where(eq(workAppSlackChannelAgentConfigs.id, existing.id)).returning();
112
- return updated;
113
- }
114
- return createWorkAppSlackChannelAgentConfig(db)(data);
115
- };
116
- const deleteWorkAppSlackChannelAgentConfig = (db) => async (tenantId, slackTeamId, slackChannelId) => {
117
- return (await db.delete(workAppSlackChannelAgentConfigs).where(and(eq(workAppSlackChannelAgentConfigs.tenantId, tenantId), eq(workAppSlackChannelAgentConfigs.slackTeamId, slackTeamId), eq(workAppSlackChannelAgentConfigs.slackChannelId, slackChannelId))).returning()).length > 0;
118
- };
119
- const deleteAllWorkAppSlackChannelAgentConfigsByTeam = (db) => async (tenantId, slackTeamId) => {
120
- return (await db.delete(workAppSlackChannelAgentConfigs).where(and(eq(workAppSlackChannelAgentConfigs.tenantId, tenantId), eq(workAppSlackChannelAgentConfigs.slackTeamId, slackTeamId))).returning()).length;
121
- };
122
- const createWorkAppSlackUserSettings = (db) => async (data) => {
123
- const id = `wsus_${nanoid(21)}`;
124
- const now = (/* @__PURE__ */ new Date()).toISOString();
125
- const [result] = await db.insert(workAppSlackUserSettings).values({
126
- id,
127
- ...data,
128
- createdAt: now,
129
- updatedAt: now
130
- }).returning();
131
- return result;
132
- };
133
- const findWorkAppSlackUserSettings = (db) => async (tenantId, slackTeamId, slackUserId) => {
134
- return (await db.select().from(workAppSlackUserSettings).where(and(eq(workAppSlackUserSettings.tenantId, tenantId), eq(workAppSlackUserSettings.slackTeamId, slackTeamId), eq(workAppSlackUserSettings.slackUserId, slackUserId))).limit(1))[0] || null;
135
- };
136
- const upsertWorkAppSlackUserSettings = (db) => async (data) => {
137
- const existing = await findWorkAppSlackUserSettings(db)(data.tenantId, data.slackTeamId, data.slackUserId);
138
- if (existing) {
139
- const [updated] = await db.update(workAppSlackUserSettings).set({
140
- defaultProjectId: data.defaultProjectId,
141
- defaultAgentId: data.defaultAgentId,
142
- defaultAgentName: data.defaultAgentName,
143
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
144
- }).where(eq(workAppSlackUserSettings.id, existing.id)).returning();
145
- return updated;
146
- }
147
- return createWorkAppSlackUserSettings(db)(data);
148
- };
149
- const deleteWorkAppSlackUserSettings = (db) => async (tenantId, slackTeamId, slackUserId) => {
150
- return (await db.delete(workAppSlackUserSettings).where(and(eq(workAppSlackUserSettings.tenantId, tenantId), eq(workAppSlackUserSettings.slackTeamId, slackTeamId), eq(workAppSlackUserSettings.slackUserId, slackUserId))).returning()).length > 0;
151
- };
152
-
153
- //#endregion
154
- export { createWorkAppSlackChannelAgentConfig, createWorkAppSlackUserMapping, createWorkAppSlackUserSettings, createWorkAppSlackWorkspace, deleteAllWorkAppSlackChannelAgentConfigsByTeam, deleteAllWorkAppSlackUserMappingsByTeam, deleteWorkAppSlackChannelAgentConfig, deleteWorkAppSlackUserMapping, deleteWorkAppSlackUserSettings, deleteWorkAppSlackWorkspace, deleteWorkAppSlackWorkspaceByNangoConnectionId, findWorkAppSlackChannelAgentConfig, findWorkAppSlackUserMapping, findWorkAppSlackUserMappingByInkeepUserId, findWorkAppSlackUserMappingBySlackUser, findWorkAppSlackUserSettings, findWorkAppSlackWorkspaceByNangoConnectionId, findWorkAppSlackWorkspaceByTeamId, listWorkAppSlackChannelAgentConfigsByTeam, listWorkAppSlackUserMappingsByTeam, listWorkAppSlackWorkspacesByTenant, updateWorkAppSlackUserMappingLastUsed, updateWorkAppSlackWorkspace, upsertWorkAppSlackChannelAgentConfig, upsertWorkAppSlackUserSettings };
@@ -1,60 +0,0 @@
1
- import { JwtVerifyResult } from "./jwt-helpers.js";
2
- import { z } from "zod";
3
-
4
- //#region src/utils/slack-link-token.d.ts
5
-
6
- /**
7
- * Zod schema for validating Slack link token JWT payload.
8
- * This is a stateless token used for the device authorization flow.
9
- */
10
- declare const SlackLinkTokenPayloadSchema: z.ZodObject<{
11
- iss: z.ZodLiteral<"inkeep-auth">;
12
- aud: z.ZodLiteral<"slack-link">;
13
- sub: z.ZodString;
14
- iat: z.ZodNumber;
15
- exp: z.ZodNumber;
16
- jti: z.ZodOptional<z.ZodString>;
17
- tokenUse: z.ZodLiteral<"slackLinkCode">;
18
- tenantId: z.ZodString;
19
- slack: z.ZodObject<{
20
- teamId: z.ZodString;
21
- userId: z.ZodString;
22
- enterpriseId: z.ZodOptional<z.ZodString>;
23
- username: z.ZodOptional<z.ZodString>;
24
- }, z.core.$strip>;
25
- }, z.core.$strip>;
26
- type SlackLinkTokenPayload = z.infer<typeof SlackLinkTokenPayloadSchema>;
27
- /**
28
- * Parameters for generating a Slack link token
29
- */
30
- interface SignSlackLinkTokenParams {
31
- tenantId: string;
32
- slackTeamId: string;
33
- slackUserId: string;
34
- slackEnterpriseId?: string;
35
- slackUsername?: string;
36
- }
37
- /**
38
- * Result of verifying a Slack link token
39
- */
40
- type VerifySlackLinkTokenResult = JwtVerifyResult<SlackLinkTokenPayload>;
41
- /**
42
- * Sign a Slack link JWT token for the device authorization flow.
43
- * Token expires in 10 minutes.
44
- *
45
- * This token is generated when a user runs `/inkeep link` in Slack
46
- * and is verified when they visit the dashboard link page.
47
- */
48
- declare function signSlackLinkToken(params: SignSlackLinkTokenParams): Promise<string>;
49
- /**
50
- * Verify and decode a Slack link JWT token.
51
- * Validates signature, expiration, issuer, audience, and schema.
52
- */
53
- declare function verifySlackLinkToken(token: string): Promise<VerifySlackLinkTokenResult>;
54
- /**
55
- * Check if a token looks like a Slack link JWT (quick check before full verification).
56
- * Returns true if the token has the expected issuer and tokenUse.
57
- */
58
- declare function isSlackLinkToken(token: string): boolean;
59
- //#endregion
60
- export { SignSlackLinkTokenParams, SlackLinkTokenPayload, SlackLinkTokenPayloadSchema, VerifySlackLinkTokenResult, isSlackLinkToken, signSlackLinkToken, verifySlackLinkToken };
@@ -1,124 +0,0 @@
1
- import { getLogger } from "./logger.js";
2
- import { signJwt, verifyJwt } from "./jwt-helpers.js";
3
- import { z } from "zod";
4
-
5
- //#region src/utils/slack-link-token.ts
6
- const logger = getLogger("slack-link-token");
7
- const ISSUER = "inkeep-auth";
8
- const AUDIENCE = "slack-link";
9
- const TOKEN_USE = "slackLinkCode";
10
- const TOKEN_TTL = "10m";
11
- /**
12
- * Zod schema for validating Slack link token JWT payload.
13
- * This is a stateless token used for the device authorization flow.
14
- */
15
- const SlackLinkTokenPayloadSchema = z.object({
16
- iss: z.literal(ISSUER),
17
- aud: z.literal(AUDIENCE),
18
- sub: z.string().min(1),
19
- iat: z.number(),
20
- exp: z.number(),
21
- jti: z.string().optional(),
22
- tokenUse: z.literal(TOKEN_USE),
23
- tenantId: z.string().min(1),
24
- slack: z.object({
25
- teamId: z.string().min(1),
26
- userId: z.string().min(1),
27
- enterpriseId: z.string().min(1).optional(),
28
- username: z.string().optional()
29
- })
30
- });
31
- /**
32
- * Sign a Slack link JWT token for the device authorization flow.
33
- * Token expires in 10 minutes.
34
- *
35
- * This token is generated when a user runs `/inkeep link` in Slack
36
- * and is verified when they visit the dashboard link page.
37
- */
38
- async function signSlackLinkToken(params) {
39
- try {
40
- const token = await signJwt({
41
- issuer: ISSUER,
42
- subject: `slack:${params.slackTeamId}:${params.slackUserId}`,
43
- audience: AUDIENCE,
44
- expiresIn: TOKEN_TTL,
45
- claims: {
46
- tokenUse: TOKEN_USE,
47
- tenantId: params.tenantId,
48
- slack: {
49
- teamId: params.slackTeamId,
50
- userId: params.slackUserId,
51
- ...params.slackEnterpriseId && { enterpriseId: params.slackEnterpriseId },
52
- ...params.slackUsername && { username: params.slackUsername }
53
- }
54
- }
55
- });
56
- logger.debug({
57
- tenantId: params.tenantId,
58
- slackTeamId: params.slackTeamId,
59
- slackUserId: params.slackUserId
60
- }, "Generated Slack link token");
61
- return token;
62
- } catch (error) {
63
- const errorMessage = error instanceof Error ? error.message : String(error);
64
- logger.error({
65
- error,
66
- errorMessage
67
- }, "Failed to generate Slack link token");
68
- throw new Error(`Failed to generate Slack link token: ${errorMessage}`);
69
- }
70
- }
71
- /**
72
- * Verify and decode a Slack link JWT token.
73
- * Validates signature, expiration, issuer, audience, and schema.
74
- */
75
- async function verifySlackLinkToken(token) {
76
- const result = await verifyJwt(token, {
77
- issuer: ISSUER,
78
- audience: AUDIENCE
79
- });
80
- if (!result.valid || !result.payload) {
81
- logger.warn({ error: result.error }, "Slack link token verification failed");
82
- return {
83
- valid: false,
84
- error: result.error
85
- };
86
- }
87
- const parseResult = SlackLinkTokenPayloadSchema.safeParse(result.payload);
88
- if (!parseResult.success) {
89
- logger.warn({
90
- payload: result.payload,
91
- issues: parseResult.error.issues
92
- }, "Invalid Slack link token: schema validation failed");
93
- return {
94
- valid: false,
95
- error: `Invalid token schema: ${parseResult.error.issues.map((e) => e.message).join(", ")}`
96
- };
97
- }
98
- logger.debug({
99
- tenantId: parseResult.data.tenantId,
100
- slackTeamId: parseResult.data.slack.teamId,
101
- slackUserId: parseResult.data.slack.userId
102
- }, "Successfully verified Slack link token");
103
- return {
104
- valid: true,
105
- payload: parseResult.data
106
- };
107
- }
108
- /**
109
- * Check if a token looks like a Slack link JWT (quick check before full verification).
110
- * Returns true if the token has the expected issuer and tokenUse.
111
- */
112
- function isSlackLinkToken(token) {
113
- try {
114
- const parts = token.split(".");
115
- if (parts.length !== 3) return false;
116
- const payload = JSON.parse(Buffer.from(parts[1], "base64url").toString());
117
- return payload?.iss === ISSUER && payload?.tokenUse === TOKEN_USE;
118
- } catch {
119
- return false;
120
- }
121
- }
122
-
123
- //#endregion
124
- export { SlackLinkTokenPayloadSchema, isSlackLinkToken, signSlackLinkToken, verifySlackLinkToken };
@@ -1,87 +0,0 @@
1
- import { JwtVerifyResult } from "./jwt-helpers.js";
2
- import { z } from "zod";
3
-
4
- //#region src/utils/slack-user-token.d.ts
5
-
6
- /**
7
- * Zod schema for validating Slack user access token JWT payload.
8
- * This is the canonical schema from the work_apps_slack spec.
9
- */
10
- declare const SlackAccessTokenPayloadSchema: z.ZodObject<{
11
- iss: z.ZodLiteral<"inkeep-auth">;
12
- aud: z.ZodLiteral<"inkeep-api">;
13
- sub: z.ZodString;
14
- iat: z.ZodNumber;
15
- exp: z.ZodNumber;
16
- jti: z.ZodOptional<z.ZodString>;
17
- tokenUse: z.ZodLiteral<"slackUser">;
18
- act: z.ZodObject<{
19
- sub: z.ZodLiteral<"inkeep-work-app-slack">;
20
- }, z.core.$strip>;
21
- tenantId: z.ZodString;
22
- slack: z.ZodObject<{
23
- teamId: z.ZodString;
24
- userId: z.ZodString;
25
- enterpriseId: z.ZodOptional<z.ZodString>;
26
- email: z.ZodOptional<z.ZodString>;
27
- }, z.core.$strip>;
28
- }, z.core.$strip>;
29
- type SlackAccessTokenPayload = z.infer<typeof SlackAccessTokenPayloadSchema>;
30
- /**
31
- * Parameters for generating a Slack user token
32
- */
33
- interface SignSlackUserTokenParams {
34
- inkeepUserId: string;
35
- tenantId: string;
36
- slackTeamId: string;
37
- slackUserId: string;
38
- slackEnterpriseId?: string;
39
- slackEmail?: string;
40
- }
41
- /**
42
- * Result of verifying a Slack user token
43
- */
44
- type VerifySlackUserTokenResult = JwtVerifyResult<SlackAccessTokenPayload>;
45
- /**
46
- * Auth context extracted from a verified Slack user token
47
- */
48
- interface SlackUserAuthContext {
49
- userId: string;
50
- tenantId: string;
51
- source: 'slack';
52
- metadata: {
53
- slackTeamId: string;
54
- slackUserId: string;
55
- slackEnterpriseId?: string;
56
- slackEmail?: string;
57
- };
58
- }
59
- /**
60
- * Sign a Slack user JWT token for calling Manage/Run APIs.
61
- * Token expires in 5 minutes.
62
- *
63
- * This token is used when Slack runtime logic needs to call:
64
- * - Manage API (list projects, list agents)
65
- * - Run API (POST /run/api/chat)
66
- */
67
- declare function signSlackUserToken(params: SignSlackUserTokenParams): Promise<string>;
68
- /**
69
- * Verify and decode a Slack user JWT token.
70
- * Validates signature, expiration, issuer, audience, and schema.
71
- */
72
- declare function verifySlackUserToken(token: string): Promise<VerifySlackUserTokenResult>;
73
- /**
74
- * Check if a token looks like a Slack user JWT (quick check before full verification).
75
- * Returns true if the token has the expected issuer and tokenUse.
76
- */
77
- declare function isSlackUserToken(token: string): boolean;
78
- /**
79
- * Extract Slack user token from Authorization header and verify it.
80
- */
81
- declare function verifySlackUserAuthHeader(authHeader: string | undefined): Promise<VerifySlackUserTokenResult>;
82
- /**
83
- * Convert a verified Slack token payload to an auth context for middleware.
84
- */
85
- declare function toSlackUserAuthContext(payload: SlackAccessTokenPayload): SlackUserAuthContext;
86
- //#endregion
87
- export { SignSlackUserTokenParams, SlackAccessTokenPayload, SlackAccessTokenPayloadSchema, SlackUserAuthContext, VerifySlackUserTokenResult, isSlackUserToken, signSlackUserToken, toSlackUserAuthContext, verifySlackUserAuthHeader, verifySlackUserToken };
@@ -1,156 +0,0 @@
1
- import { getLogger } from "./logger.js";
2
- import { extractBearerToken, signJwt, verifyJwt } from "./jwt-helpers.js";
3
- import { z } from "zod";
4
-
5
- //#region src/utils/slack-user-token.ts
6
- const logger = getLogger("slack-user-token");
7
- const ISSUER = "inkeep-auth";
8
- const AUDIENCE = "inkeep-api";
9
- const TOKEN_USE = "slackUser";
10
- const ACTOR_SUB = "inkeep-work-app-slack";
11
- const TOKEN_TTL = "5m";
12
- /**
13
- * Zod schema for validating Slack user access token JWT payload.
14
- * This is the canonical schema from the work_apps_slack spec.
15
- */
16
- const SlackAccessTokenPayloadSchema = z.object({
17
- iss: z.literal(ISSUER),
18
- aud: z.literal(AUDIENCE),
19
- sub: z.string().min(1),
20
- iat: z.number(),
21
- exp: z.number(),
22
- jti: z.string().optional(),
23
- tokenUse: z.literal(TOKEN_USE),
24
- act: z.object({ sub: z.literal(ACTOR_SUB) }),
25
- tenantId: z.string().min(1),
26
- slack: z.object({
27
- teamId: z.string().min(1),
28
- userId: z.string().min(1),
29
- enterpriseId: z.string().min(1).optional(),
30
- email: z.string().email().optional()
31
- })
32
- });
33
- /**
34
- * Sign a Slack user JWT token for calling Manage/Run APIs.
35
- * Token expires in 5 minutes.
36
- *
37
- * This token is used when Slack runtime logic needs to call:
38
- * - Manage API (list projects, list agents)
39
- * - Run API (POST /run/api/chat)
40
- */
41
- async function signSlackUserToken(params) {
42
- try {
43
- const token = await signJwt({
44
- issuer: ISSUER,
45
- subject: params.inkeepUserId,
46
- audience: AUDIENCE,
47
- expiresIn: TOKEN_TTL,
48
- claims: {
49
- tokenUse: TOKEN_USE,
50
- act: { sub: ACTOR_SUB },
51
- tenantId: params.tenantId,
52
- slack: {
53
- teamId: params.slackTeamId,
54
- userId: params.slackUserId,
55
- ...params.slackEnterpriseId && { enterpriseId: params.slackEnterpriseId },
56
- ...params.slackEmail && { email: params.slackEmail }
57
- }
58
- }
59
- });
60
- logger.debug({
61
- inkeepUserId: params.inkeepUserId,
62
- tenantId: params.tenantId,
63
- slackTeamId: params.slackTeamId,
64
- slackUserId: params.slackUserId
65
- }, "Generated Slack user token");
66
- return token;
67
- } catch (error) {
68
- const errorMessage = error instanceof Error ? error.message : String(error);
69
- logger.error({
70
- error,
71
- errorMessage
72
- }, "Failed to generate Slack user token");
73
- throw new Error(`Failed to generate Slack user token: ${errorMessage}`);
74
- }
75
- }
76
- /**
77
- * Verify and decode a Slack user JWT token.
78
- * Validates signature, expiration, issuer, audience, and schema.
79
- */
80
- async function verifySlackUserToken(token) {
81
- const result = await verifyJwt(token, {
82
- issuer: ISSUER,
83
- audience: AUDIENCE
84
- });
85
- if (!result.valid || !result.payload) {
86
- logger.warn({ error: result.error }, "Slack user token verification failed");
87
- return {
88
- valid: false,
89
- error: result.error
90
- };
91
- }
92
- const parseResult = SlackAccessTokenPayloadSchema.safeParse(result.payload);
93
- if (!parseResult.success) {
94
- logger.warn({
95
- payload: result.payload,
96
- issues: parseResult.error.issues
97
- }, "Invalid Slack user token: schema validation failed");
98
- return {
99
- valid: false,
100
- error: `Invalid token schema: ${parseResult.error.issues.map((e) => e.message).join(", ")}`
101
- };
102
- }
103
- logger.debug({
104
- inkeepUserId: parseResult.data.sub,
105
- tenantId: parseResult.data.tenantId,
106
- slackTeamId: parseResult.data.slack.teamId
107
- }, "Successfully verified Slack user token");
108
- return {
109
- valid: true,
110
- payload: parseResult.data
111
- };
112
- }
113
- /**
114
- * Check if a token looks like a Slack user JWT (quick check before full verification).
115
- * Returns true if the token has the expected issuer and tokenUse.
116
- */
117
- function isSlackUserToken(token) {
118
- try {
119
- const parts = token.split(".");
120
- if (parts.length !== 3) return false;
121
- const payload = JSON.parse(Buffer.from(parts[1], "base64url").toString());
122
- return payload?.iss === ISSUER && payload?.tokenUse === TOKEN_USE;
123
- } catch {
124
- return false;
125
- }
126
- }
127
- /**
128
- * Extract Slack user token from Authorization header and verify it.
129
- */
130
- async function verifySlackUserAuthHeader(authHeader) {
131
- const extracted = extractBearerToken(authHeader);
132
- if (!extracted.token) return {
133
- valid: false,
134
- error: extracted.error
135
- };
136
- return verifySlackUserToken(extracted.token);
137
- }
138
- /**
139
- * Convert a verified Slack token payload to an auth context for middleware.
140
- */
141
- function toSlackUserAuthContext(payload) {
142
- return {
143
- userId: payload.sub,
144
- tenantId: payload.tenantId,
145
- source: "slack",
146
- metadata: {
147
- slackTeamId: payload.slack.teamId,
148
- slackUserId: payload.slack.userId,
149
- slackEnterpriseId: payload.slack.enterpriseId,
150
- slackEmail: payload.slack.email
151
- }
152
- };
153
- }
154
-
155
- //#endregion
156
- export { SlackAccessTokenPayloadSchema, isSlackUserToken, signSlackUserToken, toSlackUserAuthContext, verifySlackUserAuthHeader, verifySlackUserToken };
@@ -1,35 +0,0 @@
1
- //#region src/utils/sse-parser.d.ts
2
- /**
3
- * SSE (Server-Sent Events) Response Parser
4
- *
5
- * Shared utility for parsing SSE responses from the chat API.
6
- * Used by EvaluationService, Slack integration, and other consumers.
7
- *
8
- * Handles multiple response formats:
9
- * - OpenAI-compatible chat completion chunks
10
- * - Vercel AI SDK data stream format (text-delta)
11
- * - Error operations and events
12
- */
13
- interface ParsedSSEResponse {
14
- text: string;
15
- error?: string;
16
- }
17
- /**
18
- * Parse SSE (Server-Sent Events) response from chat API
19
- * Handles text deltas, error operations, and other data operations
20
- *
21
- * Supports:
22
- * - OpenAI-compatible format: `chat.completion.chunk` with `delta.content`
23
- * - Vercel AI SDK format: `text-delta` with `delta`
24
- * - Vercel AI SDK format: `text-start` and `text-end` markers (ignored)
25
- * - Error operations: `data-operation` with `type: 'error'`
26
- * - Direct error events: `type: 'error'`
27
- *
28
- * Ignores:
29
- * - `data-operation` events (metadata, not content)
30
- * - `text-start` and `text-end` markers
31
- * - `[DONE]` markers
32
- */
33
- declare function parseSSEResponse(sseText: string): ParsedSSEResponse;
34
- //#endregion
35
- export { ParsedSSEResponse, parseSSEResponse };