synthient 1.0.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 +420 -0
- data/lib/synthient/client.rb +188 -0
- data/lib/synthient/errors.rb +60 -0
- data/lib/synthient/feed.rb +135 -0
- data/lib/synthient/grpcschema.rb +231 -0
- data/lib/synthient/model.rb +93 -0
- data/lib/synthient/models/account.rb +67 -0
- data/lib/synthient/models/domain.rb +100 -0
- data/lib/synthient/models/events.rb +202 -0
- data/lib/synthient/models/export.rb +65 -0
- data/lib/synthient/models/lookup.rb +86 -0
- data/lib/synthient/response_metadata.rb +16 -0
- data/lib/synthient/transport.rb +340 -0
- data/lib/synthient/version.rb +5 -0
- data/lib/synthient.rb +30 -0
- data/sig/manifest.yaml +4 -0
- data/sig/synthient/models.rbs +555 -0
- data/sig/synthient.rbs +115 -0
- metadata +62 -0
|
@@ -0,0 +1,555 @@
|
|
|
1
|
+
# Generated by `rake sig` from the model definitions. Do not edit.
|
|
2
|
+
|
|
3
|
+
module Synthient
|
|
4
|
+
module Cadence
|
|
5
|
+
BURST_DRIVEN: String
|
|
6
|
+
BUSINESS_HOURS: String
|
|
7
|
+
EVENLY_DISTRIBUTED: String
|
|
8
|
+
NO_ACTIVITY: String
|
|
9
|
+
WEEKEND: String
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
module DomainStatus
|
|
13
|
+
ACTIVE: String
|
|
14
|
+
INACTIVE: String
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
module ExportKind
|
|
18
|
+
DAILY: String
|
|
19
|
+
HOURLY: String
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
module NetworkType
|
|
23
|
+
ACADEMIC: String
|
|
24
|
+
CORPORATE: String
|
|
25
|
+
DATACENTER: String
|
|
26
|
+
GOVERNMENT: String
|
|
27
|
+
IN_FLIGHT_WIFI: String
|
|
28
|
+
MOBILE: String
|
|
29
|
+
RESIDENTIAL: String
|
|
30
|
+
SATELLITE: String
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
module OS
|
|
34
|
+
ANDROID: String
|
|
35
|
+
CHROME_OS: String
|
|
36
|
+
FREEBSD: String
|
|
37
|
+
IOS: String
|
|
38
|
+
LINUX: String
|
|
39
|
+
MAC_OS_X: String
|
|
40
|
+
WINDOWS: String
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
module ParquetType
|
|
44
|
+
BOOL: String
|
|
45
|
+
BYTES: String
|
|
46
|
+
INT64: String
|
|
47
|
+
STRING: String
|
|
48
|
+
UINT32: String
|
|
49
|
+
UINT64: String
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
module ProxyType
|
|
53
|
+
AI_CRAWLER: String
|
|
54
|
+
BLOCKCHAIN_PROXY: String
|
|
55
|
+
BOTNET: String
|
|
56
|
+
COMMERCIAL_VPN: String
|
|
57
|
+
DATACENTER_PROXY: String
|
|
58
|
+
ENTERPRISE_VPN: String
|
|
59
|
+
FREE_VPN: String
|
|
60
|
+
INTERNET_SCANNER: String
|
|
61
|
+
LINK_PREVIEW: String
|
|
62
|
+
MOBILE_PROXY: String
|
|
63
|
+
PAYMENT_PROCESSOR: String
|
|
64
|
+
PRIVATE_RELAY: String
|
|
65
|
+
PUBLIC_PROXY: String
|
|
66
|
+
RESIDENTIAL_PROXY: String
|
|
67
|
+
SEARCH_ENGINE: String
|
|
68
|
+
SEO_CRAWLER: String
|
|
69
|
+
SOCIAL_MEDIA: String
|
|
70
|
+
TOR_NODE: String
|
|
71
|
+
UPTIME_MONITOR: String
|
|
72
|
+
WEBHOOK_PROVIDER: String
|
|
73
|
+
WEB_ARCHIVER: String
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
module Relation
|
|
77
|
+
ADMIN: String
|
|
78
|
+
MEMBER: String
|
|
79
|
+
OWNER: String
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
module Scope
|
|
83
|
+
ADMIN_PROXIES: String
|
|
84
|
+
ANONYMIZERS_FEED: String
|
|
85
|
+
ANONYMIZERS_STREAM: String
|
|
86
|
+
BASIC: String
|
|
87
|
+
HONEYPOT_ADB_FEED: String
|
|
88
|
+
HONEYPOT_ADB_STREAM: String
|
|
89
|
+
HONEYPOT_DNS_FEED: String
|
|
90
|
+
HONEYPOT_DNS_STREAM: String
|
|
91
|
+
HONEYPOT_HTTPS_FEED: String
|
|
92
|
+
HONEYPOT_HTTPS_STREAM: String
|
|
93
|
+
HONEYPOT_HTTP_FEED: String
|
|
94
|
+
HONEYPOT_HTTP_STREAM: String
|
|
95
|
+
JA3_FEED: String
|
|
96
|
+
JA3_STREAM: String
|
|
97
|
+
JA4T_FEED: String
|
|
98
|
+
JA4T_STREAM: String
|
|
99
|
+
JA4_FEED: String
|
|
100
|
+
JA4_STREAM: String
|
|
101
|
+
PROXY_FEEDS: String
|
|
102
|
+
PROXY_FIREHOSE: String
|
|
103
|
+
TORRENTS_FEED: String
|
|
104
|
+
TORRENTS_STREAM: String
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
class ASNCount < Data
|
|
108
|
+
attr_reader asn: Integer
|
|
109
|
+
attr_reader events: Integer
|
|
110
|
+
def self.new: (asn: Integer, events: Integer) -> instance
|
|
111
|
+
def initialize: (asn: Integer, events: Integer) -> void
|
|
112
|
+
def with: (?asn: Integer, ?events: Integer) -> instance
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
class Account < Data
|
|
116
|
+
attr_reader email: String
|
|
117
|
+
attr_reader first_name: String
|
|
118
|
+
attr_reader last_name: String
|
|
119
|
+
attr_reader organization: Organization
|
|
120
|
+
attr_reader scopes: Array[String]
|
|
121
|
+
attr_reader lookup_quota: LookupQuota
|
|
122
|
+
attr_reader api_key: AccountAPIKey?
|
|
123
|
+
def self.new: (email: String, first_name: String, last_name: String, organization: Organization, scopes: Array[String], lookup_quota: LookupQuota, ?api_key: AccountAPIKey?) -> instance
|
|
124
|
+
def initialize: (email: String, first_name: String, last_name: String, organization: Organization, scopes: Array[String], lookup_quota: LookupQuota, ?api_key: AccountAPIKey?) -> void
|
|
125
|
+
def with: (?email: String, ?first_name: String, ?last_name: String, ?organization: Organization, ?scopes: Array[String], ?lookup_quota: LookupQuota, ?api_key: AccountAPIKey?) -> instance
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
class AccountAPIKey < Data
|
|
129
|
+
attr_reader id: String
|
|
130
|
+
attr_reader name: String
|
|
131
|
+
attr_reader created_at: Time
|
|
132
|
+
def self.new: (id: String, name: String, created_at: Time) -> instance
|
|
133
|
+
def initialize: (id: String, name: String, created_at: Time) -> void
|
|
134
|
+
def with: (?id: String, ?name: String, ?created_at: Time) -> instance
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
class ActivityStats < Data
|
|
138
|
+
attr_reader cadence: String
|
|
139
|
+
attr_reader median_per_hour: Integer
|
|
140
|
+
attr_reader p95_per_hour: Integer
|
|
141
|
+
attr_reader peak_hour: Integer
|
|
142
|
+
attr_reader quiet_hour: Integer
|
|
143
|
+
def self.new: (cadence: String, median_per_hour: Integer, p95_per_hour: Integer, peak_hour: Integer, quiet_hour: Integer) -> instance
|
|
144
|
+
def initialize: (cadence: String, median_per_hour: Integer, p95_per_hour: Integer, peak_hour: Integer, quiet_hour: Integer) -> void
|
|
145
|
+
def with: (?cadence: String, ?median_per_hour: Integer, ?p95_per_hour: Integer, ?peak_hour: Integer, ?quiet_hour: Integer) -> instance
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
class AnonymizerEvent < Data
|
|
149
|
+
attr_reader range_start: String?
|
|
150
|
+
attr_reader range_end: String?
|
|
151
|
+
attr_reader provider: String?
|
|
152
|
+
attr_reader type: String?
|
|
153
|
+
attr_reader country_code: String?
|
|
154
|
+
attr_reader asn: Integer?
|
|
155
|
+
attr_reader timestamp: Time?
|
|
156
|
+
def self.new: (?range_start: String?, ?range_end: String?, ?provider: String?, ?type: String?, ?country_code: String?, ?asn: Integer?, ?timestamp: Time?) -> instance
|
|
157
|
+
def initialize: (?range_start: String?, ?range_end: String?, ?provider: String?, ?type: String?, ?country_code: String?, ?asn: Integer?, ?timestamp: Time?) -> void
|
|
158
|
+
def with: (?range_start: String?, ?range_end: String?, ?provider: String?, ?type: String?, ?country_code: String?, ?asn: Integer?, ?timestamp: Time?) -> instance
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
class CountryCount < Data
|
|
162
|
+
attr_reader country_code: String
|
|
163
|
+
attr_reader events: Integer
|
|
164
|
+
attr_reader unique_ips: Integer
|
|
165
|
+
def self.new: (country_code: String, events: Integer, unique_ips: Integer) -> instance
|
|
166
|
+
def initialize: (country_code: String, events: Integer, unique_ips: Integer) -> void
|
|
167
|
+
def with: (?country_code: String, ?events: Integer, ?unique_ips: Integer) -> instance
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
class Device < Data
|
|
171
|
+
attr_reader os: String
|
|
172
|
+
attr_reader version: String
|
|
173
|
+
attr_reader last_seen: Time
|
|
174
|
+
def self.new: (os: String, version: String, last_seen: Time) -> instance
|
|
175
|
+
def initialize: (os: String, version: String, last_seen: Time) -> void
|
|
176
|
+
def with: (?os: String, ?version: String, ?last_seen: Time) -> instance
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
class DomainEvent < Data
|
|
180
|
+
attr_reader timestamp: Time
|
|
181
|
+
attr_reader source_ip: String
|
|
182
|
+
attr_reader target_subdomain: String
|
|
183
|
+
attr_reader country_code: String
|
|
184
|
+
attr_reader port: Integer
|
|
185
|
+
def self.new: (timestamp: Time, source_ip: String, target_subdomain: String, country_code: String, port: Integer) -> instance
|
|
186
|
+
def initialize: (timestamp: Time, source_ip: String, target_subdomain: String, country_code: String, port: Integer) -> void
|
|
187
|
+
def with: (?timestamp: Time, ?source_ip: String, ?target_subdomain: String, ?country_code: String, ?port: Integer) -> instance
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
class DomainInfo < Data
|
|
191
|
+
attr_reader domain: String
|
|
192
|
+
attr_reader status: String
|
|
193
|
+
attr_reader stats: DomainStats
|
|
194
|
+
attr_reader unique_ips: UniqueIPs
|
|
195
|
+
attr_reader time_series: Array[TimeSeriesPoint]
|
|
196
|
+
attr_reader top_asn: ASNCount?
|
|
197
|
+
attr_reader top_subdomains: Array[SubdomainCount]
|
|
198
|
+
attr_reader top_ports: Array[PortCount]
|
|
199
|
+
attr_reader geo_distribution: Array[CountryCount]
|
|
200
|
+
attr_reader hour_dow_heatmap: Array[Array[Integer]]
|
|
201
|
+
attr_reader activity_stats: ActivityStats
|
|
202
|
+
attr_reader recent_events: Array[DomainEvent]
|
|
203
|
+
def self.new: (domain: String, status: String, stats: DomainStats, unique_ips: UniqueIPs, time_series: Array[TimeSeriesPoint], ?top_asn: ASNCount?, top_subdomains: Array[SubdomainCount], top_ports: Array[PortCount], geo_distribution: Array[CountryCount], hour_dow_heatmap: Array[Array[Integer]], activity_stats: ActivityStats, recent_events: Array[DomainEvent]) -> instance
|
|
204
|
+
def initialize: (domain: String, status: String, stats: DomainStats, unique_ips: UniqueIPs, time_series: Array[TimeSeriesPoint], ?top_asn: ASNCount?, top_subdomains: Array[SubdomainCount], top_ports: Array[PortCount], geo_distribution: Array[CountryCount], hour_dow_heatmap: Array[Array[Integer]], activity_stats: ActivityStats, recent_events: Array[DomainEvent]) -> void
|
|
205
|
+
def with: (?domain: String, ?status: String, ?stats: DomainStats, ?unique_ips: UniqueIPs, ?time_series: Array[TimeSeriesPoint], ?top_asn: ASNCount?, ?top_subdomains: Array[SubdomainCount], ?top_ports: Array[PortCount], ?geo_distribution: Array[CountryCount], ?hour_dow_heatmap: Array[Array[Integer]], ?activity_stats: ActivityStats, ?recent_events: Array[DomainEvent]) -> instance
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
class DomainStats < Data
|
|
209
|
+
attr_reader events_24h: Integer
|
|
210
|
+
attr_reader total_events_30d: Integer
|
|
211
|
+
def self.new: (events_24h: Integer, total_events_30d: Integer) -> instance
|
|
212
|
+
def initialize: (events_24h: Integer, total_events_30d: Integer) -> void
|
|
213
|
+
def with: (?events_24h: Integer, ?total_events_30d: Integer) -> instance
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
class Export < Data
|
|
217
|
+
attr_reader id: String
|
|
218
|
+
attr_reader kind: String
|
|
219
|
+
attr_reader date: Date
|
|
220
|
+
attr_reader hour: Integer?
|
|
221
|
+
attr_reader size_bytes: Integer
|
|
222
|
+
attr_reader row_count: Integer
|
|
223
|
+
attr_reader checksum: String
|
|
224
|
+
attr_reader created_at: Time
|
|
225
|
+
attr_reader download_path: String
|
|
226
|
+
def self.new: (id: String, kind: String, date: Date, ?hour: Integer?, size_bytes: Integer, row_count: Integer, checksum: String, created_at: Time, download_path: String) -> instance
|
|
227
|
+
def initialize: (id: String, kind: String, date: Date, ?hour: Integer?, size_bytes: Integer, row_count: Integer, checksum: String, created_at: Time, download_path: String) -> void
|
|
228
|
+
def with: (?id: String, ?kind: String, ?date: Date, ?hour: Integer?, ?size_bytes: Integer, ?row_count: Integer, ?checksum: String, ?created_at: Time, ?download_path: String) -> instance
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
class ExportMeta < Data
|
|
232
|
+
attr_reader id: String
|
|
233
|
+
attr_reader stream: String
|
|
234
|
+
attr_reader kind: String
|
|
235
|
+
attr_reader format: String
|
|
236
|
+
attr_reader date: Time
|
|
237
|
+
attr_reader hour: Integer?
|
|
238
|
+
attr_reader rows: Integer
|
|
239
|
+
attr_reader size: Integer
|
|
240
|
+
attr_reader checksum: String
|
|
241
|
+
attr_reader created_at: Time
|
|
242
|
+
attr_reader schema: ParquetSchema
|
|
243
|
+
def self.new: (id: String, stream: String, kind: String, format: String, date: Time, ?hour: Integer?, rows: Integer, size: Integer, checksum: String, created_at: Time, schema: ParquetSchema) -> instance
|
|
244
|
+
def initialize: (id: String, stream: String, kind: String, format: String, date: Time, ?hour: Integer?, rows: Integer, size: Integer, checksum: String, created_at: Time, schema: ParquetSchema) -> void
|
|
245
|
+
def with: (?id: String, ?stream: String, ?kind: String, ?format: String, ?date: Time, ?hour: Integer?, ?rows: Integer, ?size: Integer, ?checksum: String, ?created_at: Time, ?schema: ParquetSchema) -> instance
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
class ExportPage < Data
|
|
249
|
+
attr_reader stream: String
|
|
250
|
+
attr_reader exports: Array[Export]
|
|
251
|
+
attr_reader next_cursor: String?
|
|
252
|
+
def self.new: (stream: String, exports: Array[Export], ?next_cursor: String?) -> instance
|
|
253
|
+
def initialize: (stream: String, exports: Array[Export], ?next_cursor: String?) -> void
|
|
254
|
+
def with: (?stream: String, ?exports: Array[Export], ?next_cursor: String?) -> instance
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
class HTTPRequestDetails < Data
|
|
258
|
+
attr_reader http_method: String?
|
|
259
|
+
attr_reader uri: String?
|
|
260
|
+
attr_reader version: String?
|
|
261
|
+
attr_reader headers: Hash[String, String]?
|
|
262
|
+
def self.new: (?http_method: String?, ?uri: String?, ?version: String?, ?headers: Hash[String, String]?) -> instance
|
|
263
|
+
def initialize: (?http_method: String?, ?uri: String?, ?version: String?, ?headers: Hash[String, String]?) -> void
|
|
264
|
+
def with: (?http_method: String?, ?uri: String?, ?version: String?, ?headers: Hash[String, String]?) -> instance
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
class HeliosADBEvent < Data
|
|
268
|
+
attr_reader session: String
|
|
269
|
+
attr_reader sequential_id: Integer
|
|
270
|
+
attr_reader command: String
|
|
271
|
+
attr_reader payload_hash: String
|
|
272
|
+
def self.new: (session: String, sequential_id: Integer, command: String, payload_hash: String) -> instance
|
|
273
|
+
def initialize: (session: String, sequential_id: Integer, command: String, payload_hash: String) -> void
|
|
274
|
+
def with: (?session: String, ?sequential_id: Integer, ?command: String, ?payload_hash: String) -> instance
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
class HeliosDNSEvent < Data
|
|
278
|
+
attr_reader timestamp: Time
|
|
279
|
+
attr_reader tunnel_id: Integer
|
|
280
|
+
attr_reader domain: String
|
|
281
|
+
attr_reader port: Integer
|
|
282
|
+
attr_reader protocol: String
|
|
283
|
+
attr_reader meta: HeliosMeta
|
|
284
|
+
def self.new: (timestamp: Time, tunnel_id: Integer, domain: String, port: Integer, protocol: String, meta: HeliosMeta) -> instance
|
|
285
|
+
def initialize: (timestamp: Time, tunnel_id: Integer, domain: String, port: Integer, protocol: String, meta: HeliosMeta) -> void
|
|
286
|
+
def with: (?timestamp: Time, ?tunnel_id: Integer, ?domain: String, ?port: Integer, ?protocol: String, ?meta: HeliosMeta) -> instance
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
class HeliosHTTPEvent < Data
|
|
290
|
+
attr_reader timestamp: Time
|
|
291
|
+
attr_reader tunnel_id: Integer
|
|
292
|
+
attr_reader domain: String
|
|
293
|
+
attr_reader port: Integer
|
|
294
|
+
attr_reader protocol: String
|
|
295
|
+
attr_reader meta: HeliosMeta
|
|
296
|
+
attr_reader details: HTTPRequestDetails?
|
|
297
|
+
attr_reader raw: String?
|
|
298
|
+
def self.new: (timestamp: Time, tunnel_id: Integer, domain: String, port: Integer, protocol: String, meta: HeliosMeta, ?details: HTTPRequestDetails?, ?raw: String?) -> instance
|
|
299
|
+
def initialize: (timestamp: Time, tunnel_id: Integer, domain: String, port: Integer, protocol: String, meta: HeliosMeta, ?details: HTTPRequestDetails?, ?raw: String?) -> void
|
|
300
|
+
def with: (?timestamp: Time, ?tunnel_id: Integer, ?domain: String, ?port: Integer, ?protocol: String, ?meta: HeliosMeta, ?details: HTTPRequestDetails?, ?raw: String?) -> instance
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
class HeliosHTTPSEvent < Data
|
|
304
|
+
attr_reader timestamp: Time
|
|
305
|
+
attr_reader tunnel_id: Integer
|
|
306
|
+
attr_reader domain: String
|
|
307
|
+
attr_reader port: Integer
|
|
308
|
+
attr_reader protocol: String
|
|
309
|
+
attr_reader meta: HeliosMeta
|
|
310
|
+
attr_reader details: TLSClientHello?
|
|
311
|
+
attr_reader raw: String?
|
|
312
|
+
def self.new: (timestamp: Time, tunnel_id: Integer, domain: String, port: Integer, protocol: String, meta: HeliosMeta, ?details: TLSClientHello?, ?raw: String?) -> instance
|
|
313
|
+
def initialize: (timestamp: Time, tunnel_id: Integer, domain: String, port: Integer, protocol: String, meta: HeliosMeta, ?details: TLSClientHello?, ?raw: String?) -> void
|
|
314
|
+
def with: (?timestamp: Time, ?tunnel_id: Integer, ?domain: String, ?port: Integer, ?protocol: String, ?meta: HeliosMeta, ?details: TLSClientHello?, ?raw: String?) -> instance
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
class HeliosMeta < Data
|
|
318
|
+
attr_reader proxy_ip: String?
|
|
319
|
+
attr_reader server: String?
|
|
320
|
+
attr_reader pool_id: String?
|
|
321
|
+
attr_reader provider: String?
|
|
322
|
+
def self.new: (?proxy_ip: String?, ?server: String?, ?pool_id: String?, ?provider: String?) -> instance
|
|
323
|
+
def initialize: (?proxy_ip: String?, ?server: String?, ?pool_id: String?, ?provider: String?) -> void
|
|
324
|
+
def with: (?proxy_ip: String?, ?server: String?, ?pool_id: String?, ?provider: String?) -> instance
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
class IPInfo < Data
|
|
328
|
+
attr_reader ip: IPAddr
|
|
329
|
+
attr_reader network: Network?
|
|
330
|
+
attr_reader location: Location?
|
|
331
|
+
attr_reader intelligence: Intelligence?
|
|
332
|
+
def self.new: (ip: IPAddr, ?network: Network?, ?location: Location?, ?intelligence: Intelligence?) -> instance
|
|
333
|
+
def initialize: (ip: IPAddr, ?network: Network?, ?location: Location?, ?intelligence: Intelligence?) -> void
|
|
334
|
+
def with: (?ip: IPAddr, ?network: Network?, ?location: Location?, ?intelligence: Intelligence?) -> instance
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
class Intelligence < Data
|
|
338
|
+
attr_reader risk_score: Integer
|
|
339
|
+
attr_reader categories: Array[String]
|
|
340
|
+
attr_reader behavior: Array[String]
|
|
341
|
+
attr_reader providers: Array[Provider]
|
|
342
|
+
attr_reader devices: Array[Device]
|
|
343
|
+
def self.new: (risk_score: Integer, categories: Array[String], behavior: Array[String], providers: Array[Provider], devices: Array[Device]) -> instance
|
|
344
|
+
def initialize: (risk_score: Integer, categories: Array[String], behavior: Array[String], providers: Array[Provider], devices: Array[Device]) -> void
|
|
345
|
+
def with: (?risk_score: Integer, ?categories: Array[String], ?behavior: Array[String], ?providers: Array[Provider], ?devices: Array[Device]) -> instance
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
class JA4TEvent < Data
|
|
349
|
+
attr_reader ip: String?
|
|
350
|
+
attr_reader ja4t: String?
|
|
351
|
+
attr_reader provider: String?
|
|
352
|
+
attr_reader type: String?
|
|
353
|
+
attr_reader country_code: String?
|
|
354
|
+
attr_reader asn: Integer?
|
|
355
|
+
attr_reader timestamp: Time?
|
|
356
|
+
def self.new: (?ip: String?, ?ja4t: String?, ?provider: String?, ?type: String?, ?country_code: String?, ?asn: Integer?, ?timestamp: Time?) -> instance
|
|
357
|
+
def initialize: (?ip: String?, ?ja4t: String?, ?provider: String?, ?type: String?, ?country_code: String?, ?asn: Integer?, ?timestamp: Time?) -> void
|
|
358
|
+
def with: (?ip: String?, ?ja4t: String?, ?provider: String?, ?type: String?, ?country_code: String?, ?asn: Integer?, ?timestamp: Time?) -> instance
|
|
359
|
+
end
|
|
360
|
+
|
|
361
|
+
class Location < Data
|
|
362
|
+
attr_reader country: String
|
|
363
|
+
attr_reader state: String
|
|
364
|
+
attr_reader city: String
|
|
365
|
+
attr_reader timezone: String
|
|
366
|
+
attr_reader latitude: Float
|
|
367
|
+
attr_reader longitude: Float
|
|
368
|
+
attr_reader geo_hash: String
|
|
369
|
+
def self.new: (country: String, state: String, city: String, timezone: String, latitude: Float, longitude: Float, geo_hash: String) -> instance
|
|
370
|
+
def initialize: (country: String, state: String, city: String, timezone: String, latitude: Float, longitude: Float, geo_hash: String) -> void
|
|
371
|
+
def with: (?country: String, ?state: String, ?city: String, ?timezone: String, ?latitude: Float, ?longitude: Float, ?geo_hash: String) -> instance
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
class LookupQuota < Data
|
|
375
|
+
attr_reader credits: Integer
|
|
376
|
+
attr_reader resets_in: Integer
|
|
377
|
+
def self.new: (credits: Integer, resets_in: Integer) -> instance
|
|
378
|
+
def initialize: (credits: Integer, resets_in: Integer) -> void
|
|
379
|
+
def with: (?credits: Integer, ?resets_in: Integer) -> instance
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
class Network < Data
|
|
383
|
+
attr_reader asn: Integer
|
|
384
|
+
attr_reader isp: String
|
|
385
|
+
attr_reader org: String?
|
|
386
|
+
attr_reader domain: String?
|
|
387
|
+
attr_reader type: String
|
|
388
|
+
attr_reader abuse_email: String?
|
|
389
|
+
attr_reader abuse_phone: String?
|
|
390
|
+
def self.new: (asn: Integer, isp: String, ?org: String?, ?domain: String?, type: String, ?abuse_email: String?, ?abuse_phone: String?) -> instance
|
|
391
|
+
def initialize: (asn: Integer, isp: String, ?org: String?, ?domain: String?, type: String, ?abuse_email: String?, ?abuse_phone: String?) -> void
|
|
392
|
+
def with: (?asn: Integer, ?isp: String, ?org: String?, ?domain: String?, ?type: String, ?abuse_email: String?, ?abuse_phone: String?) -> instance
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
class Organization < Data
|
|
396
|
+
attr_reader id: String
|
|
397
|
+
attr_reader name: String
|
|
398
|
+
attr_reader relation: String
|
|
399
|
+
def self.new: (id: String, name: String, relation: String) -> instance
|
|
400
|
+
def initialize: (id: String, name: String, relation: String) -> void
|
|
401
|
+
def with: (?id: String, ?name: String, ?relation: String) -> instance
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
class ParquetColumn < Data
|
|
405
|
+
attr_reader name: String
|
|
406
|
+
attr_reader type: String
|
|
407
|
+
def self.new: (name: String, type: String) -> instance
|
|
408
|
+
def initialize: (name: String, type: String) -> void
|
|
409
|
+
def with: (?name: String, ?type: String) -> instance
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
class ParquetSchema < Data
|
|
413
|
+
attr_reader fields: Array[ParquetColumn]
|
|
414
|
+
def self.new: (fields: Array[ParquetColumn]) -> instance
|
|
415
|
+
def initialize: (fields: Array[ParquetColumn]) -> void
|
|
416
|
+
def with: (?fields: Array[ParquetColumn]) -> instance
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
class PortCount < Data
|
|
420
|
+
attr_reader port: Integer
|
|
421
|
+
attr_reader count: Integer
|
|
422
|
+
def self.new: (port: Integer, count: Integer) -> instance
|
|
423
|
+
def initialize: (port: Integer, count: Integer) -> void
|
|
424
|
+
def with: (?port: Integer, ?count: Integer) -> instance
|
|
425
|
+
end
|
|
426
|
+
|
|
427
|
+
class Provider < Data
|
|
428
|
+
attr_reader name: String
|
|
429
|
+
attr_reader type: String
|
|
430
|
+
attr_reader last_seen: Time
|
|
431
|
+
def self.new: (name: String, type: String, last_seen: Time) -> instance
|
|
432
|
+
def initialize: (name: String, type: String, last_seen: Time) -> void
|
|
433
|
+
def with: (?name: String, ?type: String, ?last_seen: Time) -> instance
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
class ProxyEvent < Data
|
|
437
|
+
attr_reader ip: String?
|
|
438
|
+
attr_reader provider: String?
|
|
439
|
+
attr_reader type: String?
|
|
440
|
+
attr_reader country_code: String?
|
|
441
|
+
attr_reader asn: Integer?
|
|
442
|
+
attr_reader timestamp: Time?
|
|
443
|
+
def self.new: (?ip: String?, ?provider: String?, ?type: String?, ?country_code: String?, ?asn: Integer?, ?timestamp: Time?) -> instance
|
|
444
|
+
def initialize: (?ip: String?, ?provider: String?, ?type: String?, ?country_code: String?, ?asn: Integer?, ?timestamp: Time?) -> void
|
|
445
|
+
def with: (?ip: String?, ?provider: String?, ?type: String?, ?country_code: String?, ?asn: Integer?, ?timestamp: Time?) -> instance
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
class SubdomainCount < Data
|
|
449
|
+
attr_reader subdomain: String
|
|
450
|
+
attr_reader count: Integer
|
|
451
|
+
def self.new: (subdomain: String, count: Integer) -> instance
|
|
452
|
+
def initialize: (subdomain: String, count: Integer) -> void
|
|
453
|
+
def with: (?subdomain: String, ?count: Integer) -> instance
|
|
454
|
+
end
|
|
455
|
+
|
|
456
|
+
class TLSClientHello < Data
|
|
457
|
+
attr_reader record_version: String?
|
|
458
|
+
attr_reader handshake_version: String?
|
|
459
|
+
attr_reader client_random: String?
|
|
460
|
+
attr_reader session_id: String?
|
|
461
|
+
attr_reader session_id_length: Integer?
|
|
462
|
+
attr_reader cipher_suites: Array[TLSCodeName]?
|
|
463
|
+
attr_reader compression_methods: Array[Integer]?
|
|
464
|
+
attr_reader extensions: Array[TLSExtension]?
|
|
465
|
+
attr_reader sni: String?
|
|
466
|
+
attr_reader alpn: Array[String]?
|
|
467
|
+
attr_reader supported_versions: Array[String]?
|
|
468
|
+
attr_reader supported_groups: Array[TLSCodeName]?
|
|
469
|
+
attr_reader signature_algorithms: Array[TLSCodeName]?
|
|
470
|
+
attr_reader ec_point_formats: Array[String]?
|
|
471
|
+
attr_reader key_share_groups: Array[String]?
|
|
472
|
+
attr_reader psk_key_exchange_modes: Array[String]?
|
|
473
|
+
attr_reader compress_certificate: Array[String]?
|
|
474
|
+
attr_reader has_grease: bool?
|
|
475
|
+
attr_reader application_settings: bool?
|
|
476
|
+
attr_reader delegated_credentials: bool?
|
|
477
|
+
attr_reader encrypt_then_mac: bool?
|
|
478
|
+
attr_reader extended_master_secret: bool?
|
|
479
|
+
attr_reader post_handshake_auth: bool?
|
|
480
|
+
attr_reader renegotiation_info: bool?
|
|
481
|
+
attr_reader signed_certificate_timestamps: bool?
|
|
482
|
+
attr_reader status_request: bool?
|
|
483
|
+
def self.new: (?record_version: String?, ?handshake_version: String?, ?client_random: String?, ?session_id: String?, ?session_id_length: Integer?, ?cipher_suites: Array[TLSCodeName]?, ?compression_methods: Array[Integer]?, ?extensions: Array[TLSExtension]?, ?sni: String?, ?alpn: Array[String]?, ?supported_versions: Array[String]?, ?supported_groups: Array[TLSCodeName]?, ?signature_algorithms: Array[TLSCodeName]?, ?ec_point_formats: Array[String]?, ?key_share_groups: Array[String]?, ?psk_key_exchange_modes: Array[String]?, ?compress_certificate: Array[String]?, ?has_grease: bool?, ?application_settings: bool?, ?delegated_credentials: bool?, ?encrypt_then_mac: bool?, ?extended_master_secret: bool?, ?post_handshake_auth: bool?, ?renegotiation_info: bool?, ?signed_certificate_timestamps: bool?, ?status_request: bool?) -> instance
|
|
484
|
+
def initialize: (?record_version: String?, ?handshake_version: String?, ?client_random: String?, ?session_id: String?, ?session_id_length: Integer?, ?cipher_suites: Array[TLSCodeName]?, ?compression_methods: Array[Integer]?, ?extensions: Array[TLSExtension]?, ?sni: String?, ?alpn: Array[String]?, ?supported_versions: Array[String]?, ?supported_groups: Array[TLSCodeName]?, ?signature_algorithms: Array[TLSCodeName]?, ?ec_point_formats: Array[String]?, ?key_share_groups: Array[String]?, ?psk_key_exchange_modes: Array[String]?, ?compress_certificate: Array[String]?, ?has_grease: bool?, ?application_settings: bool?, ?delegated_credentials: bool?, ?encrypt_then_mac: bool?, ?extended_master_secret: bool?, ?post_handshake_auth: bool?, ?renegotiation_info: bool?, ?signed_certificate_timestamps: bool?, ?status_request: bool?) -> void
|
|
485
|
+
def with: (?record_version: String?, ?handshake_version: String?, ?client_random: String?, ?session_id: String?, ?session_id_length: Integer?, ?cipher_suites: Array[TLSCodeName]?, ?compression_methods: Array[Integer]?, ?extensions: Array[TLSExtension]?, ?sni: String?, ?alpn: Array[String]?, ?supported_versions: Array[String]?, ?supported_groups: Array[TLSCodeName]?, ?signature_algorithms: Array[TLSCodeName]?, ?ec_point_formats: Array[String]?, ?key_share_groups: Array[String]?, ?psk_key_exchange_modes: Array[String]?, ?compress_certificate: Array[String]?, ?has_grease: bool?, ?application_settings: bool?, ?delegated_credentials: bool?, ?encrypt_then_mac: bool?, ?extended_master_secret: bool?, ?post_handshake_auth: bool?, ?renegotiation_info: bool?, ?signed_certificate_timestamps: bool?, ?status_request: bool?) -> instance
|
|
486
|
+
end
|
|
487
|
+
|
|
488
|
+
class TLSCodeName < Data
|
|
489
|
+
attr_reader code: Integer?
|
|
490
|
+
attr_reader name: String?
|
|
491
|
+
def self.new: (?code: Integer?, ?name: String?) -> instance
|
|
492
|
+
def initialize: (?code: Integer?, ?name: String?) -> void
|
|
493
|
+
def with: (?code: Integer?, ?name: String?) -> instance
|
|
494
|
+
end
|
|
495
|
+
|
|
496
|
+
class TLSExtension < Data
|
|
497
|
+
attr_reader code: Integer?
|
|
498
|
+
attr_reader name: String?
|
|
499
|
+
attr_reader length: Integer?
|
|
500
|
+
def self.new: (?code: Integer?, ?name: String?, ?length: Integer?) -> instance
|
|
501
|
+
def initialize: (?code: Integer?, ?name: String?, ?length: Integer?) -> void
|
|
502
|
+
def with: (?code: Integer?, ?name: String?, ?length: Integer?) -> instance
|
|
503
|
+
end
|
|
504
|
+
|
|
505
|
+
class TimeSeriesPoint < Data
|
|
506
|
+
attr_reader date: Time
|
|
507
|
+
attr_reader events: Integer
|
|
508
|
+
attr_reader unique_ips: Integer
|
|
509
|
+
def self.new: (date: Time, events: Integer, unique_ips: Integer) -> instance
|
|
510
|
+
def initialize: (date: Time, events: Integer, unique_ips: Integer) -> void
|
|
511
|
+
def with: (?date: Time, ?events: Integer, ?unique_ips: Integer) -> instance
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
class TorrentEvent < Data
|
|
515
|
+
attr_reader info_hash: String?
|
|
516
|
+
attr_reader name: String?
|
|
517
|
+
attr_reader magnet_uri: String?
|
|
518
|
+
attr_reader total_size: Integer?
|
|
519
|
+
attr_reader piece_length: Integer?
|
|
520
|
+
attr_reader file_count: Integer?
|
|
521
|
+
attr_reader files: Array[TorrentFile]?
|
|
522
|
+
attr_reader peers: Array[TorrentPeer]?
|
|
523
|
+
attr_reader timestamp: Time?
|
|
524
|
+
def self.new: (?info_hash: String?, ?name: String?, ?magnet_uri: String?, ?total_size: Integer?, ?piece_length: Integer?, ?file_count: Integer?, ?files: Array[TorrentFile]?, ?peers: Array[TorrentPeer]?, ?timestamp: Time?) -> instance
|
|
525
|
+
def initialize: (?info_hash: String?, ?name: String?, ?magnet_uri: String?, ?total_size: Integer?, ?piece_length: Integer?, ?file_count: Integer?, ?files: Array[TorrentFile]?, ?peers: Array[TorrentPeer]?, ?timestamp: Time?) -> void
|
|
526
|
+
def with: (?info_hash: String?, ?name: String?, ?magnet_uri: String?, ?total_size: Integer?, ?piece_length: Integer?, ?file_count: Integer?, ?files: Array[TorrentFile]?, ?peers: Array[TorrentPeer]?, ?timestamp: Time?) -> instance
|
|
527
|
+
end
|
|
528
|
+
|
|
529
|
+
class TorrentFile < Data
|
|
530
|
+
attr_reader path: String?
|
|
531
|
+
attr_reader length: Integer?
|
|
532
|
+
def self.new: (?path: String?, ?length: Integer?) -> instance
|
|
533
|
+
def initialize: (?path: String?, ?length: Integer?) -> void
|
|
534
|
+
def with: (?path: String?, ?length: Integer?) -> instance
|
|
535
|
+
end
|
|
536
|
+
|
|
537
|
+
class TorrentPeer < Data
|
|
538
|
+
attr_reader ip: String?
|
|
539
|
+
attr_reader port: Integer?
|
|
540
|
+
attr_reader source: String?
|
|
541
|
+
attr_reader encrypted: bool?
|
|
542
|
+
def self.new: (?ip: String?, ?port: Integer?, ?source: String?, ?encrypted: bool?) -> instance
|
|
543
|
+
def initialize: (?ip: String?, ?port: Integer?, ?source: String?, ?encrypted: bool?) -> void
|
|
544
|
+
def with: (?ip: String?, ?port: Integer?, ?source: String?, ?encrypted: bool?) -> instance
|
|
545
|
+
end
|
|
546
|
+
|
|
547
|
+
class UniqueIPs < Data
|
|
548
|
+
attr_reader value_24h: Integer
|
|
549
|
+
attr_reader value_30d: Integer
|
|
550
|
+
attr_reader sparkline_24h: Array[Integer]
|
|
551
|
+
def self.new: (value_24h: Integer, value_30d: Integer, sparkline_24h: Array[Integer]) -> instance
|
|
552
|
+
def initialize: (value_24h: Integer, value_30d: Integer, sparkline_24h: Array[Integer]) -> void
|
|
553
|
+
def with: (?value_24h: Integer, ?value_30d: Integer, ?sparkline_24h: Array[Integer]) -> instance
|
|
554
|
+
end
|
|
555
|
+
end
|
data/sig/synthient.rbs
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
module Synthient
|
|
2
|
+
VERSION: String
|
|
3
|
+
DEFAULT_BASE_URL: String
|
|
4
|
+
|
|
5
|
+
class Error < StandardError
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class ConnectionError < Error
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class TimeoutError < ConnectionError
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class DecodeError < Error
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class APIError < Error
|
|
18
|
+
STATUS_TEXT: Hash[Integer, String]
|
|
19
|
+
|
|
20
|
+
attr_reader status: Integer
|
|
21
|
+
attr_reader type: String?
|
|
22
|
+
attr_reader title: String?
|
|
23
|
+
attr_reader detail: String?
|
|
24
|
+
attr_reader errors: Hash[String, Array[String]]
|
|
25
|
+
attr_reader request_id: String?
|
|
26
|
+
attr_reader retry_after: Numeric?
|
|
27
|
+
|
|
28
|
+
def initialize: (status: Integer, ?type: String?, ?title: String?, ?detail: String?,
|
|
29
|
+
?errors: Hash[String, Array[String]], ?request_id: String?, ?retry_after: Numeric?) -> void
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
class RateLimit < Data
|
|
33
|
+
attr_reader limit: Integer
|
|
34
|
+
attr_reader remaining: Integer
|
|
35
|
+
attr_reader reset: Integer
|
|
36
|
+
|
|
37
|
+
def self.new: (limit: Integer, remaining: Integer, reset: Integer) -> instance
|
|
38
|
+
def initialize: (limit: Integer, remaining: Integer, reset: Integer) -> void
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
class ResponseMetadata < Data
|
|
42
|
+
attr_reader status: Integer
|
|
43
|
+
attr_reader request_id: String?
|
|
44
|
+
attr_reader rate_limit: RateLimit?
|
|
45
|
+
attr_reader headers: Hash[String, String]
|
|
46
|
+
|
|
47
|
+
def self.new: (status: Integer, request_id: String?, rate_limit: RateLimit?, headers: Hash[String, String]) -> instance
|
|
48
|
+
def initialize: (status: Integer, request_id: String?, rate_limit: RateLimit?, headers: Hash[String, String]) -> void
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
interface _ResponseHook
|
|
52
|
+
def call: (ResponseMetadata metadata) -> untyped
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
class Client
|
|
56
|
+
MAX_BATCH_SIZE: Integer
|
|
57
|
+
|
|
58
|
+
attr_reader proxies: Feed[ProxyEvent]
|
|
59
|
+
attr_reader anonymizers: Feed[AnonymizerEvent]
|
|
60
|
+
attr_reader torrents: Feed[TorrentEvent]
|
|
61
|
+
attr_reader ja4t: Feed[JA4TEvent]
|
|
62
|
+
attr_reader helios_http: Feed[HeliosHTTPEvent]
|
|
63
|
+
attr_reader helios_https: Feed[HeliosHTTPSEvent]
|
|
64
|
+
attr_reader helios_dns: Feed[HeliosDNSEvent]
|
|
65
|
+
attr_reader helios_adb: Feed[HeliosADBEvent]
|
|
66
|
+
|
|
67
|
+
def initialize: (?api_key: String?, ?base_url: String, ?max_retries: Integer, ?timeout: Numeric,
|
|
68
|
+
?open_timeout: Numeric, ?user_agent: String?, ?response_hook: _ResponseHook?) -> void
|
|
69
|
+
def lookup_ip: (String | IPAddr ip) -> IPInfo
|
|
70
|
+
def lookup_ips: (Enumerable[String | IPAddr] ips) -> Array[IPInfo]
|
|
71
|
+
def lookup_domain: (String domain, ?limit: Integer?) -> DomainInfo
|
|
72
|
+
def account: () -> Account
|
|
73
|
+
def health: () -> nil
|
|
74
|
+
def close: () -> nil
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
class Feed[E]
|
|
78
|
+
type export_id = String | Date | Time
|
|
79
|
+
|
|
80
|
+
def stream: () { (E event) -> void } -> nil
|
|
81
|
+
| () -> Enumerator[E, nil]
|
|
82
|
+
def list_exports: (?limit: Integer?, ?cursor: String?) -> ExportPage
|
|
83
|
+
def each_export: (?limit: Integer?, ?cursor: String?) { (Export export) -> void } -> nil
|
|
84
|
+
| (?limit: Integer?, ?cursor: String?) -> Enumerator[Export, nil]
|
|
85
|
+
def export_meta: (export_id export) -> ExportMeta
|
|
86
|
+
def download_url: (export_id export) -> URI::HTTP
|
|
87
|
+
def download: (export_id export) { (String chunk) -> void } -> nil
|
|
88
|
+
| (export_id export) -> Enumerator[String, nil]
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
module GRPCSchema
|
|
92
|
+
DEFAULT_ENDPOINT: String
|
|
93
|
+
MAX_MESSAGE_SIZE: Integer
|
|
94
|
+
EXPLANATIONS: Hash[Integer, String]
|
|
95
|
+
|
|
96
|
+
class Schema < Data
|
|
97
|
+
attr_reader endpoint: String
|
|
98
|
+
attr_reader symbols: Array[String]
|
|
99
|
+
attr_reader descriptor_set: untyped
|
|
100
|
+
|
|
101
|
+
def self.new: (endpoint: String, symbols: Array[String], descriptor_set: untyped) -> instance
|
|
102
|
+
def initialize: (endpoint: String, symbols: Array[String], descriptor_set: untyped) -> void
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
class SchemaError < Synthient::Error
|
|
106
|
+
attr_reader code: Integer?
|
|
107
|
+
|
|
108
|
+
def initialize: (?String? message, ?code: Integer?) -> void
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def self.fetch: (?api_key: String?, ?endpoint: String, ?plaintext: bool, ?symbols: Array[String],
|
|
112
|
+
?timeout: Numeric) -> Schema
|
|
113
|
+
def self.explain: (untyped error) -> String?
|
|
114
|
+
end
|
|
115
|
+
end
|