@@ -48,7 +48,7 @@ <h2 class="section-title" id="header-classes">Classes</h2>
4848< dl >
4949< dt id ="scrapfly.browser_config.BrowserConfig "> < code class ="flex name class ">
5050< span > class < span class ="ident "> BrowserConfig</ span > </ span >
51- < span > (</ span > < span > proxy_pool: str | < a title ="scrapfly.browser_config.ProxyPool " href ="#scrapfly.browser_config.ProxyPool "> ProxyPool</ a > | None = None,< br > os: str | < a title ="scrapfly.browser_config.OperatingSystem " href ="#scrapfly.browser_config.OperatingSystem "> OperatingSystem</ a > | None = None,< br > session: str | None = None,< br > country: str | None = None,< br > auto_close: bool | None = None,< br > timeout: int | None = None,< br > debug: bool | None = None,< br > extensions: List[str] | None = None,< br > block_images: bool | None = None,< br > block_styles: bool | None = None,< br > block_fonts: bool | None = None,< br > block_media: bool | None = None,< br > screenshot: bool | None = None,< br > resolution: str | None = None,< br > target_url: str | None = None,< br > cache: bool | None = None,< br > blacklist: bool | None = None,< br > unblock: bool | None = None,< br > unblock_timeout: int | None = None,< br > browser_brand: str | None = None,< br > byop_proxy: str | None = None,< br > enable_mcp: bool | None = None,< br > solve_captcha: bool | None = None)</ span >
51+ < span > (</ span > < span > proxy_pool: str | < a title ="scrapfly.browser_config.ProxyPool " href ="#scrapfly.browser_config.ProxyPool "> ProxyPool</ a > | None = None,< br > os: str | < a title ="scrapfly.browser_config.OperatingSystem " href ="#scrapfly.browser_config.OperatingSystem "> OperatingSystem</ a > | None = None,< br > session: str | None = None,< br > country: str | None = None,< br > auto_close: bool | None = None,< br > timeout: int | None = None,< br > debug: bool | None = None,< br > extensions: List[str] | None = None,< br > block_images: bool | None = None,< br > block_styles: bool | None = None,< br > block_fonts: bool | None = None,< br > block_media: bool | None = None,< br > screenshot: bool | None = None,< br > resolution: str | None = None,< br > target_url: str | None = None,< br > cache: bool | None = None,< br > blacklist: bool | None = None,< br > unblock: bool | None = None,< br > unblock_timeout: int | None = None,< br > browser_brand: str | None = None,< br > byop_proxy: str | None = None,< br > enable_mcp: bool | None = None,< br > solve_captcha: bool | None = None,< br > vault: str | None = None,< br > vault_key: str | None = None)</ span >
5252</ code > </ dt >
5353< dd >
5454< details class ="source ">
@@ -84,6 +84,8 @@ <h2 class="section-title" id="header-classes">Classes</h2>
8484 byop_proxy: Optional[str] = None,
8585 enable_mcp: Optional[bool] = None,
8686 solve_captcha: Optional[bool] = None,
87+ vault: Optional[str] = None,
88+ vault_key: Optional[str] = None,
8789 ):
8890 if timeout is not None and timeout > 1800:
8991 raise ValueError('timeout cannot exceed 1800 seconds (30 minutes)')
@@ -129,6 +131,15 @@ <h2 class="section-title" id="header-classes">Classes</h2>
129131 # automatically. Billed per solve; failures cost nothing.
130132 # https://scrapfly.io/docs/cloud-browser-api/captcha-solver
131133 self.solve_captcha = solve_captcha
134+ # Cloud Browser Credential Vault binding. `vault` is the vault id
135+ # (UUID) returned by POST /vault; `vault_key` is the base64 32-byte
136+ # customer-held key returned (once) by POST /vault or POST
137+ # /vault/<id>/rotate. Both are forwarded as query params on the
138+ # wss:// URL — the server uses them to decrypt items into the
139+ # session's secret broker. Treat `vault_key` as a credential: never
140+ # log it, never persist it server-side.
141+ self.vault = vault
142+ self.vault_key = vault_key
132143
133144 def websocket_url(self, api_key: str, host: Optional[str] = None) -> str:
134145 params = {'api_key': api_key}
@@ -149,7 +160,7 @@ <h2 class="section-title" id="header-classes">Classes</h2>
149160 params['auto_close'] = self._bool_to_http(self.auto_close)
150161
151162 if self.timeout is not None:
152- params['timeout'] = self.timeout
163+ params['timeout'] = str( self.timeout)
153164
154165 if self.debug is not None:
155166 params['debug'] = self._bool_to_http(self.debug)
@@ -188,7 +199,7 @@ <h2 class="section-title" id="header-classes">Classes</h2>
188199 params['unblock'] = self._bool_to_http(self.unblock)
189200
190201 if self.unblock_timeout is not None:
191- params['unblock_timeout'] = self.unblock_timeout
202+ params['unblock_timeout'] = str( self.unblock_timeout)
192203
193204 if self.browser_brand is not None:
194205 params['browser_brand'] = self.browser_brand
@@ -202,6 +213,12 @@ <h2 class="section-title" id="header-classes">Classes</h2>
202213 if self.solve_captcha is not None:
203214 params['solve_captcha'] = self._bool_to_http(self.solve_captcha)
204215
216+ if self.vault is not None:
217+ params['vault'] = self.vault
218+
219+ if self.vault_key is not None:
220+ params['vault_key'] = self.vault_key
221+
205222 base_host = host or self.CLOUD_BROWSER_HOST
206223 return base_host + '?' + urlencode(params)
207224
@@ -230,6 +247,8 @@ <h2 class="section-title" id="header-classes">Classes</h2>
230247 'byop_proxy': self.byop_proxy,
231248 'enable_mcp': self.enable_mcp,
232249 'solve_captcha': self.solve_captcha,
250+ 'vault': self.vault,
251+ 'vault_key': self.vault_key,
233252 }
234253
235254 @staticmethod
@@ -266,6 +285,8 @@ <h2 class="section-title" id="header-classes">Classes</h2>
266285 byop_proxy=browser_config_dict.get('byop_proxy', None),
267286 enable_mcp=browser_config_dict.get('enable_mcp', None),
268287 solve_captcha=browser_config_dict.get('solve_captcha', None),
288+ vault=browser_config_dict.get('vault', None),
289+ vault_key=browser_config_dict.get('vault_key', None),
269290 )</ code > </ pre >
270291</ details >
271292< div class ="desc "> </ div >
@@ -324,6 +345,8 @@ <h3>Static methods</h3>
324345 byop_proxy=browser_config_dict.get('byop_proxy', None),
325346 enable_mcp=browser_config_dict.get('enable_mcp', None),
326347 solve_captcha=browser_config_dict.get('solve_captcha', None),
348+ vault=browser_config_dict.get('vault', None),
349+ vault_key=browser_config_dict.get('vault_key', None),
327350 )</ code > </ pre >
328351</ details >
329352< div class ="desc "> </ div >
@@ -364,6 +387,8 @@ <h3>Methods</h3>
364387 'byop_proxy': self.byop_proxy,
365388 'enable_mcp': self.enable_mcp,
366389 'solve_captcha': self.solve_captcha,
390+ 'vault': self.vault,
391+ 'vault_key': self.vault_key,
367392 }</ code > </ pre >
368393</ details >
369394< div class ="desc "> </ div >
@@ -395,7 +420,7 @@ <h3>Methods</h3>
395420 params['auto_close'] = self._bool_to_http(self.auto_close)
396421
397422 if self.timeout is not None:
398- params['timeout'] = self.timeout
423+ params['timeout'] = str( self.timeout)
399424
400425 if self.debug is not None:
401426 params['debug'] = self._bool_to_http(self.debug)
@@ -434,7 +459,7 @@ <h3>Methods</h3>
434459 params['unblock'] = self._bool_to_http(self.unblock)
435460
436461 if self.unblock_timeout is not None:
437- params['unblock_timeout'] = self.unblock_timeout
462+ params['unblock_timeout'] = str( self.unblock_timeout)
438463
439464 if self.browser_brand is not None:
440465 params['browser_brand'] = self.browser_brand
@@ -448,6 +473,12 @@ <h3>Methods</h3>
448473 if self.solve_captcha is not None:
449474 params['solve_captcha'] = self._bool_to_http(self.solve_captcha)
450475
476+ if self.vault is not None:
477+ params['vault'] = self.vault
478+
479+ if self.vault_key is not None:
480+ params['vault_key'] = self.vault_key
481+
451482 base_host = host or self.CLOUD_BROWSER_HOST
452483 return base_host + '?' + urlencode(params)</ code > </ pre >
453484</ details >
0 commit comments