File size: 4,512 Bytes
5064ce2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# ============================================================
# config.py — Configuración centralizada + constantes del proyecto
# ------------------------------------------------------------
# NOTA PARA AUDITORÍA:
# - Este módulo NO tiene efectos secundarios al importarlo.
# - Carga valores desde variables de entorno (con defaults seguros)
#   y define constantes compartidas por los demás módulos.
# - Incluye el mapeo TICKERS_TO_IDS utilizado para los iframes
#   de bitcointreasuries.net (tal cual el código original).
# ============================================================

from __future__ import annotations

import os
from typing import Dict


# ------------------------------------------------------------
# Helpers de entorno
# ------------------------------------------------------------
def _get_bool(env_var: str, default: bool = True) -> bool:
    """
    Interpreta variables de entorno tipo booleano (e.g., "true", "1", "yes").
    """
    val = os.getenv(env_var, str(default)).strip().lower()
    return val in {"1", "true", "t", "yes", "y", "on"}


# ------------------------------------------------------------
# Variables de entorno (claves y opciones)
# ------------------------------------------------------------
SCRAPERAPI_KEY: str = os.getenv("SCRAPERAPI_KEY", "")
CRYPTOCOMPARE_API_KEY: str = os.getenv("CRYPTOCOMPARE_API_KEY", "")
TIMEZONE_TARGET: str = os.getenv("TIMEZONE_TARGET", "America/New_York")
GRADIO_SHARE: bool = _get_bool("GRADIO_SHARE", True)

# ------------------------------------------------------------
# Endpoints y URLs comunes
# ------------------------------------------------------------
CRYPTOCOMPARE_BASE_URL: str = "https://min-api.cryptocompare.com/data/v2/histohour"
BITCOINTREASURIES_STOCKS_URL: str = "https://bitcointreasuries.net/"
BITCOINTREASURIES_ETFS_URL: str = "https://bitcointreasuries.net/etfs-and-exchanges"
YF_SEARCH_ENDPOINT: str = "https://query1.finance.yahoo.com/v1/finance/search"

# ------------------------------------------------------------
# Mapeo estático para iframes de Bitcointreasuries
# (equivalente a `tickers_to_ids` en tu app original)
# ------------------------------------------------------------
TICKERS_TO_IDS: Dict[str, int] = {
    "MSTR": 1, "MARA": 4, "CEP": 436, "BSTR": 674, "RIOT": 7, "DJT": 671, "3350.T": 176,
    "GLXY": 10, "CLSK": 28, "TSLA": 2, "HUT": 6, "COIN": 8, "XYZ": 5, "NXTT": 473,
    "CCCM": 595, "SMLR": 194, "GME": 517, "CANG": 337, "ADE.DE": 11, "0434.HK": 238,
    "HOLO": 508, "SQNS": 644, "HIVE": 9, "EXOD": 168, "ALTBG.PA": 295, "3659.T": 14,
    "FUFU": 325, "BTDR": 324, "SWC.AQ": 440, "FLD": 256, "CAN": 111, "BITF": 12,
    "CIFR": 82, "3825.T": 301, "KULR": 341, "NA": 331, "CORZ": 3, "MSW": 356, "SOS": 426,
    "BTCT.V": 608, "AKER.OL": 15, "GS9": 491, "CASH3.SA": 395, "MELI": 182, "SRAG.DU": 279,
    "JAS.BK": 307, "DCC.AX": 24, "ARLP": 425, "377030.KQ": 401, "BTBT": 18, "NDA.V": 32,
    "DDC": 500, "NTHOL.IS": 40, "DMGI.V": 23, "NCTY": 442, "VLCN": 679, "PNIX.AQ": 582,
    "ABT.DU": 21, "LQWD.V": 29, "CS.ST": 288, "VIRT": 472, "112040.KQ": 403, "RUM": 402,
    "DEFI.NE": 254, "GNS": 294, "PRE": 573, "3189.T": 445, "BTCB.SE": 636, "LMFA": 91,
    "BMNR": 550, "SIX.CN": 597, "BNXAF": 30, "PHX.AD": 449, "HKHC": 480, "042420.KQ": 406,
    "BTC.BK": 31, "K33.ST": 538, "COIN.AQ": 483, "BIGG.V": 17, "BTM": 372, "KWM": 643,
    "BTC.L": 292, "8005.HK": 342, "MATA.V": 357, "VANA.MC": 535, "V3TC.AQ": 586, "SBC": 380,
    "FRMO": 35, "ATAI": 479, "CBIT.V": 27, "MLGO": 511, "MOGO": 36, "8267.HK": 239,
    "WNDR.TO": 242, "SATO.V": 240, "9238.T": 434, "1723.HK": 384, "PXI.CN": 634,
    "SATS.L": 666, "ALBDM.PA": 580, "IREN": 12, "WULF": 15, "GREE": 21, "EBON": 14,
    "DGHI": 25, "SDIG": 17, "MIGI": 16, "SLNH": 24, "ANY": 23, "APLD": 20, "BTCS": 19,
    "RVYL": 30, "ICG": 29, "HOOD": 35, "PYPL": 2, "NVDA": 22, "CME": 26, "DEFI": 31,
    "IBIT": 119, "BTF": 33, "SQ": 34, "BKKT": 37, "BTCM": 38, "MA": 39, "IBM": 40,
    "GBTC": 50, "BITO": 41, "BITB": 117, "BTC-USD": 0, "MTPLF": 176
}

# ------------------------------------------------------------
# Export público del módulo
# ------------------------------------------------------------
__all__ = [
    # claves / opciones
    "SCRAPERAPI_KEY", "CRYPTOCOMPARE_API_KEY", "TIMEZONE_TARGET", "GRADIO_SHARE",
    # endpoints y urls
    "CRYPTOCOMPARE_BASE_URL", "BITCOINTREASURIES_STOCKS_URL", "BITCOINTREASURIES_ETFS_URL",
    "YF_SEARCH_ENDPOINT",
    # constantes de negocio
    "TICKERS_TO_IDS",
]