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