Skip to content

Commit d18107b

Browse files
feat(api): manual updates
1 parent cce765a commit d18107b

6 files changed

Lines changed: 110 additions & 3 deletions

File tree

.stats.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 21
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/browserbase/browserbase-3032c74460ad9c1c4b0a1b2d9107c556f292974a8ce12d525660a9cf31f10bc1.yml
1+
configured_endpoints: 23
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/browserbase/browserbase-17193ab4cc450d38ce1bfdb1a571001c04b754ba2ff2d2bb2dcf4a898d6c6c41.yml
33
openapi_spec_hash: 8ac1c673ce4e72b88bbbf30100b95e8f
4-
config_hash: cf04ecfb8dad5fbd8b85be25d6e9ec55
4+
config_hash: 40fbac80e24faaa0dc19e93368bcd821

api.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,14 @@ Types:
114114
Methods:
115115

116116
- <code title="post /v1/sessions/{id}/uploads">client.sessions.uploads.<a href="./src/resources/sessions/uploads.ts">create</a>(id, { ...params }) -> UploadCreateResponse</code>
117+
118+
## Replays
119+
120+
Types:
121+
122+
- <code><a href="./src/resources/sessions/replays.ts">ReplayRetrieveResponse</a></code>
123+
124+
Methods:
125+
126+
- <code title="get /v1/sessions/{id}/replays">client.sessions.replays.<a href="./src/resources/sessions/replays.ts">retrieve</a>(id) -> ReplayRetrieveResponse</code>
127+
- <code title="get /v1/sessions/{id}/replays/{pageId}">client.sessions.replays.<a href="./src/resources/sessions/replays.ts">retrievePage</a>(id, pageId) -> Response</code>

src/resources/sessions/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
export { Downloads } from './downloads';
44
export { Logs, type SessionLog, type LogListResponse } from './logs';
55
export { Recording, type SessionRecording, type RecordingRetrieveResponse } from './recording';
6+
export { Replays, type ReplayRetrieveResponse } from './replays';
67
export {
78
Sessions,
89
type Session,

src/resources/sessions/replays.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
import { APIResource } from '../../resource';
4+
import * as Core from '../../core';
5+
import { type Response } from '../../_shims/index';
6+
7+
export class Replays extends APIResource {
8+
/**
9+
* Returns page metadata for a session replay, including timing information and the
10+
* URL of each page's HLS playlist.
11+
*/
12+
retrieve(id: string, options?: Core.RequestOptions): Core.APIPromise<ReplayRetrieveResponse> {
13+
return this._client.get(`/v1/sessions/${id}/replays`, options);
14+
}
15+
16+
/**
17+
* Returns an HLS VOD media playlist (.m3u8) for a specific page of a session
18+
* replay.
19+
*/
20+
retrievePage(id: string, pageId: string, options?: Core.RequestOptions): Core.APIPromise<Response> {
21+
return this._client.get(`/v1/sessions/${id}/replays/${pageId}`, {
22+
...options,
23+
headers: { Accept: 'application/vnd.apple.mpegurl', ...options?.headers },
24+
__binaryResponse: true,
25+
});
26+
}
27+
}
28+
29+
export interface ReplayRetrieveResponse {
30+
pageCount: number;
31+
32+
pages: Array<ReplayRetrieveResponse.Page>;
33+
}
34+
35+
export namespace ReplayRetrieveResponse {
36+
export interface Page {
37+
endTimeMs: number;
38+
39+
pageId: string;
40+
41+
startTimeMs: number;
42+
43+
url: string;
44+
}
45+
}
46+
47+
export declare namespace Replays {
48+
export { type ReplayRetrieveResponse as ReplayRetrieveResponse };
49+
}

src/resources/sessions/sessions.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import * as LogsAPI from './logs';
99
import { LogListResponse, Logs, SessionLog } from './logs';
1010
import * as RecordingAPI from './recording';
1111
import { Recording, RecordingRetrieveResponse, SessionRecording } from './recording';
12+
import * as ReplaysAPI from './replays';
13+
import { ReplayRetrieveResponse, Replays } from './replays';
1214
import * as UploadsAPI from './uploads';
1315
import { UploadCreateParams, UploadCreateResponse, Uploads } from './uploads';
1416

@@ -17,6 +19,7 @@ export class Sessions extends APIResource {
1719
logs: LogsAPI.Logs = new LogsAPI.Logs(this._client);
1820
recording: RecordingAPI.Recording = new RecordingAPI.Recording(this._client);
1921
uploads: UploadsAPI.Uploads = new UploadsAPI.Uploads(this._client);
22+
replays: ReplaysAPI.Replays = new ReplaysAPI.Replays(this._client);
2023

2124
/**
2225
* Create a Session
@@ -437,6 +440,7 @@ Sessions.Downloads = Downloads;
437440
Sessions.Logs = Logs;
438441
Sessions.Recording = Recording;
439442
Sessions.Uploads = Uploads;
443+
Sessions.Replays = Replays;
440444

441445
export declare namespace Sessions {
442446
export {
@@ -465,4 +469,6 @@ export declare namespace Sessions {
465469
type UploadCreateResponse as UploadCreateResponse,
466470
type UploadCreateParams as UploadCreateParams,
467471
};
472+
473+
export { Replays as Replays, type ReplayRetrieveResponse as ReplayRetrieveResponse };
468474
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
import Browserbase from '@browserbasehq/sdk';
4+
import { Response } from 'node-fetch';
5+
6+
const client = new Browserbase({
7+
apiKey: 'My API Key',
8+
baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010',
9+
});
10+
11+
describe('resource replays', () => {
12+
test('retrieve', async () => {
13+
const responsePromise = client.sessions.replays.retrieve('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');
14+
const rawResponse = await responsePromise.asResponse();
15+
expect(rawResponse).toBeInstanceOf(Response);
16+
const response = await responsePromise;
17+
expect(response).not.toBeInstanceOf(Response);
18+
const dataAndResponse = await responsePromise.withResponse();
19+
expect(dataAndResponse.data).toBe(response);
20+
expect(dataAndResponse.response).toBe(rawResponse);
21+
});
22+
23+
test('retrieve: request options instead of params are passed correctly', async () => {
24+
// ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error
25+
await expect(
26+
client.sessions.replays.retrieve('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {
27+
path: '/_stainless_unknown_path',
28+
}),
29+
).rejects.toThrow(Browserbase.NotFoundError);
30+
});
31+
32+
test('retrievePage: request options instead of params are passed correctly', async () => {
33+
// ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error
34+
await expect(
35+
client.sessions.replays.retrievePage('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', '090', {
36+
path: '/_stainless_unknown_path',
37+
}),
38+
).rejects.toThrow(Browserbase.NotFoundError);
39+
});
40+
});

0 commit comments

Comments
 (0)