handinger 0.0.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 +7 -0
- data/.ignore +2 -0
- data/CHANGELOG.md +10 -0
- data/README.md +236 -0
- data/SECURITY.md +23 -0
- data/lib/handinger/client.rb +74 -0
- data/lib/handinger/errors.rb +228 -0
- data/lib/handinger/file_part.rb +58 -0
- data/lib/handinger/internal/stream.rb +29 -0
- data/lib/handinger/internal/transport/base_client.rb +575 -0
- data/lib/handinger/internal/transport/pooled_net_requester.rb +210 -0
- data/lib/handinger/internal/type/array_of.rb +168 -0
- data/lib/handinger/internal/type/base_model.rb +531 -0
- data/lib/handinger/internal/type/base_page.rb +55 -0
- data/lib/handinger/internal/type/base_stream.rb +83 -0
- data/lib/handinger/internal/type/boolean.rb +77 -0
- data/lib/handinger/internal/type/converter.rb +327 -0
- data/lib/handinger/internal/type/enum.rb +131 -0
- data/lib/handinger/internal/type/file_input.rb +111 -0
- data/lib/handinger/internal/type/hash_of.rb +188 -0
- data/lib/handinger/internal/type/request_parameters.rb +42 -0
- data/lib/handinger/internal/type/union.rb +262 -0
- data/lib/handinger/internal/type/unknown.rb +81 -0
- data/lib/handinger/internal/util.rb +966 -0
- data/lib/handinger/internal.rb +20 -0
- data/lib/handinger/models/create_worker.rb +40 -0
- data/lib/handinger/models/worker.rb +360 -0
- data/lib/handinger/models/worker_continue_params.rb +20 -0
- data/lib/handinger/models/worker_create_params.rb +14 -0
- data/lib/handinger/models/worker_retrieve_email_params.rb +20 -0
- data/lib/handinger/models/worker_retrieve_email_response.rb +7 -0
- data/lib/handinger/models/worker_retrieve_file_params.rb +26 -0
- data/lib/handinger/models/worker_retrieve_params.rb +29 -0
- data/lib/handinger/models/worker_stream_updates_params.rb +20 -0
- data/lib/handinger/models/worker_stream_updates_response.rb +7 -0
- data/lib/handinger/models/workers/schedule_cancel_params.rb +28 -0
- data/lib/handinger/models/workers/schedule_cancel_response.rb +18 -0
- data/lib/handinger/models/workers/schedule_create_params.rb +133 -0
- data/lib/handinger/models/workers/schedule_list_params.rb +22 -0
- data/lib/handinger/models/workers/schedule_list_response.rb +24 -0
- data/lib/handinger/models/workers/worker_schedule.rb +233 -0
- data/lib/handinger/models.rb +59 -0
- data/lib/handinger/request_options.rb +77 -0
- data/lib/handinger/resources/workers/schedules.rb +92 -0
- data/lib/handinger/resources/workers.rb +167 -0
- data/lib/handinger/version.rb +5 -0
- data/lib/handinger.rb +75 -0
- data/manifest.yaml +17 -0
- data/rbi/handinger/client.rbi +49 -0
- data/rbi/handinger/errors.rbi +205 -0
- data/rbi/handinger/file_part.rbi +37 -0
- data/rbi/handinger/internal/stream.rbi +20 -0
- data/rbi/handinger/internal/transport/base_client.rbi +314 -0
- data/rbi/handinger/internal/transport/pooled_net_requester.rbi +83 -0
- data/rbi/handinger/internal/type/array_of.rbi +104 -0
- data/rbi/handinger/internal/type/base_model.rbi +308 -0
- data/rbi/handinger/internal/type/base_page.rbi +42 -0
- data/rbi/handinger/internal/type/base_stream.rbi +75 -0
- data/rbi/handinger/internal/type/boolean.rbi +58 -0
- data/rbi/handinger/internal/type/converter.rbi +216 -0
- data/rbi/handinger/internal/type/enum.rbi +82 -0
- data/rbi/handinger/internal/type/file_input.rbi +59 -0
- data/rbi/handinger/internal/type/hash_of.rbi +104 -0
- data/rbi/handinger/internal/type/request_parameters.rbi +29 -0
- data/rbi/handinger/internal/type/union.rbi +128 -0
- data/rbi/handinger/internal/type/unknown.rbi +58 -0
- data/rbi/handinger/internal/util.rbi +515 -0
- data/rbi/handinger/internal.rbi +18 -0
- data/rbi/handinger/models/create_worker.rbi +72 -0
- data/rbi/handinger/models/worker.rbi +546 -0
- data/rbi/handinger/models/worker_continue_params.rbi +35 -0
- data/rbi/handinger/models/worker_create_params.rbi +27 -0
- data/rbi/handinger/models/worker_retrieve_email_params.rbi +38 -0
- data/rbi/handinger/models/worker_retrieve_email_response.rbi +7 -0
- data/rbi/handinger/models/worker_retrieve_file_params.rbi +46 -0
- data/rbi/handinger/models/worker_retrieve_params.rbi +52 -0
- data/rbi/handinger/models/worker_stream_updates_params.rbi +38 -0
- data/rbi/handinger/models/worker_stream_updates_response.rbi +7 -0
- data/rbi/handinger/models/workers/schedule_cancel_params.rbi +48 -0
- data/rbi/handinger/models/workers/schedule_cancel_response.rbi +28 -0
- data/rbi/handinger/models/workers/schedule_create_params.rbi +270 -0
- data/rbi/handinger/models/workers/schedule_list_params.rbi +40 -0
- data/rbi/handinger/models/workers/schedule_list_response.rbi +51 -0
- data/rbi/handinger/models/workers/worker_schedule.rbi +461 -0
- data/rbi/handinger/models.rbi +21 -0
- data/rbi/handinger/request_options.rbi +59 -0
- data/rbi/handinger/resources/workers/schedules.rbi +72 -0
- data/rbi/handinger/resources/workers.rbi +112 -0
- data/rbi/handinger/version.rbi +5 -0
- data/sig/handinger/client.rbs +26 -0
- data/sig/handinger/errors.rbs +117 -0
- data/sig/handinger/file_part.rbs +21 -0
- data/sig/handinger/internal/stream.rbs +9 -0
- data/sig/handinger/internal/transport/base_client.rbs +133 -0
- data/sig/handinger/internal/transport/pooled_net_requester.rbs +48 -0
- data/sig/handinger/internal/type/array_of.rbs +48 -0
- data/sig/handinger/internal/type/base_model.rbs +102 -0
- data/sig/handinger/internal/type/base_page.rbs +24 -0
- data/sig/handinger/internal/type/base_stream.rbs +38 -0
- data/sig/handinger/internal/type/boolean.rbs +26 -0
- data/sig/handinger/internal/type/converter.rbs +79 -0
- data/sig/handinger/internal/type/enum.rbs +32 -0
- data/sig/handinger/internal/type/file_input.rbs +25 -0
- data/sig/handinger/internal/type/hash_of.rbs +48 -0
- data/sig/handinger/internal/type/request_parameters.rbs +19 -0
- data/sig/handinger/internal/type/union.rbs +52 -0
- data/sig/handinger/internal/type/unknown.rbs +26 -0
- data/sig/handinger/internal/util.rbs +199 -0
- data/sig/handinger/internal.rbs +9 -0
- data/sig/handinger/models/create_worker.rbs +49 -0
- data/sig/handinger/models/worker.rbs +364 -0
- data/sig/handinger/models/worker_continue_params.rbs +25 -0
- data/sig/handinger/models/worker_create_params.rbs +15 -0
- data/sig/handinger/models/worker_retrieve_email_params.rbs +23 -0
- data/sig/handinger/models/worker_retrieve_email_response.rbs +5 -0
- data/sig/handinger/models/worker_retrieve_file_params.rbs +28 -0
- data/sig/handinger/models/worker_retrieve_params.rbs +30 -0
- data/sig/handinger/models/worker_stream_updates_params.rbs +23 -0
- data/sig/handinger/models/worker_stream_updates_response.rbs +5 -0
- data/sig/handinger/models/workers/schedule_cancel_params.rbs +30 -0
- data/sig/handinger/models/workers/schedule_cancel_response.rbs +15 -0
- data/sig/handinger/models/workers/schedule_create_params.rbs +123 -0
- data/sig/handinger/models/workers/schedule_list_params.rbs +25 -0
- data/sig/handinger/models/workers/schedule_list_response.rbs +27 -0
- data/sig/handinger/models/workers/worker_schedule.rbs +234 -0
- data/sig/handinger/models.rbs +19 -0
- data/sig/handinger/request_options.rbs +34 -0
- data/sig/handinger/resources/workers/schedules.rbs +28 -0
- data/sig/handinger/resources/workers.rbs +46 -0
- data/sig/handinger/version.rbs +3 -0
- metadata +202 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Handinger
|
|
4
|
+
module Resources
|
|
5
|
+
class Workers
|
|
6
|
+
# Manage future and recurring worker tasks.
|
|
7
|
+
# @return [Handinger::Resources::Workers::Schedules]
|
|
8
|
+
attr_reader :schedules
|
|
9
|
+
|
|
10
|
+
# Create a new agent worker and start it with the supplied instruction.
|
|
11
|
+
#
|
|
12
|
+
# @overload create(input:, budget: nil, stream: nil, request_options: {})
|
|
13
|
+
#
|
|
14
|
+
# @param input [String]
|
|
15
|
+
# @param budget [Symbol, Handinger::Models::CreateWorker::Budget]
|
|
16
|
+
# @param stream [Boolean]
|
|
17
|
+
# @param request_options [Handinger::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
18
|
+
#
|
|
19
|
+
# @return [Handinger::Models::Worker]
|
|
20
|
+
#
|
|
21
|
+
# @see Handinger::Models::WorkerCreateParams
|
|
22
|
+
def create(params)
|
|
23
|
+
parsed, options = Handinger::WorkerCreateParams.dump_request(params)
|
|
24
|
+
@client.request(
|
|
25
|
+
method: :post,
|
|
26
|
+
path: "api/workers",
|
|
27
|
+
body: parsed,
|
|
28
|
+
model: Handinger::Worker,
|
|
29
|
+
options: options
|
|
30
|
+
)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Retrieve the current worker state. Pass stream=true or request text/event-stream
|
|
34
|
+
# to subscribe to updates.
|
|
35
|
+
#
|
|
36
|
+
# @overload retrieve(worker_id, stream: nil, request_options: {})
|
|
37
|
+
#
|
|
38
|
+
# @param worker_id [String] Worker id returned by the create worker endpoint.
|
|
39
|
+
#
|
|
40
|
+
# @param stream [Boolean] Return a server-sent event stream instead of JSON.
|
|
41
|
+
#
|
|
42
|
+
# @param request_options [Handinger::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
43
|
+
#
|
|
44
|
+
# @return [Handinger::Models::Worker]
|
|
45
|
+
#
|
|
46
|
+
# @see Handinger::Models::WorkerRetrieveParams
|
|
47
|
+
def retrieve(worker_id, params = {})
|
|
48
|
+
parsed, options = Handinger::WorkerRetrieveParams.dump_request(params)
|
|
49
|
+
query = Handinger::Internal::Util.encode_query_params(parsed)
|
|
50
|
+
@client.request(
|
|
51
|
+
method: :get,
|
|
52
|
+
path: ["api/workers/%1$s", worker_id],
|
|
53
|
+
query: query,
|
|
54
|
+
model: Handinger::Worker,
|
|
55
|
+
options: options
|
|
56
|
+
)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Send another instruction to an existing worker.
|
|
60
|
+
#
|
|
61
|
+
# @overload continue(worker_id, input:, budget: nil, stream: nil, request_options: {})
|
|
62
|
+
#
|
|
63
|
+
# @param worker_id [String] Worker id returned by the create worker endpoint.
|
|
64
|
+
#
|
|
65
|
+
# @param input [String]
|
|
66
|
+
#
|
|
67
|
+
# @param budget [Symbol, Handinger::Models::CreateWorker::Budget]
|
|
68
|
+
#
|
|
69
|
+
# @param stream [Boolean]
|
|
70
|
+
#
|
|
71
|
+
# @param request_options [Handinger::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
72
|
+
#
|
|
73
|
+
# @return [Handinger::Models::Worker]
|
|
74
|
+
#
|
|
75
|
+
# @see Handinger::Models::WorkerContinueParams
|
|
76
|
+
def continue(worker_id, params)
|
|
77
|
+
parsed, options = Handinger::WorkerContinueParams.dump_request(params)
|
|
78
|
+
@client.request(
|
|
79
|
+
method: :post,
|
|
80
|
+
path: ["api/workers/%1$s", worker_id],
|
|
81
|
+
body: parsed,
|
|
82
|
+
model: Handinger::Worker,
|
|
83
|
+
options: options
|
|
84
|
+
)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Retrieve the inbound email address for a worker.
|
|
88
|
+
#
|
|
89
|
+
# @overload retrieve_email(worker_id, request_options: {})
|
|
90
|
+
#
|
|
91
|
+
# @param worker_id [String] Worker id returned by the create worker endpoint.
|
|
92
|
+
#
|
|
93
|
+
# @param request_options [Handinger::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
94
|
+
#
|
|
95
|
+
# @return [String]
|
|
96
|
+
#
|
|
97
|
+
# @see Handinger::Models::WorkerRetrieveEmailParams
|
|
98
|
+
def retrieve_email(worker_id, params = {})
|
|
99
|
+
@client.request(
|
|
100
|
+
method: :get,
|
|
101
|
+
path: ["api/workers/%1$s/email", worker_id],
|
|
102
|
+
model: String,
|
|
103
|
+
options: params[:request_options]
|
|
104
|
+
)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Retrieve a file published from a worker workspace. The runtime route accepts
|
|
108
|
+
# nested paths after /files/.
|
|
109
|
+
#
|
|
110
|
+
# @overload retrieve_file(file_path, worker_id:, request_options: {})
|
|
111
|
+
#
|
|
112
|
+
# @param file_path [String] Workspace file path after /files. URL-encode slashes for nested paths.
|
|
113
|
+
#
|
|
114
|
+
# @param worker_id [String] Worker id returned by the create worker endpoint.
|
|
115
|
+
#
|
|
116
|
+
# @param request_options [Handinger::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
117
|
+
#
|
|
118
|
+
# @return [StringIO]
|
|
119
|
+
#
|
|
120
|
+
# @see Handinger::Models::WorkerRetrieveFileParams
|
|
121
|
+
def retrieve_file(file_path, params)
|
|
122
|
+
parsed, options = Handinger::WorkerRetrieveFileParams.dump_request(params)
|
|
123
|
+
worker_id =
|
|
124
|
+
parsed.delete(:worker_id) do
|
|
125
|
+
raise ArgumentError.new("missing required path argument #{_1}")
|
|
126
|
+
end
|
|
127
|
+
@client.request(
|
|
128
|
+
method: :get,
|
|
129
|
+
path: ["api/workers/%1$s/files/%2$s", worker_id, file_path],
|
|
130
|
+
headers: {"accept" => "application/octet-stream"},
|
|
131
|
+
model: StringIO,
|
|
132
|
+
options: options
|
|
133
|
+
)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Subscribe to a worker using server-sent events.
|
|
137
|
+
#
|
|
138
|
+
# @overload stream_updates_streaming(worker_id, request_options: {})
|
|
139
|
+
#
|
|
140
|
+
# @param worker_id [String] Worker id returned by the create worker endpoint.
|
|
141
|
+
#
|
|
142
|
+
# @param request_options [Handinger::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
143
|
+
#
|
|
144
|
+
# @return [Handinger::Internal::Stream<String>]
|
|
145
|
+
#
|
|
146
|
+
# @see Handinger::Models::WorkerStreamUpdatesParams
|
|
147
|
+
def stream_updates_streaming(worker_id, params = {})
|
|
148
|
+
@client.request(
|
|
149
|
+
method: :get,
|
|
150
|
+
path: ["api/workers/%1$s/stream", worker_id],
|
|
151
|
+
headers: {"accept" => "text/event-stream"},
|
|
152
|
+
stream: Handinger::Internal::Stream,
|
|
153
|
+
model: String,
|
|
154
|
+
options: params[:request_options]
|
|
155
|
+
)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# @api private
|
|
159
|
+
#
|
|
160
|
+
# @param client [Handinger::Client]
|
|
161
|
+
def initialize(client:)
|
|
162
|
+
@client = client
|
|
163
|
+
@schedules = Handinger::Resources::Workers::Schedules.new(client: client)
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
data/lib/handinger.rb
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Standard libraries.
|
|
4
|
+
# rubocop:disable Lint/RedundantRequireStatement
|
|
5
|
+
require "English"
|
|
6
|
+
require "base64"
|
|
7
|
+
require "cgi"
|
|
8
|
+
require "date"
|
|
9
|
+
require "erb"
|
|
10
|
+
require "etc"
|
|
11
|
+
require "json"
|
|
12
|
+
require "net/http"
|
|
13
|
+
require "openssl"
|
|
14
|
+
require "pathname"
|
|
15
|
+
require "rbconfig"
|
|
16
|
+
require "securerandom"
|
|
17
|
+
require "set"
|
|
18
|
+
require "stringio"
|
|
19
|
+
require "time"
|
|
20
|
+
require "uri"
|
|
21
|
+
# rubocop:enable Lint/RedundantRequireStatement
|
|
22
|
+
|
|
23
|
+
# We already ship the preferred sorbet manifests in the package itself.
|
|
24
|
+
# `tapioca` currently does not offer us a way to opt out of unnecessary compilation.
|
|
25
|
+
if Object.const_defined?(:Tapioca) &&
|
|
26
|
+
caller.chain([$PROGRAM_NAME]).chain(ARGV).any?(/tapioca/) &&
|
|
27
|
+
ARGV.none?(/dsl/)
|
|
28
|
+
return
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Gems.
|
|
32
|
+
require "connection_pool"
|
|
33
|
+
|
|
34
|
+
# Package files.
|
|
35
|
+
require_relative "handinger/version"
|
|
36
|
+
require_relative "handinger/internal/util"
|
|
37
|
+
require_relative "handinger/internal/type/converter"
|
|
38
|
+
require_relative "handinger/internal/type/unknown"
|
|
39
|
+
require_relative "handinger/internal/type/boolean"
|
|
40
|
+
require_relative "handinger/internal/type/file_input"
|
|
41
|
+
require_relative "handinger/internal/type/enum"
|
|
42
|
+
require_relative "handinger/internal/type/union"
|
|
43
|
+
require_relative "handinger/internal/type/array_of"
|
|
44
|
+
require_relative "handinger/internal/type/hash_of"
|
|
45
|
+
require_relative "handinger/internal/type/base_model"
|
|
46
|
+
require_relative "handinger/internal/type/base_page"
|
|
47
|
+
require_relative "handinger/internal/type/base_stream"
|
|
48
|
+
require_relative "handinger/internal/type/request_parameters"
|
|
49
|
+
require_relative "handinger/internal"
|
|
50
|
+
require_relative "handinger/request_options"
|
|
51
|
+
require_relative "handinger/file_part"
|
|
52
|
+
require_relative "handinger/errors"
|
|
53
|
+
require_relative "handinger/internal/transport/base_client"
|
|
54
|
+
require_relative "handinger/internal/transport/pooled_net_requester"
|
|
55
|
+
require_relative "handinger/client"
|
|
56
|
+
require_relative "handinger/internal/stream"
|
|
57
|
+
require_relative "handinger/models/create_worker"
|
|
58
|
+
require_relative "handinger/models/worker"
|
|
59
|
+
require_relative "handinger/models/worker_continue_params"
|
|
60
|
+
require_relative "handinger/models/worker_create_params"
|
|
61
|
+
require_relative "handinger/models/worker_retrieve_email_params"
|
|
62
|
+
require_relative "handinger/models/worker_retrieve_email_response"
|
|
63
|
+
require_relative "handinger/models/worker_retrieve_file_params"
|
|
64
|
+
require_relative "handinger/models/worker_retrieve_params"
|
|
65
|
+
require_relative "handinger/models/workers/schedule_cancel_params"
|
|
66
|
+
require_relative "handinger/models/workers/schedule_cancel_response"
|
|
67
|
+
require_relative "handinger/models/workers/schedule_create_params"
|
|
68
|
+
require_relative "handinger/models/workers/schedule_list_params"
|
|
69
|
+
require_relative "handinger/models/workers/schedule_list_response"
|
|
70
|
+
require_relative "handinger/models/workers/worker_schedule"
|
|
71
|
+
require_relative "handinger/models/worker_stream_updates_params"
|
|
72
|
+
require_relative "handinger/models/worker_stream_updates_response"
|
|
73
|
+
require_relative "handinger/models"
|
|
74
|
+
require_relative "handinger/resources/workers"
|
|
75
|
+
require_relative "handinger/resources/workers/schedules"
|
data/manifest.yaml
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module Handinger
|
|
4
|
+
class Client < Handinger::Internal::Transport::BaseClient
|
|
5
|
+
DEFAULT_MAX_RETRIES = 2
|
|
6
|
+
|
|
7
|
+
DEFAULT_TIMEOUT_IN_SECONDS = T.let(60.0, Float)
|
|
8
|
+
|
|
9
|
+
DEFAULT_INITIAL_RETRY_DELAY = T.let(0.5, Float)
|
|
10
|
+
|
|
11
|
+
DEFAULT_MAX_RETRY_DELAY = T.let(8.0, Float)
|
|
12
|
+
|
|
13
|
+
sig { returns(String) }
|
|
14
|
+
attr_reader :api_key
|
|
15
|
+
|
|
16
|
+
sig { returns(Handinger::Resources::Workers) }
|
|
17
|
+
attr_reader :workers
|
|
18
|
+
|
|
19
|
+
# @api private
|
|
20
|
+
sig { override.returns(T::Hash[String, String]) }
|
|
21
|
+
private def auth_headers
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Creates and returns a new client for interacting with the API.
|
|
25
|
+
sig do
|
|
26
|
+
params(
|
|
27
|
+
api_key: T.nilable(String),
|
|
28
|
+
base_url: T.nilable(String),
|
|
29
|
+
max_retries: Integer,
|
|
30
|
+
timeout: Float,
|
|
31
|
+
initial_retry_delay: Float,
|
|
32
|
+
max_retry_delay: Float
|
|
33
|
+
).returns(T.attached_class)
|
|
34
|
+
end
|
|
35
|
+
def self.new(
|
|
36
|
+
# Defaults to `ENV["HANDINGER_API_KEY"]`
|
|
37
|
+
api_key: ENV["HANDINGER_API_KEY"],
|
|
38
|
+
# Override the default base URL for the API, e.g.,
|
|
39
|
+
# `"https://api.example.com/v2/"`. Defaults to `ENV["HANDINGER_BASE_URL"]`
|
|
40
|
+
base_url: ENV["HANDINGER_BASE_URL"],
|
|
41
|
+
# Max number of retries to attempt after a failed retryable request.
|
|
42
|
+
max_retries: Handinger::Client::DEFAULT_MAX_RETRIES,
|
|
43
|
+
timeout: Handinger::Client::DEFAULT_TIMEOUT_IN_SECONDS,
|
|
44
|
+
initial_retry_delay: Handinger::Client::DEFAULT_INITIAL_RETRY_DELAY,
|
|
45
|
+
max_retry_delay: Handinger::Client::DEFAULT_MAX_RETRY_DELAY
|
|
46
|
+
)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module Handinger
|
|
4
|
+
module Errors
|
|
5
|
+
class Error < StandardError
|
|
6
|
+
sig { returns(T.nilable(StandardError)) }
|
|
7
|
+
attr_accessor :cause
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class ConversionError < Handinger::Errors::Error
|
|
11
|
+
sig { returns(T.nilable(StandardError)) }
|
|
12
|
+
def cause
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @api private
|
|
16
|
+
sig do
|
|
17
|
+
params(
|
|
18
|
+
on: T::Class[StandardError],
|
|
19
|
+
method: Symbol,
|
|
20
|
+
target: T.anything,
|
|
21
|
+
value: T.anything,
|
|
22
|
+
cause: T.nilable(StandardError)
|
|
23
|
+
).returns(T.attached_class)
|
|
24
|
+
end
|
|
25
|
+
def self.new(on:, method:, target:, value:, cause: nil)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
class APIError < Handinger::Errors::Error
|
|
30
|
+
sig { returns(URI::Generic) }
|
|
31
|
+
attr_accessor :url
|
|
32
|
+
|
|
33
|
+
sig { returns(T.nilable(Integer)) }
|
|
34
|
+
attr_accessor :status
|
|
35
|
+
|
|
36
|
+
sig { returns(T.nilable(T::Hash[String, String])) }
|
|
37
|
+
attr_accessor :headers
|
|
38
|
+
|
|
39
|
+
sig { returns(T.nilable(T.anything)) }
|
|
40
|
+
attr_accessor :body
|
|
41
|
+
|
|
42
|
+
# @api private
|
|
43
|
+
sig do
|
|
44
|
+
params(
|
|
45
|
+
url: URI::Generic,
|
|
46
|
+
status: T.nilable(Integer),
|
|
47
|
+
headers: T.nilable(T::Hash[String, String]),
|
|
48
|
+
body: T.nilable(Object),
|
|
49
|
+
request: NilClass,
|
|
50
|
+
response: NilClass,
|
|
51
|
+
message: T.nilable(String)
|
|
52
|
+
).returns(T.attached_class)
|
|
53
|
+
end
|
|
54
|
+
def self.new(
|
|
55
|
+
url:,
|
|
56
|
+
status: nil,
|
|
57
|
+
headers: nil,
|
|
58
|
+
body: nil,
|
|
59
|
+
request: nil,
|
|
60
|
+
response: nil,
|
|
61
|
+
message: nil
|
|
62
|
+
)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
class APIConnectionError < Handinger::Errors::APIError
|
|
67
|
+
sig { returns(NilClass) }
|
|
68
|
+
attr_accessor :status
|
|
69
|
+
|
|
70
|
+
sig { returns(NilClass) }
|
|
71
|
+
attr_accessor :body
|
|
72
|
+
|
|
73
|
+
# @api private
|
|
74
|
+
sig do
|
|
75
|
+
params(
|
|
76
|
+
url: URI::Generic,
|
|
77
|
+
status: NilClass,
|
|
78
|
+
headers: T.nilable(T::Hash[String, String]),
|
|
79
|
+
body: NilClass,
|
|
80
|
+
request: NilClass,
|
|
81
|
+
response: NilClass,
|
|
82
|
+
message: T.nilable(String)
|
|
83
|
+
).returns(T.attached_class)
|
|
84
|
+
end
|
|
85
|
+
def self.new(
|
|
86
|
+
url:,
|
|
87
|
+
status: nil,
|
|
88
|
+
headers: nil,
|
|
89
|
+
body: nil,
|
|
90
|
+
request: nil,
|
|
91
|
+
response: nil,
|
|
92
|
+
message: "Connection error."
|
|
93
|
+
)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
class APITimeoutError < Handinger::Errors::APIConnectionError
|
|
98
|
+
# @api private
|
|
99
|
+
sig do
|
|
100
|
+
params(
|
|
101
|
+
url: URI::Generic,
|
|
102
|
+
status: NilClass,
|
|
103
|
+
headers: T.nilable(T::Hash[String, String]),
|
|
104
|
+
body: NilClass,
|
|
105
|
+
request: NilClass,
|
|
106
|
+
response: NilClass,
|
|
107
|
+
message: T.nilable(String)
|
|
108
|
+
).returns(T.attached_class)
|
|
109
|
+
end
|
|
110
|
+
def self.new(
|
|
111
|
+
url:,
|
|
112
|
+
status: nil,
|
|
113
|
+
headers: nil,
|
|
114
|
+
body: nil,
|
|
115
|
+
request: nil,
|
|
116
|
+
response: nil,
|
|
117
|
+
message: "Request timed out."
|
|
118
|
+
)
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
class APIStatusError < Handinger::Errors::APIError
|
|
123
|
+
# @api private
|
|
124
|
+
sig do
|
|
125
|
+
params(
|
|
126
|
+
url: URI::Generic,
|
|
127
|
+
status: Integer,
|
|
128
|
+
headers: T.nilable(T::Hash[String, String]),
|
|
129
|
+
body: T.nilable(Object),
|
|
130
|
+
request: NilClass,
|
|
131
|
+
response: NilClass,
|
|
132
|
+
message: T.nilable(String)
|
|
133
|
+
).returns(T.attached_class)
|
|
134
|
+
end
|
|
135
|
+
def self.for(
|
|
136
|
+
url:,
|
|
137
|
+
status:,
|
|
138
|
+
headers:,
|
|
139
|
+
body:,
|
|
140
|
+
request:,
|
|
141
|
+
response:,
|
|
142
|
+
message: nil
|
|
143
|
+
)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
sig { returns(Integer) }
|
|
147
|
+
attr_accessor :status
|
|
148
|
+
|
|
149
|
+
# @api private
|
|
150
|
+
sig do
|
|
151
|
+
params(
|
|
152
|
+
url: URI::Generic,
|
|
153
|
+
status: Integer,
|
|
154
|
+
headers: T.nilable(T::Hash[String, String]),
|
|
155
|
+
body: T.nilable(Object),
|
|
156
|
+
request: NilClass,
|
|
157
|
+
response: NilClass,
|
|
158
|
+
message: T.nilable(String)
|
|
159
|
+
).returns(T.attached_class)
|
|
160
|
+
end
|
|
161
|
+
def self.new(
|
|
162
|
+
url:,
|
|
163
|
+
status:,
|
|
164
|
+
headers:,
|
|
165
|
+
body:,
|
|
166
|
+
request:,
|
|
167
|
+
response:,
|
|
168
|
+
message: nil
|
|
169
|
+
)
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
class BadRequestError < Handinger::Errors::APIStatusError
|
|
174
|
+
HTTP_STATUS = 400
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
class AuthenticationError < Handinger::Errors::APIStatusError
|
|
178
|
+
HTTP_STATUS = 401
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
class PermissionDeniedError < Handinger::Errors::APIStatusError
|
|
182
|
+
HTTP_STATUS = 403
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
class NotFoundError < Handinger::Errors::APIStatusError
|
|
186
|
+
HTTP_STATUS = 404
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
class ConflictError < Handinger::Errors::APIStatusError
|
|
190
|
+
HTTP_STATUS = 409
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
class UnprocessableEntityError < Handinger::Errors::APIStatusError
|
|
194
|
+
HTTP_STATUS = 422
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
class RateLimitError < Handinger::Errors::APIStatusError
|
|
198
|
+
HTTP_STATUS = 429
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
class InternalServerError < Handinger::Errors::APIStatusError
|
|
202
|
+
HTTP_STATUS = T.let((500..), T::Range[Integer])
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module Handinger
|
|
4
|
+
class FilePart
|
|
5
|
+
sig { returns(T.any(Pathname, StringIO, IO, String)) }
|
|
6
|
+
attr_reader :content
|
|
7
|
+
|
|
8
|
+
sig { returns(T.nilable(String)) }
|
|
9
|
+
attr_reader :content_type
|
|
10
|
+
|
|
11
|
+
sig { returns(T.nilable(String)) }
|
|
12
|
+
attr_reader :filename
|
|
13
|
+
|
|
14
|
+
# @api private
|
|
15
|
+
sig { returns(String) }
|
|
16
|
+
private def read
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
sig { params(a: T.anything).returns(String) }
|
|
20
|
+
def to_json(*a)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
sig { params(a: T.anything).returns(String) }
|
|
24
|
+
def to_yaml(*a)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
sig do
|
|
28
|
+
params(
|
|
29
|
+
content: T.any(Pathname, StringIO, IO, String),
|
|
30
|
+
filename: T.nilable(T.any(Pathname, String)),
|
|
31
|
+
content_type: T.nilable(String)
|
|
32
|
+
).returns(T.attached_class)
|
|
33
|
+
end
|
|
34
|
+
def self.new(content, filename: nil, content_type: nil)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module Handinger
|
|
4
|
+
module Internal
|
|
5
|
+
class Stream
|
|
6
|
+
Message =
|
|
7
|
+
type_member(:in) do
|
|
8
|
+
{ fixed: Handinger::Internal::Util::ServerSentEvent }
|
|
9
|
+
end
|
|
10
|
+
Elem = type_member(:out)
|
|
11
|
+
|
|
12
|
+
include Handinger::Internal::Type::BaseStream
|
|
13
|
+
|
|
14
|
+
# @api private
|
|
15
|
+
sig { override.returns(T::Enumerable[Elem]) }
|
|
16
|
+
private def iterator
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|