Skip to content

Commit e330f60

Browse files
feat: Forward replay param through telemetry stream passthrough
1 parent b5ff4c6 commit e330f60

6 files changed

Lines changed: 52 additions & 8 deletions

File tree

.stats.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 121
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-7d6d64b3998b55057f21aa5e33096cd5468f2bb2c4fda65190e9f299b50e5908.yml
3-
openapi_spec_hash: aa7d3971d38b16eff41b08cc3cbb549d
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-01f7f21a2fc892da284edf6b7cfd340d2ce5d0a9eb7ad2b39a8daec27b093134.yml
3+
openapi_spec_hash: 21972930082b23d985faf285fd656c31
44
config_hash: 3a50aee540dce69a53bb8942f5086f5e

api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ from kernel.types.browsers import (
152152

153153
Methods:
154154

155-
- <code title="get /browsers/{id}/telemetry/stream">client.browsers.telemetry.<a href="./src/kernel/resources/browsers/telemetry.py">stream</a>(id) -> <a href="./src/kernel/types/browsers/telemetry_stream_response.py">TelemetryStreamResponse</a></code>
155+
- <code title="get /browsers/{id}/telemetry/stream">client.browsers.telemetry.<a href="./src/kernel/resources/browsers/telemetry.py">stream</a>(id, \*\*<a href="src/kernel/types/browsers/telemetry_stream_params.py">params</a>) -> <a href="./src/kernel/types/browsers/telemetry_stream_response.py">TelemetryStreamResponse</a></code>
156156

157157
## Replays
158158

src/kernel/resources/browsers/telemetry.py

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import httpx
66

77
from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
8-
from ..._utils import path_template, strip_not_given
8+
from ..._utils import path_template, maybe_transform, strip_not_given, async_maybe_transform
99
from ..._compat import cached_property
1010
from ..._resource import SyncAPIResource, AsyncAPIResource
1111
from ..._response import (
@@ -16,6 +16,7 @@
1616
)
1717
from ..._streaming import Stream, AsyncStream
1818
from ..._base_client import make_request_options
19+
from ...types.browsers import telemetry_stream_params
1920
from ...types.browsers.telemetry_stream_response import TelemetryStreamResponse
2021

2122
__all__ = ["TelemetryResource", "AsyncTelemetryResource"]
@@ -47,6 +48,7 @@ def stream(
4748
self,
4849
id: str,
4950
*,
51+
replay: str | Omit = omit,
5052
last_event_id: str | Omit = omit,
5153
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
5254
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -64,9 +66,14 @@ def stream(
6466
set; all frames carry JSON in the data: field. A keepalive comment frame is sent
6567
every 15 seconds when no events arrive. Returns 404 if the browser session does
6668
not exist. If telemetry was not enabled on the session, the stream opens but no
67-
events are delivered.
69+
events are delivered. Fresh connections only see new events; pass replay=all to
70+
start from the oldest retained event instead.
6871
6972
Args:
73+
replay: Pass `all` to start from the oldest retained event instead of only new events;
74+
any other value is treated as from-now. The buffer is bounded, so the first
75+
event id may be greater than 1 if older events were evicted.
76+
7077
extra_headers: Send extra headers
7178
7279
extra_query: Add additional query parameters to the request
@@ -82,7 +89,11 @@ def stream(
8289
return self._get(
8390
path_template("/browsers/{id}/telemetry/stream", id=id),
8491
options=make_request_options(
85-
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
92+
extra_headers=extra_headers,
93+
extra_query=extra_query,
94+
extra_body=extra_body,
95+
timeout=timeout,
96+
query=maybe_transform({"replay": replay}, telemetry_stream_params.TelemetryStreamParams),
8697
),
8798
cast_to=TelemetryStreamResponse,
8899
stream=True,
@@ -116,6 +127,7 @@ async def stream(
116127
self,
117128
id: str,
118129
*,
130+
replay: str | Omit = omit,
119131
last_event_id: str | Omit = omit,
120132
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
121133
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -133,9 +145,14 @@ async def stream(
133145
set; all frames carry JSON in the data: field. A keepalive comment frame is sent
134146
every 15 seconds when no events arrive. Returns 404 if the browser session does
135147
not exist. If telemetry was not enabled on the session, the stream opens but no
136-
events are delivered.
148+
events are delivered. Fresh connections only see new events; pass replay=all to
149+
start from the oldest retained event instead.
137150
138151
Args:
152+
replay: Pass `all` to start from the oldest retained event instead of only new events;
153+
any other value is treated as from-now. The buffer is bounded, so the first
154+
event id may be greater than 1 if older events were evicted.
155+
139156
extra_headers: Send extra headers
140157
141158
extra_query: Add additional query parameters to the request
@@ -151,7 +168,11 @@ async def stream(
151168
return await self._get(
152169
path_template("/browsers/{id}/telemetry/stream", id=id),
153170
options=make_request_options(
154-
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
171+
extra_headers=extra_headers,
172+
extra_query=extra_query,
173+
extra_body=extra_body,
174+
timeout=timeout,
175+
query=await async_maybe_transform({"replay": replay}, telemetry_stream_params.TelemetryStreamParams),
155176
),
156177
cast_to=TelemetryStreamResponse,
157178
stream=True,

src/kernel/types/browsers/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
from .browser_telemetry_event import BrowserTelemetryEvent as BrowserTelemetryEvent
3838
from .process_resize_response import ProcessResizeResponse as ProcessResizeResponse
3939
from .process_status_response import ProcessStatusResponse as ProcessStatusResponse
40+
from .telemetry_stream_params import TelemetryStreamParams as TelemetryStreamParams
4041
from .browser_telemetry_config import BrowserTelemetryConfig as BrowserTelemetryConfig
4142
from .browser_cdp_connect_event import BrowserCdpConnectEvent as BrowserCdpConnectEvent
4243
from .browser_console_log_event import BrowserConsoleLogEvent as BrowserConsoleLogEvent
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from __future__ import annotations
4+
5+
from typing_extensions import Annotated, TypedDict
6+
7+
from ..._utils import PropertyInfo
8+
9+
__all__ = ["TelemetryStreamParams"]
10+
11+
12+
class TelemetryStreamParams(TypedDict, total=False):
13+
replay: str
14+
"""
15+
Pass `all` to start from the oldest retained event instead of only new events;
16+
any other value is treated as from-now. The buffer is bounded, so the first
17+
event id may be greater than 1 if older events were evicted.
18+
"""
19+
20+
last_event_id: Annotated[str, PropertyInfo(alias="Last-Event-ID")]

tests/api_resources/browsers/test_telemetry.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def test_method_stream(self, client: Kernel) -> None:
2828
def test_method_stream_with_all_params(self, client: Kernel) -> None:
2929
telemetry_stream = client.browsers.telemetry.stream(
3030
id="id",
31+
replay="replay",
3132
last_event_id="Last-Event-ID",
3233
)
3334
telemetry_stream.response.close()
@@ -84,6 +85,7 @@ async def test_method_stream(self, async_client: AsyncKernel) -> None:
8485
async def test_method_stream_with_all_params(self, async_client: AsyncKernel) -> None:
8586
telemetry_stream = await async_client.browsers.telemetry.stream(
8687
id="id",
88+
replay="replay",
8789
last_event_id="Last-Event-ID",
8890
)
8991
await telemetry_stream.response.aclose()

0 commit comments

Comments
 (0)