@shopify/cli-kit 3.45.0 → 3.46.0-pre.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/assets/cli-ruby/Gemfile +0 -1
- package/assets/cli-ruby/Rakefile +0 -76
- package/assets/cli-ruby/lib/project_types/extension/cli.rb +5 -86
- package/assets/cli-ruby/lib/shopify_cli/admin_api.rb +0 -3
- package/assets/cli-ruby/lib/shopify_cli/command/sub_command.rb +1 -2
- package/assets/cli-ruby/lib/shopify_cli/command.rb +0 -7
- package/assets/cli-ruby/lib/shopify_cli/commands.rb +0 -15
- package/assets/cli-ruby/lib/shopify_cli/core.rb +0 -1
- package/assets/cli-ruby/lib/shopify_cli/identity_auth.rb +0 -1
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/proxy.rb +9 -1
- package/assets/cli-ruby/lib/shopify_cli.rb +1 -10
- package/assets/cli-ruby/test/test_helpers.rb +0 -2
- package/dist/public/common/version.d.ts +1 -1
- package/dist/public/common/version.js +1 -1
- package/dist/public/common/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/assets/cli-ruby/lib/project_types/extension/commands/build.rb +0 -51
- package/assets/cli-ruby/lib/project_types/extension/commands/check.rb +0 -51
- package/assets/cli-ruby/lib/project_types/extension/commands/connect.rb +0 -35
- package/assets/cli-ruby/lib/project_types/extension/commands/create.rb +0 -100
- package/assets/cli-ruby/lib/project_types/extension/commands/info.rb +0 -86
- package/assets/cli-ruby/lib/project_types/extension/commands/push.rb +0 -112
- package/assets/cli-ruby/lib/project_types/extension/commands/register.rb +0 -67
- package/assets/cli-ruby/lib/project_types/extension/commands/tunnel.rb +0 -73
- package/assets/cli-ruby/lib/project_types/extension/forms/connect.rb +0 -42
- package/assets/cli-ruby/lib/project_types/extension/forms/create.rb +0 -49
- package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_app.rb +0 -53
- package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_name.rb +0 -48
- package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_registration.rb +0 -55
- package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_template.rb +0 -37
- package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_type.rb +0 -47
- package/assets/cli-ruby/lib/project_types/extension/models/development_server.rb +0 -77
- package/assets/cli-ruby/lib/project_types/extension/models/development_server_requirements.rb +0 -56
- package/assets/cli-ruby/lib/project_types/extension/models/npm_package.rb +0 -44
- package/assets/cli-ruby/lib/project_types/extension/models/product.rb +0 -12
- package/assets/cli-ruby/lib/project_types/extension/models/registration.rb +0 -20
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/app.rb +0 -13
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/base.rb +0 -31
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/capabilities.rb +0 -11
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/development.rb +0 -33
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/development_entries.rb +0 -38
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/development_renderer.rb +0 -38
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/development_resource.rb +0 -13
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/extension.rb +0 -46
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/root.rb +0 -21
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/user.rb +0 -10
- package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +0 -29
- package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/checkout_ui_extension.rb +0 -170
- package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/web_pixel_extension.rb +0 -58
- package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/web_pixel_extension_utils/script_config.rb +0 -33
- package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/web_pixel_extension_utils/script_config_repository.rb +0 -75
- package/assets/cli-ruby/lib/project_types/extension/tasks/choose_next_available_port.rb +0 -36
- package/assets/cli-ruby/lib/project_types/extension/tasks/convert_server_config.rb +0 -85
- package/assets/cli-ruby/lib/project_types/extension/tasks/converters/app_converter.rb +0 -27
- package/assets/cli-ruby/lib/project_types/extension/tasks/converters/product_converter.rb +0 -21
- package/assets/cli-ruby/lib/project_types/extension/tasks/converters/registration_converter.rb +0 -28
- package/assets/cli-ruby/lib/project_types/extension/tasks/create_extension.rb +0 -31
- package/assets/cli-ruby/lib/project_types/extension/tasks/ensure_resource_url.rb +0 -39
- package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/base.rb +0 -15
- package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/build.rb +0 -30
- package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/create.rb +0 -30
- package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/outdated_extension_detection.rb +0 -57
- package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/serve.rb +0 -36
- package/assets/cli-ruby/lib/project_types/extension/tasks/find_npm_packages.rb +0 -106
- package/assets/cli-ruby/lib/project_types/extension/tasks/find_package_from_json.rb +0 -37
- package/assets/cli-ruby/lib/project_types/extension/tasks/get_app.rb +0 -22
- package/assets/cli-ruby/lib/project_types/extension/tasks/get_apps.rb +0 -26
- package/assets/cli-ruby/lib/project_types/extension/tasks/get_extensions.rb +0 -33
- package/assets/cli-ruby/lib/project_types/extension/tasks/get_product.rb +0 -22
- package/assets/cli-ruby/lib/project_types/extension/tasks/merge_server_config.rb +0 -47
- package/assets/cli-ruby/lib/project_types/extension/tasks/update_draft.rb +0 -29
- package/assets/cli-ruby/lib/project_types/extension/tasks/user_errors.rb +0 -45
- package/assets/cli-ruby/lib/shopify_cli/admin_api/populate_resource_command.rb +0 -166
- package/assets/cli-ruby/lib/shopify_cli/admin_api/schema.rb +0 -35
- package/assets/cli-ruby/lib/shopify_cli/app_type_detector.rb +0 -36
- package/assets/cli-ruby/lib/shopify_cli/assets/post_auth_page/index.html.erb +0 -34
- package/assets/cli-ruby/lib/shopify_cli/assets/post_auth_page/style.css +0 -58
- package/assets/cli-ruby/lib/shopify_cli/changelog.rb +0 -148
- package/assets/cli-ruby/lib/shopify_cli/command/app_sub_command.rb +0 -26
- package/assets/cli-ruby/lib/shopify_cli/command_options/command_serve_options.rb +0 -53
- package/assets/cli-ruby/lib/shopify_cli/command_options.rb +0 -7
- package/assets/cli-ruby/lib/shopify_cli/commands/app/connect.rb +0 -22
- package/assets/cli-ruby/lib/shopify_cli/commands/app/create/node.rb +0 -40
- package/assets/cli-ruby/lib/shopify_cli/commands/app/create/php.rb +0 -37
- package/assets/cli-ruby/lib/shopify_cli/commands/app/create/rails.rb +0 -42
- package/assets/cli-ruby/lib/shopify_cli/commands/app/create.rb +0 -28
- package/assets/cli-ruby/lib/shopify_cli/commands/app/deploy.rb +0 -51
- package/assets/cli-ruby/lib/shopify_cli/commands/app/open.rb +0 -19
- package/assets/cli-ruby/lib/shopify_cli/commands/app/serve.rb +0 -51
- package/assets/cli-ruby/lib/shopify_cli/commands/app/tunnel.rb +0 -43
- package/assets/cli-ruby/lib/shopify_cli/commands/app.rb +0 -29
- package/assets/cli-ruby/lib/shopify_cli/commands/config.rb +0 -76
- package/assets/cli-ruby/lib/shopify_cli/commands/help.rb +0 -52
- package/assets/cli-ruby/lib/shopify_cli/commands/login.rb +0 -98
- package/assets/cli-ruby/lib/shopify_cli/commands/logout.rb +0 -50
- package/assets/cli-ruby/lib/shopify_cli/commands/populate/customer.rb +0 -25
- package/assets/cli-ruby/lib/shopify_cli/commands/populate/draft_order.rb +0 -28
- package/assets/cli-ruby/lib/shopify_cli/commands/populate/product.rb +0 -24
- package/assets/cli-ruby/lib/shopify_cli/commands/populate.rb +0 -23
- package/assets/cli-ruby/lib/shopify_cli/commands/reporting.rb +0 -38
- package/assets/cli-ruby/lib/shopify_cli/commands/store.rb +0 -15
- package/assets/cli-ruby/lib/shopify_cli/commands/switch.rb +0 -39
- package/assets/cli-ruby/lib/shopify_cli/commands/system.rb +0 -165
- package/assets/cli-ruby/lib/shopify_cli/commands/version.rb +0 -15
- package/assets/cli-ruby/lib/shopify_cli/commands/whoami.rb +0 -28
- package/assets/cli-ruby/lib/shopify_cli/connect.rb +0 -32
- package/assets/cli-ruby/lib/shopify_cli/core/help_resolver.rb +0 -20
- package/assets/cli-ruby/lib/shopify_cli/heroku.rb +0 -140
- package/assets/cli-ruby/lib/shopify_cli/identity_auth/servlet.rb +0 -44
- package/assets/cli-ruby/lib/shopify_cli/js_deps.rb +0 -110
- package/assets/cli-ruby/lib/shopify_cli/packager.rb +0 -108
- package/assets/cli-ruby/lib/shopify_cli/php_deps.rb +0 -102
- package/assets/cli-ruby/lib/shopify_cli/process_supervision.rb +0 -228
- package/assets/cli-ruby/lib/shopify_cli/project_commands.rb +0 -16
- package/assets/cli-ruby/lib/shopify_cli/release.rb +0 -197
- package/assets/cli-ruby/lib/shopify_cli/sed.rb +0 -19
- package/assets/cli-ruby/lib/shopify_cli/services/app/connect_service.rb +0 -25
- package/assets/cli-ruby/lib/shopify_cli/services/app/create/node_service.rb +0 -143
- package/assets/cli-ruby/lib/shopify_cli/services/app/create/php_service.rb +0 -147
- package/assets/cli-ruby/lib/shopify_cli/services/app/create/rails_service.rb +0 -239
- package/assets/cli-ruby/lib/shopify_cli/services/app/deploy/heroku/node_service.rb +0 -101
- package/assets/cli-ruby/lib/shopify_cli/services/app/deploy/heroku/php_service.rb +0 -135
- package/assets/cli-ruby/lib/shopify_cli/services/app/deploy/heroku/rails_service.rb +0 -120
- package/assets/cli-ruby/lib/shopify_cli/services/app/open_service.rb +0 -19
- package/assets/cli-ruby/lib/shopify_cli/services/app/serve/node_service.rb +0 -19
- package/assets/cli-ruby/lib/shopify_cli/services/app/serve/php_service.rb +0 -23
- package/assets/cli-ruby/lib/shopify_cli/services/app/serve/rails_service.rb +0 -28
- package/assets/cli-ruby/lib/shopify_cli/services/app/serve/serve_service.rb +0 -57
- package/assets/cli-ruby/lib/shopify_cli/services/app/tunnel/auth_service.rb +0 -21
- package/assets/cli-ruby/lib/shopify_cli/services/app/tunnel/start_service.rb +0 -20
- package/assets/cli-ruby/lib/shopify_cli/services/app/tunnel/stop_service.rb +0 -20
- package/assets/cli-ruby/lib/shopify_cli/services/base_service.rb +0 -13
- package/assets/cli-ruby/lib/shopify_cli/services/reporting_service.rb +0 -16
- package/assets/cli-ruby/lib/shopify_cli/services.rb +0 -38
- package/assets/cli-ruby/lib/shopify_cli/tunnel.rb +0 -255
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
require "json"
|
|
2
|
-
require "fileutils"
|
|
3
|
-
require "shopify_cli"
|
|
4
|
-
require "forwardable"
|
|
5
|
-
require "uri"
|
|
6
|
-
|
|
7
|
-
module ShopifyCLI
|
|
8
|
-
##
|
|
9
|
-
# Wraps around ngrok functionality to allow you to spawn a ngrok proccess in the
|
|
10
|
-
# background and stop the process when you need to. It also allows control over
|
|
11
|
-
# the ngrok process between application runs.
|
|
12
|
-
class Tunnel
|
|
13
|
-
extend SingleForwardable
|
|
14
|
-
|
|
15
|
-
def_delegators :new, :start, :stop, :auth, :authenticated?, :stats, :urls, :running_on?
|
|
16
|
-
|
|
17
|
-
class FetchUrlError < RuntimeError; end
|
|
18
|
-
class NgrokError < RuntimeError; end
|
|
19
|
-
|
|
20
|
-
PORT = 8081 # port that ngrok will bind to
|
|
21
|
-
# mapping for supported operating systems for where to download ngrok from.
|
|
22
|
-
DOWNLOAD_URLS = {
|
|
23
|
-
mac: "https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-darwin-amd64.zip",
|
|
24
|
-
mac_m1: "https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-darwin-arm64.zip",
|
|
25
|
-
linux: "https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip",
|
|
26
|
-
windows: "https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-windows-amd64.zip",
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
NGROK_TUNNELS_URI = URI.parse("http://localhost:4040/api/tunnels")
|
|
30
|
-
TUNNELS_FIELD = "tunnels"
|
|
31
|
-
TUNNEL_ADDRESS_KEY_PATH = ["config", "addr"]
|
|
32
|
-
PUBLIC_URL_FIELD = "public_url"
|
|
33
|
-
|
|
34
|
-
##
|
|
35
|
-
# will find and stop a running tunnel process. It will also output if the
|
|
36
|
-
# operation was successful or not
|
|
37
|
-
#
|
|
38
|
-
# #### Paramters
|
|
39
|
-
#
|
|
40
|
-
# * `ctx` - running context from your command
|
|
41
|
-
#
|
|
42
|
-
def stop(ctx)
|
|
43
|
-
if ShopifyCLI::ProcessSupervision.running?(:ngrok)
|
|
44
|
-
if ShopifyCLI::ProcessSupervision.stop(:ngrok)
|
|
45
|
-
ctx.puts(ctx.message("core.tunnel.stopped"))
|
|
46
|
-
else
|
|
47
|
-
ctx.abort(ctx.message("core.tunnel.error.stop"))
|
|
48
|
-
end
|
|
49
|
-
else
|
|
50
|
-
ctx.puts(ctx.message("core.tunnel.not_running"))
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
##
|
|
55
|
-
# start will start a running ngrok process running in the background. It will
|
|
56
|
-
# also output the success of this operation
|
|
57
|
-
#
|
|
58
|
-
# #### Paramters
|
|
59
|
-
#
|
|
60
|
-
# * `ctx` - running context from your command
|
|
61
|
-
# * `port` - port to use to open the ngrok tunnel
|
|
62
|
-
#
|
|
63
|
-
# #### Returns
|
|
64
|
-
#
|
|
65
|
-
# * `url` - the url that the tunnel is now bound to and available to the public
|
|
66
|
-
#
|
|
67
|
-
def start(ctx, port: PORT)
|
|
68
|
-
install(ctx)
|
|
69
|
-
ctx.abort(ctx.message("core.tunnel.error.signup_required", ShopifyCLI::TOOL_NAME)) unless authenticated?
|
|
70
|
-
url, account = start_ngrok(ctx, port)
|
|
71
|
-
ctx.puts(ctx.message("core.tunnel.start_with_account", url, account))
|
|
72
|
-
url
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
##
|
|
76
|
-
# will add the users authentication token to our version of ngrok to unlock the
|
|
77
|
-
# extended ngrok features
|
|
78
|
-
#
|
|
79
|
-
# #### Paramters
|
|
80
|
-
#
|
|
81
|
-
# * `ctx` - running context from your command
|
|
82
|
-
# * `token` - authentication token provided by ngrok for extended features
|
|
83
|
-
#
|
|
84
|
-
def auth(ctx, token)
|
|
85
|
-
install(ctx)
|
|
86
|
-
ctx.system(ngrok_path(ctx), "authtoken", token)
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
##
|
|
90
|
-
# returns a boolean: if the user has a ngrok token to authenticate
|
|
91
|
-
#
|
|
92
|
-
def authenticated?
|
|
93
|
-
ngrok_config_path = File.join(Dir.home, ".ngrok2/ngrok.yml")
|
|
94
|
-
return false unless File.exist?(ngrok_config_path)
|
|
95
|
-
File.read(ngrok_config_path).include?("authtoken")
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
##
|
|
99
|
-
# will return the statistics of the current running tunnels
|
|
100
|
-
#
|
|
101
|
-
# #### Returns
|
|
102
|
-
#
|
|
103
|
-
# * `stats` - the hash of running statistics returning from the ngrok api
|
|
104
|
-
#
|
|
105
|
-
def stats
|
|
106
|
-
response = Net::HTTP.get_response(NGROK_TUNNELS_URI)
|
|
107
|
-
JSON.parse(response.body)
|
|
108
|
-
rescue
|
|
109
|
-
{}
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
##
|
|
113
|
-
# will return the urls of the current running tunnels
|
|
114
|
-
#
|
|
115
|
-
# #### Returns
|
|
116
|
-
#
|
|
117
|
-
# * `stats` - the array of urls
|
|
118
|
-
#
|
|
119
|
-
def urls
|
|
120
|
-
tunnels = stats.dig(TUNNELS_FIELD)
|
|
121
|
-
tunnels.map { |tunnel| tunnel.dig(PUBLIC_URL_FIELD) }
|
|
122
|
-
rescue
|
|
123
|
-
[]
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
##
|
|
127
|
-
# Returns Boolean if a tunnel is running on a given port
|
|
128
|
-
#
|
|
129
|
-
# #### Parameters
|
|
130
|
-
#
|
|
131
|
-
# * `port` - port to check
|
|
132
|
-
#
|
|
133
|
-
# #### Returns
|
|
134
|
-
#
|
|
135
|
-
# * true / false
|
|
136
|
-
#
|
|
137
|
-
def running_on?(port)
|
|
138
|
-
extract_port = ->(tunnel) { URI(tunnel.dig(*TUNNEL_ADDRESS_KEY_PATH)).port }
|
|
139
|
-
matches_port = ->(occupied_port) { occupied_port == port }
|
|
140
|
-
stats.fetch(TUNNELS_FIELD, []).map(&extract_port).any?(&matches_port)
|
|
141
|
-
rescue
|
|
142
|
-
false
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
private
|
|
146
|
-
|
|
147
|
-
def install(ctx)
|
|
148
|
-
ngrok = "ngrok#{ctx.executable_file_extension}"
|
|
149
|
-
return if File.exist?(ngrok_path(ctx))
|
|
150
|
-
check_prereq_command(ctx, "curl")
|
|
151
|
-
check_prereq_command(ctx, ctx.linux? ? "unzip" : "tar")
|
|
152
|
-
spinner = CLI::UI::SpinGroup.new
|
|
153
|
-
spinner.add(ctx.message("core.tunnel.installing")) do
|
|
154
|
-
zip_dest = File.join(ShopifyCLI.cache_dir, "ngrok.zip")
|
|
155
|
-
unless File.exist?(zip_dest)
|
|
156
|
-
ctx.system("curl", "-o", zip_dest, DOWNLOAD_URLS[ctx.os], chdir: ShopifyCLI.cache_dir)
|
|
157
|
-
end
|
|
158
|
-
args = if ctx.linux?
|
|
159
|
-
%W(unzip -u #{zip_dest})
|
|
160
|
-
else
|
|
161
|
-
%W(tar -xf #{zip_dest})
|
|
162
|
-
end
|
|
163
|
-
ctx.system(*args, chdir: ShopifyCLI.cache_dir)
|
|
164
|
-
ctx.rm(zip_dest)
|
|
165
|
-
end
|
|
166
|
-
spinner.wait
|
|
167
|
-
|
|
168
|
-
# final check to see if ngrok is accessible
|
|
169
|
-
unless File.exist?(ngrok_path(ctx))
|
|
170
|
-
ctx.abort(ctx.message("core.tunnel.error.ngrok", ngrok, ShopifyCLI.cache_dir))
|
|
171
|
-
end
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
def fetch_url(ctx, log_path)
|
|
175
|
-
LogParser.new(log_path)
|
|
176
|
-
rescue NgrokError => e
|
|
177
|
-
# Full error messages/descriptions: https://ngrok.com/docs/errors
|
|
178
|
-
case e.message
|
|
179
|
-
when /ERR_NGROK_107/
|
|
180
|
-
ctx.abort(ctx.message("tunnel.invalid_token", e.message))
|
|
181
|
-
when /ERR_NGROK_108/
|
|
182
|
-
ctx.abort(ctx.message("tunnel.duplicate_session", e.message))
|
|
183
|
-
end
|
|
184
|
-
raise e.class, e.message
|
|
185
|
-
rescue RuntimeError => e
|
|
186
|
-
stop(ctx)
|
|
187
|
-
raise e.class, e.message
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
def ngrok_path(ctx)
|
|
191
|
-
ngrok = "ngrok#{ctx.executable_file_extension}"
|
|
192
|
-
File.join(ShopifyCLI.cache_dir, ngrok)
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
def seconds_to_hm(seconds)
|
|
196
|
-
format("%d hours %d minutes", seconds / 3600, seconds / 60 % 60)
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
def start_ngrok(ctx, port)
|
|
200
|
-
ngrok_command = "\"#{ngrok_path(ctx)}\" http -inspect=false -log=stdout -log-level=debug #{port}"
|
|
201
|
-
process = ShopifyCLI::ProcessSupervision.start(:ngrok, ngrok_command)
|
|
202
|
-
log = fetch_url(ctx, process.log_path)
|
|
203
|
-
[log.url, log.account]
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
def check_prereq_command(ctx, command)
|
|
207
|
-
cmd_path = ctx.which(command)
|
|
208
|
-
ctx.abort(ctx.message("core.tunnel.error.prereq_command_required", command)) if cmd_path.nil?
|
|
209
|
-
ctx.done(ctx.message("core.tunnel.prereq_command_location", command, cmd_path))
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
class LogParser # :nodoc:
|
|
213
|
-
TIMEOUT = 10
|
|
214
|
-
|
|
215
|
-
attr_reader :url, :account
|
|
216
|
-
|
|
217
|
-
def initialize(log_path)
|
|
218
|
-
@log_path = log_path
|
|
219
|
-
counter = 0
|
|
220
|
-
while counter < TIMEOUT
|
|
221
|
-
parse
|
|
222
|
-
return if url
|
|
223
|
-
counter += 1
|
|
224
|
-
sleep(1)
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
raise FetchUrlError, Context.message("core.tunnel.error.url_fetch_failure") unless url
|
|
228
|
-
end
|
|
229
|
-
|
|
230
|
-
def parse
|
|
231
|
-
@log = File.read(@log_path)
|
|
232
|
-
unless error.empty?
|
|
233
|
-
raise NgrokError, error.first
|
|
234
|
-
end
|
|
235
|
-
parse_account
|
|
236
|
-
parse_url
|
|
237
|
-
end
|
|
238
|
-
|
|
239
|
-
def parse_url
|
|
240
|
-
@url, _ = @log.match(/msg="started tunnel".*url=(https:\/\/.+)/)&.captures
|
|
241
|
-
end
|
|
242
|
-
|
|
243
|
-
def parse_account
|
|
244
|
-
account, _ = @log.match(/AccountName:(.*)\s+SessionDuration/)&.captures
|
|
245
|
-
@account = account&.empty? ? nil : account
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
def error
|
|
249
|
-
@log.scan(/msg="command failed" err="([^"]+)"/).flatten
|
|
250
|
-
end
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
private_constant :LogParser
|
|
254
|
-
end
|
|
255
|
-
end
|