@@ -48,8 +48,10 @@ import {
4848 Fs ,
4949} from './fs/fs' ;
5050import { APIPromise } from '../../core/api-promise' ;
51+ import { type Uploadable } from '../../core/uploads' ;
5152import { buildHeaders } from '../../internal/headers' ;
5253import { RequestOptions } from '../../internal/request-options' ;
54+ import { multipartFormRequestOptions } from '../../internal/uploads' ;
5355import { path } from '../../internal/utils/path' ;
5456
5557export class Browsers extends APIResource {
@@ -134,6 +136,36 @@ export class Browsers extends APIResource {
134136 headers : buildHeaders ( [ { Accept : '*/*' } , options ?. headers ] ) ,
135137 } ) ;
136138 }
139+
140+ /**
141+ * Loads one or more unpacked extensions and restarts Chromium on the browser
142+ * instance.
143+ *
144+ * @example
145+ * ```ts
146+ * await client.browsers.uploadExtensions('id', {
147+ * extensions: [
148+ * {
149+ * name: 'name',
150+ * zip_file: fs.createReadStream('path/to/file'),
151+ * },
152+ * ],
153+ * });
154+ * ```
155+ */
156+ uploadExtensions (
157+ id : string ,
158+ body : BrowserUploadExtensionsParams ,
159+ options ?: RequestOptions ,
160+ ) : APIPromise < void > {
161+ return this . _client . post (
162+ path `/browsers/${ id } /extensions` ,
163+ multipartFormRequestOptions (
164+ { body, ...options , headers : buildHeaders ( [ { Accept : '*/*' } , options ?. headers ] ) } ,
165+ this . _client ,
166+ ) ,
167+ ) ;
168+ }
137169}
138170
139171/**
@@ -340,6 +372,11 @@ export namespace BrowserListResponse {
340372}
341373
342374export interface BrowserCreateParams {
375+ /**
376+ * List of browser extensions to load into the session. Provide each by id or name.
377+ */
378+ extensions ?: Array < BrowserCreateParams . Extension > ;
379+
343380 /**
344381 * If true, launches the browser using a headless image (no VNC/GUI). Defaults to
345382 * false.
@@ -387,6 +424,23 @@ export interface BrowserCreateParams {
387424}
388425
389426export namespace BrowserCreateParams {
427+ /**
428+ * Extension selection for the browser session. Provide either id or name of an
429+ * extension uploaded to Kernel.
430+ */
431+ export interface Extension {
432+ /**
433+ * Extension ID to load for this browser session
434+ */
435+ id ?: string ;
436+
437+ /**
438+ * Extension name to load for this browser session (instead of id). Must be 1-255
439+ * characters, using letters, numbers, dots, underscores, or hyphens.
440+ */
441+ name ?: string ;
442+ }
443+
390444 /**
391445 * Profile selection for the browser session. Provide either id or name. If
392446 * specified, the matching profile will be loaded into the browser session.
@@ -419,6 +473,28 @@ export interface BrowserDeleteParams {
419473 persistent_id : string ;
420474}
421475
476+ export interface BrowserUploadExtensionsParams {
477+ /**
478+ * List of extensions to upload and activate
479+ */
480+ extensions : Array < BrowserUploadExtensionsParams . Extension > ;
481+ }
482+
483+ export namespace BrowserUploadExtensionsParams {
484+ export interface Extension {
485+ /**
486+ * Folder name to place the extension under /home/kernel/extensions/<name>
487+ */
488+ name : string ;
489+
490+ /**
491+ * Zip archive containing an unpacked Chromium extension (must include
492+ * manifest.json)
493+ */
494+ zip_file : Uploadable ;
495+ }
496+ }
497+
422498Browsers . Replays = Replays ;
423499Browsers . Fs = Fs ;
424500Browsers . Process = Process ;
@@ -433,6 +509,7 @@ export declare namespace Browsers {
433509 type BrowserListResponse as BrowserListResponse ,
434510 type BrowserCreateParams as BrowserCreateParams ,
435511 type BrowserDeleteParams as BrowserDeleteParams ,
512+ type BrowserUploadExtensionsParams as BrowserUploadExtensionsParams ,
436513 } ;
437514
438515 export {
0 commit comments