manifest 5.23.1 → 5.24.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.
- package/dist/backend/analytics/controllers/costs.controller.js +11 -4
- package/dist/backend/analytics/controllers/tokens.controller.js +13 -5
- package/dist/backend/analytics/services/aggregation.service.js +31 -0
- package/dist/backend/analytics/services/messages-query.service.js +1 -0
- package/dist/backend/analytics/services/timeseries-queries.service.js +8 -1
- package/dist/backend/database/database-seeder.service.js +2 -247
- package/dist/backend/database/database.module.js +8 -0
- package/dist/backend/database/local-bootstrap.service.js +45 -5
- package/dist/backend/database/migrations/1772900000000-AddProviderAuthType.js +13 -0
- package/dist/backend/database/migrations/1773000000000-ExpandProviderUniqueKey.js +19 -0
- package/dist/backend/database/migrations/1773100000000-AddOverrideAuthType.js +18 -0
- package/dist/backend/database/migrations/1773200000000-AddMessageAuthType.js +18 -0
- package/dist/backend/database/pricing-sync.service.js +13 -0
- package/dist/backend/database/quality-score.util.js +33 -13
- package/dist/backend/database/seed-messages.js +8 -7
- package/dist/backend/database/seed-models.js +232 -0
- package/dist/backend/entities/agent-message.entity.js +5 -0
- package/dist/backend/entities/tier-assignment.entity.js +5 -0
- package/dist/backend/entities/user-provider.entity.js +6 -1
- package/dist/backend/health/health.controller.js +2 -0
- package/dist/backend/model-prices/model-name-normalizer.js +9 -2
- package/dist/backend/notifications/services/notification-cron.service.js +34 -9
- package/dist/backend/notifications/services/notification-rules.service.js +29 -9
- package/dist/backend/otlp/otlp.module.js +11 -2
- package/dist/backend/otlp/services/trace-ingest.service.js +139 -62
- package/dist/backend/routing/custom-provider.controller.js +12 -17
- package/dist/backend/routing/custom-provider.service.js +12 -2
- package/dist/backend/routing/dto/routing.dto.js +39 -1
- package/dist/backend/routing/provider-aliases.js +7 -0
- package/dist/backend/routing/proxy/provider-client.js +18 -11
- package/dist/backend/routing/proxy/provider-endpoints.js +14 -5
- package/dist/backend/routing/proxy/proxy.controller.js +32 -16
- package/dist/backend/routing/proxy/proxy.service.js +22 -11
- package/dist/backend/routing/proxy/stream-writer.js +3 -0
- package/dist/backend/routing/resolve.controller.js +46 -3
- package/dist/backend/routing/resolve.service.js +23 -2
- package/dist/backend/routing/routing-cache.service.js +12 -4
- package/dist/backend/routing/routing.controller.js +17 -9
- package/dist/backend/routing/routing.service.js +133 -49
- package/dist/backend/routing/tier-auto-assign.service.js +13 -3
- package/dist/backend/security/security.service.js +21 -17
- package/dist/index.js +20 -18
- package/dist/openclaw.plugin.json +10 -1
- package/openclaw.plugin.json +10 -1
- package/package.json +1 -1
- package/public/assets/Account-BAroz-2n.js +1 -0
- package/public/assets/AuthBadge-D4H7aZ6T.js +1 -0
- package/public/assets/Help-0qmJVFn8.js +1 -0
- package/public/assets/InfoTooltip-BgPRXOPt.js +1 -0
- package/public/assets/Limits-_v1HGbea.js +1 -0
- package/public/assets/Login-C6lI_KqN.js +1 -0
- package/public/assets/MessageLog-BfxZUc6f.js +1 -0
- package/public/assets/ModelPrices-DlrK7bqu.js +1 -0
- package/public/assets/Overview-CfezCKlq.js +1 -0
- package/public/assets/Pagination-qcyFxNyW.js +1 -0
- package/public/assets/ProviderIcon-DkiiWOHz.js +1 -0
- package/public/assets/Register-B-nLlx_2.js +1 -0
- package/public/assets/ResetPassword-CJEPkh6G.js +1 -0
- package/public/assets/Routing-D1z4fqN4.js +3 -0
- package/public/assets/Settings-DBVVmq_T.js +1 -0
- package/public/assets/SetupStepInstall-FQkRe6aV.js +1 -0
- package/public/assets/SetupStepVerify-NS7Lj6qk.js +3 -0
- package/public/assets/SocialButtons-BQ4JTq-l.js +1 -0
- package/public/assets/auth-yjhjkKyr.js +1 -0
- package/public/assets/charts-Cty976qB.js +3 -0
- package/public/assets/charts-Saz_VHki.css +1 -0
- package/public/assets/index-BhcU06cr.js +2 -0
- package/public/assets/index-D4x6Xoo9.css +1 -0
- package/public/assets/overview-D2BlhxHr.css +1 -0
- package/public/assets/overview-_flXQc4-.js +1 -0
- package/public/assets/vendor-COodrVsO.js +1 -0
- package/public/index.html +4 -2
- package/public/assets/index-BB_b0qBz.js +0 -7
- package/public/assets/index-Dnkx1fFA.css +0 -1
|
@@ -21,6 +21,7 @@ const timeseries_queries_service_1 = require("../services/timeseries-queries.ser
|
|
|
21
21
|
const current_user_decorator_1 = require("../../auth/current-user.decorator");
|
|
22
22
|
const user_cache_interceptor_1 = require("../../common/interceptors/user-cache.interceptor");
|
|
23
23
|
const cache_constants_1 = require("../../common/constants/cache.constants");
|
|
24
|
+
const query_helpers_1 = require("../services/query-helpers");
|
|
24
25
|
let CostsController = class CostsController {
|
|
25
26
|
aggregation;
|
|
26
27
|
timeseries;
|
|
@@ -31,14 +32,20 @@ let CostsController = class CostsController {
|
|
|
31
32
|
async getCosts(query, user) {
|
|
32
33
|
const range = query.range ?? '7d';
|
|
33
34
|
const agentName = query.agent_name;
|
|
34
|
-
const [
|
|
35
|
-
this.aggregation.getCostSummary(range, user.id, agentName),
|
|
36
|
-
this.timeseries.getDailyCosts(range, user.id, agentName),
|
|
35
|
+
const [hourly, daily, byModel, prevCost] = await Promise.all([
|
|
37
36
|
this.timeseries.getHourlyCosts(range, user.id, agentName),
|
|
37
|
+
this.timeseries.getDailyCosts(range, user.id, agentName),
|
|
38
38
|
this.timeseries.getCostByModel(range, user.id, agentName),
|
|
39
|
+
this.aggregation.getPreviousCostTotal(range, user.id, agentName),
|
|
39
40
|
]);
|
|
41
|
+
const currentCost = hourly.reduce((s, h) => s + h.cost, 0);
|
|
40
42
|
return {
|
|
41
|
-
summary: {
|
|
43
|
+
summary: {
|
|
44
|
+
weekly_cost: {
|
|
45
|
+
value: currentCost,
|
|
46
|
+
trend_pct: (0, query_helpers_1.computeTrend)(currentCost, prevCost),
|
|
47
|
+
},
|
|
48
|
+
},
|
|
42
49
|
daily,
|
|
43
50
|
hourly,
|
|
44
51
|
by_model: byModel,
|
|
@@ -21,6 +21,7 @@ const timeseries_queries_service_1 = require("../services/timeseries-queries.ser
|
|
|
21
21
|
const current_user_decorator_1 = require("../../auth/current-user.decorator");
|
|
22
22
|
const user_cache_interceptor_1 = require("../../common/interceptors/user-cache.interceptor");
|
|
23
23
|
const cache_constants_1 = require("../../common/constants/cache.constants");
|
|
24
|
+
const query_helpers_1 = require("../services/query-helpers");
|
|
24
25
|
let TokensController = class TokensController {
|
|
25
26
|
aggregation;
|
|
26
27
|
timeseries;
|
|
@@ -31,16 +32,23 @@ let TokensController = class TokensController {
|
|
|
31
32
|
async getTokens(query, user) {
|
|
32
33
|
const range = query.range ?? '24h';
|
|
33
34
|
const agentName = query.agent_name;
|
|
34
|
-
const [
|
|
35
|
-
this.aggregation.getTokenSummary(range, user.id, agentName),
|
|
35
|
+
const [hourly, daily, prevTokens] = await Promise.all([
|
|
36
36
|
this.timeseries.getHourlyTokens(range, user.id, agentName),
|
|
37
37
|
this.timeseries.getDailyTokens(range, user.id, agentName),
|
|
38
|
+
this.aggregation.getPreviousTokenTotal(range, user.id, agentName),
|
|
38
39
|
]);
|
|
40
|
+
const inputTotal = hourly.reduce((s, h) => s + h.input_tokens, 0);
|
|
41
|
+
const outputTotal = hourly.reduce((s, h) => s + h.output_tokens, 0);
|
|
42
|
+
const current = inputTotal + outputTotal;
|
|
39
43
|
return {
|
|
40
44
|
summary: {
|
|
41
|
-
total_tokens:
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
total_tokens: {
|
|
46
|
+
value: current,
|
|
47
|
+
trend_pct: (0, query_helpers_1.computeTrend)(current, prevTokens),
|
|
48
|
+
sub_values: { input: inputTotal, output: outputTotal },
|
|
49
|
+
},
|
|
50
|
+
input_tokens: inputTotal,
|
|
51
|
+
output_tokens: outputTotal,
|
|
44
52
|
},
|
|
45
53
|
hourly,
|
|
46
54
|
daily,
|
|
@@ -120,6 +120,37 @@ let AggregationService = class AggregationService {
|
|
|
120
120
|
const previous = Number(prevRow?.total ?? 0);
|
|
121
121
|
return { value: current, trend_pct: (0, query_helpers_1.computeTrend)(current, previous) };
|
|
122
122
|
}
|
|
123
|
+
async getPreviousTokenTotal(range, userId, agentName) {
|
|
124
|
+
const tenantId = (await this.tenantCache.resolve(userId)) ?? undefined;
|
|
125
|
+
const interval = (0, range_util_1.rangeToInterval)(range);
|
|
126
|
+
const prevInterval = (0, range_util_1.rangeToPreviousInterval)(range);
|
|
127
|
+
const cutoff = (0, sql_dialect_1.computeCutoff)(interval);
|
|
128
|
+
const prevCutoff = (0, sql_dialect_1.computeCutoff)(prevInterval);
|
|
129
|
+
const prevQb = this.turnRepo
|
|
130
|
+
.createQueryBuilder('at')
|
|
131
|
+
.select('COALESCE(SUM(at.input_tokens + at.output_tokens), 0)', 'total')
|
|
132
|
+
.where('at.timestamp >= :prevCutoff', { prevCutoff })
|
|
133
|
+
.andWhere('at.timestamp < :cutoff', { cutoff });
|
|
134
|
+
(0, query_helpers_1.addTenantFilter)(prevQb, userId, agentName, tenantId);
|
|
135
|
+
const row = await prevQb.getRawOne();
|
|
136
|
+
return Number(row?.total ?? 0);
|
|
137
|
+
}
|
|
138
|
+
async getPreviousCostTotal(range, userId, agentName) {
|
|
139
|
+
const tenantId = (await this.tenantCache.resolve(userId)) ?? undefined;
|
|
140
|
+
const interval = (0, range_util_1.rangeToInterval)(range);
|
|
141
|
+
const prevInterval = (0, range_util_1.rangeToPreviousInterval)(range);
|
|
142
|
+
const cutoff = (0, sql_dialect_1.computeCutoff)(interval);
|
|
143
|
+
const prevCutoff = (0, sql_dialect_1.computeCutoff)(prevInterval);
|
|
144
|
+
const safeCost = (0, sql_dialect_1.sqlSanitizeCost)('at.cost_usd');
|
|
145
|
+
const prevQb = this.turnRepo
|
|
146
|
+
.createQueryBuilder('at')
|
|
147
|
+
.select(`COALESCE(SUM(${safeCost}), 0)`, 'total')
|
|
148
|
+
.where('at.timestamp >= :prevCutoff', { prevCutoff })
|
|
149
|
+
.andWhere('at.timestamp < :cutoff', { cutoff });
|
|
150
|
+
(0, query_helpers_1.addTenantFilter)(prevQb, userId, agentName, tenantId);
|
|
151
|
+
const row = await prevQb.getRawOne();
|
|
152
|
+
return Number(row?.total ?? 0);
|
|
153
|
+
}
|
|
123
154
|
async getSummaryMetrics(range, userId, tenantId, agentName) {
|
|
124
155
|
const interval = (0, range_util_1.rangeToInterval)(range);
|
|
125
156
|
const prevInterval = (0, range_util_1.rangeToPreviousInterval)(range);
|
|
@@ -79,6 +79,7 @@ let MessagesQueryService = class MessagesQueryService {
|
|
|
79
79
|
.addSelect('at.cache_creation_tokens', 'cache_creation_tokens')
|
|
80
80
|
.addSelect('at.duration_ms', 'duration_ms')
|
|
81
81
|
.addSelect('at.error_message', 'error_message')
|
|
82
|
+
.addSelect('at.auth_type', 'auth_type')
|
|
82
83
|
.addSelect('at.fallback_from_model', 'fallback_from_model')
|
|
83
84
|
.addSelect('at.fallback_index', 'fallback_index');
|
|
84
85
|
if (params.cursor) {
|
|
@@ -214,6 +214,7 @@ let TimeseriesQueriesService = class TimeseriesQueriesService {
|
|
|
214
214
|
.addSelect('at.routing_tier', 'routing_tier')
|
|
215
215
|
.addSelect('at.routing_reason', 'routing_reason')
|
|
216
216
|
.addSelect('at.error_message', 'error_message')
|
|
217
|
+
.addSelect('at.auth_type', 'auth_type')
|
|
217
218
|
.addSelect('at.fallback_from_model', 'fallback_from_model')
|
|
218
219
|
.addSelect('at.fallback_index', 'fallback_index')
|
|
219
220
|
.where('at.timestamp >= :cutoff', { cutoff });
|
|
@@ -229,17 +230,23 @@ let TimeseriesQueriesService = class TimeseriesQueriesService {
|
|
|
229
230
|
.select("COALESCE(at.model, 'unknown')", 'model')
|
|
230
231
|
.addSelect('SUM(at.input_tokens + at.output_tokens)', 'tokens')
|
|
231
232
|
.addSelect(`COALESCE(SUM(${(0, sql_dialect_1.sqlSanitizeCost)('at.cost_usd')}), 0)`, 'estimated_cost')
|
|
233
|
+
.addSelect('at.auth_type', 'auth_type')
|
|
232
234
|
.where('at.timestamp >= :cutoff', { cutoff })
|
|
233
235
|
.andWhere('at.model IS NOT NULL')
|
|
234
236
|
.andWhere("at.model != ''");
|
|
235
237
|
(0, query_helpers_1.addTenantFilter)(qb, userId, agentName, resolved);
|
|
236
|
-
const rows = await qb
|
|
238
|
+
const rows = await qb
|
|
239
|
+
.groupBy('at.model')
|
|
240
|
+
.addGroupBy('at.auth_type')
|
|
241
|
+
.orderBy('tokens', 'DESC')
|
|
242
|
+
.getRawMany();
|
|
237
243
|
const totalTokens = rows.reduce((sum, r) => sum + Number(r['tokens'] ?? 0), 0);
|
|
238
244
|
return rows.map((r) => ({
|
|
239
245
|
model: String(r['model']),
|
|
240
246
|
tokens: Number(r['tokens'] ?? 0),
|
|
241
247
|
share_pct: totalTokens === 0 ? 0 : Math.round((Number(r['tokens'] ?? 0) / totalTokens) * 1000) / 10,
|
|
242
248
|
estimated_cost: Number(r['estimated_cost'] ?? 0),
|
|
249
|
+
auth_type: r['auth_type'] ? String(r['auth_type']) : null,
|
|
243
250
|
}));
|
|
244
251
|
}
|
|
245
252
|
async getAgentList(userId, tenantId) {
|
|
@@ -29,6 +29,7 @@ const agent_message_entity_1 = require("../entities/agent-message.entity");
|
|
|
29
29
|
const hash_util_1 = require("../common/utils/hash.util");
|
|
30
30
|
const model_pricing_cache_service_1 = require("../model-prices/model-pricing-cache.service");
|
|
31
31
|
const seed_messages_1 = require("./seed-messages");
|
|
32
|
+
const seed_models_1 = require("./seed-models");
|
|
32
33
|
const SEED_API_KEY = 'dev-api-key-manifest-001';
|
|
33
34
|
const SEED_OTLP_KEY = 'mnfst_dev-otlp-key-001';
|
|
34
35
|
const SEED_TENANT_ID = 'seed-tenant-001';
|
|
@@ -164,253 +165,7 @@ let DatabaseSeederService = DatabaseSeederService_1 = class DatabaseSeederServic
|
|
|
164
165
|
this.logger.log(`Seeded tenant/agent with OTLP key: ${SEED_OTLP_KEY.substring(0, 8)}***`);
|
|
165
166
|
}
|
|
166
167
|
async seedModelPricing() {
|
|
167
|
-
const
|
|
168
|
-
['claude-opus-4-6', 'Anthropic', 0.000015, 0.000075, 200000, true, true, 'Claude Opus 4.6'],
|
|
169
|
-
[
|
|
170
|
-
'claude-sonnet-4-5-20250929',
|
|
171
|
-
'Anthropic',
|
|
172
|
-
0.000003,
|
|
173
|
-
0.000015,
|
|
174
|
-
200000,
|
|
175
|
-
true,
|
|
176
|
-
true,
|
|
177
|
-
'Claude Sonnet 4.5',
|
|
178
|
-
],
|
|
179
|
-
[
|
|
180
|
-
'claude-sonnet-4-20250514',
|
|
181
|
-
'Anthropic',
|
|
182
|
-
0.000003,
|
|
183
|
-
0.000015,
|
|
184
|
-
200000,
|
|
185
|
-
true,
|
|
186
|
-
true,
|
|
187
|
-
'Claude Sonnet 4',
|
|
188
|
-
],
|
|
189
|
-
[
|
|
190
|
-
'claude-haiku-4-5-20251001',
|
|
191
|
-
'Anthropic',
|
|
192
|
-
0.000001,
|
|
193
|
-
0.000005,
|
|
194
|
-
200000,
|
|
195
|
-
false,
|
|
196
|
-
true,
|
|
197
|
-
'Claude Haiku 4.5',
|
|
198
|
-
],
|
|
199
|
-
['gpt-4o', 'OpenAI', 0.0000025, 0.00001, 128000, false, true, 'GPT-4o'],
|
|
200
|
-
['gpt-4o-mini', 'OpenAI', 0.00000015, 0.0000006, 128000, false, true, 'GPT-4o Mini'],
|
|
201
|
-
['gpt-4.1', 'OpenAI', 0.000002, 0.000008, 1047576, false, true, 'GPT-4.1'],
|
|
202
|
-
['gpt-4.1-mini', 'OpenAI', 0.0000004, 0.0000016, 1047576, false, true, 'GPT-4.1 Mini'],
|
|
203
|
-
['gpt-4.1-nano', 'OpenAI', 0.0000001, 0.0000004, 1047576, false, false, 'GPT-4.1 Nano'],
|
|
204
|
-
['o3', 'OpenAI', 0.000002, 0.000008, 200000, true, true, 'o3'],
|
|
205
|
-
['o3-mini', 'OpenAI', 0.0000011, 0.0000044, 200000, true, true, 'o3 Mini'],
|
|
206
|
-
['o4-mini', 'OpenAI', 0.0000011, 0.0000044, 200000, true, true, 'o4 Mini'],
|
|
207
|
-
['gemini-2.5-pro', 'Google', 0.00000125, 0.00001, 1048576, true, true, 'Gemini 2.5 Pro'],
|
|
208
|
-
[
|
|
209
|
-
'gemini-2.5-flash',
|
|
210
|
-
'Google',
|
|
211
|
-
0.00000015,
|
|
212
|
-
0.0000006,
|
|
213
|
-
1048576,
|
|
214
|
-
false,
|
|
215
|
-
true,
|
|
216
|
-
'Gemini 2.5 Flash',
|
|
217
|
-
],
|
|
218
|
-
[
|
|
219
|
-
'gemini-2.5-flash-lite',
|
|
220
|
-
'Google',
|
|
221
|
-
0.0000001,
|
|
222
|
-
0.0000004,
|
|
223
|
-
1048576,
|
|
224
|
-
false,
|
|
225
|
-
false,
|
|
226
|
-
'Gemini 2.5 Flash Lite',
|
|
227
|
-
],
|
|
228
|
-
[
|
|
229
|
-
'gemini-2.0-flash',
|
|
230
|
-
'Google',
|
|
231
|
-
0.0000001,
|
|
232
|
-
0.0000004,
|
|
233
|
-
1048576,
|
|
234
|
-
false,
|
|
235
|
-
true,
|
|
236
|
-
'Gemini 2.0 Flash',
|
|
237
|
-
],
|
|
238
|
-
['deepseek-chat', 'DeepSeek', 0.00000014, 0.00000028, 128000, false, true, 'DeepSeek V3'],
|
|
239
|
-
['deepseek-reasoner', 'DeepSeek', 0.00000055, 0.00000219, 128000, true, false, 'DeepSeek R1'],
|
|
240
|
-
['kimi-k2', 'Moonshot', 0.0000006, 0.0000024, 262144, true, true, 'Kimi k2'],
|
|
241
|
-
[
|
|
242
|
-
'qwen-2.5-72b-instruct',
|
|
243
|
-
'Alibaba',
|
|
244
|
-
0.00000034,
|
|
245
|
-
0.00000039,
|
|
246
|
-
131072,
|
|
247
|
-
false,
|
|
248
|
-
true,
|
|
249
|
-
'Qwen2.5 72B Instruct',
|
|
250
|
-
],
|
|
251
|
-
['qwq-32b', 'Alibaba', 0.00000012, 0.00000018, 131072, true, false, 'QwQ 32B'],
|
|
252
|
-
[
|
|
253
|
-
'qwen-2.5-coder-32b-instruct',
|
|
254
|
-
'Alibaba',
|
|
255
|
-
0.00000018,
|
|
256
|
-
0.00000018,
|
|
257
|
-
131072,
|
|
258
|
-
false,
|
|
259
|
-
true,
|
|
260
|
-
'Qwen2.5 Coder 32B',
|
|
261
|
-
],
|
|
262
|
-
['qwen3-235b-a22b', 'Alibaba', 0.0000003, 0.0000012, 131072, true, true, 'Qwen3 235B A22B'],
|
|
263
|
-
['qwen3-32b', 'Alibaba', 0.0000001, 0.0000003, 131072, true, true, 'Qwen3 32B'],
|
|
264
|
-
['mistral-large-latest', 'Mistral', 0.000002, 0.000006, 128000, false, true, 'Mistral Large'],
|
|
265
|
-
['mistral-small', 'Mistral', 0.0000002, 0.0000006, 128000, false, false, 'Mistral Small'],
|
|
266
|
-
['codestral-latest', 'Mistral', 0.0000003, 0.0000009, 256000, false, true, 'Codestral'],
|
|
267
|
-
['grok-3', 'xAI', 0.000003, 0.000015, 131072, true, true, 'Grok 3'],
|
|
268
|
-
['grok-3-mini', 'xAI', 0.0000003, 0.0000005, 131072, true, true, 'Grok 3 Mini'],
|
|
269
|
-
['grok-3-fast', 'xAI', 0.000005, 0.000025, 131072, false, true, 'Grok 3 Fast'],
|
|
270
|
-
['grok-3-mini-fast', 'xAI', 0.0000006, 0.000004, 131072, false, true, 'Grok 3 Mini Fast'],
|
|
271
|
-
[
|
|
272
|
-
'openrouter/auto',
|
|
273
|
-
'OpenRouter',
|
|
274
|
-
0.000003,
|
|
275
|
-
0.000015,
|
|
276
|
-
200000,
|
|
277
|
-
true,
|
|
278
|
-
true,
|
|
279
|
-
'Auto (best for prompt)',
|
|
280
|
-
],
|
|
281
|
-
[
|
|
282
|
-
'anthropic/claude-opus-4-6',
|
|
283
|
-
'OpenRouter',
|
|
284
|
-
0.000015,
|
|
285
|
-
0.000075,
|
|
286
|
-
200000,
|
|
287
|
-
true,
|
|
288
|
-
true,
|
|
289
|
-
'Claude Opus 4.6',
|
|
290
|
-
],
|
|
291
|
-
[
|
|
292
|
-
'anthropic/claude-sonnet-4-5',
|
|
293
|
-
'OpenRouter',
|
|
294
|
-
0.000003,
|
|
295
|
-
0.000015,
|
|
296
|
-
200000,
|
|
297
|
-
true,
|
|
298
|
-
true,
|
|
299
|
-
'Claude Sonnet 4.5',
|
|
300
|
-
],
|
|
301
|
-
['openai/gpt-4o', 'OpenRouter', 0.0000025, 0.00001, 128000, false, true, 'GPT-4o'],
|
|
302
|
-
['openai/o3', 'OpenRouter', 0.000002, 0.000008, 200000, true, true, 'o3'],
|
|
303
|
-
[
|
|
304
|
-
'google/gemini-2.5-pro',
|
|
305
|
-
'OpenRouter',
|
|
306
|
-
0.00000125,
|
|
307
|
-
0.00001,
|
|
308
|
-
1048576,
|
|
309
|
-
true,
|
|
310
|
-
true,
|
|
311
|
-
'Gemini 2.5 Pro',
|
|
312
|
-
],
|
|
313
|
-
[
|
|
314
|
-
'google/gemini-2.5-flash',
|
|
315
|
-
'OpenRouter',
|
|
316
|
-
0.00000015,
|
|
317
|
-
0.0000006,
|
|
318
|
-
1048576,
|
|
319
|
-
false,
|
|
320
|
-
true,
|
|
321
|
-
'Gemini 2.5 Flash',
|
|
322
|
-
],
|
|
323
|
-
[
|
|
324
|
-
'deepseek/deepseek-r1',
|
|
325
|
-
'OpenRouter',
|
|
326
|
-
0.00000055,
|
|
327
|
-
0.00000219,
|
|
328
|
-
128000,
|
|
329
|
-
true,
|
|
330
|
-
false,
|
|
331
|
-
'DeepSeek R1',
|
|
332
|
-
],
|
|
333
|
-
[
|
|
334
|
-
'deepseek/deepseek-chat-v3-0324',
|
|
335
|
-
'OpenRouter',
|
|
336
|
-
0.00000014,
|
|
337
|
-
0.00000028,
|
|
338
|
-
128000,
|
|
339
|
-
false,
|
|
340
|
-
true,
|
|
341
|
-
'DeepSeek V3 (0324)',
|
|
342
|
-
],
|
|
343
|
-
[
|
|
344
|
-
'meta-llama/llama-4-maverick',
|
|
345
|
-
'OpenRouter',
|
|
346
|
-
0.0000003,
|
|
347
|
-
0.0000009,
|
|
348
|
-
128000,
|
|
349
|
-
false,
|
|
350
|
-
true,
|
|
351
|
-
'Llama 4 Maverick',
|
|
352
|
-
],
|
|
353
|
-
[
|
|
354
|
-
'mistralai/mistral-large',
|
|
355
|
-
'OpenRouter',
|
|
356
|
-
0.000002,
|
|
357
|
-
0.000006,
|
|
358
|
-
128000,
|
|
359
|
-
false,
|
|
360
|
-
true,
|
|
361
|
-
'Mistral Large',
|
|
362
|
-
],
|
|
363
|
-
['x-ai/grok-3', 'OpenRouter', 0.000003, 0.000015, 131072, true, true, 'Grok 3'],
|
|
364
|
-
['openrouter/free', 'OpenRouter', 0, 0, 200000, true, true, 'Free Models Router'],
|
|
365
|
-
[
|
|
366
|
-
'minimax/minimax-m2.5',
|
|
367
|
-
'OpenRouter',
|
|
368
|
-
0.000000295,
|
|
369
|
-
0.0000012,
|
|
370
|
-
196608,
|
|
371
|
-
true,
|
|
372
|
-
true,
|
|
373
|
-
'MiniMax M2.5',
|
|
374
|
-
],
|
|
375
|
-
['minimax/minimax-m1', 'OpenRouter', 0.0000004, 0.0000022, 1000000, true, true, 'MiniMax M1'],
|
|
376
|
-
['minimax-m2.5', 'MiniMax', 0.000000295, 0.0000012, 196608, true, true, 'MiniMax M2.5'],
|
|
377
|
-
[
|
|
378
|
-
'minimax-m2.5-highspeed',
|
|
379
|
-
'MiniMax',
|
|
380
|
-
0.000000295,
|
|
381
|
-
0.0000012,
|
|
382
|
-
196608,
|
|
383
|
-
true,
|
|
384
|
-
true,
|
|
385
|
-
'MiniMax M2.5 Highspeed',
|
|
386
|
-
],
|
|
387
|
-
['minimax-m2.1', 'MiniMax', 0.00000027, 0.00000095, 196608, true, true, 'MiniMax M2.1'],
|
|
388
|
-
[
|
|
389
|
-
'minimax-m2.1-highspeed',
|
|
390
|
-
'MiniMax',
|
|
391
|
-
0.00000027,
|
|
392
|
-
0.00000095,
|
|
393
|
-
196608,
|
|
394
|
-
true,
|
|
395
|
-
true,
|
|
396
|
-
'MiniMax M2.1 Highspeed',
|
|
397
|
-
],
|
|
398
|
-
['minimax-m2', 'MiniMax', 0.000000255, 0.000001, 196608, true, true, 'MiniMax M2'],
|
|
399
|
-
['minimax-m1', 'MiniMax', 0.0000004, 0.0000022, 1000000, true, true, 'MiniMax M1'],
|
|
400
|
-
['glm-5', 'Z.ai', 0.00000095, 0.00000255, 204800, true, true, 'GLM 5'],
|
|
401
|
-
['glm-4.7', 'Z.ai', 0.0000003, 0.0000014, 202752, true, true, 'GLM 4.7'],
|
|
402
|
-
['glm-4.7-flash', 'Z.ai', 0.00000006, 0.0000004, 202752, false, false, 'GLM 4.7 Flash'],
|
|
403
|
-
['glm-4.6', 'Z.ai', 0.00000035, 0.00000171, 202752, true, true, 'GLM 4.6'],
|
|
404
|
-
['glm-4.6v', 'Z.ai', 0.0000003, 0.0000009, 131072, false, false, 'GLM 4.6V'],
|
|
405
|
-
['glm-4.5', 'Z.ai', 0.00000055, 0.000002, 131000, true, true, 'GLM 4.5'],
|
|
406
|
-
['glm-4.5-air', 'Z.ai', 0.00000013, 0.00000085, 131072, false, false, 'GLM 4.5 Air'],
|
|
407
|
-
['glm-4.5-flash', 'Z.ai', 0, 0, 131072, false, false, 'GLM 4.5 Flash'],
|
|
408
|
-
['z-ai/glm-5', 'OpenRouter', 0.00000095, 0.00000255, 204800, true, true, 'GLM 5'],
|
|
409
|
-
['z-ai/glm-4.7', 'OpenRouter', 0.0000003, 0.0000014, 202752, true, true, 'GLM 4.7'],
|
|
410
|
-
['glm-4-plus', 'Zhipu', 0.0000005, 0.0000005, 128000, false, true, 'GLM 4 Plus'],
|
|
411
|
-
['glm-4-flash', 'Zhipu', 0.00000005, 0.00000005, 128000, false, false, 'GLM 4 Flash'],
|
|
412
|
-
];
|
|
413
|
-
for (const [name, provider, inputPrice, outputPrice, ctxWindow, reasoning, code, displayName,] of models) {
|
|
168
|
+
for (const [name, provider, inputPrice, outputPrice, ctxWindow, reasoning, code, displayName,] of seed_models_1.SEED_MODELS) {
|
|
414
169
|
await this.pricingRepo.upsert({
|
|
415
170
|
model_name: name,
|
|
416
171
|
provider,
|
|
@@ -53,6 +53,7 @@ const _1772500000000_PerAgentRouting_1 = require("./migrations/1772500000000-Per
|
|
|
53
53
|
const _1772668898071_AddCustomProviders_1 = require("./migrations/1772668898071-AddCustomProviders");
|
|
54
54
|
const _1772682112419_NullablePricing_1 = require("./migrations/1772682112419-NullablePricing");
|
|
55
55
|
const _1772843035514_AddPerformanceIndexes_1 = require("./migrations/1772843035514-AddPerformanceIndexes");
|
|
56
|
+
const _1772900000000_AddProviderAuthType_1 = require("./migrations/1772900000000-AddProviderAuthType");
|
|
56
57
|
const _1772905146384_AddDashboardIndexes_1 = require("./migrations/1772905146384-AddDashboardIndexes");
|
|
57
58
|
const _1772905260464_AddFallbacks_1 = require("./migrations/1772905260464-AddFallbacks");
|
|
58
59
|
const _1772920000000_AddModelDisplayName_1 = require("./migrations/1772920000000-AddModelDisplayName");
|
|
@@ -60,6 +61,9 @@ const _1772940000000_DropRedundantIndexes_1 = require("./migrations/177294000000
|
|
|
60
61
|
const _1772948502780_BackfillTenantId_1 = require("./migrations/1772948502780-BackfillTenantId");
|
|
61
62
|
const _1772960000000_DropUnusedIndexes_1 = require("./migrations/1772960000000-DropUnusedIndexes");
|
|
62
63
|
const _1772960000000_PurgeNonCuratedModels_1 = require("./migrations/1772960000000-PurgeNonCuratedModels");
|
|
64
|
+
const _1773000000000_ExpandProviderUniqueKey_1 = require("./migrations/1773000000000-ExpandProviderUniqueKey");
|
|
65
|
+
const _1773100000000_AddOverrideAuthType_1 = require("./migrations/1773100000000-AddOverrideAuthType");
|
|
66
|
+
const _1773200000000_AddMessageAuthType_1 = require("./migrations/1773200000000-AddMessageAuthType");
|
|
63
67
|
const _1773202787708_AddModelsAgentIndex_1 = require("./migrations/1773202787708-AddModelsAgentIndex");
|
|
64
68
|
const entities = [
|
|
65
69
|
agent_message_entity_1.AgentMessage,
|
|
@@ -103,6 +107,7 @@ const migrations = [
|
|
|
103
107
|
_1772668898071_AddCustomProviders_1.AddCustomProviders1772668898071,
|
|
104
108
|
_1772682112419_NullablePricing_1.NullablePricing1772682112419,
|
|
105
109
|
_1772843035514_AddPerformanceIndexes_1.AddPerformanceIndexes1772843035514,
|
|
110
|
+
_1772900000000_AddProviderAuthType_1.AddProviderAuthType1772900000000,
|
|
106
111
|
_1772905146384_AddDashboardIndexes_1.AddDashboardIndexes1772905146384,
|
|
107
112
|
_1772905260464_AddFallbacks_1.AddFallbacks1772905260464,
|
|
108
113
|
_1772920000000_AddModelDisplayName_1.AddModelDisplayName1772920000000,
|
|
@@ -110,6 +115,9 @@ const migrations = [
|
|
|
110
115
|
_1772948502780_BackfillTenantId_1.BackfillTenantId1772948502780,
|
|
111
116
|
_1772960000000_DropUnusedIndexes_1.DropUnusedIndexes1772960000000,
|
|
112
117
|
_1772960000000_PurgeNonCuratedModels_1.PurgeNonCuratedModels1772960000000,
|
|
118
|
+
_1773000000000_ExpandProviderUniqueKey_1.ExpandProviderUniqueKey1773000000000,
|
|
119
|
+
_1773100000000_AddOverrideAuthType_1.AddOverrideAuthType1773100000000,
|
|
120
|
+
_1773200000000_AddMessageAuthType_1.AddMessageAuthType1773200000000,
|
|
113
121
|
_1773202787708_AddModelsAgentIndex_1.AddModelsAgentIndex1773202787708,
|
|
114
122
|
];
|
|
115
123
|
const isLocalMode = process.env['MANIFEST_MODE'] === 'local';
|
|
@@ -58,11 +58,13 @@ const tenant_entity_1 = require("../entities/tenant.entity");
|
|
|
58
58
|
const agent_entity_1 = require("../entities/agent.entity");
|
|
59
59
|
const agent_api_key_entity_1 = require("../entities/agent-api-key.entity");
|
|
60
60
|
const agent_message_entity_1 = require("../entities/agent-message.entity");
|
|
61
|
+
const model_pricing_entity_1 = require("../entities/model-pricing.entity");
|
|
61
62
|
const user_provider_entity_1 = require("../entities/user-provider.entity");
|
|
62
63
|
const tier_assignment_entity_1 = require("../entities/tier-assignment.entity");
|
|
63
64
|
const hash_util_1 = require("../common/utils/hash.util");
|
|
64
65
|
const model_pricing_cache_service_1 = require("../model-prices/model-pricing-cache.service");
|
|
65
66
|
const pricing_sync_service_1 = require("./pricing-sync.service");
|
|
67
|
+
const seed_models_1 = require("./seed-models");
|
|
66
68
|
const local_mode_constants_1 = require("../common/constants/local-mode.constants");
|
|
67
69
|
const product_telemetry_1 = require("../common/utils/product-telemetry");
|
|
68
70
|
const seed_messages_1 = require("./seed-messages");
|
|
@@ -71,17 +73,19 @@ let LocalBootstrapService = LocalBootstrapService_1 = class LocalBootstrapServic
|
|
|
71
73
|
agentRepo;
|
|
72
74
|
agentKeyRepo;
|
|
73
75
|
messageRepo;
|
|
76
|
+
pricingRepo;
|
|
74
77
|
providerRepo;
|
|
75
78
|
tierRepo;
|
|
76
79
|
pricingCache;
|
|
77
80
|
pricingSync;
|
|
78
81
|
moduleRef;
|
|
79
82
|
logger = new common_1.Logger(LocalBootstrapService_1.name);
|
|
80
|
-
constructor(tenantRepo, agentRepo, agentKeyRepo, messageRepo, providerRepo, tierRepo, pricingCache, pricingSync, moduleRef) {
|
|
83
|
+
constructor(tenantRepo, agentRepo, agentKeyRepo, messageRepo, pricingRepo, providerRepo, tierRepo, pricingCache, pricingSync, moduleRef) {
|
|
81
84
|
this.tenantRepo = tenantRepo;
|
|
82
85
|
this.agentRepo = agentRepo;
|
|
83
86
|
this.agentKeyRepo = agentKeyRepo;
|
|
84
87
|
this.messageRepo = messageRepo;
|
|
88
|
+
this.pricingRepo = pricingRepo;
|
|
85
89
|
this.providerRepo = providerRepo;
|
|
86
90
|
this.tierRepo = tierRepo;
|
|
87
91
|
this.pricingCache = pricingCache;
|
|
@@ -89,7 +93,7 @@ let LocalBootstrapService = LocalBootstrapService_1 = class LocalBootstrapServic
|
|
|
89
93
|
this.moduleRef = moduleRef;
|
|
90
94
|
}
|
|
91
95
|
async onModuleInit() {
|
|
92
|
-
await this.
|
|
96
|
+
await this.seedModelPricing();
|
|
93
97
|
await this.ensureTenantAndAgent();
|
|
94
98
|
await this.fixupRoutingAgentIds();
|
|
95
99
|
await this.recalculateTiersIfNeeded();
|
|
@@ -99,7 +103,12 @@ let LocalBootstrapService = LocalBootstrapService_1 = class LocalBootstrapServic
|
|
|
99
103
|
agentName: local_mode_constants_1.LOCAL_AGENT_NAME,
|
|
100
104
|
});
|
|
101
105
|
this.logger.log('Local mode bootstrap complete');
|
|
102
|
-
this.pricingSync
|
|
106
|
+
this.pricingSync
|
|
107
|
+
.syncPricing()
|
|
108
|
+
.then(() => this.purgeNonCuratedModels())
|
|
109
|
+
.then(() => this.pricingCache.reload())
|
|
110
|
+
.then(() => this.recalculateTiersIfNeeded())
|
|
111
|
+
.catch((err) => {
|
|
103
112
|
this.logger.warn(`Background pricing sync failed: ${err}`);
|
|
104
113
|
});
|
|
105
114
|
}
|
|
@@ -175,6 +184,35 @@ let LocalBootstrapService = LocalBootstrapService_1 = class LocalBootstrapServic
|
|
|
175
184
|
this.logger.log(`Fixed ${orphanedProviders.length} provider(s) and ${orphanedTiers.length} tier(s) with missing agent_id`);
|
|
176
185
|
}
|
|
177
186
|
}
|
|
187
|
+
async seedModelPricing() {
|
|
188
|
+
for (const [name, provider, inputPrice, outputPrice, ctxWindow, reasoning, code, displayName,] of seed_models_1.SEED_MODELS) {
|
|
189
|
+
await this.pricingRepo.upsert({
|
|
190
|
+
model_name: name,
|
|
191
|
+
provider,
|
|
192
|
+
input_price_per_token: inputPrice,
|
|
193
|
+
output_price_per_token: outputPrice,
|
|
194
|
+
context_window: ctxWindow,
|
|
195
|
+
capability_reasoning: reasoning,
|
|
196
|
+
capability_code: code,
|
|
197
|
+
display_name: displayName,
|
|
198
|
+
}, ['model_name']);
|
|
199
|
+
}
|
|
200
|
+
await this.pricingCache.reload();
|
|
201
|
+
this.logger.log('Seeded model pricing data');
|
|
202
|
+
}
|
|
203
|
+
async purgeNonCuratedModels() {
|
|
204
|
+
const curatedNames = new Set(seed_models_1.SEED_MODELS.map(([name]) => name));
|
|
205
|
+
const all = await this.pricingRepo.find({ select: ['model_name', 'provider'] });
|
|
206
|
+
const toDelete = all
|
|
207
|
+
.filter((row) => !curatedNames.has(row.model_name) &&
|
|
208
|
+
row.provider !== 'Ollama' &&
|
|
209
|
+
!row.model_name.startsWith('custom:'))
|
|
210
|
+
.map((row) => row.model_name);
|
|
211
|
+
if (toDelete.length > 0) {
|
|
212
|
+
await this.pricingRepo.delete({ model_name: (0, typeorm_2.In)(toDelete) });
|
|
213
|
+
this.logger.log(`Purged ${toDelete.length} non-curated models`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
178
216
|
async recalculateTiersIfNeeded() {
|
|
179
217
|
const activeProviders = await this.providerRepo.count({
|
|
180
218
|
where: { agent_id: local_mode_constants_1.LOCAL_AGENT_ID, is_active: true },
|
|
@@ -199,14 +237,16 @@ exports.LocalBootstrapService = LocalBootstrapService = LocalBootstrapService_1
|
|
|
199
237
|
__param(1, (0, typeorm_1.InjectRepository)(agent_entity_1.Agent)),
|
|
200
238
|
__param(2, (0, typeorm_1.InjectRepository)(agent_api_key_entity_1.AgentApiKey)),
|
|
201
239
|
__param(3, (0, typeorm_1.InjectRepository)(agent_message_entity_1.AgentMessage)),
|
|
202
|
-
__param(4, (0, typeorm_1.InjectRepository)(
|
|
203
|
-
__param(5, (0, typeorm_1.InjectRepository)(
|
|
240
|
+
__param(4, (0, typeorm_1.InjectRepository)(model_pricing_entity_1.ModelPricing)),
|
|
241
|
+
__param(5, (0, typeorm_1.InjectRepository)(user_provider_entity_1.UserProvider)),
|
|
242
|
+
__param(6, (0, typeorm_1.InjectRepository)(tier_assignment_entity_1.TierAssignment)),
|
|
204
243
|
__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
205
244
|
typeorm_2.Repository,
|
|
206
245
|
typeorm_2.Repository,
|
|
207
246
|
typeorm_2.Repository,
|
|
208
247
|
typeorm_2.Repository,
|
|
209
248
|
typeorm_2.Repository,
|
|
249
|
+
typeorm_2.Repository,
|
|
210
250
|
model_pricing_cache_service_1.ModelPricingCacheService,
|
|
211
251
|
pricing_sync_service_1.PricingSyncService,
|
|
212
252
|
core_1.ModuleRef])
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddProviderAuthType1772900000000 = void 0;
|
|
4
|
+
class AddProviderAuthType1772900000000 {
|
|
5
|
+
async up(queryRunner) {
|
|
6
|
+
await queryRunner.query(`ALTER TABLE "user_providers" ADD "auth_type" varchar NOT NULL DEFAULT 'api_key'`);
|
|
7
|
+
}
|
|
8
|
+
async down(queryRunner) {
|
|
9
|
+
await queryRunner.query(`ALTER TABLE "user_providers" DROP COLUMN "auth_type"`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.AddProviderAuthType1772900000000 = AddProviderAuthType1772900000000;
|
|
13
|
+
//# sourceMappingURL=1772900000000-AddProviderAuthType.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExpandProviderUniqueKey1773000000000 = void 0;
|
|
4
|
+
class ExpandProviderUniqueKey1773000000000 {
|
|
5
|
+
async up(queryRunner) {
|
|
6
|
+
await queryRunner.query(`DROP INDEX IF EXISTS "IDX_user_providers_agent_provider"`);
|
|
7
|
+
await queryRunner.query(`DROP INDEX IF EXISTS "IDX_user_providers_agent_id_provider"`);
|
|
8
|
+
await queryRunner.query(`DROP INDEX IF EXISTS "IDX_6f1a1e6c8d2b3a4f5e7d9c0b1a"`);
|
|
9
|
+
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_user_providers_agent_provider_auth" ` +
|
|
10
|
+
`ON "user_providers" ("agent_id", "provider", "auth_type")`);
|
|
11
|
+
}
|
|
12
|
+
async down(queryRunner) {
|
|
13
|
+
await queryRunner.query(`DROP INDEX IF EXISTS "IDX_user_providers_agent_provider_auth"`);
|
|
14
|
+
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_user_providers_agent_id_provider" ` +
|
|
15
|
+
`ON "user_providers" ("agent_id", "provider")`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.ExpandProviderUniqueKey1773000000000 = ExpandProviderUniqueKey1773000000000;
|
|
19
|
+
//# sourceMappingURL=1773000000000-ExpandProviderUniqueKey.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddOverrideAuthType1773100000000 = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
class AddOverrideAuthType1773100000000 {
|
|
6
|
+
async up(queryRunner) {
|
|
7
|
+
await queryRunner.addColumn('tier_assignments', new typeorm_1.TableColumn({
|
|
8
|
+
name: 'override_auth_type',
|
|
9
|
+
type: 'varchar',
|
|
10
|
+
isNullable: true,
|
|
11
|
+
}));
|
|
12
|
+
}
|
|
13
|
+
async down(queryRunner) {
|
|
14
|
+
await queryRunner.dropColumn('tier_assignments', 'override_auth_type');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.AddOverrideAuthType1773100000000 = AddOverrideAuthType1773100000000;
|
|
18
|
+
//# sourceMappingURL=1773100000000-AddOverrideAuthType.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddMessageAuthType1773200000000 = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
class AddMessageAuthType1773200000000 {
|
|
6
|
+
async up(queryRunner) {
|
|
7
|
+
await queryRunner.addColumn('agent_messages', new typeorm_1.TableColumn({
|
|
8
|
+
name: 'auth_type',
|
|
9
|
+
type: 'varchar',
|
|
10
|
+
isNullable: true,
|
|
11
|
+
}));
|
|
12
|
+
}
|
|
13
|
+
async down(queryRunner) {
|
|
14
|
+
await queryRunner.dropColumn('agent_messages', 'auth_type');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.AddMessageAuthType1773200000000 = AddMessageAuthType1773200000000;
|
|
18
|
+
//# sourceMappingURL=1773200000000-AddMessageAuthType.js.map
|