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.
Files changed (131) hide show
  1. checksums.yaml +7 -0
  2. data/.ignore +2 -0
  3. data/CHANGELOG.md +10 -0
  4. data/README.md +236 -0
  5. data/SECURITY.md +23 -0
  6. data/lib/handinger/client.rb +74 -0
  7. data/lib/handinger/errors.rb +228 -0
  8. data/lib/handinger/file_part.rb +58 -0
  9. data/lib/handinger/internal/stream.rb +29 -0
  10. data/lib/handinger/internal/transport/base_client.rb +575 -0
  11. data/lib/handinger/internal/transport/pooled_net_requester.rb +210 -0
  12. data/lib/handinger/internal/type/array_of.rb +168 -0
  13. data/lib/handinger/internal/type/base_model.rb +531 -0
  14. data/lib/handinger/internal/type/base_page.rb +55 -0
  15. data/lib/handinger/internal/type/base_stream.rb +83 -0
  16. data/lib/handinger/internal/type/boolean.rb +77 -0
  17. data/lib/handinger/internal/type/converter.rb +327 -0
  18. data/lib/handinger/internal/type/enum.rb +131 -0
  19. data/lib/handinger/internal/type/file_input.rb +111 -0
  20. data/lib/handinger/internal/type/hash_of.rb +188 -0
  21. data/lib/handinger/internal/type/request_parameters.rb +42 -0
  22. data/lib/handinger/internal/type/union.rb +262 -0
  23. data/lib/handinger/internal/type/unknown.rb +81 -0
  24. data/lib/handinger/internal/util.rb +966 -0
  25. data/lib/handinger/internal.rb +20 -0
  26. data/lib/handinger/models/create_worker.rb +40 -0
  27. data/lib/handinger/models/worker.rb +360 -0
  28. data/lib/handinger/models/worker_continue_params.rb +20 -0
  29. data/lib/handinger/models/worker_create_params.rb +14 -0
  30. data/lib/handinger/models/worker_retrieve_email_params.rb +20 -0
  31. data/lib/handinger/models/worker_retrieve_email_response.rb +7 -0
  32. data/lib/handinger/models/worker_retrieve_file_params.rb +26 -0
  33. data/lib/handinger/models/worker_retrieve_params.rb +29 -0
  34. data/lib/handinger/models/worker_stream_updates_params.rb +20 -0
  35. data/lib/handinger/models/worker_stream_updates_response.rb +7 -0
  36. data/lib/handinger/models/workers/schedule_cancel_params.rb +28 -0
  37. data/lib/handinger/models/workers/schedule_cancel_response.rb +18 -0
  38. data/lib/handinger/models/workers/schedule_create_params.rb +133 -0
  39. data/lib/handinger/models/workers/schedule_list_params.rb +22 -0
  40. data/lib/handinger/models/workers/schedule_list_response.rb +24 -0
  41. data/lib/handinger/models/workers/worker_schedule.rb +233 -0
  42. data/lib/handinger/models.rb +59 -0
  43. data/lib/handinger/request_options.rb +77 -0
  44. data/lib/handinger/resources/workers/schedules.rb +92 -0
  45. data/lib/handinger/resources/workers.rb +167 -0
  46. data/lib/handinger/version.rb +5 -0
  47. data/lib/handinger.rb +75 -0
  48. data/manifest.yaml +17 -0
  49. data/rbi/handinger/client.rbi +49 -0
  50. data/rbi/handinger/errors.rbi +205 -0
  51. data/rbi/handinger/file_part.rbi +37 -0
  52. data/rbi/handinger/internal/stream.rbi +20 -0
  53. data/rbi/handinger/internal/transport/base_client.rbi +314 -0
  54. data/rbi/handinger/internal/transport/pooled_net_requester.rbi +83 -0
  55. data/rbi/handinger/internal/type/array_of.rbi +104 -0
  56. data/rbi/handinger/internal/type/base_model.rbi +308 -0
  57. data/rbi/handinger/internal/type/base_page.rbi +42 -0
  58. data/rbi/handinger/internal/type/base_stream.rbi +75 -0
  59. data/rbi/handinger/internal/type/boolean.rbi +58 -0
  60. data/rbi/handinger/internal/type/converter.rbi +216 -0
  61. data/rbi/handinger/internal/type/enum.rbi +82 -0
  62. data/rbi/handinger/internal/type/file_input.rbi +59 -0
  63. data/rbi/handinger/internal/type/hash_of.rbi +104 -0
  64. data/rbi/handinger/internal/type/request_parameters.rbi +29 -0
  65. data/rbi/handinger/internal/type/union.rbi +128 -0
  66. data/rbi/handinger/internal/type/unknown.rbi +58 -0
  67. data/rbi/handinger/internal/util.rbi +515 -0
  68. data/rbi/handinger/internal.rbi +18 -0
  69. data/rbi/handinger/models/create_worker.rbi +72 -0
  70. data/rbi/handinger/models/worker.rbi +546 -0
  71. data/rbi/handinger/models/worker_continue_params.rbi +35 -0
  72. data/rbi/handinger/models/worker_create_params.rbi +27 -0
  73. data/rbi/handinger/models/worker_retrieve_email_params.rbi +38 -0
  74. data/rbi/handinger/models/worker_retrieve_email_response.rbi +7 -0
  75. data/rbi/handinger/models/worker_retrieve_file_params.rbi +46 -0
  76. data/rbi/handinger/models/worker_retrieve_params.rbi +52 -0
  77. data/rbi/handinger/models/worker_stream_updates_params.rbi +38 -0
  78. data/rbi/handinger/models/worker_stream_updates_response.rbi +7 -0
  79. data/rbi/handinger/models/workers/schedule_cancel_params.rbi +48 -0
  80. data/rbi/handinger/models/workers/schedule_cancel_response.rbi +28 -0
  81. data/rbi/handinger/models/workers/schedule_create_params.rbi +270 -0
  82. data/rbi/handinger/models/workers/schedule_list_params.rbi +40 -0
  83. data/rbi/handinger/models/workers/schedule_list_response.rbi +51 -0
  84. data/rbi/handinger/models/workers/worker_schedule.rbi +461 -0
  85. data/rbi/handinger/models.rbi +21 -0
  86. data/rbi/handinger/request_options.rbi +59 -0
  87. data/rbi/handinger/resources/workers/schedules.rbi +72 -0
  88. data/rbi/handinger/resources/workers.rbi +112 -0
  89. data/rbi/handinger/version.rbi +5 -0
  90. data/sig/handinger/client.rbs +26 -0
  91. data/sig/handinger/errors.rbs +117 -0
  92. data/sig/handinger/file_part.rbs +21 -0
  93. data/sig/handinger/internal/stream.rbs +9 -0
  94. data/sig/handinger/internal/transport/base_client.rbs +133 -0
  95. data/sig/handinger/internal/transport/pooled_net_requester.rbs +48 -0
  96. data/sig/handinger/internal/type/array_of.rbs +48 -0
  97. data/sig/handinger/internal/type/base_model.rbs +102 -0
  98. data/sig/handinger/internal/type/base_page.rbs +24 -0
  99. data/sig/handinger/internal/type/base_stream.rbs +38 -0
  100. data/sig/handinger/internal/type/boolean.rbs +26 -0
  101. data/sig/handinger/internal/type/converter.rbs +79 -0
  102. data/sig/handinger/internal/type/enum.rbs +32 -0
  103. data/sig/handinger/internal/type/file_input.rbs +25 -0
  104. data/sig/handinger/internal/type/hash_of.rbs +48 -0
  105. data/sig/handinger/internal/type/request_parameters.rbs +19 -0
  106. data/sig/handinger/internal/type/union.rbs +52 -0
  107. data/sig/handinger/internal/type/unknown.rbs +26 -0
  108. data/sig/handinger/internal/util.rbs +199 -0
  109. data/sig/handinger/internal.rbs +9 -0
  110. data/sig/handinger/models/create_worker.rbs +49 -0
  111. data/sig/handinger/models/worker.rbs +364 -0
  112. data/sig/handinger/models/worker_continue_params.rbs +25 -0
  113. data/sig/handinger/models/worker_create_params.rbs +15 -0
  114. data/sig/handinger/models/worker_retrieve_email_params.rbs +23 -0
  115. data/sig/handinger/models/worker_retrieve_email_response.rbs +5 -0
  116. data/sig/handinger/models/worker_retrieve_file_params.rbs +28 -0
  117. data/sig/handinger/models/worker_retrieve_params.rbs +30 -0
  118. data/sig/handinger/models/worker_stream_updates_params.rbs +23 -0
  119. data/sig/handinger/models/worker_stream_updates_response.rbs +5 -0
  120. data/sig/handinger/models/workers/schedule_cancel_params.rbs +30 -0
  121. data/sig/handinger/models/workers/schedule_cancel_response.rbs +15 -0
  122. data/sig/handinger/models/workers/schedule_create_params.rbs +123 -0
  123. data/sig/handinger/models/workers/schedule_list_params.rbs +25 -0
  124. data/sig/handinger/models/workers/schedule_list_response.rbs +27 -0
  125. data/sig/handinger/models/workers/worker_schedule.rbs +234 -0
  126. data/sig/handinger/models.rbs +19 -0
  127. data/sig/handinger/request_options.rbs +34 -0
  128. data/sig/handinger/resources/workers/schedules.rbs +28 -0
  129. data/sig/handinger/resources/workers.rbs +46 -0
  130. data/sig/handinger/version.rbs +3 -0
  131. metadata +202 -0
@@ -0,0 +1,314 @@
1
+ # typed: strong
2
+
3
+ module Handinger
4
+ module Internal
5
+ module Transport
6
+ # @api private
7
+ class BaseClient
8
+ extend Handinger::Internal::Util::SorbetRuntimeSupport
9
+
10
+ abstract!
11
+
12
+ RequestComponents =
13
+ T.type_alias do
14
+ {
15
+ method: Symbol,
16
+ path: T.any(String, T::Array[String]),
17
+ query:
18
+ T.nilable(
19
+ T::Hash[String, T.nilable(T.any(T::Array[String], String))]
20
+ ),
21
+ headers:
22
+ T.nilable(
23
+ T::Hash[
24
+ String,
25
+ T.nilable(
26
+ T.any(
27
+ String,
28
+ Integer,
29
+ T::Array[T.nilable(T.any(String, Integer))]
30
+ )
31
+ )
32
+ ]
33
+ ),
34
+ body: T.nilable(T.anything),
35
+ unwrap:
36
+ T.nilable(
37
+ T.any(
38
+ Symbol,
39
+ Integer,
40
+ T::Array[T.any(Symbol, Integer)],
41
+ T.proc.params(arg0: T.anything).returns(T.anything)
42
+ )
43
+ ),
44
+ page:
45
+ T.nilable(
46
+ T::Class[
47
+ Handinger::Internal::Type::BasePage[
48
+ Handinger::Internal::Type::BaseModel
49
+ ]
50
+ ]
51
+ ),
52
+ stream:
53
+ T.nilable(
54
+ T::Class[
55
+ Handinger::Internal::Type::BaseStream[
56
+ T.anything,
57
+ Handinger::Internal::Type::BaseModel
58
+ ]
59
+ ]
60
+ ),
61
+ model: T.nilable(Handinger::Internal::Type::Converter::Input),
62
+ options: T.nilable(Handinger::RequestOptions::OrHash)
63
+ }
64
+ end
65
+
66
+ RequestInput =
67
+ T.type_alias do
68
+ {
69
+ method: Symbol,
70
+ url: URI::Generic,
71
+ headers: T::Hash[String, String],
72
+ body: T.anything,
73
+ max_retries: Integer,
74
+ timeout: Float
75
+ }
76
+ end
77
+
78
+ # from whatwg fetch spec
79
+ MAX_REDIRECTS = 20
80
+
81
+ PLATFORM_HEADERS = T::Hash[String, String]
82
+
83
+ class << self
84
+ # @api private
85
+ sig do
86
+ params(
87
+ req: Handinger::Internal::Transport::BaseClient::RequestComponents
88
+ ).void
89
+ end
90
+ def validate!(req)
91
+ end
92
+
93
+ # @api private
94
+ sig do
95
+ params(status: Integer, headers: T::Hash[String, String]).returns(
96
+ T::Boolean
97
+ )
98
+ end
99
+ def should_retry?(status, headers:)
100
+ end
101
+
102
+ # @api private
103
+ sig do
104
+ params(
105
+ request: Handinger::Internal::Transport::BaseClient::RequestInput,
106
+ status: Integer,
107
+ response_headers: T::Hash[String, String]
108
+ ).returns(Handinger::Internal::Transport::BaseClient::RequestInput)
109
+ end
110
+ def follow_redirect(request, status:, response_headers:)
111
+ end
112
+
113
+ # @api private
114
+ sig do
115
+ params(
116
+ status: T.any(Integer, Handinger::Errors::APIConnectionError),
117
+ stream: T.nilable(T::Enumerable[String])
118
+ ).void
119
+ end
120
+ def reap_connection!(status, stream:)
121
+ end
122
+ end
123
+
124
+ sig { returns(URI::Generic) }
125
+ attr_reader :base_url
126
+
127
+ sig { returns(Float) }
128
+ attr_reader :timeout
129
+
130
+ sig { returns(Integer) }
131
+ attr_reader :max_retries
132
+
133
+ sig { returns(Float) }
134
+ attr_reader :initial_retry_delay
135
+
136
+ sig { returns(Float) }
137
+ attr_reader :max_retry_delay
138
+
139
+ sig { returns(T::Hash[String, String]) }
140
+ attr_reader :headers
141
+
142
+ sig { returns(T.nilable(String)) }
143
+ attr_reader :idempotency_header
144
+
145
+ # @api private
146
+ sig { returns(Handinger::Internal::Transport::PooledNetRequester) }
147
+ attr_reader :requester
148
+
149
+ # @api private
150
+ sig do
151
+ params(
152
+ base_url: String,
153
+ timeout: Float,
154
+ max_retries: Integer,
155
+ initial_retry_delay: Float,
156
+ max_retry_delay: Float,
157
+ headers:
158
+ T::Hash[
159
+ String,
160
+ T.nilable(
161
+ T.any(
162
+ String,
163
+ Integer,
164
+ T::Array[T.nilable(T.any(String, Integer))]
165
+ )
166
+ )
167
+ ],
168
+ idempotency_header: T.nilable(String)
169
+ ).returns(T.attached_class)
170
+ end
171
+ def self.new(
172
+ base_url:,
173
+ timeout: 0.0,
174
+ max_retries: 0,
175
+ initial_retry_delay: 0.0,
176
+ max_retry_delay: 0.0,
177
+ headers: {},
178
+ idempotency_header: nil
179
+ )
180
+ end
181
+
182
+ # @api private
183
+ sig { overridable.returns(T::Hash[String, String]) }
184
+ private def auth_headers
185
+ end
186
+
187
+ # @api private
188
+ sig { returns(String) }
189
+ private def user_agent
190
+ end
191
+
192
+ # @api private
193
+ sig { returns(String) }
194
+ private def generate_idempotency_key
195
+ end
196
+
197
+ # @api private
198
+ sig do
199
+ overridable
200
+ .params(
201
+ req:
202
+ Handinger::Internal::Transport::BaseClient::RequestComponents,
203
+ opts: Handinger::Internal::AnyHash
204
+ )
205
+ .returns(Handinger::Internal::Transport::BaseClient::RequestInput)
206
+ end
207
+ private def build_request(req, opts)
208
+ end
209
+
210
+ # @api private
211
+ sig do
212
+ params(
213
+ headers: T::Hash[String, String],
214
+ retry_count: Integer
215
+ ).returns(Float)
216
+ end
217
+ private def retry_delay(headers, retry_count:)
218
+ end
219
+
220
+ # @api private
221
+ sig do
222
+ params(
223
+ request: Handinger::Internal::Transport::BaseClient::RequestInput,
224
+ redirect_count: Integer,
225
+ retry_count: Integer,
226
+ send_retry_header: T::Boolean
227
+ ).returns([Integer, Net::HTTPResponse, T::Enumerable[String]])
228
+ end
229
+ def send_request(
230
+ request,
231
+ redirect_count:,
232
+ retry_count:,
233
+ send_retry_header:
234
+ )
235
+ end
236
+
237
+ # Execute the request specified by `req`. This is the method that all resource
238
+ # methods call into.
239
+ #
240
+ # @overload request(method, path, query: {}, headers: {}, body: nil, unwrap: nil, page: nil, stream: nil, model: Handinger::Internal::Type::Unknown, options: {})
241
+ sig do
242
+ params(
243
+ method: Symbol,
244
+ path: T.any(String, T::Array[String]),
245
+ query:
246
+ T.nilable(
247
+ T::Hash[String, T.nilable(T.any(T::Array[String], String))]
248
+ ),
249
+ headers:
250
+ T.nilable(
251
+ T::Hash[
252
+ String,
253
+ T.nilable(
254
+ T.any(
255
+ String,
256
+ Integer,
257
+ T::Array[T.nilable(T.any(String, Integer))]
258
+ )
259
+ )
260
+ ]
261
+ ),
262
+ body: T.nilable(T.anything),
263
+ unwrap:
264
+ T.nilable(
265
+ T.any(
266
+ Symbol,
267
+ Integer,
268
+ T::Array[T.any(Symbol, Integer)],
269
+ T.proc.params(arg0: T.anything).returns(T.anything)
270
+ )
271
+ ),
272
+ page:
273
+ T.nilable(
274
+ T::Class[
275
+ Handinger::Internal::Type::BasePage[
276
+ Handinger::Internal::Type::BaseModel
277
+ ]
278
+ ]
279
+ ),
280
+ stream:
281
+ T.nilable(
282
+ T::Class[
283
+ Handinger::Internal::Type::BaseStream[
284
+ T.anything,
285
+ Handinger::Internal::Type::BaseModel
286
+ ]
287
+ ]
288
+ ),
289
+ model: T.nilable(Handinger::Internal::Type::Converter::Input),
290
+ options: T.nilable(Handinger::RequestOptions::OrHash)
291
+ ).returns(T.anything)
292
+ end
293
+ def request(
294
+ method,
295
+ path,
296
+ query: {},
297
+ headers: {},
298
+ body: nil,
299
+ unwrap: nil,
300
+ page: nil,
301
+ stream: nil,
302
+ model: Handinger::Internal::Type::Unknown,
303
+ options: {}
304
+ )
305
+ end
306
+
307
+ # @api private
308
+ sig { returns(String) }
309
+ def inspect
310
+ end
311
+ end
312
+ end
313
+ end
314
+ end
@@ -0,0 +1,83 @@
1
+ # typed: strong
2
+
3
+ module Handinger
4
+ module Internal
5
+ module Transport
6
+ # @api private
7
+ class PooledNetRequester
8
+ extend Handinger::Internal::Util::SorbetRuntimeSupport
9
+
10
+ Request =
11
+ T.type_alias do
12
+ {
13
+ method: Symbol,
14
+ url: URI::Generic,
15
+ headers: T::Hash[String, String],
16
+ body: T.anything,
17
+ deadline: Float
18
+ }
19
+ end
20
+
21
+ # from the golang stdlib
22
+ # https://github.com/golang/go/blob/c8eced8580028328fde7c03cbfcb720ce15b2358/src/net/http/transport.go#L49
23
+ KEEP_ALIVE_TIMEOUT = 30
24
+
25
+ DEFAULT_MAX_CONNECTIONS = T.let(T.unsafe(nil), Integer)
26
+
27
+ class << self
28
+ # @api private
29
+ sig do
30
+ params(cert_store: OpenSSL::X509::Store, url: URI::Generic).returns(
31
+ Net::HTTP
32
+ )
33
+ end
34
+ def connect(cert_store:, url:)
35
+ end
36
+
37
+ # @api private
38
+ sig { params(conn: Net::HTTP, deadline: Float).void }
39
+ def calibrate_socket_timeout(conn, deadline)
40
+ end
41
+
42
+ # @api private
43
+ sig do
44
+ params(
45
+ request:
46
+ Handinger::Internal::Transport::PooledNetRequester::Request,
47
+ blk: T.proc.params(arg0: String).void
48
+ ).returns([Net::HTTPGenericRequest, T.proc.void])
49
+ end
50
+ def build_request(request, &blk)
51
+ end
52
+ end
53
+
54
+ # @api private
55
+ sig do
56
+ params(
57
+ url: URI::Generic,
58
+ deadline: Float,
59
+ blk: T.proc.params(arg0: Net::HTTP).void
60
+ ).void
61
+ end
62
+ private def with_pool(url, deadline:, &blk)
63
+ end
64
+
65
+ # @api private
66
+ sig do
67
+ params(
68
+ request: Handinger::Internal::Transport::PooledNetRequester::Request
69
+ ).returns([Integer, Net::HTTPResponse, T::Enumerable[String]])
70
+ end
71
+ def execute(request)
72
+ end
73
+
74
+ # @api private
75
+ sig { params(size: Integer).returns(T.attached_class) }
76
+ def self.new(
77
+ size: Handinger::Internal::Transport::PooledNetRequester::DEFAULT_MAX_CONNECTIONS
78
+ )
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,104 @@
1
+ # typed: strong
2
+
3
+ module Handinger
4
+ module Internal
5
+ module Type
6
+ # @api private
7
+ #
8
+ # Array of items of a given type.
9
+ class ArrayOf
10
+ include Handinger::Internal::Type::Converter
11
+ include Handinger::Internal::Util::SorbetRuntimeSupport
12
+
13
+ abstract!
14
+
15
+ Elem = type_member(:out)
16
+
17
+ sig do
18
+ params(
19
+ type_info:
20
+ T.any(
21
+ Handinger::Internal::AnyHash,
22
+ T.proc.returns(Handinger::Internal::Type::Converter::Input),
23
+ Handinger::Internal::Type::Converter::Input
24
+ ),
25
+ spec: Handinger::Internal::AnyHash
26
+ ).returns(T.attached_class)
27
+ end
28
+ def self.[](type_info, spec = {})
29
+ end
30
+
31
+ sig { params(other: T.anything).returns(T::Boolean) }
32
+ def ===(other)
33
+ end
34
+
35
+ sig { params(other: T.anything).returns(T::Boolean) }
36
+ def ==(other)
37
+ end
38
+
39
+ sig { returns(Integer) }
40
+ def hash
41
+ end
42
+
43
+ # @api private
44
+ sig do
45
+ override
46
+ .params(
47
+ value: T.any(T::Array[T.anything], T.anything),
48
+ state: Handinger::Internal::Type::Converter::CoerceState
49
+ )
50
+ .returns(T.any(T::Array[T.anything], T.anything))
51
+ end
52
+ def coerce(value, state:)
53
+ end
54
+
55
+ # @api private
56
+ sig do
57
+ override
58
+ .params(
59
+ value: T.any(T::Array[T.anything], T.anything),
60
+ state: Handinger::Internal::Type::Converter::DumpState
61
+ )
62
+ .returns(T.any(T::Array[T.anything], T.anything))
63
+ end
64
+ def dump(value, state:)
65
+ end
66
+
67
+ # @api private
68
+ sig { returns(T.anything) }
69
+ def to_sorbet_type
70
+ end
71
+
72
+ # @api private
73
+ sig { returns(Elem) }
74
+ protected def item_type
75
+ end
76
+
77
+ # @api private
78
+ sig { returns(T::Boolean) }
79
+ protected def nilable?
80
+ end
81
+
82
+ # @api private
83
+ sig do
84
+ params(
85
+ type_info:
86
+ T.any(
87
+ Handinger::Internal::AnyHash,
88
+ T.proc.returns(Handinger::Internal::Type::Converter::Input),
89
+ Handinger::Internal::Type::Converter::Input
90
+ ),
91
+ spec: Handinger::Internal::AnyHash
92
+ ).void
93
+ end
94
+ def initialize(type_info, spec = {})
95
+ end
96
+
97
+ # @api private
98
+ sig { params(depth: Integer).returns(String) }
99
+ def inspect(depth: 0)
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end