@moguiyu/dsh-tavily 0.1.7 → 0.1.9
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/lib/client.js +3 -1
- package/package.json +1 -1
- package/src/client.js +3 -1
- package/src/index.js +34 -8
package/lib/client.js
CHANGED
|
@@ -338,7 +338,9 @@ window.__ModuleLoader__.load({
|
|
|
338
338
|
const isRemoved = removing[masked] === true
|
|
339
339
|
const isReplacing = replacing[masked] === true
|
|
340
340
|
const isRevealed = typeof revealed[masked] === 'string'
|
|
341
|
-
const usageRow = usage !== null && usage.ok === true
|
|
341
|
+
const usageRow = usage !== null && usage.ok === true
|
|
342
|
+
? (usage.perKey.find((row) => row.masked === masked) || usage.perKey[index])
|
|
343
|
+
: null
|
|
342
344
|
const pct = usageRow && usageRow.ok && usageRow.planLimit != null && usageRow.planLimit > 0 && usageRow.planUsage != null
|
|
343
345
|
? Math.min(100, Math.round((usageRow.planUsage / usageRow.planLimit) * 100))
|
|
344
346
|
: null
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moguiyu/dsh-tavily",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9",
|
|
4
4
|
"description": "Tavily Search for DSH: multiple API keys, rotation/failover, usage gauge, settings card, and web_search toggle in one plugin.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/index.js",
|
package/src/client.js
CHANGED
|
@@ -343,7 +343,9 @@ export function factory(require) {
|
|
|
343
343
|
const isRemoved = removing[masked] === true
|
|
344
344
|
const isReplacing = replacing[masked] === true
|
|
345
345
|
const isRevealed = typeof revealed[masked] === 'string'
|
|
346
|
-
const usageRow = usage !== null && usage.ok === true
|
|
346
|
+
const usageRow = usage !== null && usage.ok === true
|
|
347
|
+
? (usage.perKey.find((row) => row.masked === masked) || usage.perKey[index])
|
|
348
|
+
: null
|
|
347
349
|
const pct = usageRow && usageRow.ok && usageRow.planLimit != null && usageRow.planLimit > 0 && usageRow.planUsage != null
|
|
348
350
|
? Math.min(100, Math.round((usageRow.planUsage / usageRow.planLimit) * 100))
|
|
349
351
|
: null
|
package/src/index.js
CHANGED
|
@@ -346,6 +346,9 @@ async function fetchUsageDetailsFor(key) {
|
|
|
346
346
|
async function fetchUsageFor(key) {
|
|
347
347
|
const details = await fetchUsageDetailsFor(key)
|
|
348
348
|
if (details === null) return null
|
|
349
|
+
if (details.planLimit !== null && details.planLimit > 0 && details.planUsage !== null) {
|
|
350
|
+
return (details.planUsage / details.planLimit) * 100
|
|
351
|
+
}
|
|
349
352
|
return details.usage !== null ? details.usage : details.planUsage
|
|
350
353
|
}
|
|
351
354
|
|
|
@@ -400,11 +403,24 @@ function applyBackend(ctx) {
|
|
|
400
403
|
}
|
|
401
404
|
}
|
|
402
405
|
}
|
|
406
|
+
const primaryMasked = keys.length > 0 ? maskValue(keys[0]) : null
|
|
407
|
+
const display = keys.map((value) => {
|
|
408
|
+
const masked = maskValue(value)
|
|
409
|
+
return {
|
|
410
|
+
masked,
|
|
411
|
+
savedAt: keySavedAt[masked] !== undefined ? keySavedAt[masked] : null,
|
|
412
|
+
}
|
|
413
|
+
}).sort((a, b) => {
|
|
414
|
+
if (a.savedAt === b.savedAt) return 0
|
|
415
|
+
if (a.savedAt === null) return 1
|
|
416
|
+
if (b.savedAt === null) return -1
|
|
417
|
+
return a.savedAt < b.savedAt ? -1 : 1
|
|
418
|
+
})
|
|
403
419
|
return {
|
|
404
|
-
keys:
|
|
405
|
-
masked:
|
|
406
|
-
savedAt:
|
|
407
|
-
primary:
|
|
420
|
+
keys: display.map((entry) => ({
|
|
421
|
+
masked: entry.masked,
|
|
422
|
+
savedAt: entry.savedAt,
|
|
423
|
+
primary: entry.masked === primaryMasked,
|
|
408
424
|
})),
|
|
409
425
|
strategy: isValidStrategy(state.strategy) ? state.strategy : 'rotate',
|
|
410
426
|
}
|
|
@@ -437,15 +453,25 @@ function applyBackend(ctx) {
|
|
|
437
453
|
try {
|
|
438
454
|
const keys = await collectStoredKeys(credentials)
|
|
439
455
|
if (keys.length === 0) return send(res, 200, { ok: false, error: 'no Tavily API key configured' })
|
|
456
|
+
const state = readState(MANAGER_STATE)
|
|
457
|
+
const keySavedAt = state.keySavedAt !== undefined && typeof state.keySavedAt === 'object' ? state.keySavedAt : {}
|
|
458
|
+
const orderedKeys = keys.slice().sort((a, b) => {
|
|
459
|
+
const am = keySavedAt[maskValue(a)] !== undefined ? keySavedAt[maskValue(a)] : null
|
|
460
|
+
const bm = keySavedAt[maskValue(b)] !== undefined ? keySavedAt[maskValue(b)] : null
|
|
461
|
+
if (am === bm) return 0
|
|
462
|
+
if (am === null) return 1
|
|
463
|
+
if (bm === null) return -1
|
|
464
|
+
return am < bm ? -1 : 1
|
|
465
|
+
})
|
|
440
466
|
const perKey = []
|
|
441
|
-
for (const key of
|
|
467
|
+
for (const key of orderedKeys) {
|
|
442
468
|
try {
|
|
443
469
|
const usage = await fetchUsageDetailsFor(key)
|
|
444
470
|
perKey.push(usage !== null
|
|
445
|
-
? { ok: true, ...usage }
|
|
446
|
-
: { ok: false, error: 'usage unavailable' })
|
|
471
|
+
? { ok: true, masked: maskValue(key), ...usage }
|
|
472
|
+
: { ok: false, masked: maskValue(key), error: 'usage unavailable' })
|
|
447
473
|
} catch (error) {
|
|
448
|
-
perKey.push({ ok: false, error: String(error && error.message ? error.message : error) })
|
|
474
|
+
perKey.push({ ok: false, masked: maskValue(key), error: String(error && error.message ? error.message : error) })
|
|
449
475
|
}
|
|
450
476
|
}
|
|
451
477
|
const okRows = perKey.filter((row) => row.ok)
|