Skip to content

Commit 86da4b0

Browse files
committed
wip
1 parent 31fd6ae commit 86da4b0

4 files changed

Lines changed: 45 additions & 54 deletions

File tree

packages/openops/src/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ export * from './lib/openops-tables/applications-service';
4040
export * from './lib/openops-tables/auth-user';
4141
export * from './lib/openops-tables/fields';
4242
export * from './lib/openops-tables/filters';
43-
export * from './lib/openops-tables/get-encrypted-token-for-block';
44-
export * from './lib/openops-tables/get-project-database-token';
4543
export * from './lib/openops-tables/openops-tables-common-properties';
4644
export * from './lib/openops-tables/requests-helpers';
4745
export * from './lib/openops-tables/rows';
Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
1-
import { AxiosHeaders } from 'axios';
2-
import {
3-
createAxiosHeaders,
4-
createAxiosHeadersForOpenOpsTablesBlock,
5-
makeOpenOpsTablesGet,
6-
} from './requests-helpers';
1+
import { createAxiosHeaders, makeOpenOpsTablesGet } from './requests-helpers';
72
import { Application } from './types';
83

94
export const OPENOPS_DEFAULT_DATABASE_NAME = 'OpenOps Dataset';
105

11-
async function getDefaultDatabaseIdInternal(
6+
export async function getDefaultDatabaseId(
127
token: string,
13-
authenticationHeaderCallback: (token: string) => AxiosHeaders,
148
databaseName = OPENOPS_DEFAULT_DATABASE_NAME, // TODO: remove this when all environments are migrated
159
): Promise<number> {
16-
const authenticationHeader = authenticationHeaderCallback(token);
10+
const authenticationHeader = createAxiosHeaders(token);
1711

1812
const getTablesResult: Application[] =
1913
await makeOpenOpsTablesGet<Application>(
@@ -31,19 +25,3 @@ async function getDefaultDatabaseIdInternal(
3125

3226
return defaultDatabase.id;
3327
}
34-
35-
export const getDefaultDatabaseId = (
36-
token: string,
37-
databaseName = OPENOPS_DEFAULT_DATABASE_NAME,
38-
): Promise<number> =>
39-
getDefaultDatabaseIdInternal(token, createAxiosHeaders, databaseName);
40-
41-
export const getDefaultDatabaseIdForOpenOpsTablesBlock = (
42-
token: string,
43-
databaseName = OPENOPS_DEFAULT_DATABASE_NAME,
44-
): Promise<number> =>
45-
getDefaultDatabaseIdInternal(
46-
token,
47-
createAxiosHeadersForOpenOpsTablesBlock,
48-
databaseName,
49-
);

packages/openops/src/lib/openops-tables/tables.ts

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
import { encryptUtils } from '@openops/server-shared';
2-
import {
3-
createAxiosHeaders,
4-
makeOpenOpsTablesGet,
5-
} from '../openops-tables/requests-helpers';
6-
import {
7-
getDefaultDatabaseId,
8-
getDefaultDatabaseIdForOpenOpsTablesBlock,
9-
} from './applications-service';
2+
import { makeOpenOpsTablesGet } from '../openops-tables/requests-helpers';
3+
import { getDefaultDatabaseId } from './applications-service';
104
import { authenticateDefaultUserInOpenOpsTables } from './auth-user';
115
import { createRequestContext, type RequestContext } from './request-context';
126

@@ -48,6 +42,9 @@ export async function getTableByName(
4842
return table;
4943
}
5044

45+
/**
46+
* @deprecated Use getTableNamesWithContext with block context instead
47+
*/
5148
export async function getTableNames(
5249
token?: string,
5350
useJwt = false,
@@ -57,6 +54,9 @@ export async function getTableNames(
5754
return tables.map((t) => t.name);
5855
}
5956

57+
/**
58+
* Get table names using block context (optimized - uses provided tablesDatabaseId and token)
59+
*/
6060
export async function getTableNamesWithContext(ctx: {
6161
server: {
6262
tablesDatabaseId: number;
@@ -75,22 +75,18 @@ async function getAvailableTablesWithContext(
7575
ctx?: RequestContext,
7676
tablesDatabaseId?: number,
7777
): Promise<OpenOpsTable[]> {
78-
const requestContext =
79-
ctx ??
80-
(await (async () => {
81-
const { token } = await authenticateDefaultUserInOpenOpsTables();
82-
return createRequestContext(token, true);
83-
})());
84-
78+
let requestContext: RequestContext;
8579
let databaseId: number;
86-
if (tablesDatabaseId !== undefined) {
80+
81+
if (ctx && tablesDatabaseId !== undefined) {
82+
// Block context path - both provided
83+
requestContext = ctx;
8784
databaseId = tablesDatabaseId;
8885
} else {
89-
const isJwt = requestContext.createHeaders === createAxiosHeaders;
90-
const getDatabaseId = isJwt
91-
? getDefaultDatabaseId
92-
: getDefaultDatabaseIdForOpenOpsTablesBlock;
93-
databaseId = await getDatabaseId(requestContext.token);
86+
// Migration/seed path - fall back to JWT authentication
87+
const { token } = await authenticateDefaultUserInOpenOpsTables();
88+
requestContext = createRequestContext(token, true);
89+
databaseId = await getDefaultDatabaseId(token);
9490
}
9591

9692
const tables = await getTablesWithContext(requestContext, databaseId);
@@ -99,7 +95,8 @@ async function getAvailableTablesWithContext(
9995
}
10096

10197
/**
102-
* @deprecated Use getAvailableTablesWithContext with RequestContext instead
98+
* @deprecated Use getAvailableTablesWithContext with block context instead
99+
* Only used by migrations/seeds
103100
*/
104101
async function getAvailableTablesInOpenopsTables(
105102
token?: string,

packages/server/api/src/app/ai/mcp/llm-query-router.ts

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1-
import { getTableNames, isLLMTelemetryEnabled } from '@openops/common';
2-
import { logger } from '@openops/server-shared';
1+
import {
2+
getTableNames,
3+
getTableNamesWithContext,
4+
isLLMTelemetryEnabled,
5+
} from '@openops/common';
6+
import { AppSystemProp, logger, system } from '@openops/server-shared';
37
import { AiConfigParsed, ChatFlowContext } from '@openops/shared';
48
import { generateObject, LanguageModel, ModelMessage, ToolSet } from 'ai';
59
import { z } from 'zod';
10+
import { projectService } from '../../project/project-service';
611
import { getChatTools } from '../chat/ai-chat.service';
712
import { buildUIContextSection } from '../chat/prompts.service';
813
import { getAdditionalQueryClassificationDescriptions } from './extensions';
@@ -107,7 +112,7 @@ export async function routeQuery({
107112
}));
108113

109114
try {
110-
const openopsTablesNames = await getOpenOpsTablesNames();
115+
const openopsTablesNames = await getOpenOpsTablesNames(projectId);
111116

112117
const { object: selectionResult } = await generateObject({
113118
model: languageModel,
@@ -178,9 +183,22 @@ const getPreviousToolsForChat = async (
178183
}
179184
};
180185

181-
const getOpenOpsTablesNames = async (): Promise<string[]> => {
186+
const getOpenOpsTablesNames = async (projectId: string): Promise<string[]> => {
182187
try {
183-
return await getTableNames();
188+
const useDatabaseToken =
189+
system.getBoolean(AppSystemProp.USE_DATABASE_TOKEN) ?? false;
190+
191+
if (useDatabaseToken) {
192+
const project = await projectService.getOneOrThrow(projectId);
193+
return await getTableNamesWithContext({
194+
server: {
195+
tablesDatabaseId: project.tablesDatabaseId,
196+
tablesDatabaseToken: project.tablesDatabaseToken,
197+
},
198+
});
199+
} else {
200+
return await getTableNames();
201+
}
184202
} catch (error) {
185203
logger.error('Error getting OpenOps table names for the LLM query router', {
186204
error,

0 commit comments

Comments
 (0)