Session 7e: Grade adapter, normalize consolidation, ARCH-2 banners
This commit is contained in:
@@ -1,4 +1,14 @@
|
||||
/**
|
||||
* ARCH-2 (Session 7e): LEGACY circuit breaker. The canonical implementation
|
||||
* lives in src/utils/rateLimiter.js (createCircuitBreaker factory).
|
||||
* New code should import from there.
|
||||
*
|
||||
* Current callers of this legacy module (remove this file when the list
|
||||
* empties):
|
||||
* - src/services/UnifiedOddsProvider.js
|
||||
* - src/services/adapters/ESPNAdapter.js
|
||||
* - src/services/adapters/PinnacleAdapter.js
|
||||
*
|
||||
* Per-upstream circuit breaker.
|
||||
*
|
||||
* States:
|
||||
|
||||
@@ -23,32 +23,14 @@
|
||||
|
||||
const { reverseLineMovement, juiceDegradation, getLineMovement } = require('./lineMovement');
|
||||
const { getSupabaseServiceClient } = require('../../utils/supabase');
|
||||
// DUP-1 (Session 7e): consolidated into src/utils/normalize.js.
|
||||
// Trap matching strips digits — keepDigits stays at the default false.
|
||||
const { normalizeName } = require('../../utils/normalize');
|
||||
|
||||
function inactive(reason) {
|
||||
return { score: 0, active: false, explanation: reason };
|
||||
}
|
||||
|
||||
// Normalize player names for matching across data sources. ParlayAPI may
|
||||
// emit "Brunson, Jalen" while ESPN emits "Jalen Brunson" — strip case,
|
||||
// punctuation, suffixes, and collapse whitespace so equivalence works.
|
||||
//
|
||||
// DUP-1 (Session 7c): a near-identical implementation lives in
|
||||
// scripts/populate-player-ids.js. The script's variant keeps digits
|
||||
// (some legacy roster fields encode jersey numbers); this one strips
|
||||
// them because trap matches go by player name only. If the script
|
||||
// stops needing digits, consolidate to a shared util.
|
||||
function normalizeName(name) {
|
||||
if (!name) return '';
|
||||
return String(name)
|
||||
.normalize('NFD')
|
||||
.replace(/[̀-ͯ]/g, '')
|
||||
.toLowerCase()
|
||||
.replace(/\b(jr|sr|ii|iii|iv|v)\.?\b/g, '')
|
||||
.replace(/[^a-z\s]/g, ' ')
|
||||
.replace(/\s+/g, ' ')
|
||||
.trim();
|
||||
}
|
||||
|
||||
// Detect whether a key teammate transitioned from OUT in the recent past
|
||||
// to AVAILABLE now. Called by the orchestrator (Section 2) before invoking
|
||||
// the trap detector — the orchestrator owns the injury-history context.
|
||||
|
||||
@@ -1,4 +1,14 @@
|
||||
/**
|
||||
* ARCH-2 (Session 7e): LEGACY rate limiter. The canonical implementation
|
||||
* lives in src/utils/rateLimiter.js (factory pattern, paired with
|
||||
* createCircuitBreaker). New code should import from there.
|
||||
*
|
||||
* Current callers of this legacy module (remove this file when the list
|
||||
* empties):
|
||||
* - src/services/UnifiedOddsProvider.js
|
||||
* - src/services/adapters/ESPNAdapter.js
|
||||
* - src/services/adapters/PinnacleAdapter.js
|
||||
*
|
||||
* Token bucket rate limiter, per upstream key.
|
||||
*
|
||||
* Each upstream (ESPN, Pinnacle, DK, etc.) gets its own bucket so a runaway
|
||||
|
||||
Reference in New Issue
Block a user