bidi2pdf 0.1.0 → 0.1.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +41 -1
- data/README.md +31 -0
- data/Rakefile +2 -0
- data/cliff.toml +114 -0
- data/docker/Dockerfile.chromedriver +33 -0
- data/docker/docker-compose.yml +24 -0
- data/docker/entrypoint.sh +3 -0
- data/docker/nginx/default.conf +42 -0
- data/docker/nginx/htpasswd +1 -0
- data/lib/bidi2pdf/bidi/add_headers_interceptor.rb +1 -1
- data/lib/bidi2pdf/bidi/auth_interceptor.rb +1 -1
- data/lib/bidi2pdf/bidi/client.rb +55 -140
- data/lib/bidi2pdf/bidi/command_manager.rb +82 -0
- data/lib/bidi2pdf/bidi/connection_manager.rb +34 -0
- data/lib/bidi2pdf/bidi/session.rb +26 -9
- data/lib/bidi2pdf/chromedriver_manager.rb +50 -6
- data/lib/bidi2pdf/cli.rb +147 -18
- data/lib/bidi2pdf/launcher.rb +19 -6
- data/lib/bidi2pdf/process_tree.rb +71 -0
- data/lib/bidi2pdf/session_runner.rb +5 -5
- data/lib/bidi2pdf/version.rb +1 -1
- data/lib/bidi2pdf.rb +1 -0
- data/sig/bidi2pdf/bidi/add_headers_interceptor.rbs +20 -0
- data/sig/bidi2pdf/bidi/auth_interceptor.rbs +17 -0
- data/sig/bidi2pdf/bidi/browser.rbs +38 -0
- data/sig/bidi2pdf/bidi/browser_tab.rbs +42 -0
- data/sig/bidi2pdf/bidi/client.rbs +72 -0
- data/sig/bidi2pdf/bidi/event_manager.rbs +29 -0
- data/sig/bidi2pdf/bidi/network_event.rbs +51 -0
- data/sig/bidi2pdf/bidi/network_events.rbs +55 -0
- data/sig/bidi2pdf/bidi/print_parameters_validator.rbs +44 -0
- data/sig/bidi2pdf/bidi/session.rbs +52 -0
- data/sig/bidi2pdf/bidi/user_context.rbs +50 -0
- data/sig/bidi2pdf/bidi/web_socket_dispatcher.rbs +53 -0
- data/sig/bidi2pdf/chromedriver_manager.rbs +42 -0
- data/sig/bidi2pdf/cli.rbs +21 -0
- data/sig/bidi2pdf/launcher.rbs +38 -0
- data/sig/bidi2pdf/process_tree.rbs +27 -0
- data/sig/bidi2pdf/session_runner.rbs +51 -0
- data/sig/bidi2pdf/utils.rbs +5 -0
- data/sig/vendor/thor.rbs +13 -0
- data/tasks/changelog.rake +29 -0
- data/tasks/generate_rbs.rake +64 -0
- metadata +65 -8
@@ -0,0 +1,20 @@
|
|
1
|
+
module Bidi2pdf
|
2
|
+
module Bidi
|
3
|
+
class AddHeadersInterceptor
|
4
|
+
@id: String
|
5
|
+
@client: untyped
|
6
|
+
@headers: Hash[String, String]
|
7
|
+
|
8
|
+
attr_reader id: String
|
9
|
+
attr_reader headers: Hash[String, String]
|
10
|
+
|
11
|
+
def initialize: (String id, Hash[String, String] headers, untyped client) -> void
|
12
|
+
|
13
|
+
def handle_event: (Hash[String, untyped] response) -> (nil | untyped)
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
attr_reader client: untyped
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Bidi2pdf
|
2
|
+
module Bidi
|
3
|
+
class AuthInterceptor
|
4
|
+
@credentials: Hash[Symbol, String]?
|
5
|
+
|
6
|
+
def initialize: (?credentials: Hash[Symbol, String]?) -> void
|
7
|
+
|
8
|
+
def intercept: (untyped request) -> untyped
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def add_auth_header: (untyped request) -> void
|
13
|
+
|
14
|
+
def auth_header_value: () -> String?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Bidi2pdf
|
2
|
+
module Bidi
|
3
|
+
class Browser
|
4
|
+
@url: String
|
5
|
+
@chromedriver_manager: Bidi2pdf::ChromedriverManager
|
6
|
+
@browser: untyped
|
7
|
+
@timeout: Integer
|
8
|
+
@debug: bool
|
9
|
+
|
10
|
+
attr_reader browser: untyped
|
11
|
+
attr_reader timeout: Integer
|
12
|
+
|
13
|
+
def initialize: (
|
14
|
+
url: String,
|
15
|
+
chromedriver_manager: Bidi2pdf::ChromedriverManager,
|
16
|
+
?timeout: Integer,
|
17
|
+
?debug: bool
|
18
|
+
) -> void
|
19
|
+
|
20
|
+
def navigate: (?reload: bool) -> void
|
21
|
+
|
22
|
+
def current_url: -> String
|
23
|
+
|
24
|
+
def wait_until: [T] (
|
25
|
+
?timeout: Integer,
|
26
|
+
?message: String
|
27
|
+
) { () -> T? } -> T
|
28
|
+
|
29
|
+
def close: () -> void
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def connect: () -> untyped
|
34
|
+
|
35
|
+
def setup_browser: () -> untyped
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Bidi2pdf
|
2
|
+
module Bidi
|
3
|
+
class BrowserTab
|
4
|
+
@browser: Bidi2pdf::Bidi::Browser
|
5
|
+
@tab_id: String?
|
6
|
+
@session_id: String?
|
7
|
+
@timeout: Integer
|
8
|
+
|
9
|
+
attr_reader browser: Bidi2pdf::Bidi::Browser
|
10
|
+
attr_reader tab_id: String?
|
11
|
+
attr_reader session_id: String?
|
12
|
+
|
13
|
+
def initialize: (
|
14
|
+
browser: Bidi2pdf::Bidi::Browser,
|
15
|
+
?tab_id: String?,
|
16
|
+
?timeout: Integer
|
17
|
+
) -> void
|
18
|
+
|
19
|
+
def navigate_to: (String url) -> void
|
20
|
+
|
21
|
+
def execute_script: [T] (String script, *untyped args) -> T
|
22
|
+
|
23
|
+
def wait_for_navigation: (?timeout: Integer) -> void
|
24
|
+
|
25
|
+
def wait_for_element: (
|
26
|
+
selector: String,
|
27
|
+
?visible: bool,
|
28
|
+
?timeout: Integer
|
29
|
+
) -> untyped
|
30
|
+
|
31
|
+
def capture_screenshot: (?path: String?) -> String
|
32
|
+
|
33
|
+
def close: () -> void
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def ensure_tab_active: () -> void
|
38
|
+
|
39
|
+
def connect_to_tab: () -> String?
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module Bidi2pdf
|
2
|
+
module Bidi
|
3
|
+
class Client
|
4
|
+
@next_id_mutex: Mutex
|
5
|
+
@ws_url: untyped
|
6
|
+
|
7
|
+
@id: untyped
|
8
|
+
|
9
|
+
@pending_responses: Hash[String, Thread::Queue]
|
10
|
+
|
11
|
+
@connected: untyped
|
12
|
+
|
13
|
+
@connection_mutex: Mutex
|
14
|
+
|
15
|
+
@send_cmd_mutex: Mutex
|
16
|
+
|
17
|
+
@connection_cv: untyped
|
18
|
+
|
19
|
+
@started: untyped
|
20
|
+
|
21
|
+
@socket: untyped
|
22
|
+
|
23
|
+
@dispatcher: untyped
|
24
|
+
|
25
|
+
include Bidi2pdf::Utils
|
26
|
+
|
27
|
+
attr_reader ws_url: untyped
|
28
|
+
|
29
|
+
def initialize: (untyped ws_url) -> void
|
30
|
+
|
31
|
+
def start: () -> untyped
|
32
|
+
|
33
|
+
def started?: () -> untyped
|
34
|
+
|
35
|
+
def wait_until_open: (?timeout: untyped) -> untyped
|
36
|
+
|
37
|
+
def send_cmd: (untyped method, ?::Hash[untyped, untyped] params) -> untyped
|
38
|
+
|
39
|
+
# rubocop:disable Metrics/AbcSize
|
40
|
+
def send_cmd_and_wait: (untyped method, ?::Hash[untyped, untyped] params, ?timeout: untyped) ?{ (untyped) -> untyped } -> untyped
|
41
|
+
|
42
|
+
# Event API for external consumers
|
43
|
+
def on_message: () { () -> untyped } -> untyped
|
44
|
+
|
45
|
+
def on_open: () { () -> untyped } -> untyped
|
46
|
+
|
47
|
+
def on_close: () { () -> untyped } -> untyped
|
48
|
+
|
49
|
+
def on_error: () { () -> untyped } -> untyped
|
50
|
+
|
51
|
+
def on_event: (*untyped names) { () -> untyped } -> untyped
|
52
|
+
|
53
|
+
def remove_message_listener: (untyped block) -> untyped
|
54
|
+
|
55
|
+
def remove_event_listener: (*untyped names) { () -> untyped } -> untyped
|
56
|
+
|
57
|
+
def add_headers_interceptor: (context: untyped, url_patterns: untyped, headers: untyped) -> untyped
|
58
|
+
|
59
|
+
def add_auth_interceptor: (context: untyped, url_patterns: untyped, username: untyped, password: untyped) -> untyped
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def next_id: () -> untyped
|
64
|
+
|
65
|
+
def handle_open: () -> untyped
|
66
|
+
|
67
|
+
def handle_response_to_cmd: (untyped data) -> untyped
|
68
|
+
|
69
|
+
def redact_sensitive_fields: (untyped obj, ?::Array[untyped] sensitive_keys) -> untyped
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Bidi2pdf
|
2
|
+
module Bidi
|
3
|
+
class EventManager
|
4
|
+
@browser: Bidi2pdf::Bidi::Browser
|
5
|
+
@listeners: Hash[String, Array[Proc]]
|
6
|
+
@active: bool
|
7
|
+
|
8
|
+
def initialize: (browser: Bidi2pdf::Bidi::Browser) -> void
|
9
|
+
|
10
|
+
def on: (String event_name) { (Hash[String, untyped]) -> void } -> void
|
11
|
+
|
12
|
+
def off: (String event_name) -> void
|
13
|
+
|
14
|
+
def emit: (String event_name, Hash[String, untyped] params) -> void
|
15
|
+
|
16
|
+
def start_listening: () -> void
|
17
|
+
|
18
|
+
def stop_listening: () -> void
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def register_browser_events: () -> void
|
23
|
+
|
24
|
+
def handle_event: (String event_name, Hash[String, untyped] params) -> void
|
25
|
+
|
26
|
+
def process_event: (String event_name, Hash[String, untyped] params) -> void
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Bidi2pdf
|
2
|
+
module Bidi
|
3
|
+
class NetworkEvent
|
4
|
+
# Request data
|
5
|
+
@request_id: String
|
6
|
+
@url: String
|
7
|
+
@method: String
|
8
|
+
@headers: Hash[String, String]
|
9
|
+
@post_data: String?
|
10
|
+
|
11
|
+
# Response data
|
12
|
+
@response_status: Integer?
|
13
|
+
@response_headers: Hash[String, String]?
|
14
|
+
@response_body: String?
|
15
|
+
|
16
|
+
# Timing information
|
17
|
+
@timestamp: Float
|
18
|
+
@timing: Hash[Symbol, Float]?
|
19
|
+
|
20
|
+
attr_reader request_id: String
|
21
|
+
attr_reader url: String
|
22
|
+
attr_reader method: String
|
23
|
+
attr_reader headers: Hash[String, String]
|
24
|
+
attr_reader post_data: String?
|
25
|
+
attr_reader response_status: Integer?
|
26
|
+
attr_reader response_headers: Hash[String, String]?
|
27
|
+
attr_reader response_body: String?
|
28
|
+
attr_reader timestamp: Float
|
29
|
+
attr_reader timing: Hash[Symbol, Float]?
|
30
|
+
|
31
|
+
def initialize: (
|
32
|
+
request_id: String,
|
33
|
+
url: String,
|
34
|
+
method: String,
|
35
|
+
headers: Hash[String, String],
|
36
|
+
?post_data: String?,
|
37
|
+
?timestamp: Float?
|
38
|
+
) -> void
|
39
|
+
|
40
|
+
def add_response: (
|
41
|
+
status: Integer,
|
42
|
+
headers: Hash[String, String],
|
43
|
+
?body: String?
|
44
|
+
) -> void
|
45
|
+
|
46
|
+
def add_timing: (Hash[Symbol, Float] timing_data) -> void
|
47
|
+
|
48
|
+
def completed?: () -> bool
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Bidi2pdf
|
2
|
+
module Bidi
|
3
|
+
class NetworkEvents
|
4
|
+
include Enumerable[NetworkEvent]
|
5
|
+
|
6
|
+
@events: Hash[String, NetworkEvent]
|
7
|
+
@browser: Bidi2pdf::Bidi::Browser?
|
8
|
+
@event_manager: Bidi2pdf::Bidi::EventManager?
|
9
|
+
@recording: bool
|
10
|
+
@filters: Array[Proc]
|
11
|
+
|
12
|
+
attr_reader events: Hash[String, NetworkEvent]
|
13
|
+
attr_reader recording: bool
|
14
|
+
|
15
|
+
def initialize: (?browser: Bidi2pdf::Bidi::Browser?) -> void
|
16
|
+
|
17
|
+
def start_recording: (?browser: Bidi2pdf::Bidi::Browser?) -> void
|
18
|
+
|
19
|
+
def stop_recording: () -> void
|
20
|
+
|
21
|
+
def add_filter: () { (NetworkEvent) -> bool } -> void
|
22
|
+
|
23
|
+
def clear_filters: () -> void
|
24
|
+
|
25
|
+
def clear: () -> void
|
26
|
+
|
27
|
+
def size: () -> Integer
|
28
|
+
|
29
|
+
def []: (String request_id) -> NetworkEvent?
|
30
|
+
|
31
|
+
def each: () { (NetworkEvent) -> void } -> self
|
32
|
+
| () -> Enumerator[NetworkEvent, self]
|
33
|
+
|
34
|
+
def find_by_url: (String url_pattern) -> Array[NetworkEvent]
|
35
|
+
|
36
|
+
def find_by_method: (String method) -> Array[NetworkEvent]
|
37
|
+
|
38
|
+
def completed_requests: () -> Array[NetworkEvent]
|
39
|
+
|
40
|
+
def pending_requests: () -> Array[NetworkEvent]
|
41
|
+
|
42
|
+
def to_a: () -> Array[NetworkEvent]
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def setup_event_listeners: () -> void
|
47
|
+
|
48
|
+
def handle_request_event: (Hash[String, untyped] params) -> void
|
49
|
+
|
50
|
+
def handle_response_event: (Hash[String, untyped] params) -> void
|
51
|
+
|
52
|
+
def handle_loading_finished_event: (Hash[String, untyped] params) -> void
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Bidi2pdf
|
2
|
+
module Bidi
|
3
|
+
class PrintParametersValidator
|
4
|
+
# Valid print parameter configurations
|
5
|
+
DEFAULT_PARAMETERS: Hash[Symbol, untyped]
|
6
|
+
ALLOWED_PAGE_RANGES_FORMATS: Array[String]
|
7
|
+
ALLOWED_MARGIN_UNITS: Array[String]
|
8
|
+
ALLOWED_PAPER_FORMATS: Array[String]
|
9
|
+
ALLOWED_ORIENTATIONS: Array[String]
|
10
|
+
|
11
|
+
@parameters: Hash[Symbol, untyped]
|
12
|
+
@errors: Array[String]
|
13
|
+
|
14
|
+
attr_reader errors: Array[String]
|
15
|
+
attr_reader parameters: Hash[Symbol, untyped]
|
16
|
+
|
17
|
+
def initialize: (Hash[Symbol, untyped] parameters) -> void
|
18
|
+
|
19
|
+
def validate: () -> bool
|
20
|
+
|
21
|
+
def valid?: () -> bool
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def validate_boolean: (Symbol key) -> void
|
26
|
+
|
27
|
+
def validate_number: (Symbol key, ?min: Numeric?, ?max: Numeric?) -> void
|
28
|
+
|
29
|
+
def validate_string: (Symbol key) -> void
|
30
|
+
|
31
|
+
def validate_enum: (Symbol key, Array[String] allowed_values) -> void
|
32
|
+
|
33
|
+
def validate_margins: () -> void
|
34
|
+
|
35
|
+
def validate_page_ranges: () -> void
|
36
|
+
|
37
|
+
def validate_paper_size: () -> void
|
38
|
+
|
39
|
+
def normalize_parameters: () -> void
|
40
|
+
|
41
|
+
def add_error: (String message) -> void
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Bidi2pdf
|
2
|
+
module Bidi
|
3
|
+
class Session
|
4
|
+
@browser: Bidi2pdf::Bidi::Browser
|
5
|
+
@session_id: String?
|
6
|
+
@contexts: Array[String]
|
7
|
+
@timeout: Integer
|
8
|
+
@event_manager: Bidi2pdf::Bidi::EventManager?
|
9
|
+
@network_events: Bidi2pdf::Bidi::NetworkEvents?
|
10
|
+
|
11
|
+
attr_reader browser: Bidi2pdf::Bidi::Browser
|
12
|
+
attr_reader session_id: String?
|
13
|
+
attr_reader contexts: Array[String]
|
14
|
+
|
15
|
+
def initialize: (
|
16
|
+
browser: Bidi2pdf::Bidi::Browser,
|
17
|
+
?session_id: String?,
|
18
|
+
?timeout: Integer
|
19
|
+
) -> void
|
20
|
+
|
21
|
+
def create: () -> String
|
22
|
+
|
23
|
+
def attach: (session_id: String) -> String
|
24
|
+
|
25
|
+
def detach: () -> void
|
26
|
+
|
27
|
+
def execute_command: [T] (String method, ?Hash[Symbol, untyped] params) -> T
|
28
|
+
|
29
|
+
def navigate_to: (String url) -> void
|
30
|
+
|
31
|
+
def evaluate: [T] (String script) -> T
|
32
|
+
|
33
|
+
def wait_for_load: (?timeout: Integer?) -> void
|
34
|
+
|
35
|
+
def network_events: () -> Bidi2pdf::Bidi::NetworkEvents
|
36
|
+
|
37
|
+
def capture_screenshot: (?path: String?) -> String
|
38
|
+
|
39
|
+
def print_to_pdf: (
|
40
|
+
?Hash[Symbol, untyped] parameters
|
41
|
+
) -> String
|
42
|
+
|
43
|
+
def close: () -> void
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def ensure_session: () -> String
|
48
|
+
|
49
|
+
def setup_event_listeners: () -> void
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Bidi2pdf
|
2
|
+
module Bidi
|
3
|
+
class UserContext
|
4
|
+
@browser: Bidi2pdf::Bidi::Browser
|
5
|
+
@context_id: String
|
6
|
+
@session_id: String?
|
7
|
+
@event_manager: Bidi2pdf::Bidi::EventManager?
|
8
|
+
@network_events: Bidi2pdf::Bidi::NetworkEvents?
|
9
|
+
@closed: bool
|
10
|
+
|
11
|
+
attr_reader context_id: String
|
12
|
+
attr_reader browser: Bidi2pdf::Bidi::Browser
|
13
|
+
attr_reader session_id: String?
|
14
|
+
|
15
|
+
def initialize: (
|
16
|
+
browser: Bidi2pdf::Bidi::Browser,
|
17
|
+
context_id: String,
|
18
|
+
?session_id: String?
|
19
|
+
) -> void
|
20
|
+
|
21
|
+
def create_session: () -> String
|
22
|
+
|
23
|
+
def attach_session: (session_id: String) -> String
|
24
|
+
|
25
|
+
def execute_command: [T] (String method, ?Hash[Symbol, untyped] params) -> T
|
26
|
+
|
27
|
+
def navigate_to: (String url) -> void
|
28
|
+
|
29
|
+
def evaluate: [T] (String script) -> T
|
30
|
+
|
31
|
+
def wait_for_load: (?timeout: Integer?) -> void
|
32
|
+
|
33
|
+
def network_events: () -> Bidi2pdf::Bidi::NetworkEvents
|
34
|
+
|
35
|
+
def capture_screenshot: (?path: String?) -> String
|
36
|
+
|
37
|
+
def print_to_pdf: (?Hash[Symbol, untyped] parameters) -> String
|
38
|
+
|
39
|
+
def close: () -> void
|
40
|
+
|
41
|
+
def closed?: () -> bool
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def ensure_open: () -> void
|
46
|
+
|
47
|
+
def setup_event_listeners: () -> void
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Bidi2pdf
|
2
|
+
module Bidi
|
3
|
+
class WebSocketDispatcher
|
4
|
+
@url: String
|
5
|
+
@socket: WebSocket::Driver
|
6
|
+
@connection: TCPSocket
|
7
|
+
@pending_requests: Hash[Integer, Concurrent::Promises::ResolvableFuture]
|
8
|
+
@message_id: Integer
|
9
|
+
@listeners: Hash[String, Array[Proc]]
|
10
|
+
@thread: Thread?
|
11
|
+
@mutex: Mutex
|
12
|
+
@connected: bool
|
13
|
+
@logger: Logger?
|
14
|
+
|
15
|
+
attr_reader url: String
|
16
|
+
attr_reader connected: bool
|
17
|
+
|
18
|
+
def initialize: (String url, ?logger: Logger?) -> void
|
19
|
+
|
20
|
+
def connect: () -> bool
|
21
|
+
|
22
|
+
def disconnect: () -> void
|
23
|
+
|
24
|
+
def send_command: [T] (String method, ?Hash[Symbol, untyped] params) -> T
|
25
|
+
|
26
|
+
def send_message: (Hash[Symbol, untyped] message) -> Integer
|
27
|
+
|
28
|
+
def add_event_listener: (String event_name) { (Hash[String, untyped]) -> void } -> void
|
29
|
+
|
30
|
+
def remove_event_listener: (String event_name, ?Proc? callback) -> void
|
31
|
+
|
32
|
+
def connected?: () -> bool
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def generate_message_id: () -> Integer
|
37
|
+
|
38
|
+
def create_socket: () -> WebSocket::Driver
|
39
|
+
|
40
|
+
def handle_open: () -> void
|
41
|
+
|
42
|
+
def handle_message: (String data) -> void
|
43
|
+
|
44
|
+
def handle_close: () -> void
|
45
|
+
|
46
|
+
def handle_error: (Exception error) -> void
|
47
|
+
|
48
|
+
def dispatch_event: (String event_name, Hash[String, untyped] params) -> void
|
49
|
+
|
50
|
+
def listen_for_messages: () -> void
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Bidi2pdf
|
2
|
+
class ChromedriverManager
|
3
|
+
@port: Integer
|
4
|
+
@headless: bool
|
5
|
+
@session: untyped
|
6
|
+
@pid: Integer?
|
7
|
+
|
8
|
+
attr_reader port: Integer
|
9
|
+
attr_reader pid: Integer?
|
10
|
+
attr_reader session: untyped
|
11
|
+
|
12
|
+
def initialize: (?port: Integer, ?headless: bool) -> void
|
13
|
+
|
14
|
+
def start: () -> self
|
15
|
+
|
16
|
+
def stop: (?timeout: Integer) -> bool
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
# rubocop:disable Metrics/AbcSize
|
21
|
+
def detect_zombie_processes: () -> Array[Integer]?
|
22
|
+
|
23
|
+
def debug_show_all_children: () -> void
|
24
|
+
|
25
|
+
def close_session: () -> void
|
26
|
+
|
27
|
+
def term_chromedriver: () -> bool
|
28
|
+
|
29
|
+
def kill_chromedriver: (?timeout: Integer) -> bool
|
30
|
+
|
31
|
+
def build_cmd: () -> Array[String]
|
32
|
+
|
33
|
+
def update_chromedriver: () -> void
|
34
|
+
|
35
|
+
# rubocop:disable Metrics/AbcSize
|
36
|
+
def parse_port_from_output: (IO io, ?timeout: Integer) -> Integer?
|
37
|
+
|
38
|
+
def process_alive?: (?pid: Integer?) -> bool
|
39
|
+
|
40
|
+
def wait_until_chromedriver_ready: (?timeout: Integer) -> bool
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Bidi2pdf
|
2
|
+
class CLI < Thor
|
3
|
+
# rubocop:disable Layout/BeginEndAlignment
|
4
|
+
@launcher: untyped
|
5
|
+
|
6
|
+
def render: () -> untyped
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
# rubocop:disable Metrics/AbcSize
|
11
|
+
def launcher: () -> untyped
|
12
|
+
|
13
|
+
def configure: () -> untyped
|
14
|
+
|
15
|
+
def log_level: () -> untyped
|
16
|
+
|
17
|
+
def parse_key_values: (untyped pairs) -> untyped
|
18
|
+
|
19
|
+
def parse_auth: (untyped auth_string) -> ::Array[untyped]
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Bidi2pdf
|
2
|
+
class Launcher
|
3
|
+
@url: untyped
|
4
|
+
|
5
|
+
@port: untyped
|
6
|
+
|
7
|
+
@headless: untyped
|
8
|
+
|
9
|
+
@output: untyped
|
10
|
+
|
11
|
+
@cookies: untyped
|
12
|
+
|
13
|
+
@headers: untyped
|
14
|
+
|
15
|
+
@auth: untyped
|
16
|
+
|
17
|
+
@manager: untyped
|
18
|
+
|
19
|
+
@wait_window_loaded: untyped
|
20
|
+
|
21
|
+
@wait_network_idle: untyped
|
22
|
+
|
23
|
+
@print_options: untyped
|
24
|
+
|
25
|
+
@remote_browser_url: untyped
|
26
|
+
|
27
|
+
# rubocop:disable Metrics/ParameterLists
|
28
|
+
def initialize: (url: untyped, output: untyped, cookies: untyped, headers: untyped, auth: untyped, ?headless: bool, ?port: ::Integer, ?wait_window_loaded: bool, ?wait_network_idle: bool, ?print_options: ::Hash[untyped, untyped], ?remote_browser_url: untyped?) -> void
|
29
|
+
|
30
|
+
def launch: () -> untyped
|
31
|
+
|
32
|
+
def stop: () -> untyped
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def session: () -> untyped
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Bidi2pdf
|
2
|
+
class ProcessTree
|
3
|
+
@root_pid: untyped
|
4
|
+
|
5
|
+
@process_map: untyped
|
6
|
+
|
7
|
+
include Sys
|
8
|
+
|
9
|
+
def initialize: (?untyped? root_pid) -> void
|
10
|
+
|
11
|
+
def children: (untyped of_pid) -> (::Array[untyped] | untyped)
|
12
|
+
|
13
|
+
def traverse: () { () -> untyped } -> untyped
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def print_handler: (untyped process, untyped level) -> untyped
|
18
|
+
|
19
|
+
def build_process_map: () -> untyped
|
20
|
+
|
21
|
+
def connect_children: () -> untyped
|
22
|
+
|
23
|
+
def root_pids: () -> (::Array[untyped] | untyped)
|
24
|
+
|
25
|
+
def traverse_branch: (untyped pid, ?::Integer level) { () -> untyped } -> (nil | untyped)
|
26
|
+
end
|
27
|
+
end
|