@moguiyu/dsh-tavily 0.1.7 → 0.1.8
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 +31 -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.8",
|
|
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
|
@@ -400,11 +400,24 @@ function applyBackend(ctx) {
|
|
|
400
400
|
}
|
|
401
401
|
}
|
|
402
402
|
}
|
|
403
|
+
const primaryMasked = keys.length > 0 ? maskValue(keys[0]) : null
|
|
404
|
+
const display = keys.map((value) => {
|
|
405
|
+
const masked = maskValue(value)
|
|
406
|
+
return {
|
|
407
|
+
masked,
|
|
408
|
+
savedAt: keySavedAt[masked] !== undefined ? keySavedAt[masked] : null,
|
|
409
|
+
}
|
|
410
|
+
}).sort((a, b) => {
|
|
411
|
+
if (a.savedAt === b.savedAt) return 0
|
|
412
|
+
if (a.savedAt === null) return 1
|
|
413
|
+
if (b.savedAt === null) return -1
|
|
414
|
+
return a.savedAt < b.savedAt ? -1 : 1
|
|
415
|
+
})
|
|
403
416
|
return {
|
|
404
|
-
keys:
|
|
405
|
-
masked:
|
|
406
|
-
savedAt:
|
|
407
|
-
primary:
|
|
417
|
+
keys: display.map((entry) => ({
|
|
418
|
+
masked: entry.masked,
|
|
419
|
+
savedAt: entry.savedAt,
|
|
420
|
+
primary: entry.masked === primaryMasked,
|
|
408
421
|
})),
|
|
409
422
|
strategy: isValidStrategy(state.strategy) ? state.strategy : 'rotate',
|
|
410
423
|
}
|
|
@@ -437,15 +450,25 @@ function applyBackend(ctx) {
|
|
|
437
450
|
try {
|
|
438
451
|
const keys = await collectStoredKeys(credentials)
|
|
439
452
|
if (keys.length === 0) return send(res, 200, { ok: false, error: 'no Tavily API key configured' })
|
|
453
|
+
const state = readState(MANAGER_STATE)
|
|
454
|
+
const keySavedAt = state.keySavedAt !== undefined && typeof state.keySavedAt === 'object' ? state.keySavedAt : {}
|
|
455
|
+
const orderedKeys = keys.slice().sort((a, b) => {
|
|
456
|
+
const am = keySavedAt[maskValue(a)] !== undefined ? keySavedAt[maskValue(a)] : null
|
|
457
|
+
const bm = keySavedAt[maskValue(b)] !== undefined ? keySavedAt[maskValue(b)] : null
|
|
458
|
+
if (am === bm) return 0
|
|
459
|
+
if (am === null) return 1
|
|
460
|
+
if (bm === null) return -1
|
|
461
|
+
return am < bm ? -1 : 1
|
|
462
|
+
})
|
|
440
463
|
const perKey = []
|
|
441
|
-
for (const key of
|
|
464
|
+
for (const key of orderedKeys) {
|
|
442
465
|
try {
|
|
443
466
|
const usage = await fetchUsageDetailsFor(key)
|
|
444
467
|
perKey.push(usage !== null
|
|
445
|
-
? { ok: true, ...usage }
|
|
446
|
-
: { ok: false, error: 'usage unavailable' })
|
|
468
|
+
? { ok: true, masked: maskValue(key), ...usage }
|
|
469
|
+
: { ok: false, masked: maskValue(key), error: 'usage unavailable' })
|
|
447
470
|
} catch (error) {
|
|
448
|
-
perKey.push({ ok: false, error: String(error && error.message ? error.message : error) })
|
|
471
|
+
perKey.push({ ok: false, masked: maskValue(key), error: String(error && error.message ? error.message : error) })
|
|
449
472
|
}
|
|
450
473
|
}
|
|
451
474
|
const okRows = perKey.filter((row) => row.ok)
|