@dofe/infra-clients 0.1.38 → 0.1.41

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 (109) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/internal/mlflow/mlflow.client.d.ts +44 -0
  6. package/dist/internal/mlflow/mlflow.client.d.ts.map +1 -0
  7. package/dist/internal/mlflow/mlflow.client.js +184 -0
  8. package/dist/internal/mlflow/mlflow.client.js.map +1 -0
  9. package/dist/internal/mlflow/mlflow.module.d.ts +3 -0
  10. package/dist/internal/mlflow/mlflow.module.d.ts.map +1 -0
  11. package/dist/internal/mlflow/mlflow.module.js +23 -0
  12. package/dist/internal/mlflow/mlflow.module.js.map +1 -0
  13. package/dist/internal/model-research-proxy/anthropic-proxy-research.client.d.ts +52 -0
  14. package/dist/internal/model-research-proxy/anthropic-proxy-research.client.d.ts.map +1 -0
  15. package/dist/internal/model-research-proxy/anthropic-proxy-research.client.js +174 -0
  16. package/dist/internal/model-research-proxy/anthropic-proxy-research.client.js.map +1 -0
  17. package/dist/internal/model-research-proxy/anthropic-proxy-research.module.d.ts +3 -0
  18. package/dist/internal/model-research-proxy/anthropic-proxy-research.module.d.ts.map +1 -0
  19. package/dist/internal/model-research-proxy/anthropic-proxy-research.module.js +30 -0
  20. package/dist/internal/model-research-proxy/anthropic-proxy-research.module.js.map +1 -0
  21. package/dist/internal/model-research-proxy/index.d.ts +6 -0
  22. package/dist/internal/model-research-proxy/index.d.ts.map +1 -0
  23. package/dist/internal/model-research-proxy/index.js +24 -0
  24. package/dist/internal/model-research-proxy/index.js.map +1 -0
  25. package/dist/internal/model-verify/index.d.ts +4 -0
  26. package/dist/internal/model-verify/index.d.ts.map +1 -0
  27. package/dist/internal/model-verify/index.js +26 -0
  28. package/dist/internal/model-verify/index.js.map +1 -0
  29. package/dist/internal/model-verify/model-verify.client.d.ts +77 -0
  30. package/dist/internal/model-verify/model-verify.client.d.ts.map +1 -0
  31. package/dist/internal/model-verify/model-verify.client.js +324 -0
  32. package/dist/internal/model-verify/model-verify.client.js.map +1 -0
  33. package/dist/internal/openclaw/docker-exec.service.d.ts +132 -0
  34. package/dist/internal/openclaw/docker-exec.service.d.ts.map +1 -0
  35. package/dist/internal/openclaw/docker-exec.service.js +544 -0
  36. package/dist/internal/openclaw/docker-exec.service.js.map +1 -0
  37. package/dist/internal/openclaw/index.d.ts +14 -0
  38. package/dist/internal/openclaw/index.d.ts.map +1 -0
  39. package/dist/internal/openclaw/index.js +32 -0
  40. package/dist/internal/openclaw/index.js.map +1 -0
  41. package/dist/internal/openclaw/openclaw-agent-coordination.client.d.ts +73 -0
  42. package/dist/internal/openclaw/openclaw-agent-coordination.client.d.ts.map +1 -0
  43. package/dist/internal/openclaw/openclaw-agent-coordination.client.js +249 -0
  44. package/dist/internal/openclaw/openclaw-agent-coordination.client.js.map +1 -0
  45. package/dist/internal/openclaw/openclaw-context-status.client.d.ts +66 -0
  46. package/dist/internal/openclaw/openclaw-context-status.client.d.ts.map +1 -0
  47. package/dist/internal/openclaw/openclaw-context-status.client.js +164 -0
  48. package/dist/internal/openclaw/openclaw-context-status.client.js.map +1 -0
  49. package/dist/internal/openclaw/openclaw-cron.client.d.ts +61 -0
  50. package/dist/internal/openclaw/openclaw-cron.client.d.ts.map +1 -0
  51. package/dist/internal/openclaw/openclaw-cron.client.js +416 -0
  52. package/dist/internal/openclaw/openclaw-cron.client.js.map +1 -0
  53. package/dist/internal/openclaw/openclaw-gateway.client.d.ts +41 -0
  54. package/dist/internal/openclaw/openclaw-gateway.client.d.ts.map +1 -0
  55. package/dist/internal/openclaw/openclaw-gateway.client.js +175 -0
  56. package/dist/internal/openclaw/openclaw-gateway.client.js.map +1 -0
  57. package/dist/internal/openclaw/openclaw-skill-sync.client.d.ts +222 -0
  58. package/dist/internal/openclaw/openclaw-skill-sync.client.d.ts.map +1 -0
  59. package/dist/internal/openclaw/openclaw-skill-sync.client.js +720 -0
  60. package/dist/internal/openclaw/openclaw-skill-sync.client.js.map +1 -0
  61. package/dist/internal/openclaw/openclaw.client.d.ts +602 -0
  62. package/dist/internal/openclaw/openclaw.client.d.ts.map +1 -0
  63. package/dist/internal/openclaw/openclaw.client.js +3062 -0
  64. package/dist/internal/openclaw/openclaw.client.js.map +1 -0
  65. package/dist/internal/openclaw/openclaw.module.d.ts +3 -0
  66. package/dist/internal/openclaw/openclaw.module.d.ts.map +1 -0
  67. package/dist/internal/openclaw/openclaw.module.js +62 -0
  68. package/dist/internal/openclaw/openclaw.module.js.map +1 -0
  69. package/dist/internal/openclaw/skill-translation.service.d.ts +39 -0
  70. package/dist/internal/openclaw/skill-translation.service.d.ts.map +1 -0
  71. package/dist/internal/openclaw/skill-translation.service.js +217 -0
  72. package/dist/internal/openclaw/skill-translation.service.js.map +1 -0
  73. package/dist/internal/openclaw/types/cron.types.d.ts +112 -0
  74. package/dist/internal/openclaw/types/cron.types.d.ts.map +1 -0
  75. package/dist/internal/openclaw/types/cron.types.js +9 -0
  76. package/dist/internal/openclaw/types/cron.types.js.map +1 -0
  77. package/dist/internal/provider-verify/index.d.ts +6 -0
  78. package/dist/internal/provider-verify/index.d.ts.map +1 -0
  79. package/dist/internal/provider-verify/index.js +24 -0
  80. package/dist/internal/provider-verify/index.js.map +1 -0
  81. package/dist/internal/provider-verify/provider-verify.client.d.ts +55 -0
  82. package/dist/internal/provider-verify/provider-verify.client.d.ts.map +1 -0
  83. package/dist/internal/provider-verify/provider-verify.client.js +284 -0
  84. package/dist/internal/provider-verify/provider-verify.client.js.map +1 -0
  85. package/dist/internal/provider-verify/provider-verify.module.d.ts +3 -0
  86. package/dist/internal/provider-verify/provider-verify.module.d.ts.map +1 -0
  87. package/dist/internal/provider-verify/provider-verify.module.js +28 -0
  88. package/dist/internal/provider-verify/provider-verify.module.js.map +1 -0
  89. package/dist/internal/sso/index.d.ts +5 -0
  90. package/dist/internal/sso/index.d.ts.map +1 -0
  91. package/dist/internal/sso/index.js +12 -0
  92. package/dist/internal/sso/index.js.map +1 -0
  93. package/dist/internal/sso/sso-auth.client.d.ts +33 -0
  94. package/dist/internal/sso/sso-auth.client.d.ts.map +1 -0
  95. package/dist/internal/sso/sso-auth.client.js +89 -0
  96. package/dist/internal/sso/sso-auth.client.js.map +1 -0
  97. package/dist/internal/sso/sso-message-proxy.service.d.ts +11 -0
  98. package/dist/internal/sso/sso-message-proxy.service.d.ts.map +1 -0
  99. package/dist/internal/sso/sso-message-proxy.service.js +51 -0
  100. package/dist/internal/sso/sso-message-proxy.service.js.map +1 -0
  101. package/dist/internal/sso/sso-message.client.d.ts +12 -0
  102. package/dist/internal/sso/sso-message.client.d.ts.map +1 -0
  103. package/dist/internal/sso/sso-message.client.js +62 -0
  104. package/dist/internal/sso/sso-message.client.js.map +1 -0
  105. package/dist/internal/sso/sso.module.d.ts +3 -0
  106. package/dist/internal/sso/sso.module.d.ts.map +1 -0
  107. package/dist/internal/sso/sso.module.js +26 -0
  108. package/dist/internal/sso/sso.module.js.map +1 -0
  109. package/package.json +110 -6
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Provider Verify 模块导出
3
+ */
4
+ export * from './provider-verify.client';
5
+ export { ProviderVerifyModule } from './provider-verify.module';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/clients/src/internal/provider-verify/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ProviderVerifyModule = void 0;
18
+ /**
19
+ * Provider Verify 模块导出
20
+ */
21
+ __exportStar(require("./provider-verify.client"), exports);
22
+ var provider_verify_module_1 = require("./provider-verify.module");
23
+ Object.defineProperty(exports, "ProviderVerifyModule", { enumerable: true, get: function () { return provider_verify_module_1.ProviderVerifyModule; } });
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/clients/src/internal/provider-verify/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;;GAEG;AACH,2DAAyC;AACzC,mEAAgE;AAAvD,8HAAA,oBAAoB,OAAA"}
@@ -0,0 +1,55 @@
1
+ import { HttpService } from '@nestjs/axios';
2
+ import { Logger } from 'winston';
3
+ import type { VerifyProviderKeyInput, VerifyProviderKeyResponse } from '@dofe/infra-contracts';
4
+ /**
5
+ * ProviderVerifyClient - Provider Key 验证客户端
6
+ *
7
+ * 负责调用各 AI 提供商的 API 验证密钥有效性并获取模型列表
8
+ * 支持 OpenAI 兼容 API 和 Anthropic API
9
+ */
10
+ export declare class ProviderVerifyClient {
11
+ private readonly httpService;
12
+ private readonly logger;
13
+ constructor(httpService: HttpService, logger: Logger);
14
+ /**
15
+ * 判断是否是 DMXAPI 等第三方聚合平台
16
+ * 基于 effectiveHost 的域名进行匹配
17
+ */
18
+ private isAggregatorPlatform;
19
+ /**
20
+ * 获取 API 请求的 headers
21
+ * 根据平台类型动态调整:
22
+ * - DMXAPI 等聚合平台:Authorization 不需要 Bearer,需要 Rix-Api-User
23
+ * - 标准 OpenAI 兼容 API:Authorization 使用 Bearer 前缀
24
+ */
25
+ private getOpenAICompatibleHeaders;
26
+ /**
27
+ * Verify a provider key and get available models
28
+ */
29
+ verify(input: VerifyProviderKeyInput): Promise<VerifyProviderKeyResponse>;
30
+ /**
31
+ * Verify Anthropic API key
32
+ * Anthropic doesn't have a models endpoint, so we verify by calling messages endpoint
33
+ */
34
+ private verifyAnthropicKey;
35
+ /**
36
+ * Verify Google Gemini API key by calling /models endpoint
37
+ * Gemini API uses a different authentication method (API key in query param)
38
+ */
39
+ private verifyGeminiKey;
40
+ /**
41
+ * Verify Ollama API key by calling /api/tags endpoint
42
+ * Ollama uses a different endpoint structure
43
+ */
44
+ private verifyOllamaKey;
45
+ /**
46
+ * Verify OpenAI-compatible API key by calling /models endpoint
47
+ * 支持 DMXAPI 等第三方聚合平台的特殊 headers
48
+ */
49
+ private verifyOpenAICompatibleKey;
50
+ /**
51
+ * Handle errors and return appropriate response
52
+ */
53
+ private handleError;
54
+ }
55
+ //# sourceMappingURL=provider-verify.client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-verify.client.d.ts","sourceRoot":"","sources":["../../../../../packages/clients/src/internal/provider-verify/provider-verify.client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EAG1B,MAAM,uBAAuB,CAAC;AAe/B;;;;;GAKG;AACH,qBACa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IACK,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADvC,WAAW,EAAE,WAAW,EACS,MAAM,EAAE,MAAM;IAGlE;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;;;;OAKG;IACH,OAAO,CAAC,0BAA0B;IAqBlC;;OAEG;IACG,MAAM,CACV,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,yBAAyB,CAAC;IA4DrC;;;OAGG;YACW,kBAAkB;IA6BhC;;;OAGG;YACW,eAAe;IA6B7B;;;OAGG;YACW,eAAe;IA2B7B;;;OAGG;YACW,yBAAyB;IAwCvC;;OAEG;IACH,OAAO,CAAC,WAAW;CAuCpB"}
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ProviderVerifyClient = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const axios_1 = require("@nestjs/axios");
18
+ const nest_winston_1 = require("nest-winston");
19
+ const winston_1 = require("winston");
20
+ const rxjs_1 = require("rxjs");
21
+ const infra_contracts_1 = require("@dofe/infra-contracts");
22
+ /**
23
+ * DMXAPI 等第三方聚合平台的域名特征
24
+ * 这些平台需要特殊的 headers:
25
+ * - Authorization 不需要 Bearer 前缀
26
+ * - 需要 Rix-Api-User header
27
+ */
28
+ const AGGREGATOR_PLATFORM_DOMAINS = [
29
+ 'dmxapi.com',
30
+ 'dmxapi.cn',
31
+ 'api.dmxapi.com',
32
+ ];
33
+ /**
34
+ * ProviderVerifyClient - Provider Key 验证客户端
35
+ *
36
+ * 负责调用各 AI 提供商的 API 验证密钥有效性并获取模型列表
37
+ * 支持 OpenAI 兼容 API 和 Anthropic API
38
+ */
39
+ let ProviderVerifyClient = class ProviderVerifyClient {
40
+ httpService;
41
+ logger;
42
+ constructor(httpService, logger) {
43
+ this.httpService = httpService;
44
+ this.logger = logger;
45
+ }
46
+ /**
47
+ * 判断是否是 DMXAPI 等第三方聚合平台
48
+ * 基于 effectiveHost 的域名进行匹配
49
+ */
50
+ isAggregatorPlatform(effectiveHost) {
51
+ try {
52
+ const url = new URL(effectiveHost);
53
+ const hostname = url.hostname.toLowerCase();
54
+ return AGGREGATOR_PLATFORM_DOMAINS.some((domain) => hostname.includes(domain));
55
+ }
56
+ catch {
57
+ return false;
58
+ }
59
+ }
60
+ /**
61
+ * 获取 API 请求的 headers
62
+ * 根据平台类型动态调整:
63
+ * - DMXAPI 等聚合平台:Authorization 不需要 Bearer,需要 Rix-Api-User
64
+ * - 标准 OpenAI 兼容 API:Authorization 使用 Bearer 前缀
65
+ */
66
+ getOpenAICompatibleHeaders(effectiveHost, secret) {
67
+ if (this.isAggregatorPlatform(effectiveHost)) {
68
+ // DMXAPI 等聚合平台的特殊 headers
69
+ const userId = process.env.DMXAPI_USER_ID || '20700';
70
+ return {
71
+ Authorization: secret, // 不需要 Bearer 前缀
72
+ Accept: 'application/json',
73
+ 'Rix-Api-User': userId,
74
+ };
75
+ }
76
+ // 标准 OpenAI 兼容 API
77
+ return {
78
+ Authorization: `Bearer ${secret}`,
79
+ 'Content-Type': 'application/json',
80
+ };
81
+ }
82
+ /**
83
+ * Verify a provider key and get available models
84
+ */
85
+ async verify(input) {
86
+ const startTime = Date.now();
87
+ const { vendor, apiKey: secret, baseUrl, apiType: inputApiType, extraConfig: metadata } = input;
88
+ // Get effective API host
89
+ let effectiveHost = (0, infra_contracts_1.getEffectiveApiHost)(vendor, baseUrl);
90
+ if (!effectiveHost) {
91
+ return {
92
+ valid: false,
93
+ error: 'No API host configured for this provider',
94
+ };
95
+ }
96
+ // Get provider config to determine API type
97
+ // Use input apiType if provided, otherwise fall back to provider config
98
+ const providerConfig = infra_contracts_1.PROVIDER_CONFIGS[vendor];
99
+ const apiType = inputApiType || providerConfig?.apiType || 'openai';
100
+ // MiniMax: append GroupId to host if provided in metadata
101
+ if (vendor === 'minimax' && metadata?.group_id) {
102
+ const separator = effectiveHost.includes('?') ? '&' : '?';
103
+ effectiveHost += `${separator}GroupId=${encodeURIComponent(String(metadata.group_id))}`;
104
+ }
105
+ this.logger.info(`[ProviderVerify] Verifying key for vendor=${vendor}, apiType=${apiType}, effectiveHost=${effectiveHost}`);
106
+ try {
107
+ let models = [];
108
+ // Handle different API types
109
+ if (apiType === 'anthropic') {
110
+ models = await this.verifyAnthropicKey(effectiveHost, secret, startTime);
111
+ }
112
+ else if (apiType === 'gemini') {
113
+ models = await this.verifyGeminiKey(effectiveHost, secret);
114
+ }
115
+ else if (apiType === 'ollama') {
116
+ models = await this.verifyOllamaKey(effectiveHost, secret);
117
+ }
118
+ else {
119
+ models = await this.verifyOpenAICompatibleKey(effectiveHost, secret);
120
+ }
121
+ const latency = Date.now() - startTime;
122
+ this.logger.info(`[ProviderVerify] Success: ${models.length} models found for ${vendor}`);
123
+ return {
124
+ valid: true,
125
+ latency,
126
+ models,
127
+ };
128
+ }
129
+ catch (error) {
130
+ return this.handleError(error, vendor, startTime);
131
+ }
132
+ }
133
+ /**
134
+ * Verify Anthropic API key
135
+ * Anthropic doesn't have a models endpoint, so we verify by calling messages endpoint
136
+ */
137
+ async verifyAnthropicKey(effectiveHost, secret, startTime) {
138
+ const response = await (0, rxjs_1.firstValueFrom)(this.httpService.get(`${effectiveHost}/v1/messages`, {
139
+ headers: {
140
+ 'x-api-key': secret,
141
+ 'anthropic-version': '2023-06-01',
142
+ },
143
+ timeout: 10000,
144
+ validateStatus: (status) => status < 500,
145
+ }));
146
+ // 401 means invalid key
147
+ if (response.status === 401) {
148
+ throw { response: { status: 401 } };
149
+ }
150
+ // Return predefined Anthropic models (latest Claude 4 series)
151
+ return [
152
+ { id: 'claude-opus-4-6', name: 'Claude Opus 4.6' },
153
+ { id: 'claude-sonnet-4-5-20250929', name: 'Claude Sonnet 4.5' },
154
+ { id: 'claude-haiku-4-5-20251001', name: 'Claude Haiku 4.5' },
155
+ ];
156
+ }
157
+ /**
158
+ * Verify Google Gemini API key by calling /models endpoint
159
+ * Gemini API uses a different authentication method (API key in query param)
160
+ */
161
+ async verifyGeminiKey(effectiveHost, secret) {
162
+ const modelsUrl = `${effectiveHost}/models?key=${secret}`;
163
+ const response = await (0, rxjs_1.firstValueFrom)(this.httpService.get(modelsUrl, {
164
+ headers: {
165
+ 'Content-Type': 'application/json',
166
+ },
167
+ timeout: 10000,
168
+ }));
169
+ const data = response.data;
170
+ let models = [];
171
+ if (data?.models && Array.isArray(data.models)) {
172
+ models = data.models
173
+ .filter((m) => m.name?.startsWith('models/gemini'))
174
+ .map((m) => ({
175
+ id: m.name?.replace('models/', '') || m.name,
176
+ name: m.displayName || m.name?.replace('models/', ''),
177
+ }));
178
+ }
179
+ return models;
180
+ }
181
+ /**
182
+ * Verify Ollama API key by calling /api/tags endpoint
183
+ * Ollama uses a different endpoint structure
184
+ */
185
+ async verifyOllamaKey(effectiveHost, _secret) {
186
+ // Ollama doesn't require authentication, just check if the server is running
187
+ // The endpoint is /api/tags for listing models
188
+ const baseHost = effectiveHost.replace(/\/v1$/, '');
189
+ const modelsUrl = `${baseHost}/api/tags`;
190
+ const response = await (0, rxjs_1.firstValueFrom)(this.httpService.get(modelsUrl, {
191
+ timeout: 10000,
192
+ }));
193
+ const data = response.data;
194
+ let models = [];
195
+ if (data?.models && Array.isArray(data.models)) {
196
+ models = data.models.map((m) => ({
197
+ id: m.name || m.model,
198
+ name: m.name || m.model,
199
+ }));
200
+ }
201
+ return models;
202
+ }
203
+ /**
204
+ * Verify OpenAI-compatible API key by calling /models endpoint
205
+ * 支持 DMXAPI 等第三方聚合平台的特殊 headers
206
+ */
207
+ async verifyOpenAICompatibleKey(effectiveHost, secret) {
208
+ const modelsUrl = `${effectiveHost}/models`;
209
+ const headers = this.getOpenAICompatibleHeaders(effectiveHost, secret);
210
+ this.logger.debug(`[ProviderVerify] Calling ${modelsUrl} with headers keys: ${Object.keys(headers).join(', ')}`);
211
+ const response = await (0, rxjs_1.firstValueFrom)(this.httpService.get(modelsUrl, {
212
+ headers,
213
+ timeout: 10000,
214
+ }));
215
+ const data = response.data;
216
+ let models = [];
217
+ if (data?.data && Array.isArray(data.data)) {
218
+ models = data.data.map((m) => ({
219
+ id: m.id,
220
+ name: m.name || m.id,
221
+ created: m.created,
222
+ owned_by: m.owned_by,
223
+ }));
224
+ }
225
+ else if (data?.models && Array.isArray(data.models)) {
226
+ // Some providers use 'models' instead of 'data'
227
+ models = data.models.map((m) => ({
228
+ id: m.id || m.name,
229
+ name: m.name || m.id,
230
+ created: m.created,
231
+ owned_by: m.owned_by,
232
+ }));
233
+ }
234
+ return models;
235
+ }
236
+ /**
237
+ * Handle errors and return appropriate response
238
+ */
239
+ handleError(error, vendor, startTime) {
240
+ const latency = Date.now() - startTime;
241
+ let errorMessage = 'Connection failed';
242
+ if (error.response) {
243
+ const status = error.response.status;
244
+ if (status === 401) {
245
+ errorMessage = 'Invalid API key';
246
+ }
247
+ else if (status === 403) {
248
+ errorMessage = 'Access denied';
249
+ }
250
+ else if (status === 404) {
251
+ errorMessage = 'API endpoint not found';
252
+ }
253
+ else if (status === 429) {
254
+ errorMessage = 'Rate limit exceeded';
255
+ }
256
+ else {
257
+ errorMessage = error.response.data?.error?.message || `HTTP ${status}`;
258
+ }
259
+ }
260
+ else if (error.code === 'ECONNREFUSED') {
261
+ errorMessage = 'Connection refused';
262
+ }
263
+ else if (error.code === 'ETIMEDOUT' || error.code === 'ECONNABORTED') {
264
+ errorMessage = 'Connection timeout';
265
+ }
266
+ else if (error.message) {
267
+ errorMessage = error.message;
268
+ }
269
+ this.logger.warn(`Provider key verification failed for ${vendor}: ${errorMessage}`);
270
+ return {
271
+ valid: false,
272
+ latency,
273
+ error: errorMessage,
274
+ };
275
+ }
276
+ };
277
+ exports.ProviderVerifyClient = ProviderVerifyClient;
278
+ exports.ProviderVerifyClient = ProviderVerifyClient = __decorate([
279
+ (0, common_1.Injectable)(),
280
+ __param(1, (0, common_1.Inject)(nest_winston_1.WINSTON_MODULE_PROVIDER)),
281
+ __metadata("design:paramtypes", [axios_1.HttpService,
282
+ winston_1.Logger])
283
+ ], ProviderVerifyClient);
284
+ //# sourceMappingURL=provider-verify.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-verify.client.js","sourceRoot":"","sources":["../../../../../packages/clients/src/internal/provider-verify/provider-verify.client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare class ProviderVerifyModule {
2
+ }
3
+ //# sourceMappingURL=provider-verify.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-verify.module.d.ts","sourceRoot":"","sources":["../../../../../packages/clients/src/internal/provider-verify/provider-verify.module.ts"],"names":[],"mappings":"AAIA,qBAUa,oBAAoB;CAAG"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ProviderVerifyModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const axios_1 = require("@nestjs/axios");
12
+ const provider_verify_client_1 = require("./provider-verify.client");
13
+ let ProviderVerifyModule = class ProviderVerifyModule {
14
+ };
15
+ exports.ProviderVerifyModule = ProviderVerifyModule;
16
+ exports.ProviderVerifyModule = ProviderVerifyModule = __decorate([
17
+ (0, common_1.Module)({
18
+ imports: [
19
+ axios_1.HttpModule.register({
20
+ timeout: 15000,
21
+ maxRedirects: 5,
22
+ }),
23
+ ],
24
+ providers: [provider_verify_client_1.ProviderVerifyClient],
25
+ exports: [provider_verify_client_1.ProviderVerifyClient],
26
+ })
27
+ ], ProviderVerifyModule);
28
+ //# sourceMappingURL=provider-verify.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-verify.module.js","sourceRoot":"","sources":["../../../../../packages/clients/src/internal/provider-verify/provider-verify.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,yCAA2C;AAC3C,qEAAgE;AAYzD,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAAG,CAAA;AAAvB,oDAAoB;+BAApB,oBAAoB;IAVhC,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,kBAAU,CAAC,QAAQ,CAAC;gBAClB,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,CAAC;aAChB,CAAC;SACH;QACD,SAAS,EAAE,CAAC,6CAAoB,CAAC;QACjC,OAAO,EAAE,CAAC,6CAAoB,CAAC;KAChC,CAAC;GACW,oBAAoB,CAAG"}
@@ -0,0 +1,5 @@
1
+ export { SsoClientModule } from './sso.module';
2
+ export { SsoMessageClient } from './sso-message.client';
3
+ export { SsoMessageProxyService } from './sso-message-proxy.service';
4
+ export { SsoAuthClient } from './sso-auth.client';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/clients/src/internal/sso/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SsoAuthClient = exports.SsoMessageProxyService = exports.SsoMessageClient = exports.SsoClientModule = void 0;
4
+ var sso_module_1 = require("./sso.module");
5
+ Object.defineProperty(exports, "SsoClientModule", { enumerable: true, get: function () { return sso_module_1.SsoClientModule; } });
6
+ var sso_message_client_1 = require("./sso-message.client");
7
+ Object.defineProperty(exports, "SsoMessageClient", { enumerable: true, get: function () { return sso_message_client_1.SsoMessageClient; } });
8
+ var sso_message_proxy_service_1 = require("./sso-message-proxy.service");
9
+ Object.defineProperty(exports, "SsoMessageProxyService", { enumerable: true, get: function () { return sso_message_proxy_service_1.SsoMessageProxyService; } });
10
+ var sso_auth_client_1 = require("./sso-auth.client");
11
+ Object.defineProperty(exports, "SsoAuthClient", { enumerable: true, get: function () { return sso_auth_client_1.SsoAuthClient; } });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/clients/src/internal/sso/index.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAAtC,6GAAA,eAAe,OAAA;AACxB,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA;AACzB,yEAAqE;AAA5D,mIAAA,sBAAsB,OAAA;AAC/B,qDAAkD;AAAzC,gHAAA,aAAa,OAAA"}
@@ -0,0 +1,33 @@
1
+ import { HttpService } from '@nestjs/axios';
2
+ import { ConfigService } from '@nestjs/config';
3
+ export declare class SsoAuthClient {
4
+ private readonly httpService;
5
+ private readonly configService;
6
+ constructor(httpService: HttpService, configService: ConfigService);
7
+ private get ssoInternalUrl();
8
+ private get ssoBaseUrl();
9
+ /**
10
+ * 验证 access token 有效性
11
+ */
12
+ verifyToken(accessToken: string): Promise<{
13
+ valid: boolean;
14
+ userId?: string;
15
+ expiresAt?: number;
16
+ }>;
17
+ /**
18
+ * 检查 SSO 会话状态(跨子域 cookie)
19
+ */
20
+ getSession(cookieHeader?: string): Promise<unknown>;
21
+ /**
22
+ * 按 ID 获取用户信息
23
+ */
24
+ getUser(userId: string): Promise<unknown>;
25
+ /**
26
+ * 获取 JWKS 公钥集合
27
+ */
28
+ getJwks(): Promise<{
29
+ keys: Array<Record<string, unknown>>;
30
+ }>;
31
+ private getServiceToken;
32
+ }
33
+ //# sourceMappingURL=sso-auth.client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sso-auth.client.d.ts","sourceRoot":"","sources":["../../../../../packages/clients/src/internal/sso/sso-auth.client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,qBACa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa;gBADb,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa;IAG/C,OAAO,KAAK,cAAc,GAKzB;IAED,OAAO,KAAK,UAAU,GAKrB;IAED;;OAEG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAC9C,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IAiBF;;OAEG;IACG,UAAU,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAazD;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY/C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;KAAE,CAAC;IASlE,OAAO,CAAC,eAAe;CAGxB"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SsoAuthClient = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const axios_1 = require("@nestjs/axios");
15
+ const config_1 = require("@nestjs/config");
16
+ const rxjs_1 = require("rxjs");
17
+ let SsoAuthClient = class SsoAuthClient {
18
+ httpService;
19
+ configService;
20
+ constructor(httpService, configService) {
21
+ this.httpService = httpService;
22
+ this.configService = configService;
23
+ }
24
+ get ssoInternalUrl() {
25
+ return (this.configService.get('SSO_INTERNAL_API_URL') ||
26
+ 'http://localhost:3102/api');
27
+ }
28
+ get ssoBaseUrl() {
29
+ return (this.configService.get('SSO_API_URL') ||
30
+ 'http://localhost:3102/api');
31
+ }
32
+ /**
33
+ * 验证 access token 有效性
34
+ */
35
+ async verifyToken(accessToken) {
36
+ const response = await (0, rxjs_1.firstValueFrom)(this.httpService.post(`${this.ssoInternalUrl}/internal/verify-token`, { token: accessToken }, {
37
+ headers: {
38
+ 'Authorization': `Bearer ${this.getServiceToken()}`,
39
+ 'Content-Type': 'application/json',
40
+ },
41
+ timeout: 5000,
42
+ }));
43
+ return response.data;
44
+ }
45
+ /**
46
+ * 检查 SSO 会话状态(跨子域 cookie)
47
+ */
48
+ async getSession(cookieHeader) {
49
+ const headers = {};
50
+ if (cookieHeader)
51
+ headers['Cookie'] = cookieHeader;
52
+ const response = await (0, rxjs_1.firstValueFrom)(this.httpService.get(`${this.ssoBaseUrl}/auth/session`, {
53
+ headers,
54
+ timeout: 5000,
55
+ }));
56
+ return response.data;
57
+ }
58
+ /**
59
+ * 按 ID 获取用户信息
60
+ */
61
+ async getUser(userId) {
62
+ const response = await (0, rxjs_1.firstValueFrom)(this.httpService.get(`${this.ssoInternalUrl}/internal/users/${userId}`, {
63
+ headers: {
64
+ 'Authorization': `Bearer ${this.getServiceToken()}`,
65
+ },
66
+ timeout: 5000,
67
+ }));
68
+ return response.data;
69
+ }
70
+ /**
71
+ * 获取 JWKS 公钥集合
72
+ */
73
+ async getJwks() {
74
+ const response = await (0, rxjs_1.firstValueFrom)(this.httpService.get(`${this.ssoBaseUrl}/.well-known/jwks.json`, {
75
+ timeout: 5000,
76
+ }));
77
+ return response.data;
78
+ }
79
+ getServiceToken() {
80
+ return this.configService.get('INTERNAL_API_SECRET') || '';
81
+ }
82
+ };
83
+ exports.SsoAuthClient = SsoAuthClient;
84
+ exports.SsoAuthClient = SsoAuthClient = __decorate([
85
+ (0, common_1.Injectable)(),
86
+ __metadata("design:paramtypes", [axios_1.HttpService,
87
+ config_1.ConfigService])
88
+ ], SsoAuthClient);
89
+ //# sourceMappingURL=sso-auth.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sso-auth.client.js","sourceRoot":"","sources":["../../../../../packages/clients/src/internal/sso/sso-auth.client.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,yCAA4C;AAC5C,2CAA+C;AAC/C,+BAAsC;AAG/B,IAAM,aAAa,GAAnB,MAAM,aAAa;IAEL;IACA;IAFnB,YACmB,WAAwB,EACxB,aAA4B;QAD5B,gBAAW,GAAX,WAAW,CAAa;QACxB,kBAAa,GAAb,aAAa,CAAe;IAC5C,CAAC;IAEJ,IAAY,cAAc;QACxB,OAAO,CACL,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,sBAAsB,CAAC;YACtD,2BAA2B,CAC5B,CAAC;IACJ,CAAC;IAED,IAAY,UAAU;QACpB,OAAO,CACL,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,aAAa,CAAC;YAC7C,2BAA2B,CAC5B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,WAAmB;QAKnC,MAAM,QAAQ,GAAG,MAAM,IAAA,qBAAc,EACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,GAAG,IAAI,CAAC,cAAc,wBAAwB,EAC9C,EAAE,KAAK,EAAE,WAAW,EAAE,EACtB;YACE,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,IAAI,CAAC,eAAe,EAAE,EAAE;gBACnD,cAAc,EAAE,kBAAkB;aACnC;YACD,OAAO,EAAE,IAAI;SACd,CACF,CACF,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,YAAqB;QACpC,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,YAAY;YAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;QAEnD,MAAM,QAAQ,GAAG,MAAM,IAAA,qBAAc,EACnC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,eAAe,EAAE;YACtD,OAAO;YACP,OAAO,EAAE,IAAI;SACd,CAAC,CACH,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,MAAM,QAAQ,GAAG,MAAM,IAAA,qBAAc,EACnC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,mBAAmB,MAAM,EAAE,EAAE;YACtE,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,IAAI,CAAC,eAAe,EAAE,EAAE;aACpD;YACD,OAAO,EAAE,IAAI;SACd,CAAC,CACH,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,MAAM,IAAA,qBAAc,EACnC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,wBAAwB,EAAE;YAC/D,OAAO,EAAE,IAAI;SACd,CAAC,CACH,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAEO,eAAe;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,qBAAqB,CAAC,IAAI,EAAE,CAAC;IACrE,CAAC;CACF,CAAA;AA1FY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAGqB,mBAAW;QACT,sBAAa;GAHpC,aAAa,CA0FzB"}
@@ -0,0 +1,11 @@
1
+ import { HttpService } from '@nestjs/axios';
2
+ import { ConfigService } from '@nestjs/config';
3
+ export declare class SsoMessageProxyService {
4
+ private readonly httpService;
5
+ private readonly configService;
6
+ constructor(httpService: HttpService, configService: ConfigService);
7
+ private get ssoBaseUrl();
8
+ forwardGet(path: string, params: Record<string, unknown>, authHeader?: string): Promise<any>;
9
+ forwardPatch(path: string, body: unknown, authHeader?: string): Promise<any>;
10
+ }
11
+ //# sourceMappingURL=sso-message-proxy.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sso-message-proxy.service.d.ts","sourceRoot":"","sources":["../../../../../packages/clients/src/internal/sso/sso-message-proxy.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,qBACa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa;gBADb,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa;IAG/C,OAAO,KAAK,UAAU,GAKrB;IAEK,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,CAAC,EAAE,MAAM;IAWf,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM;CAWpE"}