package browser // CdpCookie representa una cookie del browser tal como la devuelve CDP. type CdpCookie struct { Name string `json:"name"` Value string `json:"value"` Domain string `json:"domain"` Path string `json:"path"` Expires float64 `json:"expires"` HTTPOnly bool `json:"httpOnly"` Secure bool `json:"secure"` SameSite string `json:"sameSite"` } // cookieFromMap convierte un map[string]any CDP a CdpCookie con casts defensivos. func cookieFromMap(m map[string]any) CdpCookie { c := CdpCookie{} if v, ok := m["name"].(string); ok { c.Name = v } if v, ok := m["value"].(string); ok { c.Value = v } if v, ok := m["domain"].(string); ok { c.Domain = v } if v, ok := m["path"].(string); ok { c.Path = v } if v, ok := m["expires"].(float64); ok { c.Expires = v } if v, ok := m["httpOnly"].(bool); ok { c.HTTPOnly = v } if v, ok := m["secure"].(bool); ok { c.Secure = v } if v, ok := m["sameSite"].(string); ok { c.SameSite = v } return c } // CdpGetCookies devuelve todas las cookies del browser via Network.getAllCookies. // El caller puede filtrar por dominio, nombre, etc. sobre el slice retornado. func CdpGetCookies(c *CDPConn) ([]CdpCookie, error) { if _, err := c.sendCDP("Network.enable", nil); err != nil { return nil, err } result, err := c.sendCDP("Network.getAllCookies", nil) if err != nil { return nil, err } raw, _ := result["cookies"].([]any) cookies := make([]CdpCookie, 0, len(raw)) for _, item := range raw { if m, ok := item.(map[string]any); ok { cookies = append(cookies, cookieFromMap(m)) } } return cookies, nil }