Files
fn_registry/python/functions/browser/browser_profile_show.md
T
egutierrez 763e06c127 feat(browser): auto-commit con 178 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-20 18:22:23 +02:00

3.7 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path, params, output
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports tested tests test_file_path file_path params output
browser_profile_show function py browser 1.0.0 impure def browser_profile_show(profile_dir: str, base_url: str = 'http://127.0.0.1:8771') -> dict Muestra un perfil de Chromium del catalogo del service osint_db con todas sus cuentas. Hace dos POST /api/query (read-only): el perfil (1 fila de browser_profiles WHERE profile_dir=?) y sus cuentas (N filas de browser_profile_accounts WHERE profile_dir=?). Devuelve la metadata del perfil y la lista de cuentas (con sus secret_ref, que son REFERENCIAS al secreto, no el password). Si el perfil no existe devuelve status error. El service responde SIEMPRE HTTP 200 con body {status:ok|error}. Impura (red). No lanza: devuelve dict de estado.
browser-profiles
osint
chromium
profile
multicuenta
false error_py_core
true
test_golden_muestra_perfil_y_cuentas
test_edge_perfil_no_existe_devuelve_error
test_error_query_falla_devuelve_status_error
python/functions/browser/browser_profile_show_test.py python/functions/browser/browser_profile_show.py
name desc
profile_dir Nombre del directorio real del perfil Chromium (ej. 'Profile 1', 'osint_01'). Es la PK por la que se busca.
name desc
base_url Base del service osint_db. Default http://127.0.0.1:8771.
dict de estado. Caso ok: {status:'ok', profile: dict (metadata: profile_dir, user_data_dir, label, persona, purpose, status, note_path, tags, notes, created_at, updated_at), accounts: list de dicts (cuentas con id, profile_dir, service, identity, secret_ref, role, status, notes, timestamps; posiblemente vacia)}. Caso no existe: {status:'error', error:'perfil no encontrado: <profile_dir>'}. Caso service caido/query rechazada: {status:'error', error: str}.

Ejemplo

import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from browser.browser_profile_show import browser_profile_show

res = browser_profile_show("Profile 1")
if res["status"] == "ok":
    print(res["profile"]["persona"])           # alias ficticio
    for a in res["accounts"]:
        print(a["service"], a["identity"], a["secret_ref"])
        # ej: gmail maria@example.com pass show osint/p1/gmail

Cuando usarla

Cuando necesites el detalle completo de UN perfil concreto: su persona/proposito y todas sus cuentas con los secret_ref para saber que credenciales usar. Es la lectura de inspeccion previa a operar con ese perfil. La compone internamente browser_profile_open para resolver el user_data_dir y devolver las cuentas al lanzar el navegador.

Gotchas

  • Impura: hace red (dos HTTP POST /api/query al service). El service osint_db debe estar vivo en http://127.0.0.1:8771. Si esta caido, devuelve {status:'error', error:'... inaccesible'} sin lanzar.
  • El codigo HTTP NO indica exito: el service responde SIEMPRE HTTP 200 con body {status:ok|error}; se parsea el body.
  • secret_ref NO es el password: las cuentas traen el secret_ref (REFERENCIA, ej. "pass show osint/p1/gmail"), nunca la credencial en claro. Resolver con pass en el momento de usar.
  • Perfil inexistente = status error: si el profile_dir no esta en el catalogo, devuelve {status:'error', error:'perfil no encontrado: ...'} (no es un fallo de red). En ese caso NO se consulta la tabla de cuentas.
  • Read-only: dos SELECT; no muta nada.

Notas

Usa el helper compartido python/functions/browser/_osint_db_client.py (modulo privado no indexado) para los POST sobre urllib.request de stdlib (sin requests). Las cuentas se ordenan por service, identity. Timeout HTTP de 10s por request.