vysion 2.0.9__tar.gz → 2.0.10__tar.gz
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.
- {vysion-2.0.9 → vysion-2.0.10}/PKG-INFO +3 -3
- {vysion-2.0.9 → vysion-2.0.10}/README.md +2 -2
- {vysion-2.0.9 → vysion-2.0.10}/pyproject.toml +1 -1
- {vysion-2.0.9 → vysion-2.0.10}/vysion/client/client.py +47 -7
- {vysion-2.0.9 → vysion-2.0.10}/vysion/dto/dto.py +55 -2
- {vysion-2.0.9 → vysion-2.0.10}/vysion/version.py +1 -1
- {vysion-2.0.9 → vysion-2.0.10}/LICENSE +0 -0
- {vysion-2.0.9 → vysion-2.0.10}/vysion/__init__.py +0 -0
- {vysion-2.0.9 → vysion-2.0.10}/vysion/client/__init__.py +0 -0
- {vysion-2.0.9 → vysion-2.0.10}/vysion/client/error.py +0 -0
- {vysion-2.0.9 → vysion-2.0.10}/vysion/dto/__init__.py +0 -0
- {vysion-2.0.9 → vysion-2.0.10}/vysion/dto/tag.py +0 -0
- {vysion-2.0.9 → vysion-2.0.10}/vysion/dto/util.py +0 -0
- {vysion-2.0.9 → vysion-2.0.10}/vysion/model/__init__.py +0 -0
- {vysion-2.0.9 → vysion-2.0.10}/vysion/model/enum/__init__.py +0 -0
- {vysion-2.0.9 → vysion-2.0.10}/vysion/model/enum/languages.py +0 -0
- {vysion-2.0.9 → vysion-2.0.10}/vysion/model/enum/networks.py +0 -0
- {vysion-2.0.9 → vysion-2.0.10}/vysion/model/enum/ransom_groups.py +0 -0
- {vysion-2.0.9 → vysion-2.0.10}/vysion/model/enum/services.py +0 -0
- {vysion-2.0.9 → vysion-2.0.10}/vysion/taxonomy/__init__.py +0 -0
- {vysion-2.0.9 → vysion-2.0.10}/vysion/taxonomy/flavours.py +0 -0
- {vysion-2.0.9 → vysion-2.0.10}/vysion/taxonomy/taxonomy.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: vysion
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.10
|
|
4
4
|
Summary: The official Python client library for Vysion
|
|
5
5
|
Home-page: https://vysion.ai
|
|
6
6
|
License: Apache-2.0
|
|
@@ -25,11 +25,11 @@ Description-Content-Type: text/markdown
|
|
|
25
25
|
|
|
26
26
|
# Vysion-PY
|
|
27
27
|
|
|
28
|
-
Welcome to the
|
|
28
|
+
Welcome to the open source repository for vysion-py, our implementation as a Python library to use the Vysion tool. Vysion is a dark web intelligence tool that provides information collected from web pages from Tor, I2P, cybercrime forums on the clearnet, etc. Vysion API also provides a feed of information on ransomware attacks published by the various ransomware groups currently active.
|
|
29
29
|
|
|
30
30
|
You can request a demo for the web app or an API-key to use in this library at [vysion.ai](https://vysion.ai).
|
|
31
31
|
|
|
32
|
-
Latest version: [2.0.
|
|
32
|
+
Latest version: [2.0.10](https://pypi.org/project/vysion/)
|
|
33
33
|
|
|
34
34
|
You can visit [the documentation](https://developers.vysion.ai/?python) for more information on the searches and requests performed with the library or directly on the API.
|
|
35
35
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Vysion-PY
|
|
2
2
|
|
|
3
|
-
Welcome to the
|
|
3
|
+
Welcome to the open source repository for vysion-py, our implementation as a Python library to use the Vysion tool. Vysion is a dark web intelligence tool that provides information collected from web pages from Tor, I2P, cybercrime forums on the clearnet, etc. Vysion API also provides a feed of information on ransomware attacks published by the various ransomware groups currently active.
|
|
4
4
|
|
|
5
5
|
You can request a demo for the web app or an API-key to use in this library at [vysion.ai](https://vysion.ai).
|
|
6
6
|
|
|
7
|
-
Latest version: [2.0.
|
|
7
|
+
Latest version: [2.0.10](https://pypi.org/project/vysion/)
|
|
8
8
|
|
|
9
9
|
You can visit [the documentation](https://developers.vysion.ai/?python) for more information on the searches and requests performed with the library or directly on the API.
|
|
10
10
|
|
|
@@ -205,27 +205,59 @@ class Client(BaseClient):
|
|
|
205
205
|
self,
|
|
206
206
|
url: str,
|
|
207
207
|
page: int = 1,
|
|
208
|
+
page_size: int = 10,
|
|
208
209
|
lte: datetime = None,
|
|
209
210
|
gte: datetime = None,
|
|
210
211
|
) -> VysionResponse[DocumentHit]:
|
|
211
|
-
url = self._build_api_url__(
|
|
212
|
+
url = self._build_api_url__(
|
|
213
|
+
"document/url",
|
|
214
|
+
url,
|
|
215
|
+
page=page,
|
|
216
|
+
page_size=page_size,
|
|
217
|
+
lte=lte,
|
|
218
|
+
gte=gte,
|
|
219
|
+
)
|
|
212
220
|
|
|
213
221
|
result = VysionResponse[DocumentHit].model_validate(self._make_request(url))
|
|
214
222
|
return result.data
|
|
215
223
|
|
|
216
224
|
@vysion_error_manager
|
|
217
|
-
def get_tag(
|
|
218
|
-
|
|
225
|
+
def get_tag(
|
|
226
|
+
self,
|
|
227
|
+
tag: str,
|
|
228
|
+
gte: datetime = None,
|
|
229
|
+
lte: datetime = None,
|
|
230
|
+
page: int = 1,
|
|
231
|
+
page_size: int = 10,
|
|
232
|
+
) -> VysionResponse[DocumentHit]:
|
|
233
|
+
url = self._build_api_url__(
|
|
234
|
+
"document/tag",
|
|
235
|
+
tag,
|
|
236
|
+
gte=gte,
|
|
237
|
+
lte=lte,
|
|
238
|
+
page=page,
|
|
239
|
+
page_size=page_size,
|
|
240
|
+
)
|
|
219
241
|
|
|
220
242
|
result = VysionResponse[DocumentHit].model_validate(self._make_request(url))
|
|
221
243
|
return result.data
|
|
222
244
|
|
|
223
245
|
@vysion_error_manager
|
|
224
246
|
def find_email(
|
|
225
|
-
self,
|
|
247
|
+
self,
|
|
248
|
+
email: str,
|
|
249
|
+
page: int = 1,
|
|
250
|
+
page_size: int = 10,
|
|
251
|
+
lte: datetime = None,
|
|
252
|
+
gte: datetime = None
|
|
226
253
|
) -> VysionResponse[DocumentHit]:
|
|
227
254
|
url = self._build_api_url__(
|
|
228
|
-
"document/email",
|
|
255
|
+
"document/email",
|
|
256
|
+
email,
|
|
257
|
+
page=page,
|
|
258
|
+
page_size=page_size,
|
|
259
|
+
lte=lte,
|
|
260
|
+
gte=gte
|
|
229
261
|
)
|
|
230
262
|
|
|
231
263
|
result = VysionResponse[DocumentHit].model_validate(self._make_request(url))
|
|
@@ -237,6 +269,7 @@ class Client(BaseClient):
|
|
|
237
269
|
country_code: str,
|
|
238
270
|
phone_number: str,
|
|
239
271
|
page: int = 1,
|
|
272
|
+
page_size: int = 10,
|
|
240
273
|
lte: datetime = None,
|
|
241
274
|
gte: datetime = None,
|
|
242
275
|
) -> VysionResponse[DocumentHit]:
|
|
@@ -244,6 +277,7 @@ class Client(BaseClient):
|
|
|
244
277
|
"document/phone/" + country_code,
|
|
245
278
|
phone_number,
|
|
246
279
|
page=page,
|
|
280
|
+
page_size=page_size,
|
|
247
281
|
lte=lte,
|
|
248
282
|
gte=gte,
|
|
249
283
|
)
|
|
@@ -257,11 +291,17 @@ class Client(BaseClient):
|
|
|
257
291
|
chain: str,
|
|
258
292
|
address: str,
|
|
259
293
|
page: int = 1,
|
|
294
|
+
page_size: int = 10,
|
|
260
295
|
lte: datetime = None,
|
|
261
296
|
gte: datetime = None,
|
|
262
297
|
) -> VysionResponse[DocumentHit]:
|
|
263
298
|
url = self._build_api_url__(
|
|
264
|
-
"document/wallet/" + chain,
|
|
299
|
+
"document/wallet/" + chain,
|
|
300
|
+
address,
|
|
301
|
+
page=page,
|
|
302
|
+
page_size=page_size,
|
|
303
|
+
lte=lte,
|
|
304
|
+
gte=gte
|
|
265
305
|
)
|
|
266
306
|
|
|
267
307
|
result = VysionResponse[DocumentHit].model_validate(self._make_request(url))
|
|
@@ -440,4 +480,4 @@ class RansomwareFeed(DaylyFeed):
|
|
|
440
480
|
yield self._make_request(url)
|
|
441
481
|
|
|
442
482
|
|
|
443
|
-
# TODO /api/v1/feeds
|
|
483
|
+
# TODO /api/v1/feeds
|
|
@@ -298,6 +298,28 @@ class ImMessageHit(BaseModel):
|
|
|
298
298
|
sha256sum: Optional[str] = None
|
|
299
299
|
media: Optional[str] = Field(default_factory=lambda: None)
|
|
300
300
|
detectionDate: datetime
|
|
301
|
+
serverId: Optional[int] = Field(default_factory=lambda: None) #Discord Exclusive
|
|
302
|
+
serverTitle: Optional[str] = Field(default_factory=lambda: None) #Discord Exclusive
|
|
303
|
+
platform: Optional[str] = Field(default_factory=lambda: None) #Discord Exclusive
|
|
304
|
+
|
|
305
|
+
@field_validator("messageId")
|
|
306
|
+
def validate_messageId(cls, v: int) -> int:
|
|
307
|
+
if not v:
|
|
308
|
+
raise ValueError("MessageId field cannot be empty")
|
|
309
|
+
return v
|
|
310
|
+
|
|
311
|
+
class ImMessageCardHit(BaseModel):
|
|
312
|
+
userId: Optional[int] = Field(default_factory=lambda: None)
|
|
313
|
+
username: Optional[str] = Field(default_factory=lambda: None)
|
|
314
|
+
channelId: Optional[int] = Field(default_factory=lambda: None)
|
|
315
|
+
messageId: str
|
|
316
|
+
message: Optional[str] = Field(default_factory=lambda: None)
|
|
317
|
+
channelTitle: Optional[str] = Field(default_factory=lambda: None)
|
|
318
|
+
languages: Optional[List[LanguagePair]] = Field(default_factory=lambda: None)
|
|
319
|
+
detectionDate: datetime
|
|
320
|
+
serverId: Optional[int] = Field(default_factory=lambda: None) #Discord Exclusive
|
|
321
|
+
serverTitle: Optional[str] = Field(default_factory=lambda: None) #Discord Exclusive
|
|
322
|
+
platform: Optional[str] = Field(default_factory=lambda: None)
|
|
301
323
|
|
|
302
324
|
@field_validator("messageId")
|
|
303
325
|
def validate_messageId(cls, v: int) -> int:
|
|
@@ -313,7 +335,10 @@ class ImProfileHit(BaseModel):
|
|
|
313
335
|
lastName: Optional[List[str]] = Field(default_factory=lambda: None)
|
|
314
336
|
detectionDate: datetime
|
|
315
337
|
profilePhoto: Optional[List[str]] = Field(default_factory=lambda: None)
|
|
316
|
-
|
|
338
|
+
bot: Optional[bool] = Field(default_factory=lambda: None) #Discord Exclusive
|
|
339
|
+
discordLink: Optional[List[str]] = Field(default_factory=lambda: None) #Discord Exclusive
|
|
340
|
+
discriminator: Optional[List[int]] = Field(default_factory=lambda: None) #Discord Exclusive
|
|
341
|
+
|
|
317
342
|
@field_validator("userId")
|
|
318
343
|
def validate_userId(cls, v: int) -> int:
|
|
319
344
|
if not v:
|
|
@@ -332,7 +357,9 @@ class ImChannelHit(BaseModel):
|
|
|
332
357
|
channelTitles: Optional[List[str]] = Field(default_factory=lambda: None)
|
|
333
358
|
detectionDate: datetime
|
|
334
359
|
creationDate: datetime
|
|
335
|
-
channelPhoto: Optional[List[str]] = Field(default_factory=lambda: None)
|
|
360
|
+
channelPhoto: Optional[List[str]] = Field(default_factory=lambda: None) #Telegram Exclusive
|
|
361
|
+
serverId: Optional[int] = Field(default_factory=lambda: None) #Discord Exclusive
|
|
362
|
+
serverTitle: Optional[List[str]] = Field(default_factory=lambda: None) #Discord Exclusive
|
|
336
363
|
|
|
337
364
|
@field_validator("channelId")
|
|
338
365
|
def validate_channelId(cls, v: int) -> int:
|
|
@@ -352,6 +379,32 @@ class ImChannelHit(BaseModel):
|
|
|
352
379
|
raise ValueError("creationDate field cannot be empty")
|
|
353
380
|
return v
|
|
354
381
|
|
|
382
|
+
class ImServerHit(BaseModel):
|
|
383
|
+
serverId: int
|
|
384
|
+
serverTitles: Optional[List[str]] = Field(default_factory=lambda: None)
|
|
385
|
+
detectionDate: datetime
|
|
386
|
+
creationDate: datetime
|
|
387
|
+
serverPhoto: Optional[List[str]] = Field(default_factory=lambda: None)
|
|
388
|
+
memberCount: Optional[int] = Field(default_factory=lambda: None)
|
|
389
|
+
discordLink: Optional[List[str]] = Field(default_factory=lambda: None)
|
|
390
|
+
|
|
391
|
+
@field_validator("serverId")
|
|
392
|
+
def validate_channelId(cls, v: int) -> int:
|
|
393
|
+
if not v:
|
|
394
|
+
raise ValueError("serverId field cannot be empty")
|
|
395
|
+
return v
|
|
396
|
+
|
|
397
|
+
@field_validator("detectionDate")
|
|
398
|
+
def validate_detectionDate(cls, v: datetime) -> datetime:
|
|
399
|
+
if not v:
|
|
400
|
+
raise ValueError("DetectionDate field cannot be empty")
|
|
401
|
+
return v
|
|
402
|
+
|
|
403
|
+
@field_validator("creationDate")
|
|
404
|
+
def validate_creationDate(cls, v: datetime) -> datetime:
|
|
405
|
+
if not v:
|
|
406
|
+
raise ValueError("creationDate field cannot be empty")
|
|
407
|
+
return v
|
|
355
408
|
|
|
356
409
|
class ImFeedHit(BaseModel):
|
|
357
410
|
id: str
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|