stagehand 0.0.4 → 3.5.2

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.
Files changed (148) hide show
  1. checksums.yaml +7 -0
  2. data/.ignore +2 -0
  3. data/CHANGELOG.md +185 -0
  4. data/README.md +394 -31
  5. data/SECURITY.md +23 -0
  6. data/lib/stagehand/client.rb +123 -4
  7. data/lib/stagehand/errors.rb +228 -0
  8. data/lib/stagehand/file_part.rb +58 -0
  9. data/lib/stagehand/internal/stream.rb +56 -0
  10. data/lib/stagehand/internal/transport/base_client.rb +575 -0
  11. data/lib/stagehand/internal/transport/pooled_net_requester.rb +210 -0
  12. data/lib/stagehand/internal/type/array_of.rb +168 -0
  13. data/lib/stagehand/internal/type/base_model.rb +531 -0
  14. data/lib/stagehand/internal/type/base_page.rb +55 -0
  15. data/lib/stagehand/internal/type/base_stream.rb +83 -0
  16. data/lib/stagehand/internal/type/boolean.rb +77 -0
  17. data/lib/stagehand/internal/type/converter.rb +327 -0
  18. data/lib/stagehand/internal/type/enum.rb +131 -0
  19. data/lib/stagehand/internal/type/file_input.rb +111 -0
  20. data/lib/stagehand/internal/type/hash_of.rb +188 -0
  21. data/lib/stagehand/internal/type/request_parameters.rb +42 -0
  22. data/lib/stagehand/internal/type/union.rb +237 -0
  23. data/lib/stagehand/internal/type/unknown.rb +81 -0
  24. data/lib/stagehand/internal/util.rb +920 -0
  25. data/lib/stagehand/internal.rb +20 -0
  26. data/lib/stagehand/local.rb +439 -0
  27. data/lib/stagehand/models/action.rb +50 -0
  28. data/lib/stagehand/models/model_config.rb +55 -0
  29. data/lib/stagehand/models/session_act_params.rb +112 -0
  30. data/lib/stagehand/models/session_act_response.rb +127 -0
  31. data/lib/stagehand/models/session_end_params.rb +33 -0
  32. data/lib/stagehand/models/session_end_response.rb +17 -0
  33. data/lib/stagehand/models/session_execute_params.rb +212 -0
  34. data/lib/stagehand/models/session_execute_response.rb +212 -0
  35. data/lib/stagehand/models/session_extract_params.rb +107 -0
  36. data/lib/stagehand/models/session_extract_response.rb +46 -0
  37. data/lib/stagehand/models/session_navigate_params.rb +107 -0
  38. data/lib/stagehand/models/session_navigate_response.rb +44 -0
  39. data/lib/stagehand/models/session_observe_params.rb +99 -0
  40. data/lib/stagehand/models/session_observe_response.rb +91 -0
  41. data/lib/stagehand/models/session_replay_params.rb +33 -0
  42. data/lib/stagehand/models/session_replay_response.rb +100 -0
  43. data/lib/stagehand/models/session_start_params.rb +762 -0
  44. data/lib/stagehand/models/session_start_response.rb +55 -0
  45. data/lib/stagehand/models/stream_event.rb +120 -0
  46. data/lib/stagehand/models.rb +63 -0
  47. data/lib/stagehand/request_options.rb +77 -0
  48. data/lib/stagehand/resources/sessions.rb +488 -0
  49. data/lib/stagehand/version.rb +3 -1
  50. data/lib/stagehand.rb +74 -29
  51. data/manifest.yaml +17 -0
  52. data/rbi/stagehand/client.rbi +89 -0
  53. data/rbi/stagehand/errors.rbi +205 -0
  54. data/rbi/stagehand/file_part.rbi +37 -0
  55. data/rbi/stagehand/internal/stream.rbi +20 -0
  56. data/rbi/stagehand/internal/transport/base_client.rbi +314 -0
  57. data/rbi/stagehand/internal/transport/pooled_net_requester.rbi +83 -0
  58. data/rbi/stagehand/internal/type/array_of.rbi +104 -0
  59. data/rbi/stagehand/internal/type/base_model.rbi +308 -0
  60. data/rbi/stagehand/internal/type/base_page.rbi +42 -0
  61. data/rbi/stagehand/internal/type/base_stream.rbi +75 -0
  62. data/rbi/stagehand/internal/type/boolean.rbi +58 -0
  63. data/rbi/stagehand/internal/type/converter.rbi +216 -0
  64. data/rbi/stagehand/internal/type/enum.rbi +82 -0
  65. data/rbi/stagehand/internal/type/file_input.rbi +59 -0
  66. data/rbi/stagehand/internal/type/hash_of.rbi +104 -0
  67. data/rbi/stagehand/internal/type/request_parameters.rbi +29 -0
  68. data/rbi/stagehand/internal/type/union.rbi +128 -0
  69. data/rbi/stagehand/internal/type/unknown.rbi +58 -0
  70. data/rbi/stagehand/internal/util.rbi +487 -0
  71. data/rbi/stagehand/internal.rbi +18 -0
  72. data/rbi/stagehand/models/action.rbi +77 -0
  73. data/rbi/stagehand/models/model_config.rbi +94 -0
  74. data/rbi/stagehand/models/session_act_params.rbi +204 -0
  75. data/rbi/stagehand/models/session_act_response.rbi +250 -0
  76. data/rbi/stagehand/models/session_end_params.rbi +87 -0
  77. data/rbi/stagehand/models/session_end_response.rbi +30 -0
  78. data/rbi/stagehand/models/session_execute_params.rbi +440 -0
  79. data/rbi/stagehand/models/session_execute_response.rbi +414 -0
  80. data/rbi/stagehand/models/session_extract_params.rbi +209 -0
  81. data/rbi/stagehand/models/session_extract_response.rbi +91 -0
  82. data/rbi/stagehand/models/session_navigate_params.rbi +240 -0
  83. data/rbi/stagehand/models/session_navigate_response.rbi +91 -0
  84. data/rbi/stagehand/models/session_observe_params.rbi +198 -0
  85. data/rbi/stagehand/models/session_observe_response.rbi +184 -0
  86. data/rbi/stagehand/models/session_replay_params.rbi +89 -0
  87. data/rbi/stagehand/models/session_replay_response.rbi +286 -0
  88. data/rbi/stagehand/models/session_start_params.rbi +1703 -0
  89. data/rbi/stagehand/models/session_start_response.rbi +102 -0
  90. data/rbi/stagehand/models/stream_event.rbi +237 -0
  91. data/rbi/stagehand/models.rbi +25 -0
  92. data/rbi/stagehand/request_options.rbi +59 -0
  93. data/rbi/stagehand/resources/sessions.rbi +421 -0
  94. data/rbi/stagehand/version.rbi +5 -0
  95. data/sig/stagehand/client.rbs +41 -0
  96. data/sig/stagehand/errors.rbs +117 -0
  97. data/sig/stagehand/file_part.rbs +21 -0
  98. data/sig/stagehand/internal/stream.rbs +9 -0
  99. data/sig/stagehand/internal/transport/base_client.rbs +133 -0
  100. data/sig/stagehand/internal/transport/pooled_net_requester.rbs +48 -0
  101. data/sig/stagehand/internal/type/array_of.rbs +48 -0
  102. data/sig/stagehand/internal/type/base_model.rbs +102 -0
  103. data/sig/stagehand/internal/type/base_page.rbs +24 -0
  104. data/sig/stagehand/internal/type/base_stream.rbs +38 -0
  105. data/sig/stagehand/internal/type/boolean.rbs +26 -0
  106. data/sig/stagehand/internal/type/converter.rbs +79 -0
  107. data/sig/stagehand/internal/type/enum.rbs +32 -0
  108. data/sig/stagehand/internal/type/file_input.rbs +25 -0
  109. data/sig/stagehand/internal/type/hash_of.rbs +48 -0
  110. data/sig/stagehand/internal/type/request_parameters.rbs +19 -0
  111. data/sig/stagehand/internal/type/union.rbs +52 -0
  112. data/sig/stagehand/internal/type/unknown.rbs +26 -0
  113. data/sig/stagehand/internal/util.rbs +185 -0
  114. data/sig/stagehand/internal.rbs +9 -0
  115. data/sig/stagehand/models/action.rbs +46 -0
  116. data/sig/stagehand/models/model_config.rbs +56 -0
  117. data/sig/stagehand/models/session_act_params.rbs +111 -0
  118. data/sig/stagehand/models/session_act_response.rbs +121 -0
  119. data/sig/stagehand/models/session_end_params.rbs +41 -0
  120. data/sig/stagehand/models/session_end_response.rbs +13 -0
  121. data/sig/stagehand/models/session_execute_params.rbs +193 -0
  122. data/sig/stagehand/models/session_execute_response.rbs +215 -0
  123. data/sig/stagehand/models/session_extract_params.rbs +112 -0
  124. data/sig/stagehand/models/session_extract_response.rbs +36 -0
  125. data/sig/stagehand/models/session_navigate_params.rbs +114 -0
  126. data/sig/stagehand/models/session_navigate_response.rbs +36 -0
  127. data/sig/stagehand/models/session_observe_params.rbs +105 -0
  128. data/sig/stagehand/models/session_observe_response.rbs +89 -0
  129. data/sig/stagehand/models/session_replay_params.rbs +41 -0
  130. data/sig/stagehand/models/session_replay_response.rbs +137 -0
  131. data/sig/stagehand/models/session_start_params.rbs +866 -0
  132. data/sig/stagehand/models/session_start_response.rbs +44 -0
  133. data/sig/stagehand/models/stream_event.rbs +109 -0
  134. data/sig/stagehand/models.rbs +23 -0
  135. data/sig/stagehand/request_options.rbs +34 -0
  136. data/sig/stagehand/resources/sessions.rbs +121 -0
  137. data/sig/stagehand/version.rbs +3 -0
  138. metadata +170 -54
  139. data/.gitignore +0 -16
  140. data/Gemfile +0 -4
  141. data/Rakefile +0 -10
  142. data/lib/stagehand/client/oauth.rb +0 -32
  143. data/lib/stagehand/client/user.rb +0 -10
  144. data/lib/stagehand/rack/middleware.rb +0 -33
  145. data/lib/stagehand/railtie.rb +0 -19
  146. data/spec/spec_helper.rb +0 -7
  147. data/spec/stagehand_spec.rb +0 -44
  148. data/stagehand.gemspec +0 -25
@@ -0,0 +1,102 @@
1
+ # typed: strong
2
+
3
+ module Stagehand
4
+ module Models
5
+ class SessionStartResponse < Stagehand::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(
9
+ Stagehand::Models::SessionStartResponse,
10
+ Stagehand::Internal::AnyHash
11
+ )
12
+ end
13
+
14
+ sig { returns(Stagehand::Models::SessionStartResponse::Data) }
15
+ attr_reader :data
16
+
17
+ sig do
18
+ params(data: Stagehand::Models::SessionStartResponse::Data::OrHash).void
19
+ end
20
+ attr_writer :data
21
+
22
+ # Indicates whether the request was successful
23
+ sig { returns(T::Boolean) }
24
+ attr_accessor :success
25
+
26
+ sig do
27
+ params(
28
+ data: Stagehand::Models::SessionStartResponse::Data::OrHash,
29
+ success: T::Boolean
30
+ ).returns(T.attached_class)
31
+ end
32
+ def self.new(
33
+ data:,
34
+ # Indicates whether the request was successful
35
+ success:
36
+ )
37
+ end
38
+
39
+ sig do
40
+ override.returns(
41
+ {
42
+ data: Stagehand::Models::SessionStartResponse::Data,
43
+ success: T::Boolean
44
+ }
45
+ )
46
+ end
47
+ def to_hash
48
+ end
49
+
50
+ class Data < Stagehand::Internal::Type::BaseModel
51
+ OrHash =
52
+ T.type_alias do
53
+ T.any(
54
+ Stagehand::Models::SessionStartResponse::Data,
55
+ Stagehand::Internal::AnyHash
56
+ )
57
+ end
58
+
59
+ sig { returns(T::Boolean) }
60
+ attr_accessor :available
61
+
62
+ # Unique Browserbase session identifier
63
+ sig { returns(String) }
64
+ attr_accessor :session_id
65
+
66
+ # CDP WebSocket URL for connecting to the Browserbase cloud browser (present when
67
+ # available)
68
+ sig { returns(T.nilable(String)) }
69
+ attr_accessor :cdp_url
70
+
71
+ sig do
72
+ params(
73
+ available: T::Boolean,
74
+ session_id: String,
75
+ cdp_url: T.nilable(String)
76
+ ).returns(T.attached_class)
77
+ end
78
+ def self.new(
79
+ available:,
80
+ # Unique Browserbase session identifier
81
+ session_id:,
82
+ # CDP WebSocket URL for connecting to the Browserbase cloud browser (present when
83
+ # available)
84
+ cdp_url: nil
85
+ )
86
+ end
87
+
88
+ sig do
89
+ override.returns(
90
+ {
91
+ available: T::Boolean,
92
+ session_id: String,
93
+ cdp_url: T.nilable(String)
94
+ }
95
+ )
96
+ end
97
+ def to_hash
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,237 @@
1
+ # typed: strong
2
+
3
+ module Stagehand
4
+ module Models
5
+ class StreamEvent < Stagehand::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(Stagehand::StreamEvent, Stagehand::Internal::AnyHash)
9
+ end
10
+
11
+ # Unique identifier for this event
12
+ sig { returns(String) }
13
+ attr_accessor :id
14
+
15
+ sig { returns(Stagehand::StreamEvent::Data::Variants) }
16
+ attr_accessor :data
17
+
18
+ # Type of stream event - system events or log messages
19
+ sig { returns(Stagehand::StreamEvent::Type::TaggedSymbol) }
20
+ attr_accessor :type
21
+
22
+ # Server-Sent Event emitted during streaming responses. Events are sent as
23
+ # `data: <JSON>\n\n`. Key order: data (with status first), type, id.
24
+ sig do
25
+ params(
26
+ id: String,
27
+ data:
28
+ T.any(
29
+ Stagehand::StreamEvent::Data::StreamEventSystemDataOutput::OrHash,
30
+ Stagehand::StreamEvent::Data::StreamEventLogDataOutput::OrHash
31
+ ),
32
+ type: Stagehand::StreamEvent::Type::OrSymbol
33
+ ).returns(T.attached_class)
34
+ end
35
+ def self.new(
36
+ # Unique identifier for this event
37
+ id:,
38
+ data:,
39
+ # Type of stream event - system events or log messages
40
+ type:
41
+ )
42
+ end
43
+
44
+ sig do
45
+ override.returns(
46
+ {
47
+ id: String,
48
+ data: Stagehand::StreamEvent::Data::Variants,
49
+ type: Stagehand::StreamEvent::Type::TaggedSymbol
50
+ }
51
+ )
52
+ end
53
+ def to_hash
54
+ end
55
+
56
+ module Data
57
+ extend Stagehand::Internal::Type::Union
58
+
59
+ Variants =
60
+ T.type_alias do
61
+ T.any(
62
+ Stagehand::StreamEvent::Data::StreamEventSystemDataOutput,
63
+ Stagehand::StreamEvent::Data::StreamEventLogDataOutput
64
+ )
65
+ end
66
+
67
+ class StreamEventSystemDataOutput < Stagehand::Internal::Type::BaseModel
68
+ OrHash =
69
+ T.type_alias do
70
+ T.any(
71
+ Stagehand::StreamEvent::Data::StreamEventSystemDataOutput,
72
+ Stagehand::Internal::AnyHash
73
+ )
74
+ end
75
+
76
+ # Current status of the streaming operation
77
+ sig do
78
+ returns(
79
+ Stagehand::StreamEvent::Data::StreamEventSystemDataOutput::Status::TaggedSymbol
80
+ )
81
+ end
82
+ attr_accessor :status
83
+
84
+ # Error message (present when status is 'error')
85
+ sig { returns(T.nilable(String)) }
86
+ attr_reader :error
87
+
88
+ sig { params(error: String).void }
89
+ attr_writer :error
90
+
91
+ # Operation result (present when status is 'finished')
92
+ sig { returns(T.nilable(T.anything)) }
93
+ attr_reader :result
94
+
95
+ sig { params(result: T.anything).void }
96
+ attr_writer :result
97
+
98
+ sig do
99
+ params(
100
+ status:
101
+ Stagehand::StreamEvent::Data::StreamEventSystemDataOutput::Status::OrSymbol,
102
+ error: String,
103
+ result: T.anything
104
+ ).returns(T.attached_class)
105
+ end
106
+ def self.new(
107
+ # Current status of the streaming operation
108
+ status:,
109
+ # Error message (present when status is 'error')
110
+ error: nil,
111
+ # Operation result (present when status is 'finished')
112
+ result: nil
113
+ )
114
+ end
115
+
116
+ sig do
117
+ override.returns(
118
+ {
119
+ status:
120
+ Stagehand::StreamEvent::Data::StreamEventSystemDataOutput::Status::TaggedSymbol,
121
+ error: String,
122
+ result: T.anything
123
+ }
124
+ )
125
+ end
126
+ def to_hash
127
+ end
128
+
129
+ # Current status of the streaming operation
130
+ module Status
131
+ extend Stagehand::Internal::Type::Enum
132
+
133
+ TaggedSymbol =
134
+ T.type_alias do
135
+ T.all(
136
+ Symbol,
137
+ Stagehand::StreamEvent::Data::StreamEventSystemDataOutput::Status
138
+ )
139
+ end
140
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
141
+
142
+ STARTING =
143
+ T.let(
144
+ :starting,
145
+ Stagehand::StreamEvent::Data::StreamEventSystemDataOutput::Status::TaggedSymbol
146
+ )
147
+ CONNECTED =
148
+ T.let(
149
+ :connected,
150
+ Stagehand::StreamEvent::Data::StreamEventSystemDataOutput::Status::TaggedSymbol
151
+ )
152
+ RUNNING =
153
+ T.let(
154
+ :running,
155
+ Stagehand::StreamEvent::Data::StreamEventSystemDataOutput::Status::TaggedSymbol
156
+ )
157
+ FINISHED =
158
+ T.let(
159
+ :finished,
160
+ Stagehand::StreamEvent::Data::StreamEventSystemDataOutput::Status::TaggedSymbol
161
+ )
162
+ ERROR =
163
+ T.let(
164
+ :error,
165
+ Stagehand::StreamEvent::Data::StreamEventSystemDataOutput::Status::TaggedSymbol
166
+ )
167
+
168
+ sig do
169
+ override.returns(
170
+ T::Array[
171
+ Stagehand::StreamEvent::Data::StreamEventSystemDataOutput::Status::TaggedSymbol
172
+ ]
173
+ )
174
+ end
175
+ def self.values
176
+ end
177
+ end
178
+ end
179
+
180
+ class StreamEventLogDataOutput < Stagehand::Internal::Type::BaseModel
181
+ OrHash =
182
+ T.type_alias do
183
+ T.any(
184
+ Stagehand::StreamEvent::Data::StreamEventLogDataOutput,
185
+ Stagehand::Internal::AnyHash
186
+ )
187
+ end
188
+
189
+ # Log message from the operation
190
+ sig { returns(String) }
191
+ attr_accessor :message
192
+
193
+ sig { returns(Symbol) }
194
+ attr_accessor :status
195
+
196
+ sig do
197
+ params(message: String, status: Symbol).returns(T.attached_class)
198
+ end
199
+ def self.new(
200
+ # Log message from the operation
201
+ message:,
202
+ status: :running
203
+ )
204
+ end
205
+
206
+ sig { override.returns({ message: String, status: Symbol }) }
207
+ def to_hash
208
+ end
209
+ end
210
+
211
+ sig do
212
+ override.returns(T::Array[Stagehand::StreamEvent::Data::Variants])
213
+ end
214
+ def self.variants
215
+ end
216
+ end
217
+
218
+ # Type of stream event - system events or log messages
219
+ module Type
220
+ extend Stagehand::Internal::Type::Enum
221
+
222
+ TaggedSymbol =
223
+ T.type_alias { T.all(Symbol, Stagehand::StreamEvent::Type) }
224
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
225
+
226
+ SYSTEM = T.let(:system, Stagehand::StreamEvent::Type::TaggedSymbol)
227
+ LOG = T.let(:log, Stagehand::StreamEvent::Type::TaggedSymbol)
228
+
229
+ sig do
230
+ override.returns(T::Array[Stagehand::StreamEvent::Type::TaggedSymbol])
231
+ end
232
+ def self.values
233
+ end
234
+ end
235
+ end
236
+ end
237
+ end
@@ -0,0 +1,25 @@
1
+ # typed: strong
2
+
3
+ module Stagehand
4
+ Action = Stagehand::Models::Action
5
+
6
+ ModelConfig = Stagehand::Models::ModelConfig
7
+
8
+ SessionActParams = Stagehand::Models::SessionActParams
9
+
10
+ SessionEndParams = Stagehand::Models::SessionEndParams
11
+
12
+ SessionExecuteParams = Stagehand::Models::SessionExecuteParams
13
+
14
+ SessionExtractParams = Stagehand::Models::SessionExtractParams
15
+
16
+ SessionNavigateParams = Stagehand::Models::SessionNavigateParams
17
+
18
+ SessionObserveParams = Stagehand::Models::SessionObserveParams
19
+
20
+ SessionReplayParams = Stagehand::Models::SessionReplayParams
21
+
22
+ SessionStartParams = Stagehand::Models::SessionStartParams
23
+
24
+ StreamEvent = Stagehand::Models::StreamEvent
25
+ end
@@ -0,0 +1,59 @@
1
+ # typed: strong
2
+
3
+ module Stagehand
4
+ # Specify HTTP behaviour to use for a specific request. These options supplement
5
+ # or override those provided at the client level.
6
+ #
7
+ # When making a request, you can pass an actual {RequestOptions} instance, or
8
+ # simply pass a Hash with symbol keys matching the attributes on this class.
9
+ class RequestOptions < Stagehand::Internal::Type::BaseModel
10
+ OrHash =
11
+ T.type_alias do
12
+ T.any(Stagehand::RequestOptions, Stagehand::Internal::AnyHash)
13
+ end
14
+
15
+ # @api private
16
+ sig { params(opts: Stagehand::RequestOptions::OrHash).void }
17
+ def self.validate!(opts)
18
+ end
19
+
20
+ # Idempotency key to send with request and all associated retries. Will only be
21
+ # sent for write requests.
22
+ sig { returns(T.nilable(String)) }
23
+ attr_accessor :idempotency_key
24
+
25
+ # Extra query params to send with the request. These are `.merge`’d into any
26
+ # `query` given at the client level.
27
+ sig do
28
+ returns(
29
+ T.nilable(T::Hash[String, T.nilable(T.any(T::Array[String], String))])
30
+ )
31
+ end
32
+ attr_accessor :extra_query
33
+
34
+ # Extra headers to send with the request. These are `.merged`’d into any
35
+ # `extra_headers` given at the client level.
36
+ sig { returns(T.nilable(T::Hash[String, T.nilable(String)])) }
37
+ attr_accessor :extra_headers
38
+
39
+ # Extra data to send with the request. These are deep merged into any data
40
+ # generated as part of the normal request.
41
+ sig { returns(T.nilable(T.anything)) }
42
+ attr_accessor :extra_body
43
+
44
+ # Maximum number of retries to attempt after a failed initial request.
45
+ sig { returns(T.nilable(Integer)) }
46
+ attr_accessor :max_retries
47
+
48
+ # Request timeout in seconds.
49
+ sig { returns(T.nilable(Float)) }
50
+ attr_accessor :timeout
51
+
52
+ # Returns a new instance of RequestOptions.
53
+ sig do
54
+ params(values: Stagehand::Internal::AnyHash).returns(T.attached_class)
55
+ end
56
+ def self.new(values = {})
57
+ end
58
+ end
59
+ end