Class: ToolClient
- Inherits:
-
Object
- Object
- ToolClient
- Defined in:
- lib/clacky/default_skills/channel-setup/feishu_setup.rb
Overview
ToolClient — proxies browser calls through /api/tool/browser on clacky server
Instance Method Summary collapse
- #call(action, **params) ⇒ Object
- #http ⇒ Object
-
#initialize(server_url) ⇒ ToolClient
constructor
A new instance of ToolClient.
Constructor Details
#initialize(server_url) ⇒ ToolClient
Returns a new instance of ToolClient.
87 88 89 90 |
# File 'lib/clacky/default_skills/channel-setup/feishu_setup.rb', line 87 def initialize(server_url) @server_url = server_url @http = nil # lazy init, rebuilt on connection errors end |
Instance Method Details
#call(action, **params) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/clacky/default_skills/channel-setup/feishu_setup.rb', line 92 def call(action, **params) uri = URI("#{@server_url}/api/tool/browser") request = Net::HTTP::Post.new(uri, "Content-Type" => "application/json") request.body = JSON.generate({ "action" => action.to_s }.merge(params.transform_keys(&:to_s))) response = http.request(request) raise "Server error #{response.code}: #{response.body}" unless response.code.to_i < 500 result = JSON.parse(response.body) raise "Browser error: #{result["error"]}" if result["error"] result rescue Errno::ECONNREFUSED, Errno::ECONNRESET, EOFError, Net::ReadTimeout, IOError => e # Connection dropped (keep-alive expired or server restarted) — rebuild and retry once @http = nil raise "ToolClient connection failed: #{e.}" end |
#http ⇒ Object
108 109 110 111 112 113 114 115 |
# File 'lib/clacky/default_skills/channel-setup/feishu_setup.rb', line 108 def http return @http if @http uri = URI("#{@server_url}/api/tool/browser") @http = Net::HTTP.new(uri.host, uri.port) @http.open_timeout = 5 @http.read_timeout = 60 @http end |