@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 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 ? usage.perKey[index] : null
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.7",
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 ? usage.perKey[index] : null
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: keys.map((value, index) => ({
405
- masked: maskValue(value),
406
- savedAt: keySavedAt[maskValue(value)] !== undefined ? keySavedAt[maskValue(value)] : null,
407
- primary: index === 0,
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 keys) {
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)