oursprivacy-ingest 0.1.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.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/.ignore +2 -0
  3. data/CHANGELOG.md +16 -0
  4. data/README.md +206 -0
  5. data/SECURITY.md +27 -0
  6. data/lib/oursprivacy_ingest/client.rb +64 -0
  7. data/lib/oursprivacy_ingest/errors.rb +228 -0
  8. data/lib/oursprivacy_ingest/file_part.rb +58 -0
  9. data/lib/oursprivacy_ingest/internal/transport/base_client.rb +573 -0
  10. data/lib/oursprivacy_ingest/internal/transport/pooled_net_requester.rb +204 -0
  11. data/lib/oursprivacy_ingest/internal/type/array_of.rb +168 -0
  12. data/lib/oursprivacy_ingest/internal/type/base_model.rb +534 -0
  13. data/lib/oursprivacy_ingest/internal/type/base_page.rb +55 -0
  14. data/lib/oursprivacy_ingest/internal/type/boolean.rb +77 -0
  15. data/lib/oursprivacy_ingest/internal/type/converter.rb +327 -0
  16. data/lib/oursprivacy_ingest/internal/type/enum.rb +133 -0
  17. data/lib/oursprivacy_ingest/internal/type/file_input.rb +111 -0
  18. data/lib/oursprivacy_ingest/internal/type/hash_of.rb +188 -0
  19. data/lib/oursprivacy_ingest/internal/type/request_parameters.rb +42 -0
  20. data/lib/oursprivacy_ingest/internal/type/union.rb +245 -0
  21. data/lib/oursprivacy_ingest/internal/type/unknown.rb +81 -0
  22. data/lib/oursprivacy_ingest/internal/util.rb +915 -0
  23. data/lib/oursprivacy_ingest/internal.rb +20 -0
  24. data/lib/oursprivacy_ingest/models/track_event_params.rb +1009 -0
  25. data/lib/oursprivacy_ingest/models/track_event_response.rb +26 -0
  26. data/lib/oursprivacy_ingest/models/visitor_upsert_params.rb +972 -0
  27. data/lib/oursprivacy_ingest/models/visitor_upsert_response.rb +26 -0
  28. data/lib/oursprivacy_ingest/models.rb +48 -0
  29. data/lib/oursprivacy_ingest/request_options.rb +79 -0
  30. data/lib/oursprivacy_ingest/resources/track.rb +61 -0
  31. data/lib/oursprivacy_ingest/resources/visitor.rb +52 -0
  32. data/lib/oursprivacy_ingest/version.rb +5 -0
  33. data/lib/oursprivacy_ingest.rb +59 -0
  34. data/manifest.yaml +15 -0
  35. data/rbi/oursprivacy_ingest/client.rbi +46 -0
  36. data/rbi/oursprivacy_ingest/errors.rbi +205 -0
  37. data/rbi/oursprivacy_ingest/file_part.rbi +37 -0
  38. data/rbi/oursprivacy_ingest/internal/transport/base_client.rbi +305 -0
  39. data/rbi/oursprivacy_ingest/internal/transport/pooled_net_requester.rbi +80 -0
  40. data/rbi/oursprivacy_ingest/internal/type/array_of.rbi +108 -0
  41. data/rbi/oursprivacy_ingest/internal/type/base_model.rbi +316 -0
  42. data/rbi/oursprivacy_ingest/internal/type/base_page.rbi +43 -0
  43. data/rbi/oursprivacy_ingest/internal/type/boolean.rbi +58 -0
  44. data/rbi/oursprivacy_ingest/internal/type/converter.rbi +225 -0
  45. data/rbi/oursprivacy_ingest/internal/type/enum.rbi +82 -0
  46. data/rbi/oursprivacy_ingest/internal/type/file_input.rbi +59 -0
  47. data/rbi/oursprivacy_ingest/internal/type/hash_of.rbi +108 -0
  48. data/rbi/oursprivacy_ingest/internal/type/request_parameters.rbi +33 -0
  49. data/rbi/oursprivacy_ingest/internal/type/union.rbi +134 -0
  50. data/rbi/oursprivacy_ingest/internal/type/unknown.rbi +58 -0
  51. data/rbi/oursprivacy_ingest/internal/util.rbi +487 -0
  52. data/rbi/oursprivacy_ingest/internal.rbi +18 -0
  53. data/rbi/oursprivacy_ingest/models/track_event_params.rbi +1072 -0
  54. data/rbi/oursprivacy_ingest/models/track_event_response.rbi +71 -0
  55. data/rbi/oursprivacy_ingest/models/visitor_upsert_params.rbi +1035 -0
  56. data/rbi/oursprivacy_ingest/models/visitor_upsert_response.rbi +71 -0
  57. data/rbi/oursprivacy_ingest/models.rbi +7 -0
  58. data/rbi/oursprivacy_ingest/request_options.rbi +64 -0
  59. data/rbi/oursprivacy_ingest/resources/track.rbi +74 -0
  60. data/rbi/oursprivacy_ingest/resources/visitor.rbi +58 -0
  61. data/rbi/oursprivacy_ingest/version.rbi +5 -0
  62. data/sig/oursprivacy_ingest/client.rbs +25 -0
  63. data/sig/oursprivacy_ingest/errors.rbs +117 -0
  64. data/sig/oursprivacy_ingest/file_part.rbs +21 -0
  65. data/sig/oursprivacy_ingest/internal/transport/base_client.rbs +131 -0
  66. data/sig/oursprivacy_ingest/internal/transport/pooled_net_requester.rbs +45 -0
  67. data/sig/oursprivacy_ingest/internal/type/array_of.rbs +48 -0
  68. data/sig/oursprivacy_ingest/internal/type/base_model.rbs +106 -0
  69. data/sig/oursprivacy_ingest/internal/type/base_page.rbs +24 -0
  70. data/sig/oursprivacy_ingest/internal/type/boolean.rbs +26 -0
  71. data/sig/oursprivacy_ingest/internal/type/converter.rbs +79 -0
  72. data/sig/oursprivacy_ingest/internal/type/enum.rbs +32 -0
  73. data/sig/oursprivacy_ingest/internal/type/file_input.rbs +25 -0
  74. data/sig/oursprivacy_ingest/internal/type/hash_of.rbs +48 -0
  75. data/sig/oursprivacy_ingest/internal/type/request_parameters.rbs +20 -0
  76. data/sig/oursprivacy_ingest/internal/type/union.rbs +52 -0
  77. data/sig/oursprivacy_ingest/internal/type/unknown.rbs +26 -0
  78. data/sig/oursprivacy_ingest/internal/util.rbs +185 -0
  79. data/sig/oursprivacy_ingest/internal.rbs +10 -0
  80. data/sig/oursprivacy_ingest/models/track_event_params.rbs +673 -0
  81. data/sig/oursprivacy_ingest/models/track_event_response.rbs +28 -0
  82. data/sig/oursprivacy_ingest/models/visitor_upsert_params.rbs +653 -0
  83. data/sig/oursprivacy_ingest/models/visitor_upsert_response.rbs +28 -0
  84. data/sig/oursprivacy_ingest/models.rbs +5 -0
  85. data/sig/oursprivacy_ingest/request_options.rbs +36 -0
  86. data/sig/oursprivacy_ingest/resources/track.rbs +21 -0
  87. data/sig/oursprivacy_ingest/resources/visitor.rbs +17 -0
  88. data/sig/oursprivacy_ingest/version.rbs +3 -0
  89. metadata +146 -0
@@ -0,0 +1,305 @@
1
+ # typed: strong
2
+
3
+ module OursprivacyIngest
4
+ module Internal
5
+ module Transport
6
+ # @api private
7
+ class BaseClient
8
+ extend OursprivacyIngest::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
+ OursprivacyIngest::Internal::Type::BasePage[
48
+ OursprivacyIngest::Internal::Type::BaseModel
49
+ ]
50
+ ]
51
+ ),
52
+ stream: T.nilable(T::Class[T.anything]),
53
+ model:
54
+ T.nilable(OursprivacyIngest::Internal::Type::Converter::Input),
55
+ options: T.nilable(OursprivacyIngest::RequestOptions::OrHash)
56
+ }
57
+ end
58
+
59
+ RequestInput =
60
+ T.type_alias do
61
+ {
62
+ method: Symbol,
63
+ url: URI::Generic,
64
+ headers: T::Hash[String, String],
65
+ body: T.anything,
66
+ max_retries: Integer,
67
+ timeout: Float
68
+ }
69
+ end
70
+
71
+ # from whatwg fetch spec
72
+ MAX_REDIRECTS = 20
73
+
74
+ PLATFORM_HEADERS = T::Hash[String, String]
75
+
76
+ class << self
77
+ # @api private
78
+ sig do
79
+ params(
80
+ req:
81
+ OursprivacyIngest::Internal::Transport::BaseClient::RequestComponents
82
+ ).void
83
+ end
84
+ def validate!(req)
85
+ end
86
+
87
+ # @api private
88
+ sig do
89
+ params(status: Integer, headers: T::Hash[String, String]).returns(
90
+ T::Boolean
91
+ )
92
+ end
93
+ def should_retry?(status, headers:)
94
+ end
95
+
96
+ # @api private
97
+ sig do
98
+ params(
99
+ request:
100
+ OursprivacyIngest::Internal::Transport::BaseClient::RequestInput,
101
+ status: Integer,
102
+ response_headers: T::Hash[String, String]
103
+ ).returns(
104
+ OursprivacyIngest::Internal::Transport::BaseClient::RequestInput
105
+ )
106
+ end
107
+ def follow_redirect(request, status:, response_headers:)
108
+ end
109
+
110
+ # @api private
111
+ sig do
112
+ params(
113
+ status:
114
+ T.any(Integer, OursprivacyIngest::Errors::APIConnectionError),
115
+ stream: T.nilable(T::Enumerable[String])
116
+ ).void
117
+ end
118
+ def reap_connection!(status, stream:)
119
+ end
120
+ end
121
+
122
+ sig { returns(URI::Generic) }
123
+ attr_reader :base_url
124
+
125
+ sig { returns(Float) }
126
+ attr_reader :timeout
127
+
128
+ sig { returns(Integer) }
129
+ attr_reader :max_retries
130
+
131
+ sig { returns(Float) }
132
+ attr_reader :initial_retry_delay
133
+
134
+ sig { returns(Float) }
135
+ attr_reader :max_retry_delay
136
+
137
+ sig { returns(T::Hash[String, String]) }
138
+ attr_reader :headers
139
+
140
+ sig { returns(T.nilable(String)) }
141
+ attr_reader :idempotency_header
142
+
143
+ # @api private
144
+ sig do
145
+ returns(OursprivacyIngest::Internal::Transport::PooledNetRequester)
146
+ end
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 { returns(String) }
184
+ private def user_agent
185
+ end
186
+
187
+ # @api private
188
+ sig { returns(String) }
189
+ private def generate_idempotency_key
190
+ end
191
+
192
+ # @api private
193
+ sig do
194
+ overridable
195
+ .params(
196
+ req:
197
+ OursprivacyIngest::Internal::Transport::BaseClient::RequestComponents,
198
+ opts: OursprivacyIngest::Internal::AnyHash
199
+ )
200
+ .returns(
201
+ OursprivacyIngest::Internal::Transport::BaseClient::RequestInput
202
+ )
203
+ end
204
+ private def build_request(req, opts)
205
+ end
206
+
207
+ # @api private
208
+ sig do
209
+ params(
210
+ headers: T::Hash[String, String],
211
+ retry_count: Integer
212
+ ).returns(Float)
213
+ end
214
+ private def retry_delay(headers, retry_count:)
215
+ end
216
+
217
+ # @api private
218
+ sig do
219
+ params(
220
+ request:
221
+ OursprivacyIngest::Internal::Transport::BaseClient::RequestInput,
222
+ redirect_count: Integer,
223
+ retry_count: Integer,
224
+ send_retry_header: T::Boolean
225
+ ).returns([Integer, Net::HTTPResponse, T::Enumerable[String]])
226
+ end
227
+ def send_request(
228
+ request,
229
+ redirect_count:,
230
+ retry_count:,
231
+ send_retry_header:
232
+ )
233
+ end
234
+
235
+ # Execute the request specified by `req`. This is the method that all resource
236
+ # methods call into.
237
+ #
238
+ # @overload request(method, path, query: {}, headers: {}, body: nil, unwrap: nil, page: nil, stream: nil, model: OursprivacyIngest::Internal::Type::Unknown, options: {})
239
+ sig do
240
+ params(
241
+ method: Symbol,
242
+ path: T.any(String, T::Array[String]),
243
+ query:
244
+ T.nilable(
245
+ T::Hash[String, T.nilable(T.any(T::Array[String], String))]
246
+ ),
247
+ headers:
248
+ T.nilable(
249
+ T::Hash[
250
+ String,
251
+ T.nilable(
252
+ T.any(
253
+ String,
254
+ Integer,
255
+ T::Array[T.nilable(T.any(String, Integer))]
256
+ )
257
+ )
258
+ ]
259
+ ),
260
+ body: T.nilable(T.anything),
261
+ unwrap:
262
+ T.nilable(
263
+ T.any(
264
+ Symbol,
265
+ Integer,
266
+ T::Array[T.any(Symbol, Integer)],
267
+ T.proc.params(arg0: T.anything).returns(T.anything)
268
+ )
269
+ ),
270
+ page:
271
+ T.nilable(
272
+ T::Class[
273
+ OursprivacyIngest::Internal::Type::BasePage[
274
+ OursprivacyIngest::Internal::Type::BaseModel
275
+ ]
276
+ ]
277
+ ),
278
+ stream: T.nilable(T::Class[T.anything]),
279
+ model:
280
+ T.nilable(OursprivacyIngest::Internal::Type::Converter::Input),
281
+ options: T.nilable(OursprivacyIngest::RequestOptions::OrHash)
282
+ ).returns(T.anything)
283
+ end
284
+ def request(
285
+ method,
286
+ path,
287
+ query: {},
288
+ headers: {},
289
+ body: nil,
290
+ unwrap: nil,
291
+ page: nil,
292
+ stream: nil,
293
+ model: OursprivacyIngest::Internal::Type::Unknown,
294
+ options: {}
295
+ )
296
+ end
297
+
298
+ # @api private
299
+ sig { returns(String) }
300
+ def inspect
301
+ end
302
+ end
303
+ end
304
+ end
305
+ end
@@ -0,0 +1,80 @@
1
+ # typed: strong
2
+
3
+ module OursprivacyIngest
4
+ module Internal
5
+ module Transport
6
+ # @api private
7
+ class PooledNetRequester
8
+ extend OursprivacyIngest::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 { params(url: URI::Generic).returns(Net::HTTP) }
30
+ def connect(url)
31
+ end
32
+
33
+ # @api private
34
+ sig { params(conn: Net::HTTP, deadline: Float).void }
35
+ def calibrate_socket_timeout(conn, deadline)
36
+ end
37
+
38
+ # @api private
39
+ sig do
40
+ params(
41
+ request:
42
+ OursprivacyIngest::Internal::Transport::PooledNetRequester::Request,
43
+ blk: T.proc.params(arg0: String).void
44
+ ).returns([Net::HTTPGenericRequest, T.proc.void])
45
+ end
46
+ def build_request(request, &blk)
47
+ end
48
+ end
49
+
50
+ # @api private
51
+ sig do
52
+ params(
53
+ url: URI::Generic,
54
+ deadline: Float,
55
+ blk: T.proc.params(arg0: Net::HTTP).void
56
+ ).void
57
+ end
58
+ private def with_pool(url, deadline:, &blk)
59
+ end
60
+
61
+ # @api private
62
+ sig do
63
+ params(
64
+ request:
65
+ OursprivacyIngest::Internal::Transport::PooledNetRequester::Request
66
+ ).returns([Integer, Net::HTTPResponse, T::Enumerable[String]])
67
+ end
68
+ def execute(request)
69
+ end
70
+
71
+ # @api private
72
+ sig { params(size: Integer).returns(T.attached_class) }
73
+ def self.new(
74
+ size: OursprivacyIngest::Internal::Transport::PooledNetRequester::DEFAULT_MAX_CONNECTIONS
75
+ )
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,108 @@
1
+ # typed: strong
2
+
3
+ module OursprivacyIngest
4
+ module Internal
5
+ module Type
6
+ # @api private
7
+ #
8
+ # Array of items of a given type.
9
+ class ArrayOf
10
+ include OursprivacyIngest::Internal::Type::Converter
11
+ include OursprivacyIngest::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
+ OursprivacyIngest::Internal::AnyHash,
22
+ T.proc.returns(
23
+ OursprivacyIngest::Internal::Type::Converter::Input
24
+ ),
25
+ OursprivacyIngest::Internal::Type::Converter::Input
26
+ ),
27
+ spec: OursprivacyIngest::Internal::AnyHash
28
+ ).returns(T.attached_class)
29
+ end
30
+ def self.[](type_info, spec = {})
31
+ end
32
+
33
+ sig { params(other: T.anything).returns(T::Boolean) }
34
+ def ===(other)
35
+ end
36
+
37
+ sig { params(other: T.anything).returns(T::Boolean) }
38
+ def ==(other)
39
+ end
40
+
41
+ sig { returns(Integer) }
42
+ def hash
43
+ end
44
+
45
+ # @api private
46
+ sig do
47
+ override
48
+ .params(
49
+ value: T.any(T::Array[T.anything], T.anything),
50
+ state: OursprivacyIngest::Internal::Type::Converter::CoerceState
51
+ )
52
+ .returns(T.any(T::Array[T.anything], T.anything))
53
+ end
54
+ def coerce(value, state:)
55
+ end
56
+
57
+ # @api private
58
+ sig do
59
+ override
60
+ .params(
61
+ value: T.any(T::Array[T.anything], T.anything),
62
+ state: OursprivacyIngest::Internal::Type::Converter::DumpState
63
+ )
64
+ .returns(T.any(T::Array[T.anything], T.anything))
65
+ end
66
+ def dump(value, state:)
67
+ end
68
+
69
+ # @api private
70
+ sig { returns(T.anything) }
71
+ def to_sorbet_type
72
+ end
73
+
74
+ # @api private
75
+ sig { returns(Elem) }
76
+ protected def item_type
77
+ end
78
+
79
+ # @api private
80
+ sig { returns(T::Boolean) }
81
+ protected def nilable?
82
+ end
83
+
84
+ # @api private
85
+ sig do
86
+ params(
87
+ type_info:
88
+ T.any(
89
+ OursprivacyIngest::Internal::AnyHash,
90
+ T.proc.returns(
91
+ OursprivacyIngest::Internal::Type::Converter::Input
92
+ ),
93
+ OursprivacyIngest::Internal::Type::Converter::Input
94
+ ),
95
+ spec: OursprivacyIngest::Internal::AnyHash
96
+ ).void
97
+ end
98
+ def initialize(type_info, spec = {})
99
+ end
100
+
101
+ # @api private
102
+ sig { params(depth: Integer).returns(String) }
103
+ def inspect(depth: 0)
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end