Skip to content

Commit 0d86c46

Browse files
Merge remote-tracking branch 'origin/main' into fix-circular-json-exception
2 parents bf7a379 + 6cee49c commit 0d86c46

10 files changed

Lines changed: 118 additions & 71 deletions

File tree

THIRD_PARTY_LICENSES.txt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16333,23 +16333,22 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
1633316333

1633416334
The following npm packages may be included in this product:
1633516335

16336-
- @ai-sdk/anthropic@2.0.35
16337-
- @ai-sdk/azure@2.0.12
16336+
- @ai-sdk/anthropic@2.0.45
16337+
- @ai-sdk/azure@2.0.70
1633816338
- @ai-sdk/cerebras@1.0.7
1633916339
- @ai-sdk/cohere@2.0.3
1634016340
- @ai-sdk/deepinfra@1.0.7
1634116341
- @ai-sdk/deepseek@1.0.7
1634216342
- @ai-sdk/gateway@1.0.11
1634316343
- @ai-sdk/gateway@1.0.5
16344-
- @ai-sdk/google-vertex@3.0.51
16345-
- @ai-sdk/google@2.0.20
16346-
- @ai-sdk/google@2.0.23
16344+
- @ai-sdk/google-vertex@3.0.70
16345+
- @ai-sdk/google@2.0.38
1634716346
- @ai-sdk/groq@2.0.7
1634816347
- @ai-sdk/mistral@2.0.4
1634916348
- @ai-sdk/openai-compatible@1.0.7
16350-
- @ai-sdk/openai@2.0.12
16349+
- @ai-sdk/openai@2.0.68
1635116350
- @ai-sdk/perplexity@2.0.3
16352-
- @ai-sdk/provider-utils@3.0.12
16351+
- @ai-sdk/provider-utils@3.0.17
1635316352
- @ai-sdk/provider-utils@3.0.2
1635416353
- @ai-sdk/provider-utils@3.0.3
1635516354
- @ai-sdk/provider-utils@3.0.5

package-lock.json

Lines changed: 76 additions & 58 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,17 @@
3131
},
3232
"private": true,
3333
"dependencies": {
34-
"@ai-sdk/anthropic": "2.0.35",
35-
"@ai-sdk/azure": "2.0.12",
34+
"@ai-sdk/anthropic": "2.0.45",
35+
"@ai-sdk/azure": "2.0.70",
3636
"@ai-sdk/cerebras": "1.0.7",
3737
"@ai-sdk/cohere": "2.0.3",
3838
"@ai-sdk/deepinfra": "1.0.7",
3939
"@ai-sdk/deepseek": "1.0.7",
40-
"@ai-sdk/google": "2.0.20",
41-
"@ai-sdk/google-vertex": "^3.0.51",
40+
"@ai-sdk/google": "2.0.38",
41+
"@ai-sdk/google-vertex": "^3.0.70",
4242
"@ai-sdk/groq": "2.0.7",
4343
"@ai-sdk/mistral": "2.0.4",
44-
"@ai-sdk/openai": "2.0.12",
44+
"@ai-sdk/openai": "2.0.68",
4545
"@ai-sdk/perplexity": "2.0.3",
4646
"@ai-sdk/react": "2.0.22",
4747
"@ai-sdk/togetherai": "1.0.7",

packages/openops/src/lib/ai/providers/google-vertex.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { LanguageModel } from 'ai';
44
import { AiProvider } from '../providers';
55

66
const googleVertexGeminiModels = [
7+
'gemini-3-pro-preview',
78
'gemini-2.5-pro',
89
'gemini-2.5-flash',
910
'gemini-2.5-flash-lite',

packages/openops/src/lib/ai/providers/google.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { LanguageModel } from 'ai';
33
import { AiProvider } from '../providers';
44

55
const googleModels = [
6+
'gemini-3-pro-preview',
67
'gemini-2.0-flash-001',
78
'gemini-1.5-flash',
89
'gemini-1.5-flash-latest',

packages/openops/src/lib/ai/providers/openai.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { LanguageModel } from 'ai';
33
import { AiProvider } from '../providers';
44

55
const openAiModels = [
6+
'gpt-5.1-2025-11-13',
67
'gpt-5',
78
'gpt-5-mini',
89
'gpt-5-nano',

packages/server/shared/src/lib/host-validation/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { promises as dns } from 'dns';
22
import ipRangeCheck from 'ip-range-check';
33
import { isIPv4, isIPv6 } from 'net';
4+
import { SharedSystemProp, system } from '../system';
45

56
const internalV4Cidrs = [
67
'127.0.0.0/8', // Loopback addresses
@@ -55,7 +56,10 @@ async function isInternalHost(host: string): Promise<boolean> {
5556
}
5657

5758
export async function validateHost(host: string | undefined): Promise<void> {
58-
if (!host) return;
59+
const isHostValidationEnabled = system.getBoolean(
60+
SharedSystemProp.ENABLE_HOST_VALIDATION,
61+
);
62+
if (!isHostValidationEnabled || !host) return;
5963
const isPrivate = await isInternalHost(host);
6064
if (isPrivate) throw new Error('Host must not be an internal address');
6165
}

packages/server/shared/src/lib/system/system-prop.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ export enum SharedSystemProp {
148148
LANGFUSE_SECRET_KEY = 'LANGFUSE_SECRET_KEY',
149149
LANGFUSE_PUBLIC_KEY = 'LANGFUSE_PUBLIC_KEY',
150150
LANGFUSE_HOST = 'LANGFUSE_HOST',
151+
152+
ENABLE_HOST_VALIDATION = 'ENABLE_HOST_VALIDATION',
151153
}
152154

153155
export enum WorkerSystemProps {

packages/server/shared/src/lib/system/system.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ const systemPropDefaultValues: Partial<Record<SystemProp, string>> = {
9898
[AppSystemProp.LLM_CHAT_EXPIRE_TIME_SECONDS]: '86400', // 24 hours
9999
[AppSystemProp.TELEMETRY_MODE]: 'COLLECTOR',
100100
[AppSystemProp.TELEMETRY_COLLECTOR_URL]: 'https://telemetry.openops.com/save',
101+
[SharedSystemProp.ENABLE_HOST_VALIDATION]: 'true',
101102
};
102103

103104
export const system = {

packages/server/shared/test/host-validation/index.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,35 @@
11
const resolve4 = jest.fn();
22
const resolve6 = jest.fn();
3+
const getBoolean = jest.fn().mockReturnValue(true);
34

45
jest.mock('dns', () => ({ promises: { resolve4, resolve6 } }));
6+
jest.mock('../../src/lib/system', () => ({
7+
system: { getBoolean },
8+
SharedSystemProp: { ENABLE_HOST_VALIDATION: 'ENABLE_HOST_VALIDATION' },
9+
}));
510

611
import { validateHost } from '../../src/lib/host-validation';
712

813
describe('Host Validation', () => {
14+
beforeEach(() => {
15+
getBoolean.mockReturnValue(true);
16+
});
17+
918
afterEach(() => {
1019
jest.clearAllMocks();
1120
});
1221

22+
test('should skip if host validation is disabled', async () => {
23+
getBoolean.mockReturnValue(false);
24+
const host = '127.0.0.1';
25+
await expect(validateHost(host)).resolves.toBeUndefined();
26+
});
27+
28+
test('should skip for empty host', async () => {
29+
const host = '';
30+
await expect(validateHost(host)).resolves.toBeUndefined();
31+
});
32+
1333
test('should throw for private IPv4 address', async () => {
1434
const host = '192.168.1.1';
1535
await expect(validateHost(host)).rejects.toThrow(

0 commit comments

Comments
 (0)