@computesdk/provider 1.0.33 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -405,6 +405,323 @@ interface StorageProvider {
405
405
  list(bucket: string, options?: ListOptions): Promise<ListResult>;
406
406
  }
407
407
 
408
+ /**
409
+ * Browser Provider Types
410
+ *
411
+ * Types for browser providers (Browserbase, Kernel, etc.)
412
+ * Browser providers manage cloud browser sessions, distinct from sandbox providers
413
+ * which manage code execution environments.
414
+ */
415
+ /**
416
+ * Browser session info returned from provider APIs
417
+ */
418
+ interface BrowserSession {
419
+ /** Unique session identifier */
420
+ sessionId: string;
421
+ /** CDP or WebSocket connection URL */
422
+ connectUrl: string;
423
+ /** Current session status */
424
+ status: 'created' | 'running' | 'completed' | 'failed' | 'timed_out';
425
+ /** Session creation timestamp */
426
+ createdAt?: Date;
427
+ /** Provider-specific metadata */
428
+ metadata?: Record<string, unknown>;
429
+ }
430
+ /**
431
+ * Options for creating a browser session
432
+ */
433
+ interface CreateBrowserSessionOptions {
434
+ /** Proxy configuration — true for provider default, or detailed config */
435
+ proxies?: boolean | ProxyConfig[];
436
+ /** Browser viewport dimensions */
437
+ viewport?: {
438
+ width: number;
439
+ height: number;
440
+ };
441
+ /** Session timeout in seconds */
442
+ timeout?: number;
443
+ /** Keep session alive after script disconnects */
444
+ keepAlive?: boolean;
445
+ /** Enable session recording (default: true) */
446
+ recording?: boolean;
447
+ /** Enable session logging (default: true) */
448
+ logging?: boolean;
449
+ /** Enable stealth/anti-detection mode */
450
+ stealth?: boolean;
451
+ /** Browser profile/context ID for session persistence */
452
+ profileId?: string;
453
+ /** Extension IDs to load */
454
+ extensionIds?: string[];
455
+ /** Region/datacenter preference */
456
+ region?: string;
457
+ /** Custom user metadata */
458
+ userMetadata?: Record<string, string>;
459
+ }
460
+ /**
461
+ * Proxy configuration for browser sessions
462
+ */
463
+ interface ProxyConfig {
464
+ /** Proxy type */
465
+ type: 'residential' | 'isp' | 'datacenter' | 'custom';
466
+ /** Proxy server URL (for custom type) */
467
+ server?: string;
468
+ /** Proxy username */
469
+ username?: string;
470
+ /** Proxy password */
471
+ password?: string;
472
+ /** Geolocation targeting */
473
+ geolocation?: {
474
+ country?: string;
475
+ state?: string;
476
+ city?: string;
477
+ };
478
+ /** Domain pattern to route through this proxy */
479
+ domainPattern?: string;
480
+ }
481
+ /**
482
+ * Browser profile (persistent context — cookies, storage, etc.)
483
+ */
484
+ interface BrowserProfile {
485
+ /** Unique profile identifier */
486
+ profileId: string;
487
+ /** Human-readable name */
488
+ name?: string;
489
+ /** Creation timestamp */
490
+ createdAt?: Date;
491
+ /** Provider-specific metadata */
492
+ metadata?: Record<string, unknown>;
493
+ }
494
+ /**
495
+ * Options for creating a browser profile
496
+ */
497
+ interface CreateBrowserProfileOptions {
498
+ /** Human-readable name */
499
+ name?: string;
500
+ /** Custom metadata */
501
+ metadata?: Record<string, string>;
502
+ }
503
+ /**
504
+ * Browser extension
505
+ */
506
+ interface BrowserExtension {
507
+ /** Unique extension identifier */
508
+ extensionId: string;
509
+ /** Extension name */
510
+ name?: string;
511
+ }
512
+ /**
513
+ * Options for uploading/creating a browser extension
514
+ */
515
+ interface CreateBrowserExtensionOptions {
516
+ /** Extension file data */
517
+ file: Uint8Array | string;
518
+ /** Extension name */
519
+ name?: string;
520
+ }
521
+ /**
522
+ * Browser pool — pre-warmed browser instances for instant acquisition
523
+ */
524
+ interface BrowserPool {
525
+ /** Unique pool identifier */
526
+ poolId: string;
527
+ /** Pool name */
528
+ name?: string;
529
+ /** Number of idle instances ready */
530
+ idleCount?: number;
531
+ /** Number of active instances in use */
532
+ activeCount?: number;
533
+ }
534
+ /**
535
+ * Options for creating a browser pool
536
+ */
537
+ interface CreateBrowserPoolOptions {
538
+ /** Pool name */
539
+ name: string;
540
+ /** Desired number of pre-warmed instances */
541
+ size: number;
542
+ /** Default session options for pool instances */
543
+ sessionDefaults?: CreateBrowserSessionOptions;
544
+ }
545
+ /**
546
+ * Browser session log entry
547
+ */
548
+ interface BrowserLog {
549
+ /** Timestamp */
550
+ timestamp: Date;
551
+ /** Log level */
552
+ level: 'info' | 'warn' | 'error' | 'debug';
553
+ /** Log message */
554
+ message: string;
555
+ /** Additional structured data */
556
+ data?: Record<string, unknown>;
557
+ }
558
+ /**
559
+ * Browser session recording
560
+ */
561
+ interface BrowserRecording {
562
+ /** Recording identifier */
563
+ recordingId: string;
564
+ /** Session this recording belongs to */
565
+ sessionId: string;
566
+ /** Recording format */
567
+ format: 'rrweb' | 'mp4' | string;
568
+ /** URL to access the recording */
569
+ url?: string;
570
+ /** Raw recording data */
571
+ data?: unknown;
572
+ }
573
+ /**
574
+ * Screenshot options
575
+ */
576
+ interface ScreenshotOptions {
577
+ /** Image format */
578
+ format?: 'png' | 'jpeg' | 'webp';
579
+ /** Quality (0-100, for jpeg/webp) */
580
+ quality?: number;
581
+ /** Capture full scrollable page */
582
+ fullPage?: boolean;
583
+ /** CSS selector to capture */
584
+ selector?: string;
585
+ }
586
+ /**
587
+ * PDF generation options
588
+ */
589
+ interface PdfOptions {
590
+ /** Paper format */
591
+ format?: 'letter' | 'legal' | 'a4' | 'a3';
592
+ /** Print background graphics */
593
+ printBackground?: boolean;
594
+ /** Landscape orientation */
595
+ landscape?: boolean;
596
+ }
597
+ /**
598
+ * Browser session manager — core lifecycle operations
599
+ */
600
+ interface BrowserSessionManager<TSession = any> {
601
+ /** Create a new browser session */
602
+ create(options?: CreateBrowserSessionOptions): Promise<ProviderBrowserSession<TSession>>;
603
+ /** Get an existing session by ID */
604
+ getById(sessionId: string): Promise<ProviderBrowserSession<TSession> | null>;
605
+ /** List active sessions */
606
+ list(): Promise<ProviderBrowserSession<TSession>[]>;
607
+ /** Destroy/terminate a session */
608
+ destroy(sessionId: string): Promise<void>;
609
+ }
610
+ /**
611
+ * Browser profile manager
612
+ */
613
+ interface BrowserProfileManager {
614
+ /** Create a new profile */
615
+ create(options?: CreateBrowserProfileOptions): Promise<BrowserProfile>;
616
+ /** Get an existing profile */
617
+ get(profileId: string): Promise<BrowserProfile | null>;
618
+ /** List profiles */
619
+ list(): Promise<BrowserProfile[]>;
620
+ /** Delete a profile */
621
+ delete(profileId: string): Promise<void>;
622
+ }
623
+ /**
624
+ * Browser extension manager
625
+ */
626
+ interface BrowserExtensionManager {
627
+ /** Upload/create an extension */
628
+ create(options: CreateBrowserExtensionOptions): Promise<BrowserExtension>;
629
+ /** Get an extension by ID */
630
+ get(extensionId: string): Promise<BrowserExtension | null>;
631
+ /** Delete an extension */
632
+ delete(extensionId: string): Promise<void>;
633
+ }
634
+ /**
635
+ * Browser pool manager (pre-warmed instances)
636
+ */
637
+ interface BrowserPoolManager<TSession = any> {
638
+ /** Create a new pool */
639
+ create(options: CreateBrowserPoolOptions): Promise<BrowserPool>;
640
+ /** Get pool by ID */
641
+ get(poolId: string): Promise<BrowserPool | null>;
642
+ /** List pools */
643
+ list(): Promise<BrowserPool[]>;
644
+ /** Acquire a browser from the pool */
645
+ acquire(poolId: string): Promise<ProviderBrowserSession<TSession>>;
646
+ /** Release a browser back to the pool */
647
+ release(poolId: string, sessionId: string): Promise<void>;
648
+ /** Delete a pool */
649
+ delete(poolId: string): Promise<void>;
650
+ }
651
+ /**
652
+ * Browser log manager
653
+ */
654
+ interface BrowserLogManager {
655
+ /** Get logs for a session */
656
+ list(sessionId: string): Promise<BrowserLog[]>;
657
+ }
658
+ /**
659
+ * Browser recording manager
660
+ */
661
+ interface BrowserRecordingManager {
662
+ /** Get recording for a session */
663
+ get(sessionId: string): Promise<BrowserRecording | null>;
664
+ }
665
+ /**
666
+ * Browser page operations — native browser control (optional, provider-dependent)
667
+ */
668
+ interface BrowserPageOperations<TSession = any> {
669
+ /** Navigate to a URL */
670
+ navigate(session: TSession, url: string): Promise<void>;
671
+ /** Take a screenshot */
672
+ screenshot(session: TSession, options?: ScreenshotOptions): Promise<Uint8Array>;
673
+ /** Generate a PDF */
674
+ pdf?(session: TSession, options?: PdfOptions): Promise<Uint8Array>;
675
+ /** Evaluate JavaScript in the page context */
676
+ evaluate(session: TSession, script: string): Promise<unknown>;
677
+ /** Get the current page HTML */
678
+ getContent(session: TSession): Promise<string>;
679
+ }
680
+ /**
681
+ * Provider browser session — wraps raw session with provider methods
682
+ * Analogous to ProviderSandbox for sandbox providers.
683
+ */
684
+ interface ProviderBrowserSession<TSession = any> extends BrowserSession {
685
+ /** Get the provider that created this session */
686
+ getProvider(): BrowserProvider<TSession>;
687
+ /** Get the native provider session instance */
688
+ getInstance(): TSession;
689
+ /** Destroy this session */
690
+ destroy(): Promise<void>;
691
+ /** Take a screenshot (delegates to provider page ops or throws) */
692
+ screenshot(options?: ScreenshotOptions): Promise<Uint8Array>;
693
+ /** Get session logs */
694
+ getLogs(): Promise<BrowserLog[]>;
695
+ /** Get session recording */
696
+ getRecording(): Promise<BrowserRecording | null>;
697
+ }
698
+ /**
699
+ * Browser provider interface — creates and manages browser sessions
700
+ *
701
+ * This is the top-level interface for browser providers, analogous to
702
+ * the Provider interface for sandbox providers.
703
+ */
704
+ interface BrowserProvider<TSession = any> {
705
+ /** Provider name/type */
706
+ readonly name: string;
707
+ /** Session lifecycle management */
708
+ readonly session: BrowserSessionManager<TSession>;
709
+ /** Get CDP/WebSocket connection URL for a session */
710
+ getConnectUrl(sessionId: string): Promise<string>;
711
+ /** Optional profile management (Browserbase contexts, Kernel profiles) */
712
+ readonly profile?: BrowserProfileManager;
713
+ /** Optional extension management */
714
+ readonly extension?: BrowserExtensionManager;
715
+ /** Optional pool management (pre-warmed instances) */
716
+ readonly pool?: BrowserPoolManager<TSession>;
717
+ /** Optional log access */
718
+ readonly logs?: BrowserLogManager;
719
+ /** Optional recording access */
720
+ readonly recording?: BrowserRecordingManager;
721
+ /** Optional native page operations */
722
+ readonly page?: BrowserPageOperations<TSession>;
723
+ }
724
+
408
725
  /**
409
726
  * Provider Factory - Creates providers from method definitions
410
727
  *
@@ -706,6 +1023,134 @@ interface ComputeAPI<TInstance = any> {
706
1023
  */
707
1024
  declare function createCompute<TInstance = any>(config: CreateComputeConfig<TInstance>): ComputeAPI<TInstance>;
708
1025
 
1026
+ /**
1027
+ * Browser Provider Factory - Creates browser providers from method definitions
1028
+ *
1029
+ * Eliminates boilerplate by auto-generating BrowserProvider/Session classes
1030
+ * from simple method definitions with automatic feature detection.
1031
+ * Mirrors the sandbox provider factory pattern.
1032
+ */
1033
+
1034
+ /**
1035
+ * Session method implementations that provider authors supply
1036
+ */
1037
+ interface BrowserSessionMethods<TSession = any, TConfig = any> {
1038
+ create: (config: TConfig, options?: CreateBrowserSessionOptions) => Promise<{
1039
+ session: TSession;
1040
+ sessionId: string;
1041
+ connectUrl: string;
1042
+ status?: BrowserSession['status'];
1043
+ }>;
1044
+ getById: (config: TConfig, sessionId: string) => Promise<{
1045
+ session: TSession;
1046
+ sessionId: string;
1047
+ connectUrl: string;
1048
+ status?: BrowserSession['status'];
1049
+ } | null>;
1050
+ list: (config: TConfig) => Promise<Array<{
1051
+ session: TSession;
1052
+ sessionId: string;
1053
+ connectUrl: string;
1054
+ status?: BrowserSession['status'];
1055
+ }>>;
1056
+ destroy: (config: TConfig, sessionId: string) => Promise<void>;
1057
+ getConnectUrl: (config: TConfig, sessionId: string) => Promise<string>;
1058
+ }
1059
+ /**
1060
+ * Profile method implementations
1061
+ */
1062
+ interface BrowserProfileMethods<TConfig = any> {
1063
+ create: (config: TConfig, options?: CreateBrowserProfileOptions) => Promise<BrowserProfile>;
1064
+ get: (config: TConfig, profileId: string) => Promise<BrowserProfile | null>;
1065
+ list: (config: TConfig) => Promise<BrowserProfile[]>;
1066
+ delete: (config: TConfig, profileId: string) => Promise<void>;
1067
+ }
1068
+ /**
1069
+ * Extension method implementations
1070
+ */
1071
+ interface BrowserExtensionMethods<TConfig = any> {
1072
+ create: (config: TConfig, options: CreateBrowserExtensionOptions) => Promise<BrowserExtension>;
1073
+ get: (config: TConfig, extensionId: string) => Promise<BrowserExtension | null>;
1074
+ delete: (config: TConfig, extensionId: string) => Promise<void>;
1075
+ }
1076
+ /**
1077
+ * Pool method implementations
1078
+ */
1079
+ interface BrowserPoolMethods<TSession = any, TConfig = any> {
1080
+ create: (config: TConfig, options: CreateBrowserPoolOptions) => Promise<BrowserPool>;
1081
+ get: (config: TConfig, poolId: string) => Promise<BrowserPool | null>;
1082
+ list: (config: TConfig) => Promise<BrowserPool[]>;
1083
+ acquire: (config: TConfig, poolId: string) => Promise<{
1084
+ session: TSession;
1085
+ sessionId: string;
1086
+ connectUrl: string;
1087
+ }>;
1088
+ release: (config: TConfig, poolId: string, sessionId: string) => Promise<void>;
1089
+ delete: (config: TConfig, poolId: string) => Promise<void>;
1090
+ }
1091
+ /**
1092
+ * Log method implementations
1093
+ */
1094
+ interface BrowserLogMethods<TConfig = any> {
1095
+ list: (config: TConfig, sessionId: string) => Promise<BrowserLog[]>;
1096
+ }
1097
+ /**
1098
+ * Recording method implementations
1099
+ */
1100
+ interface BrowserRecordingMethods<TConfig = any> {
1101
+ get: (config: TConfig, sessionId: string) => Promise<BrowserRecording | null>;
1102
+ }
1103
+ /**
1104
+ * Page operation method implementations
1105
+ */
1106
+ interface BrowserPageMethods<TSession = any> {
1107
+ navigate: (session: TSession, url: string) => Promise<void>;
1108
+ screenshot: (session: TSession, options?: ScreenshotOptions) => Promise<Uint8Array>;
1109
+ pdf?: (session: TSession, options?: PdfOptions) => Promise<Uint8Array>;
1110
+ evaluate: (session: TSession, script: string) => Promise<unknown>;
1111
+ getContent: (session: TSession) => Promise<string>;
1112
+ }
1113
+ /**
1114
+ * Full browser provider configuration for defineBrowserProvider()
1115
+ */
1116
+ interface BrowserProviderConfig<TSession = any, TConfig = any> {
1117
+ name: string;
1118
+ methods: {
1119
+ session: BrowserSessionMethods<TSession, TConfig>;
1120
+ profile?: BrowserProfileMethods<TConfig>;
1121
+ extension?: BrowserExtensionMethods<TConfig>;
1122
+ pool?: BrowserPoolMethods<TSession, TConfig>;
1123
+ logs?: BrowserLogMethods<TConfig>;
1124
+ recording?: BrowserRecordingMethods<TConfig>;
1125
+ page?: BrowserPageMethods<TSession>;
1126
+ };
1127
+ }
1128
+ /**
1129
+ * Create a browser provider from method definitions
1130
+ *
1131
+ * Auto-generates all boilerplate classes and provides feature detection
1132
+ * based on which methods are implemented.
1133
+ *
1134
+ * @example
1135
+ * ```ts
1136
+ * export const browserbase = defineBrowserProvider<BrowserbaseSession, BrowserbaseConfig>({
1137
+ * name: 'browserbase',
1138
+ * methods: {
1139
+ * session: { create, getById, list, destroy, getConnectUrl },
1140
+ * profile: { create, get, list, delete },
1141
+ * logs: { list: getLogs },
1142
+ * recording: { get: getRecording },
1143
+ * },
1144
+ * });
1145
+ *
1146
+ * // Usage:
1147
+ * const provider = browserbase({ apiKey: 'bb_...' });
1148
+ * const session = await provider.session.create({ stealth: true });
1149
+ * console.log(session.connectUrl);
1150
+ * ```
1151
+ */
1152
+ declare function defineBrowserProvider<TSession, TConfig = any>(providerConfig: BrowserProviderConfig<TSession, TConfig>): (config: TConfig) => BrowserProvider<TSession>;
1153
+
709
1154
  /**
710
1155
  * Utility functions for ComputeSDK
711
1156
  */
@@ -755,4 +1200,4 @@ declare function calculateBackoff(attempt: number, baseDelay?: number, jitterMax
755
1200
  */
756
1201
  declare function escapeShellArg(arg: string): string;
757
1202
 
758
- export { type BlaxelProviderConfig, type CloudflareProviderConfig, type CodesandboxProviderConfig, type ComputeAPI, type ComputeConfig, type ComputeFactoryConfig, type CreateComputeConfig, type CreateSandboxParams, type CreateSandboxParamsWithOptionalProvider, type CreateSnapshotOptions, type CreateTemplateOptions, type DaemonConfig, type DaytonaProviderConfig, type DownloadResult, type E2BProviderConfig, type ExtendTimeoutOptions, type ExtractProviderSandboxType, type FindOrCreateSandboxOptions, type FindSandboxOptions, type InfraProvider, type InfraProviderConfig, type InfraProviderMethods, type ListOptions, type ListResult, type ListSnapshotsOptions, type ListTemplatesOptions, type ModalProviderConfig, type Provider, type ProviderConfig, type ProviderSandbox, type ProviderSandboxManager, type ProviderSnapshotManager, type ProviderTemplateManager, type RailwayProviderConfig, type RunloopProviderConfig, type SandboxMethods, type SnapshotMethods, type StorageObject, type StorageProvider, type TemplateMethods, type TypedComputeAPI, type TypedProviderSandbox, type UploadOptions, type VercelProviderConfig, calculateBackoff, createCompute, defineCompute, defineInfraProvider, defineProvider, escapeShellArg };
1203
+ export { type BlaxelProviderConfig, type BrowserExtension, type BrowserExtensionManager, type BrowserExtensionMethods, type BrowserLog, type BrowserLogManager, type BrowserLogMethods, type BrowserPageMethods, type BrowserPageOperations, type BrowserPool, type BrowserPoolManager, type BrowserPoolMethods, type BrowserProfile, type BrowserProfileManager, type BrowserProfileMethods, type BrowserProvider, type BrowserProviderConfig, type BrowserRecording, type BrowserRecordingManager, type BrowserRecordingMethods, type BrowserSession, type BrowserSessionManager, type BrowserSessionMethods, type CloudflareProviderConfig, type CodesandboxProviderConfig, type ComputeAPI, type ComputeConfig, type ComputeFactoryConfig, type CreateBrowserExtensionOptions, type CreateBrowserPoolOptions, type CreateBrowserProfileOptions, type CreateBrowserSessionOptions, type CreateComputeConfig, type CreateSandboxParams, type CreateSandboxParamsWithOptionalProvider, type CreateSnapshotOptions, type CreateTemplateOptions, type DaemonConfig, type DaytonaProviderConfig, type DownloadResult, type E2BProviderConfig, type ExtendTimeoutOptions, type ExtractProviderSandboxType, type FindOrCreateSandboxOptions, type FindSandboxOptions, type InfraProvider, type InfraProviderConfig, type InfraProviderMethods, type ListOptions, type ListResult, type ListSnapshotsOptions, type ListTemplatesOptions, type ModalProviderConfig, type PdfOptions, type Provider, type ProviderBrowserSession, type ProviderConfig, type ProviderSandbox, type ProviderSandboxManager, type ProviderSnapshotManager, type ProviderTemplateManager, type ProxyConfig, type RailwayProviderConfig, type RunloopProviderConfig, type SandboxMethods, type ScreenshotOptions, type SnapshotMethods, type StorageObject, type StorageProvider, type TemplateMethods, type TypedComputeAPI, type TypedProviderSandbox, type UploadOptions, type VercelProviderConfig, calculateBackoff, createCompute, defineBrowserProvider, defineCompute, defineInfraProvider, defineProvider, escapeShellArg };