---
name: cdp_har_record
kind: function
lang: go
domain: browser
version: 0.1.0
purity: impure
signature: "func CdpHarRecord(c *CDPConn, action func() error, settleMs int) (string, error)"
description: "Captura todas las peticiones HTTP/WS que ocurren durante la ejecucion de `action` y devuelve un archivo HAR 1.2 valido como JSON. Habilita Network.* events de CDP, suscribe handlers para requestWillBeSent / responseReceived / loadingFinished / loadingFailed, ejecuta la accion del usuario, espera settleMs para eventos rezagados, y construye el HAR. Body de respuesta no incluido en v0 (requiere Network.getResponseBody adicional)."
tags: [browser, cdp, har, network, capture, observability, pendiente-usar]
uses_functions:
  - cdp_evaluate_go_browser
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: [encoding/json, fmt, sync, time]
example: |
  c, _ := browser.CdpConnect(9222)
  defer browser.CdpClose(c, 0)
  har, err := browser.CdpHarRecord(c, func() error {
      return browser.CdpNavigate(c, "https://example.com")
  }, 2000)
  if err == nil {
      os.WriteFile("page.har", []byte(har), 0644)
  }
tested: true
tests: ["TestCdpHarRecord_nilConn"]
test_file_path: "functions/browser/cdp_har_record_test.go"
file_path: "functions/browser/cdp_har_record.go"
notes: |
  - Activa Network.enable + Network.disable automaticamente; el caller no necesita gestionarlo.
  - Habilita events para `Network.requestWillBeSent`, `responseReceived`, `loadingFinished`, `loadingFailed`.
  - settleMs default 1500 — tiempo de espera tras `action()` para eventos trailing (loadingFinished tipicamente llega ~100-500ms despues que responseReceived).
  - HAR resultante incluye headers de request/response, status, mimetype, IP servidor, timings totales (send/receive=0, wait=tiempo total — sin breakdown granular).
  - `_requestId` y `_error` son extensiones opcionales de HAR (prefijo `_` permitido por la spec).
  - Tipos `HarHeader`, `HarEntry`, `HarLog` exportados — apps consumidoras pueden re-parsear.
documentation: |
  Patron de captura comun en Playwright/Puppeteer (`page.context().tracing`, `tracing.start({har})`).
  Util para:
    - Auditar que peticiones hace una pagina (third-party scripts, trackers).
    - Reproducir trafico via mocks (HAR -> wiremock/mockttp).
    - Debugging visual en navegator_dashboard panel Network.
    - Tests e2e que validan cuantas peticiones / a que dominios.
params:
  - name: c
    desc: "Conexion CDP activa (CdpConnect)."
  - name: action
    desc: "Funcion a ejecutar mientras se graban eventos. Usualmente CdpNavigate + CdpWaitLoad. Puede ser nil (graba lo que pase pasivamente)."
  - name: settleMs
    desc: "Milisegundos a esperar tras `action` para recoger trailing events. <=0 → 1500."
output: "JSON HAR 1.2 indentado. Vacio entries si no hubo trafico. Error si Network.enable falla o action retorna error (ambos: HAR parcial + error)."
---
