ipmax 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.
- checksums.yaml +7 -0
- data/LICENSE +202 -0
- data/README.md +89 -0
- data/lib/ipmax/client.rb +150 -0
- data/lib/ipmax/errors.rb +40 -0
- data/lib/ipmax/internal/lru_cache.rb +40 -0
- data/lib/ipmax/internal/schema.rb +79 -0
- data/lib/ipmax/models.rb +571 -0
- data/lib/ipmax/version.rb +5 -0
- data/lib/ipmax.rb +12 -0
- data/sig/ipmax.rbs +892 -0
- metadata +53 -0
data/sig/ipmax.rbs
ADDED
|
@@ -0,0 +1,892 @@
|
|
|
1
|
+
module IPMax
|
|
2
|
+
VERSION: String
|
|
3
|
+
|
|
4
|
+
class Client
|
|
5
|
+
BACKOFF_BASE: Float
|
|
6
|
+
BACKOFF_CAP: Float
|
|
7
|
+
NETWORK_ERRORS: Array[singleton(Exception)]
|
|
8
|
+
|
|
9
|
+
interface _Connection
|
|
10
|
+
def request: (Net::HTTPRequest request) -> Net::HTTPResponse
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
type request_class = singleton(Net::HTTP::Get) | singleton(Net::HTTP::Post)
|
|
14
|
+
|
|
15
|
+
@api_key: String?
|
|
16
|
+
@host: String
|
|
17
|
+
@port: Integer
|
|
18
|
+
@use_ssl: bool
|
|
19
|
+
@path_prefix: String
|
|
20
|
+
@timeout: Float | Integer
|
|
21
|
+
@max_retries: Integer
|
|
22
|
+
@http: _Connection?
|
|
23
|
+
@cache: Internal::LruCache
|
|
24
|
+
|
|
25
|
+
def initialize: (
|
|
26
|
+
?api_key: String?,
|
|
27
|
+
?base_url: String,
|
|
28
|
+
?timeout: Float | Integer,
|
|
29
|
+
?max_retries: Integer,
|
|
30
|
+
?cache_size: Integer,
|
|
31
|
+
?cache_ttl: Numeric,
|
|
32
|
+
?http: _Connection?
|
|
33
|
+
) -> void
|
|
34
|
+
|
|
35
|
+
def catalog: () -> Models::Catalog
|
|
36
|
+
def account: () -> Models::Account
|
|
37
|
+
def geoip: (String ip, ?idempotency_key: String?) -> Models::GeoIpData
|
|
38
|
+
def intelligence: (String ip, ?idempotency_key: String?) -> Models::IntelligenceData
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
def lookup: [T] (String product, String ip, String? idempotency_key, Class envelope) -> T
|
|
43
|
+
def request: (request_class method, String path) -> Net::HTTPRequest
|
|
44
|
+
def fetch: (Net::HTTPRequest request, Class envelope) -> untyped
|
|
45
|
+
def perform: (Net::HTTPRequest request) -> Net::HTTPResponse
|
|
46
|
+
def connection: () -> _Connection
|
|
47
|
+
def api_error: (Net::HTTPResponse response) -> IPMax::ApiError
|
|
48
|
+
def error_class: (Integer status) -> singleton(ApiError)
|
|
49
|
+
def parse: (String? body) -> untyped
|
|
50
|
+
def retry_after: (String? header) -> Float?
|
|
51
|
+
def retryable_status?: (Integer status) -> bool
|
|
52
|
+
def backoff: (Integer attempt) -> Float
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
class Error < StandardError
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
class ApiError < Error
|
|
59
|
+
attr_reader status: Integer
|
|
60
|
+
attr_reader code: Integer?
|
|
61
|
+
attr_reader request_id: String?
|
|
62
|
+
attr_reader retry_after: Float?
|
|
63
|
+
|
|
64
|
+
@retryable: bool
|
|
65
|
+
|
|
66
|
+
def initialize: (String message, status: Integer, code: Integer?, request_id: String?, retryable: bool, retry_after: Float?) -> void
|
|
67
|
+
def retryable?: () -> bool
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
class InvalidRequestError < ApiError
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
class AuthenticationError < ApiError
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
class InsufficientBalanceError < ApiError
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
class NotFoundError < ApiError
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
class ConflictError < ApiError
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
class RateLimitError < ApiError
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
class ServerError < ApiError
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
class ConnectionError < Error
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
class TimeoutError < ConnectionError
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
class DecodeError < Error
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
module Internal
|
|
101
|
+
module Schema
|
|
102
|
+
type scalar = :string | :integer | :float | :boolean | :null
|
|
103
|
+
type field_type = scalar | Module | [field_type]
|
|
104
|
+
|
|
105
|
+
class Field
|
|
106
|
+
attr_reader name: Symbol
|
|
107
|
+
attr_reader key: String
|
|
108
|
+
attr_reader type: field_type
|
|
109
|
+
attr_reader required: bool
|
|
110
|
+
attr_reader nullable: bool
|
|
111
|
+
|
|
112
|
+
def self.new: (name: Symbol, key: String, type: field_type, required: bool, nullable: bool) -> instance
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
class Union
|
|
116
|
+
attr_reader tag: String
|
|
117
|
+
attr_reader variants: Hash[String, Class]
|
|
118
|
+
attr_reader fallback: Class
|
|
119
|
+
|
|
120
|
+
def self.new: (tag: String, variants: Hash[String, Class], fallback: Class) -> instance
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
class Builder
|
|
124
|
+
attr_reader fields: Array[Field]
|
|
125
|
+
|
|
126
|
+
@fields: Array[Field]
|
|
127
|
+
|
|
128
|
+
def initialize: () -> void
|
|
129
|
+
def required: (Symbol name, field_type type, ?null: bool, ?key: String) -> Array[Field]
|
|
130
|
+
def optional: (Symbol name, field_type type, ?key: String) -> Array[Field]
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
MODELS: Hash[Module, Array[Field]]
|
|
134
|
+
UNIONS: Hash[Module, Union]
|
|
135
|
+
|
|
136
|
+
def self.define: (*Module modules) { (Builder) [self: Builder] -> void } -> untyped
|
|
137
|
+
def self.union: (Module mod, tag: String, variants: Hash[String, Class], fallback: Class) -> Union
|
|
138
|
+
def self.build: (untyped type, untyped object, ?String? path) -> untyped
|
|
139
|
+
def self.attribute: (Field field, Hash[String, untyped] object, String? path) -> untyped
|
|
140
|
+
def self.coerce: (field_type type, untyped value, String path) -> untyped
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
class LruCache
|
|
144
|
+
@capacity: Integer
|
|
145
|
+
@ttl: Numeric
|
|
146
|
+
@entries: Hash[untyped, [Float, untyped]]
|
|
147
|
+
@monitor: Monitor
|
|
148
|
+
|
|
149
|
+
def initialize: (Integer capacity, Numeric ttl) -> void
|
|
150
|
+
def get: (untyped key) -> untyped
|
|
151
|
+
def set: (untyped key, untyped value) -> void
|
|
152
|
+
|
|
153
|
+
private
|
|
154
|
+
|
|
155
|
+
def now: () -> Float
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
module Models
|
|
160
|
+
module AnonymizerExemptionReason
|
|
161
|
+
CLOUDFLARE_CDN_ORIGIN: String
|
|
162
|
+
SEARCH_ENGINE_CRAWLER: String
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
module CpePart
|
|
166
|
+
APPLICATION: String
|
|
167
|
+
OPERATING_SYSTEM: String
|
|
168
|
+
HARDWARE: String
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
module ErrorCode
|
|
172
|
+
INVALID_REQUEST: Integer
|
|
173
|
+
INVALID_PAYLOAD: Integer
|
|
174
|
+
INVALID_IP: Integer
|
|
175
|
+
IP_NOT_FOUND: Integer
|
|
176
|
+
ROUTE_NOT_FOUND: Integer
|
|
177
|
+
INVALID_API_KEY: Integer
|
|
178
|
+
RATE_LIMIT_EXCEEDED: Integer
|
|
179
|
+
SERVICE_UNAVAILABLE: Integer
|
|
180
|
+
INTERNAL_ERROR: Integer
|
|
181
|
+
INSUFFICIENT_BALANCE: Integer
|
|
182
|
+
IDEMPOTENCY_KEY_CONFLICT: Integer
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
module LiveIntelligenceTag
|
|
186
|
+
HOSTING: String
|
|
187
|
+
PUBLIC_DNS_RESOLVER: String
|
|
188
|
+
WEB_SERVER: String
|
|
189
|
+
VPN: String
|
|
190
|
+
RESIDENTIAL_PROXY: String
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
module NetworkClass
|
|
194
|
+
MOBILE: String
|
|
195
|
+
HOSTING: String
|
|
196
|
+
RESIDENTIAL: String
|
|
197
|
+
BUSINESS: String
|
|
198
|
+
ORGANIZATION: String
|
|
199
|
+
GOVERNMENT: String
|
|
200
|
+
MILITARY: String
|
|
201
|
+
EDUCATION: String
|
|
202
|
+
LIBRARY: String
|
|
203
|
+
DEDICATED: String
|
|
204
|
+
SATELLITE: String
|
|
205
|
+
IXP: String
|
|
206
|
+
SEARCH_ENGINE: String
|
|
207
|
+
AI_CRAWLER: String
|
|
208
|
+
UNKNOWN: String
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
module NetworkClassSource
|
|
212
|
+
DOMESTIC_ISP: String
|
|
213
|
+
USAGE_TYPE: String
|
|
214
|
+
MOBILE_CARRIER: String
|
|
215
|
+
CONNECTION_TYPE: String
|
|
216
|
+
NETWORK_TAG: String
|
|
217
|
+
THREAT_INTELLIGENCE: String
|
|
218
|
+
ASN_TAG: String
|
|
219
|
+
IXP: String
|
|
220
|
+
NONE: String
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
module Product
|
|
224
|
+
GEOIP: String
|
|
225
|
+
INTELLIGENCE: String
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
module PtrConfidenceLevel
|
|
229
|
+
HIGH: String
|
|
230
|
+
MEDIUM: String
|
|
231
|
+
LOW: String
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
module PtrDatasetName
|
|
235
|
+
GEONAMES: String
|
|
236
|
+
OURAIRPORTS: String
|
|
237
|
+
OPERATOR_OVERRIDES: String
|
|
238
|
+
UNLOCODE: String
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
module PtrHintKind
|
|
242
|
+
IATA: String
|
|
243
|
+
UNLOCODE: String
|
|
244
|
+
CLLI: String
|
|
245
|
+
CITY_NAME: String
|
|
246
|
+
OPERATOR_CODE: String
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
module RevokedNetworkTag
|
|
250
|
+
BUSINESS_BROADBAND: String
|
|
251
|
+
HOME_ISP: String
|
|
252
|
+
MOBILE_ISP: String
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
module RpkiSource
|
|
256
|
+
RTR_LIVE: String
|
|
257
|
+
LOCAL_CACHE: String
|
|
258
|
+
LOCAL_DB: String
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
module RpkiStatus
|
|
262
|
+
VALID: String
|
|
263
|
+
INVALID_ASN: String
|
|
264
|
+
INVALID_LENGTH: String
|
|
265
|
+
UNKNOWN: String
|
|
266
|
+
NOT_ROUTED: String
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
class AbuseCategoryCount < Data
|
|
270
|
+
attr_reader id: Integer
|
|
271
|
+
attr_reader count: Integer
|
|
272
|
+
|
|
273
|
+
def self.new: (id: Integer, count: Integer) -> instance
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
class AbuseContact < Data
|
|
277
|
+
attr_reader name: String?
|
|
278
|
+
attr_reader address: String?
|
|
279
|
+
attr_reader country: String?
|
|
280
|
+
attr_reader email: String?
|
|
281
|
+
attr_reader network: String?
|
|
282
|
+
attr_reader phone: String?
|
|
283
|
+
attr_reader source: String?
|
|
284
|
+
|
|
285
|
+
def self.new: (name: String?, address: String?, country: String?, email: String?, network: String?, phone: String?, source: String?) -> instance
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
class AbuseReports < Data
|
|
289
|
+
attr_reader confidence_score: Integer
|
|
290
|
+
attr_reader total_reports: Integer
|
|
291
|
+
attr_reader distinct_reporters: Integer
|
|
292
|
+
attr_reader last_reported_at: String?
|
|
293
|
+
attr_reader is_whitelisted: bool?
|
|
294
|
+
attr_reader categories: Array[AbuseCategoryCount]
|
|
295
|
+
|
|
296
|
+
def self.new: (confidence_score: Integer, total_reports: Integer, distinct_reporters: Integer, last_reported_at: String?, is_whitelisted: bool?, categories: Array[AbuseCategoryCount]) -> instance
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
class Wallet < Data
|
|
300
|
+
attr_reader product: String
|
|
301
|
+
attr_reader balance_micros: Float
|
|
302
|
+
|
|
303
|
+
def self.new: (product: String, balance_micros: Float) -> instance
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
class LedgerEntry < Data
|
|
307
|
+
attr_reader id: String
|
|
308
|
+
attr_reader product: String
|
|
309
|
+
attr_reader kind: String
|
|
310
|
+
attr_reader amount_micros: Float
|
|
311
|
+
attr_reader balance_micros: Float
|
|
312
|
+
attr_reader reference: String
|
|
313
|
+
attr_reader created_at: String
|
|
314
|
+
|
|
315
|
+
def self.new: (id: String, product: String, kind: String, amount_micros: Float, balance_micros: Float, reference: String, created_at: String) -> instance
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
class Account < Data
|
|
319
|
+
attr_reader id: String
|
|
320
|
+
attr_reader name: String
|
|
321
|
+
attr_reader key_prefix: String
|
|
322
|
+
attr_reader wallets: Array[Wallet]
|
|
323
|
+
attr_reader entries: Array[LedgerEntry]
|
|
324
|
+
|
|
325
|
+
def self.new: (id: String, name: String, key_prefix: String, wallets: Array[Wallet], entries: Array[LedgerEntry]) -> instance
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
class AccountResponse < Data
|
|
329
|
+
attr_reader status: bool
|
|
330
|
+
attr_reader data: Account
|
|
331
|
+
|
|
332
|
+
def self.new: (status: bool, data: Account) -> instance
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
class ApiError < Data
|
|
336
|
+
attr_reader code: Integer
|
|
337
|
+
attr_reader message: String
|
|
338
|
+
attr_reader request_id: String
|
|
339
|
+
attr_reader retryable: bool
|
|
340
|
+
|
|
341
|
+
def self.new: (code: Integer, message: String, request_id: String, retryable: bool) -> instance
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
class ErrorResponse < Data
|
|
345
|
+
attr_reader status: bool
|
|
346
|
+
attr_reader data: nil
|
|
347
|
+
attr_reader error: ApiError
|
|
348
|
+
|
|
349
|
+
def self.new: (status: bool, data: nil, error: ApiError) -> instance
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
class AsnEstimatedCapacity < Data
|
|
353
|
+
attr_reader lower_gbps: Float
|
|
354
|
+
attr_reader upper_gbps: Float?
|
|
355
|
+
attr_reader label: String
|
|
356
|
+
|
|
357
|
+
def self.new: (lower_gbps: Float, upper_gbps: Float?, label: String) -> instance
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
class AsnExchangePort < Data
|
|
361
|
+
attr_reader capacity_gbps: Float
|
|
362
|
+
attr_reader operational: bool?
|
|
363
|
+
attr_reader rs_peer: bool?
|
|
364
|
+
|
|
365
|
+
def self.new: (capacity_gbps: Float, operational: bool?, rs_peer: bool?) -> instance
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
class AsnExchange < Data
|
|
369
|
+
attr_reader name: String
|
|
370
|
+
attr_reader country_code: String?
|
|
371
|
+
attr_reader type: String
|
|
372
|
+
attr_reader ports: Array[AsnExchangePort]
|
|
373
|
+
|
|
374
|
+
def self.new: (name: String, country_code: String?, type: String, ports: Array[AsnExchangePort]) -> instance
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
class AsnConnectivity < Data
|
|
378
|
+
attr_reader declared_traffic: String
|
|
379
|
+
attr_reader exchanges_total: Integer?
|
|
380
|
+
attr_reader estimated_capacity: AsnEstimatedCapacity
|
|
381
|
+
attr_reader exchanges: Array[AsnExchange]
|
|
382
|
+
|
|
383
|
+
def self.new: (declared_traffic: String, exchanges_total: Integer?, estimated_capacity: AsnEstimatedCapacity, exchanges: Array[AsnExchange]) -> instance
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
class Blocklist < Data
|
|
387
|
+
attr_reader name: String
|
|
388
|
+
attr_reader site: String
|
|
389
|
+
attr_reader type: String
|
|
390
|
+
|
|
391
|
+
def self.new: (name: String, site: String, type: String) -> instance
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
class Price < Data
|
|
395
|
+
attr_reader product: String
|
|
396
|
+
attr_reader name: String
|
|
397
|
+
attr_reader unit_micros: Float
|
|
398
|
+
|
|
399
|
+
def self.new: (product: String, name: String, unit_micros: Float) -> instance
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
class Catalog < Data
|
|
403
|
+
attr_reader currency: String
|
|
404
|
+
attr_reader prices: Array[Price]
|
|
405
|
+
attr_reader purchase_email: String
|
|
406
|
+
attr_reader available: bool
|
|
407
|
+
|
|
408
|
+
def self.new: (currency: String, prices: Array[Price], purchase_email: String, available: bool) -> instance
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
class CatalogResponse < Data
|
|
412
|
+
attr_reader status: bool
|
|
413
|
+
attr_reader data: Catalog
|
|
414
|
+
|
|
415
|
+
def self.new: (status: bool, data: Catalog) -> instance
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
class Company < Data
|
|
419
|
+
attr_reader name: String?
|
|
420
|
+
attr_reader address: String?
|
|
421
|
+
attr_reader domain: String?
|
|
422
|
+
attr_reader phone: String?
|
|
423
|
+
attr_reader type: String?
|
|
424
|
+
attr_reader network: String?
|
|
425
|
+
attr_reader country: String?
|
|
426
|
+
attr_reader source: String?
|
|
427
|
+
|
|
428
|
+
def self.new: (name: String?, address: String?, domain: String?, phone: String?, type: String?, network: String?, country: String?, source: String?) -> instance
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
class CpeObservation < Data
|
|
432
|
+
attr_reader cpe: String
|
|
433
|
+
attr_reader part: String
|
|
434
|
+
attr_reader vendor: String
|
|
435
|
+
attr_reader product: String
|
|
436
|
+
attr_reader version: String?
|
|
437
|
+
|
|
438
|
+
def self.new: (cpe: String, part: String, vendor: String, product: String, version: String?) -> instance
|
|
439
|
+
end
|
|
440
|
+
|
|
441
|
+
class Currency < Data
|
|
442
|
+
attr_reader name: String
|
|
443
|
+
attr_reader code: String
|
|
444
|
+
attr_reader symbol: String
|
|
445
|
+
attr_reader native: String
|
|
446
|
+
attr_reader plural: String
|
|
447
|
+
|
|
448
|
+
def self.new: (name: String, code: String, symbol: String, native: String, plural: String) -> instance
|
|
449
|
+
end
|
|
450
|
+
|
|
451
|
+
class DnsHostnameEvidence < Data
|
|
452
|
+
attr_reader hostname: String
|
|
453
|
+
attr_reader kinds: Array[String]
|
|
454
|
+
attr_reader sources: Array[String]
|
|
455
|
+
attr_reader forward_confirmed: bool
|
|
456
|
+
attr_reader first_seen: String?
|
|
457
|
+
attr_reader last_seen: String?
|
|
458
|
+
|
|
459
|
+
def self.new: (hostname: String, kinds: Array[String], sources: Array[String], forward_confirmed: bool, first_seen: String?, last_seen: String?) -> instance
|
|
460
|
+
end
|
|
461
|
+
|
|
462
|
+
class DnsPtrEvidence < Data
|
|
463
|
+
attr_reader hostname: String
|
|
464
|
+
attr_reader sources: Array[String]
|
|
465
|
+
attr_reader forward_confirmed: bool
|
|
466
|
+
attr_reader first_seen: String?
|
|
467
|
+
attr_reader last_seen: String?
|
|
468
|
+
|
|
469
|
+
def self.new: (hostname: String, sources: Array[String], forward_confirmed: bool, first_seen: String?, last_seen: String?) -> instance
|
|
470
|
+
end
|
|
471
|
+
|
|
472
|
+
class DnsRecords < Data
|
|
473
|
+
attr_reader ptr: Array[String]
|
|
474
|
+
attr_reader ptr_evidence: Array[DnsPtrEvidence]
|
|
475
|
+
attr_reader hostnames: Array[DnsHostnameEvidence]
|
|
476
|
+
attr_reader sources: Array[String]
|
|
477
|
+
attr_reader snapshot_id: String?
|
|
478
|
+
attr_reader updated_at: String?
|
|
479
|
+
|
|
480
|
+
def self.new: (ptr: Array[String], ptr_evidence: Array[DnsPtrEvidence], hostnames: Array[DnsHostnameEvidence], sources: Array[String], snapshot_id: String?, updated_at: String?) -> instance
|
|
481
|
+
end
|
|
482
|
+
|
|
483
|
+
class GeoIpAs < Data
|
|
484
|
+
attr_reader asn: String
|
|
485
|
+
attr_reader name: String
|
|
486
|
+
attr_reader name_en: String?
|
|
487
|
+
attr_reader country_code: String?
|
|
488
|
+
attr_reader domain: String
|
|
489
|
+
|
|
490
|
+
def self.new: (asn: String, name: String, name_en: String?, country_code: String?, domain: String) -> instance
|
|
491
|
+
end
|
|
492
|
+
|
|
493
|
+
class Geolocation < Data
|
|
494
|
+
attr_reader city: String
|
|
495
|
+
attr_reader region: String
|
|
496
|
+
attr_reader district: String
|
|
497
|
+
attr_reader region_code: String
|
|
498
|
+
attr_reader adcode: String
|
|
499
|
+
attr_reader country: String
|
|
500
|
+
attr_reader country_code: String
|
|
501
|
+
attr_reader continent: String
|
|
502
|
+
attr_reader continent_code: String
|
|
503
|
+
attr_reader latitude: Float?
|
|
504
|
+
attr_reader longitude: Float?
|
|
505
|
+
attr_reader timezone: String
|
|
506
|
+
attr_reader postal_code: String
|
|
507
|
+
attr_reader radius: Float?
|
|
508
|
+
attr_reader area_code: String?
|
|
509
|
+
attr_reader plus_code: String?
|
|
510
|
+
attr_reader country_en: String?
|
|
511
|
+
attr_reader country_zh: String?
|
|
512
|
+
attr_reader region_en: String?
|
|
513
|
+
attr_reader region_zh: String?
|
|
514
|
+
attr_reader city_en: String?
|
|
515
|
+
attr_reader city_zh: String?
|
|
516
|
+
attr_reader district_en: String?
|
|
517
|
+
attr_reader district_zh: String?
|
|
518
|
+
|
|
519
|
+
def self.new: (
|
|
520
|
+
city: String,
|
|
521
|
+
region: String,
|
|
522
|
+
district: String,
|
|
523
|
+
region_code: String,
|
|
524
|
+
adcode: String,
|
|
525
|
+
country: String,
|
|
526
|
+
country_code: String,
|
|
527
|
+
continent: String,
|
|
528
|
+
continent_code: String,
|
|
529
|
+
latitude: Float?,
|
|
530
|
+
longitude: Float?,
|
|
531
|
+
timezone: String,
|
|
532
|
+
postal_code: String,
|
|
533
|
+
radius: Float?,
|
|
534
|
+
area_code: String?,
|
|
535
|
+
plus_code: String?,
|
|
536
|
+
country_en: String?,
|
|
537
|
+
country_zh: String?,
|
|
538
|
+
region_en: String?,
|
|
539
|
+
region_zh: String?,
|
|
540
|
+
city_en: String?,
|
|
541
|
+
city_zh: String?,
|
|
542
|
+
district_en: String?,
|
|
543
|
+
district_zh: String?
|
|
544
|
+
) -> instance
|
|
545
|
+
end
|
|
546
|
+
|
|
547
|
+
class TimeZone < Data
|
|
548
|
+
attr_reader name: String
|
|
549
|
+
attr_reader abbr: String
|
|
550
|
+
attr_reader offset: String
|
|
551
|
+
attr_reader is_dst: bool
|
|
552
|
+
attr_reader current_time: String
|
|
553
|
+
|
|
554
|
+
def self.new: (name: String, abbr: String, offset: String, is_dst: bool, current_time: String) -> instance
|
|
555
|
+
end
|
|
556
|
+
|
|
557
|
+
class GeoIpData < Data
|
|
558
|
+
attr_reader as: GeoIpAs
|
|
559
|
+
attr_reader ip: String
|
|
560
|
+
attr_reader geo: Geolocation
|
|
561
|
+
attr_reader netmask: String
|
|
562
|
+
attr_reader prefix_length: Integer?
|
|
563
|
+
attr_reader is_bogon: bool
|
|
564
|
+
attr_reader currency: Currency?
|
|
565
|
+
attr_reader time_zone: TimeZone?
|
|
566
|
+
attr_reader calling_code: String?
|
|
567
|
+
|
|
568
|
+
def self.new: (as: GeoIpAs, ip: String, geo: Geolocation, netmask: String, prefix_length: Integer?, is_bogon: bool, currency: Currency?, time_zone: TimeZone?, calling_code: String?) -> instance
|
|
569
|
+
end
|
|
570
|
+
|
|
571
|
+
class GeoIpResponse < Data
|
|
572
|
+
attr_reader status: bool
|
|
573
|
+
attr_reader data: GeoIpData
|
|
574
|
+
|
|
575
|
+
def self.new: (status: bool, data: GeoIpData) -> instance
|
|
576
|
+
end
|
|
577
|
+
|
|
578
|
+
class IntelligenceAs < Data
|
|
579
|
+
attr_reader asn: String
|
|
580
|
+
attr_reader name: String
|
|
581
|
+
attr_reader name_en: String?
|
|
582
|
+
attr_reader country_code: String?
|
|
583
|
+
attr_reader domain: String
|
|
584
|
+
attr_reader type: String
|
|
585
|
+
attr_reader as_class: String?
|
|
586
|
+
attr_reader tags: Array[String]?
|
|
587
|
+
attr_reader connectivity: AsnConnectivity?
|
|
588
|
+
|
|
589
|
+
def self.new: (asn: String, name: String, name_en: String?, country_code: String?, domain: String, type: String, as_class: String?, tags: Array[String]?, connectivity: AsnConnectivity?) -> instance
|
|
590
|
+
end
|
|
591
|
+
|
|
592
|
+
class MobileCarrier < Data
|
|
593
|
+
attr_reader mcc: String
|
|
594
|
+
attr_reader mnc: String
|
|
595
|
+
attr_reader brand: String
|
|
596
|
+
|
|
597
|
+
def self.new: (mcc: String, mnc: String, brand: String) -> instance
|
|
598
|
+
end
|
|
599
|
+
|
|
600
|
+
class NetworkClassEvidence < Data
|
|
601
|
+
attr_reader network_class: String
|
|
602
|
+
attr_reader source: String
|
|
603
|
+
attr_reader scope: String
|
|
604
|
+
attr_reader value: String
|
|
605
|
+
|
|
606
|
+
def self.new: (network_class: String, source: String, scope: String, value: String) -> instance
|
|
607
|
+
end
|
|
608
|
+
|
|
609
|
+
class NetworkClassification < Data
|
|
610
|
+
attr_reader primary: String
|
|
611
|
+
attr_reader confidence: String
|
|
612
|
+
attr_reader source: String
|
|
613
|
+
attr_reader conflicts: Array[String]
|
|
614
|
+
attr_reader evidence: Array[NetworkClassEvidence]
|
|
615
|
+
|
|
616
|
+
def self.new: (primary: String, confidence: String, source: String, conflicts: Array[String], evidence: Array[NetworkClassEvidence]) -> instance
|
|
617
|
+
end
|
|
618
|
+
|
|
619
|
+
class NetworkInfo < Data
|
|
620
|
+
attr_reader connection_type: String
|
|
621
|
+
attr_reader usage_type: String
|
|
622
|
+
attr_reader address_type: String?
|
|
623
|
+
attr_reader net_speed: String
|
|
624
|
+
attr_reader tags: Array[String]
|
|
625
|
+
|
|
626
|
+
def self.new: (connection_type: String, usage_type: String, address_type: String?, net_speed: String, tags: Array[String]) -> instance
|
|
627
|
+
end
|
|
628
|
+
|
|
629
|
+
class PtrOperator < Data
|
|
630
|
+
attr_reader name: String
|
|
631
|
+
attr_reader asn: String
|
|
632
|
+
attr_reader suffix: String
|
|
633
|
+
|
|
634
|
+
def self.new: (name: String, asn: String, suffix: String) -> instance
|
|
635
|
+
end
|
|
636
|
+
|
|
637
|
+
class PtrHint < Data
|
|
638
|
+
attr_reader value: String
|
|
639
|
+
attr_reader kind: String
|
|
640
|
+
|
|
641
|
+
def self.new: (value: String, kind: String) -> instance
|
|
642
|
+
end
|
|
643
|
+
|
|
644
|
+
class PtrMetroLocation < Data
|
|
645
|
+
attr_reader city: String
|
|
646
|
+
attr_reader region: String?
|
|
647
|
+
attr_reader region_code: String?
|
|
648
|
+
attr_reader country: String
|
|
649
|
+
attr_reader country_code: String
|
|
650
|
+
attr_reader latitude: Float
|
|
651
|
+
attr_reader longitude: Float
|
|
652
|
+
attr_reader precision: String
|
|
653
|
+
|
|
654
|
+
def self.new: (city: String, region: String?, region_code: String?, country: String, country_code: String, latitude: Float, longitude: Float, precision: String) -> instance
|
|
655
|
+
end
|
|
656
|
+
|
|
657
|
+
class PtrConfidence < Data
|
|
658
|
+
attr_reader level: String
|
|
659
|
+
attr_reader score: Float
|
|
660
|
+
|
|
661
|
+
def self.new: (level: String, score: Float) -> instance
|
|
662
|
+
end
|
|
663
|
+
|
|
664
|
+
class PtrEvidenceSource < Data
|
|
665
|
+
attr_reader dataset: String
|
|
666
|
+
attr_reader version: String
|
|
667
|
+
|
|
668
|
+
def self.new: (dataset: String, version: String) -> instance
|
|
669
|
+
end
|
|
670
|
+
|
|
671
|
+
class PtrEvidence < Data
|
|
672
|
+
attr_reader rule_id: String
|
|
673
|
+
attr_reader ruleset_version: String
|
|
674
|
+
attr_reader sources: Array[PtrEvidenceSource]
|
|
675
|
+
|
|
676
|
+
def self.new: (rule_id: String, ruleset_version: String, sources: Array[PtrEvidenceSource]) -> instance
|
|
677
|
+
end
|
|
678
|
+
|
|
679
|
+
module PtrIntelligence
|
|
680
|
+
end
|
|
681
|
+
|
|
682
|
+
class PtrLocatedIntelligence < Data
|
|
683
|
+
include PtrIntelligence
|
|
684
|
+
|
|
685
|
+
attr_reader hostname: String
|
|
686
|
+
attr_reader status: String
|
|
687
|
+
attr_reader operator: PtrOperator
|
|
688
|
+
attr_reader hint: PtrHint
|
|
689
|
+
attr_reader location: PtrMetroLocation
|
|
690
|
+
attr_reader confidence: PtrConfidence
|
|
691
|
+
attr_reader evidence: PtrEvidence
|
|
692
|
+
|
|
693
|
+
def self.new: (hostname: String, status: String, operator: PtrOperator, hint: PtrHint, location: PtrMetroLocation, confidence: PtrConfidence, evidence: PtrEvidence) -> instance
|
|
694
|
+
end
|
|
695
|
+
|
|
696
|
+
class PtrAsnMismatchIntelligence < Data
|
|
697
|
+
include PtrIntelligence
|
|
698
|
+
|
|
699
|
+
attr_reader hostname: String
|
|
700
|
+
attr_reader status: String
|
|
701
|
+
attr_reader operator: PtrOperator
|
|
702
|
+
attr_reader observed_asn: String
|
|
703
|
+
attr_reader evidence: PtrEvidence
|
|
704
|
+
|
|
705
|
+
def self.new: (hostname: String, status: String, operator: PtrOperator, observed_asn: String, evidence: PtrEvidence) -> instance
|
|
706
|
+
end
|
|
707
|
+
|
|
708
|
+
class PtrUnmatchedIntelligence < Data
|
|
709
|
+
include PtrIntelligence
|
|
710
|
+
|
|
711
|
+
attr_reader hostname: String
|
|
712
|
+
attr_reader status: String
|
|
713
|
+
|
|
714
|
+
def self.new: (hostname: String, status: String) -> instance
|
|
715
|
+
end
|
|
716
|
+
|
|
717
|
+
class PtrOtherIntelligence < Data
|
|
718
|
+
include PtrIntelligence
|
|
719
|
+
|
|
720
|
+
attr_reader hostname: String
|
|
721
|
+
attr_reader status: String
|
|
722
|
+
|
|
723
|
+
def self.new: (hostname: String, status: String) -> instance
|
|
724
|
+
end
|
|
725
|
+
|
|
726
|
+
type ptr_intelligence = PtrLocatedIntelligence | PtrAsnMismatchIntelligence | PtrUnmatchedIntelligence | PtrOtherIntelligence
|
|
727
|
+
|
|
728
|
+
class ResourceTransfer < Data
|
|
729
|
+
attr_reader transfer_time: String
|
|
730
|
+
attr_reader transfer_type: String
|
|
731
|
+
attr_reader source_resource: String
|
|
732
|
+
attr_reader recipient_resource: String
|
|
733
|
+
attr_reader source_registry: String
|
|
734
|
+
attr_reader recipient_registry: String
|
|
735
|
+
attr_reader source_holder: String
|
|
736
|
+
attr_reader recipient_holder: String
|
|
737
|
+
|
|
738
|
+
def self.new: (transfer_time: String, transfer_type: String, source_resource: String, recipient_resource: String, source_registry: String, recipient_registry: String, source_holder: String, recipient_holder: String) -> instance
|
|
739
|
+
end
|
|
740
|
+
|
|
741
|
+
class RpkiRtr < Data
|
|
742
|
+
attr_reader source: String
|
|
743
|
+
attr_reader server: String?
|
|
744
|
+
attr_reader last_updated: Integer
|
|
745
|
+
|
|
746
|
+
def self.new: (source: String, server: String?, last_updated: Integer) -> instance
|
|
747
|
+
end
|
|
748
|
+
|
|
749
|
+
class RpkiValidator < Data
|
|
750
|
+
attr_reader source: String
|
|
751
|
+
attr_reader engine: String
|
|
752
|
+
attr_reader last_updated: Integer
|
|
753
|
+
|
|
754
|
+
def self.new: (source: String, engine: String, last_updated: Integer) -> instance
|
|
755
|
+
end
|
|
756
|
+
|
|
757
|
+
class RpkiInfo < Data
|
|
758
|
+
attr_reader status: String
|
|
759
|
+
attr_reader source: String?
|
|
760
|
+
attr_reader route_source: String?
|
|
761
|
+
attr_reader origin_asn: String?
|
|
762
|
+
attr_reader route_prefix: String?
|
|
763
|
+
attr_reader roa_prefix: String?
|
|
764
|
+
attr_reader roa_asn: String?
|
|
765
|
+
attr_reader max_length: Integer?
|
|
766
|
+
attr_reader ta: String?
|
|
767
|
+
attr_reader rtr: RpkiRtr?
|
|
768
|
+
attr_reader validator: RpkiValidator?
|
|
769
|
+
|
|
770
|
+
def self.new: (status: String, source: String?, route_source: String?, origin_asn: String?, route_prefix: String?, roa_prefix: String?, roa_asn: String?, max_length: Integer?, ta: String?, rtr: RpkiRtr?, validator: RpkiValidator?) -> instance
|
|
771
|
+
end
|
|
772
|
+
|
|
773
|
+
class SegmentProbe < Data
|
|
774
|
+
attr_reader ip: String
|
|
775
|
+
attr_reader ports: Array[Integer]
|
|
776
|
+
attr_reader tags: Array[String]
|
|
777
|
+
|
|
778
|
+
def self.new: (ip: String, ports: Array[Integer], tags: Array[String]) -> instance
|
|
779
|
+
end
|
|
780
|
+
|
|
781
|
+
class LiveIntelligence < Data
|
|
782
|
+
attr_reader ptr: Array[ptr_intelligence]
|
|
783
|
+
attr_reader nameservers: Array[String]
|
|
784
|
+
attr_reader cpes: Array[CpeObservation]
|
|
785
|
+
attr_reader tags: Array[String]
|
|
786
|
+
attr_reader revoked_tags: Array[String]
|
|
787
|
+
attr_reader usage_type: String?
|
|
788
|
+
attr_reader rpki: RpkiInfo?
|
|
789
|
+
attr_reader abuse: AbuseReports?
|
|
790
|
+
attr_reader transfers: Array[ResourceTransfer]?
|
|
791
|
+
attr_reader segment_probe: SegmentProbe?
|
|
792
|
+
|
|
793
|
+
def self.new: (ptr: Array[ptr_intelligence], nameservers: Array[String], cpes: Array[CpeObservation], tags: Array[String], revoked_tags: Array[String], usage_type: String?, rpki: RpkiInfo?, abuse: AbuseReports?, transfers: Array[ResourceTransfer]?, segment_probe: SegmentProbe?) -> instance
|
|
794
|
+
end
|
|
795
|
+
|
|
796
|
+
class ThreatScores < Data
|
|
797
|
+
attr_reader vpn_score: Float?
|
|
798
|
+
attr_reader proxy_score: Float?
|
|
799
|
+
attr_reader threat_score: Float?
|
|
800
|
+
attr_reader trust_score: Float?
|
|
801
|
+
|
|
802
|
+
def self.new: (vpn_score: Float?, proxy_score: Float?, threat_score: Float?, trust_score: Float?) -> instance
|
|
803
|
+
end
|
|
804
|
+
|
|
805
|
+
class ThreatInfo < Data
|
|
806
|
+
attr_reader is_tor: bool?
|
|
807
|
+
attr_reader is_vpn: bool?
|
|
808
|
+
attr_reader is_icloud_relay: bool?
|
|
809
|
+
attr_reader is_cloudflare_warp: bool?
|
|
810
|
+
attr_reader is_proxy: bool?
|
|
811
|
+
attr_reader is_datacenter: bool?
|
|
812
|
+
attr_reader is_anonymous: bool?
|
|
813
|
+
attr_reader is_known_attacker: bool?
|
|
814
|
+
attr_reader is_known_abuser: bool?
|
|
815
|
+
attr_reader is_threat: bool?
|
|
816
|
+
attr_reader is_bogon: bool
|
|
817
|
+
attr_reader blocklists: Array[Blocklist]
|
|
818
|
+
attr_reader blocklist_count: Integer
|
|
819
|
+
attr_reader scores: ThreatScores
|
|
820
|
+
attr_reader anonymizer_exemptions: Array[String]?
|
|
821
|
+
|
|
822
|
+
def self.new: (
|
|
823
|
+
is_tor: bool?,
|
|
824
|
+
is_vpn: bool?,
|
|
825
|
+
is_icloud_relay: bool?,
|
|
826
|
+
is_cloudflare_warp: bool?,
|
|
827
|
+
is_proxy: bool?,
|
|
828
|
+
is_datacenter: bool?,
|
|
829
|
+
is_anonymous: bool?,
|
|
830
|
+
is_known_attacker: bool?,
|
|
831
|
+
is_known_abuser: bool?,
|
|
832
|
+
is_threat: bool?,
|
|
833
|
+
is_bogon: bool,
|
|
834
|
+
blocklists: Array[Blocklist],
|
|
835
|
+
blocklist_count: Integer,
|
|
836
|
+
scores: ThreatScores,
|
|
837
|
+
anonymizer_exemptions: Array[String]?
|
|
838
|
+
) -> instance
|
|
839
|
+
end
|
|
840
|
+
|
|
841
|
+
class IntelligenceData < Data
|
|
842
|
+
attr_reader as: IntelligenceAs
|
|
843
|
+
attr_reader intelligence: LiveIntelligence
|
|
844
|
+
attr_reader ip: String
|
|
845
|
+
attr_reader network: NetworkInfo?
|
|
846
|
+
attr_reader network_class: NetworkClassification
|
|
847
|
+
attr_reader mobile: MobileCarrier?
|
|
848
|
+
attr_reader threat: ThreatInfo?
|
|
849
|
+
attr_reader rpki: RpkiInfo?
|
|
850
|
+
attr_reader company: Company?
|
|
851
|
+
attr_reader abuse: AbuseContact?
|
|
852
|
+
attr_reader dns: DnsRecords?
|
|
853
|
+
attr_reader is_bogon: bool
|
|
854
|
+
attr_reader is_anycast: bool?
|
|
855
|
+
attr_reader is_mobile: bool?
|
|
856
|
+
attr_reader is_hosting: bool?
|
|
857
|
+
attr_reader is_satellite: bool?
|
|
858
|
+
|
|
859
|
+
def self.new: (
|
|
860
|
+
as: IntelligenceAs,
|
|
861
|
+
intelligence: LiveIntelligence,
|
|
862
|
+
ip: String,
|
|
863
|
+
network: NetworkInfo?,
|
|
864
|
+
network_class: NetworkClassification,
|
|
865
|
+
mobile: MobileCarrier?,
|
|
866
|
+
threat: ThreatInfo?,
|
|
867
|
+
rpki: RpkiInfo?,
|
|
868
|
+
company: Company?,
|
|
869
|
+
abuse: AbuseContact?,
|
|
870
|
+
dns: DnsRecords?,
|
|
871
|
+
is_bogon: bool,
|
|
872
|
+
is_anycast: bool?,
|
|
873
|
+
is_mobile: bool?,
|
|
874
|
+
is_hosting: bool?,
|
|
875
|
+
is_satellite: bool?
|
|
876
|
+
) -> instance
|
|
877
|
+
end
|
|
878
|
+
|
|
879
|
+
class IntelligenceResponse < Data
|
|
880
|
+
attr_reader status: bool
|
|
881
|
+
attr_reader data: IntelligenceData
|
|
882
|
+
|
|
883
|
+
def self.new: (status: bool, data: IntelligenceData) -> instance
|
|
884
|
+
end
|
|
885
|
+
|
|
886
|
+
class LookupRequest < Data
|
|
887
|
+
attr_reader ip: String
|
|
888
|
+
|
|
889
|
+
def self.new: (ip: String) -> instance
|
|
890
|
+
end
|
|
891
|
+
end
|
|
892
|
+
end
|