user-scanner 1.1.0.4__py3-none-any.whl → 1.1.0.5__py3-none-any.whl

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.
@@ -0,0 +1,64 @@
1
+ import httpx
2
+ from user_scanner.core.result import Result
3
+
4
+
5
+ async def _check(email: str) -> Result:
6
+ headers = {
7
+ 'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
8
+ 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
9
+ 'Accept-Language': "en-US,en;q=0.9",
10
+ 'Referer': "https://leetcode.com/accounts/login/",
11
+ 'Origin': "https://leetcode.com",
12
+ }
13
+
14
+ try:
15
+ async with httpx.AsyncClient(timeout=5.0, follow_redirects=True) as client:
16
+ await client.get("https://leetcode.com/accounts/login/", headers=headers)
17
+ csrf_token = client.cookies.get("csrftoken")
18
+
19
+ if not csrf_token:
20
+ return Result.error("CSRF token not found, possible rate-limit")
21
+
22
+ headers.update({
23
+ 'x-requested-with': "XMLHttpRequest",
24
+ 'referer': "https://leetcode.com/accounts/password/reset/",
25
+ })
26
+
27
+ payload = {
28
+ 'next': 'undefined',
29
+ 'userName': '',
30
+ 'email': email,
31
+ 'csrfmiddlewaretoken': csrf_token
32
+ }
33
+
34
+ response = await client.post(
35
+ "https://leetcode.com/accounts/password/reset/",
36
+ headers=headers,
37
+ data=payload
38
+ )
39
+
40
+ if response.status_code in [200, 400]:
41
+ data = response.json()
42
+
43
+ if data.get("location") == "/accounts/password/reset/done/":
44
+ return Result.taken()
45
+
46
+ email_field = data.get("form", {}).get(
47
+ "fields", {}).get("email", {})
48
+ errors = email_field.get("errors", [])
49
+
50
+ if any("not assigned to any user account" in err for err in errors):
51
+ return Result.available()
52
+
53
+ return Result.error("Unexpected response data")
54
+
55
+ return Result.error(f"HTTP {response.status_code}")
56
+
57
+ except httpx.TimeoutException:
58
+ return Result.error("Connection timed out")
59
+ except Exception as e:
60
+ return Result.error(e)
61
+
62
+
63
+ async def validate_leetcode(email: str) -> Result:
64
+ return await _check(email)
File without changes
@@ -0,0 +1,36 @@
1
+ import httpx
2
+ from user_scanner.core.result import Result
3
+
4
+ async def _check(email: str) -> Result:
5
+ headers = {
6
+ 'authority': 'www.duolingo.com',
7
+ 'Accept': 'application/json, text/plain, */*',
8
+ 'Accept-Language': 'en-US,en;q=0.9',
9
+ 'User-Agent': "Mozilla/5.0 (X11; Linux x86_64; rv:130.0) Gecko/20100101 Firefox/130.0",
10
+ 'Referer': 'https://www.duolingo.com/',
11
+ }
12
+
13
+ try:
14
+ async with httpx.AsyncClient(timeout=5.0, follow_redirects=True) as client:
15
+ response = await client.get(
16
+ f"https://www.duolingo.com/2017-06-30/users?email={email}",
17
+ headers=headers
18
+ )
19
+
20
+ if response.status_code == 200:
21
+ data = response.json()
22
+ # Duolingo returns a list of users matching the email
23
+ if data.get("users") and len(data["users"]) > 0:
24
+ return Result.taken()
25
+ else:
26
+ return Result.available()
27
+
28
+ return Result.error(f"HTTP {response.status_code}")
29
+
30
+ except httpx.TimeoutException:
31
+ return Result.error("Connection timed out")
32
+ except Exception as e:
33
+ return Result.error(e)
34
+
35
+ async def validate_duolingo(email: str) -> Result:
36
+ return await _check(email)
File without changes
@@ -0,0 +1,51 @@
1
+ import httpx
2
+ from user_scanner.core.result import Result
3
+
4
+
5
+ async def _check(email: str) -> Result:
6
+ headers = {
7
+ 'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
8
+ 'Accept': '*/*',
9
+ 'Accept-Language': 'en,en-US;q=0.9',
10
+ 'Referer': 'https://www.eventbrite.com/signin/',
11
+ 'Content-Type': 'application/json',
12
+ 'X-Requested-With': 'XMLHttpRequest',
13
+ 'Origin': 'https://www.eventbrite.com',
14
+ }
15
+
16
+ try:
17
+ async with httpx.AsyncClient(timeout=5.0, follow_redirects=True) as client:
18
+ await client.get("https://www.eventbrite.com/signin/", headers=headers)
19
+
20
+ csrf_token = client.cookies.get("csrftoken")
21
+ if not csrf_token:
22
+ return Result.error("CSRF token not found")
23
+
24
+ headers["X-CSRFToken"] = csrf_token
25
+ payload = {"email": email}
26
+
27
+ response = await client.post(
28
+ 'https://www.eventbrite.com/api/v3/users/lookup/',
29
+ headers=headers,
30
+ json=payload
31
+ )
32
+
33
+ if response.status_code == 200:
34
+ data = response.json()
35
+ if data.get("exists") is True:
36
+ return Result.taken()
37
+ elif data.get("exists") is False:
38
+ return Result.available()
39
+ else:
40
+ return Result.error(data)
41
+
42
+ return Result.error(f"HTTP {response.status_code}")
43
+
44
+ except httpx.TimeoutException:
45
+ return Result.error("Connection timed out")
46
+ except Exception as e:
47
+ return Result.error(e)
48
+
49
+
50
+ async def validate_eventbrite(email: str) -> Result:
51
+ return await _check(email)
File without changes
@@ -0,0 +1,38 @@
1
+ import httpx
2
+ from user_scanner.core.result import Result
3
+
4
+
5
+ async def _check(email: str) -> Result:
6
+ headers = {
7
+ 'authority': 'axonaut.com',
8
+ 'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
9
+ 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
10
+ 'referer': 'https://axonaut.com/en',
11
+ 'accept-language': 'en-US,en;q=0.9',
12
+ }
13
+
14
+ try:
15
+ async with httpx.AsyncClient(timeout=5.0, follow_redirects=False) as client:
16
+ response = await client.get(
17
+ f'https://axonaut.com/onboarding/?email={email}',
18
+ headers=headers
19
+ )
20
+
21
+ if response.status_code == 302 and "/login?email" in response.headers.get('Location', ''):
22
+
23
+ return Result.taken()
24
+
25
+ elif response.status_code == 200:
26
+ return Result.available()
27
+
28
+ else:
29
+ return Result.error(f"HTTP {response.status_code}")
30
+
31
+ except httpx.TimeoutException:
32
+ return Result.error("Connection timed out")
33
+ except Exception as e:
34
+ return Result.error(str(e))
35
+
36
+
37
+ async def validate_axonaut(email: str) -> Result:
38
+ return await _check(email)
@@ -0,0 +1,52 @@
1
+ import httpx
2
+ from user_scanner.core.result import Result
3
+
4
+
5
+ async def _check(email: str) -> Result:
6
+ headers = {
7
+ 'authority': 'api.hubspot.com',
8
+ 'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
9
+ 'content-type': 'application/json',
10
+ 'origin': 'https://app.hubspot.com',
11
+ 'referer': 'https://app.hubspot.com/',
12
+ 'accept-language': 'en-US,en;q=0.9',
13
+ }
14
+
15
+ try:
16
+ async with httpx.AsyncClient(timeout=5.0, follow_redirects=True) as client:
17
+ payload = {
18
+ "email": email,
19
+ "password": "",
20
+ "rememberLogin": False
21
+ }
22
+
23
+ response = await client.post(
24
+ 'https://api.hubspot.com/login-api/v1/login',
25
+ headers=headers,
26
+ json=payload
27
+ )
28
+
29
+ # HubSpot returns 400 for both "wrong password" and "user not found"
30
+ if response.status_code == 400:
31
+ data = response.json()
32
+ status = data.get("status")
33
+
34
+ if status == "INVALID_PASSWORD":
35
+ return Result.taken()
36
+
37
+ elif status == "INVALID_USER":
38
+ return Result.available()
39
+
40
+ else:
41
+ return Result.error(data)
42
+
43
+ return Result.error(f"HTTP {response.status_code}")
44
+
45
+ except httpx.TimeoutException:
46
+ return Result.error("Connection timed out")
47
+ except Exception as e:
48
+ return Result.error(str(e))
49
+
50
+
51
+ async def validate_hubspot(email: str) -> Result:
52
+ return await _check(email)
@@ -0,0 +1,43 @@
1
+ import httpx
2
+ from user_scanner.core.result import Result
3
+
4
+
5
+ async def _check(email: str) -> Result:
6
+ headers = {
7
+ 'authority': 'accounts.insightly.com',
8
+ 'accept': 'application/json, text/javascript, */*; q=0.01',
9
+ 'x-requested-with': 'XMLHttpRequest',
10
+ 'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
11
+ 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
12
+ 'origin': 'https://accounts.insightly.com',
13
+ 'referer': 'https://accounts.insightly.com/?plan=trial',
14
+ 'accept-language': 'en-US,en;q=0.9',
15
+ }
16
+
17
+ try:
18
+ async with httpx.AsyncClient(timeout=5.0, follow_redirects=True) as client:
19
+ payload = {'emailaddress': email}
20
+
21
+ response = await client.post(
22
+ 'https://accounts.insightly.com/signup/isemailvalid',
23
+ headers=headers,
24
+ data=payload
25
+ )
26
+
27
+ if "An account exists for this address." in response.text:
28
+ return Result.taken()
29
+
30
+ elif response.text.strip() == "true":
31
+ return Result.available()
32
+
33
+ else:
34
+ return Result.error(f"Unexpected response: {response.status_code}")
35
+
36
+ except httpx.TimeoutException:
37
+ return Result.error("Connection timed out")
38
+ except Exception as e:
39
+ return Result.error(str(e))
40
+
41
+
42
+ async def validate_insightly(email: str) -> Result:
43
+ return await _check(email)
@@ -0,0 +1,63 @@
1
+ import httpx
2
+ from user_scanner.core.result import Result
3
+
4
+
5
+ async def _check(email: str) -> Result:
6
+ headers = {
7
+ 'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
8
+ 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
9
+ 'Accept': '*/*',
10
+ 'Origin': 'https://accounts.zoho.com',
11
+ 'Sec-Fetch-Site': 'same-origin',
12
+ 'Sec-Fetch-Mode': 'cors',
13
+ 'Sec-Fetch-Dest': 'empty',
14
+ 'Accept-Language': 'en-US,en;q=0.9',
15
+ }
16
+
17
+ try:
18
+ async with httpx.AsyncClient(timeout=5.0, follow_redirects=True) as client:
19
+ await client.get("https://accounts.zoho.com/register", headers=headers)
20
+
21
+ csrf_cookie = client.cookies.get("iamcsr")
22
+ if not csrf_cookie:
23
+ return Result.error("CSRF cookie not found")
24
+
25
+ headers['X-ZCSRF-TOKEN'] = f'iamcsrcoo={csrf_cookie}'
26
+
27
+ payload = {
28
+ 'mode': 'primary',
29
+ 'servicename': 'ZohoCRM',
30
+ 'serviceurl': 'https://crm.zoho.com/crm/ShowHomePage.do',
31
+ 'service_language': 'en'
32
+ }
33
+
34
+ response = await client.post(
35
+ f'https://accounts.zoho.com/signin/v2/lookup/{email}',
36
+ headers=headers,
37
+ data=payload
38
+ )
39
+
40
+ if response.status_code == 200:
41
+ data = response.json()
42
+ message = data.get("message")
43
+ status = data.get("status_code")
44
+
45
+ if message == "User exists" and status == 201:
46
+ return Result.taken()
47
+
48
+ elif status == 400:
49
+ return Result.available()
50
+
51
+ else:
52
+ return Result.error(data)
53
+
54
+ return Result.error(f"HTTP {response.status_code}")
55
+
56
+ except httpx.TimeoutException:
57
+ return Result.error("Connection timed out")
58
+ except Exception as e:
59
+ return Result.error(str(e))
60
+
61
+
62
+ async def validate_zoho(email: str) -> Result:
63
+ return await _check(email)
user_scanner/version.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
- "version": "1.1.0.4",
2
+ "version": "1.1.0.5",
3
3
  "version_type": "pypi"
4
4
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: user-scanner
3
- Version: 1.1.0.4
3
+ Version: 1.1.0.5
4
4
  Summary: Check username availability across multiple popular platforms
5
5
  Keywords: username,checker,availability,social,tech,python,user-scanner
6
6
  Author-email: Kaif <kafcodec@gmail.com>
@@ -16,7 +16,7 @@ Project-URL: Homepage, https://github.com/kaifcodec/user-scanner
16
16
 
17
17
  ![User Scanner Logo](https://github.com/user-attachments/assets/49ec8d24-665b-4115-8525-01a8d0ca2ef4)
18
18
  <p align="center">
19
- <img src="https://img.shields.io/badge/Version-1.1.0.4-blueviolet?style=for-the-badge&logo=github" />
19
+ <img src="https://img.shields.io/badge/Version-1.1.0.5-blueviolet?style=for-the-badge&logo=github" />
20
20
  <img src="https://img.shields.io/github/issues/kaifcodec/user-scanner?style=for-the-badge&logo=github" />
21
21
  <img src="https://img.shields.io/badge/Tested%20on-Termux-black?style=for-the-badge&logo=termux" />
22
22
  <img src="https://img.shields.io/badge/Tested%20on-Windows-cyan?style=for-the-badge&logo=Windows" />
@@ -34,23 +34,15 @@ Perfect for finding a **unique username** across GitHub, Twitter, Reddit, Instag
34
34
 
35
35
  ## Features
36
36
 
37
- - ✅ Check an email across multiple sites to see if it’s registered.
38
- - ✅ Scan usernames across **social networks**, **developer platforms**, **creator communities**, and more.
39
- - ✅ Can be used purely as a username tool.
40
- - ✅ Smart auto-update system detects new releases on PyPI and prompts the user to upgrade interactively.
41
- - ✅ Clear `Registered` and `Not Registered` for email scanning `Available` / `Taken` / `Error` output for username scans
42
- - ✅ Robust error handling: displays the exact reason a username or email cannot be used (e.g., underscores or hyphens at the start/end).
43
- - ✅ Fully modular: easily add new platform modules.
44
- - ✅ Wildcard-based username permutations for automatic variation generation using a provided suffix.
45
- - ✅ Option to select results format (**JSON**, **CSV**, console).
46
- - ✅ Save scanning and OSINT results in the preferred format and output file (ideal for power users).
47
- - ✅ Command-line interface ready: works immediately after `pip install`.
48
- - ✅ Lightweight with minimal dependencies; runs on any machine.
49
- - ✅ **Proxy support** with round-robin rotation
50
- - ✅ **Proxy validation** to test and filter working proxies before scanning
51
- - ✅ **Bulk username scanning** from file support for checking multiple usernames at once
52
- - ✅ **Bulk email scanning** from file support for checking multiple emails at once
53
- ---
37
+ - ✅ Email & username OSINT: check email registrations and username availability across social, developer, creator, and other platforms
38
+ - ✅ Dual-mode usage: works as an email scanner, username scanner, or username-only tool
39
+ - ✅ Clear results: `Registered` / `Not Registered` for emails and `Available` / `Taken` / `Error` for usernames with precise failure reasons
40
+ - ✅ Fully modular architecture for easy addition of new platform modules
41
+ - ✅ Bulk scanning support for usernames and emails via input files
42
+ - ✅ Wildcard-based username permutations with automatic variation generation
43
+ - ✅ Multiple output formats: console, **JSON**, and **CSV**, with file export support
44
+ - ✅ Proxy support with rotation and pre-scan proxy validation
45
+ - ✅ Smart auto-update system with interactive upgrade prompts via PyPI
54
46
 
55
47
  ## Virtual Environment (optional but recommended)
56
48
 
@@ -102,14 +94,11 @@ pip install user-scanner
102
94
 
103
95
  ### Basic username/email scan
104
96
 
105
- Scan a single username across **all** available modules/platforms:
97
+ Scan a single email or username across **all** available modules/platforms:
106
98
 
107
99
  ```bash
108
- user-scanner -e john_doe@gmail.com
109
- user-scanner --email john_doe@gmail.com # long version
110
-
111
- user-scanner -u john_doe
112
- user-scanner --username john_doe # long version
100
+ user-scanner -e john_doe@gmail.com # single email scanning
101
+ user-scanner -u john_doe # single username scanning
113
102
  ```
114
103
 
115
104
  ### Selective scanning
@@ -121,23 +110,14 @@ user-scanner -u john_doe -c dev # developer platforms only
121
110
  user-scanner -u john_doe -m github # only GitHub
122
111
  ```
123
112
 
124
- ### Bulk username scanning
113
+ ### Bulk email/username scanning
125
114
 
126
- Scan multiple usernames from a file (one username per line):
127
- - Can also be combined with categories or modules using `-c` and `-m` flags
115
+ Scan multiple emails/usernames from a file (one email/username per line):
116
+ - Can also be combined with categories or modules using `-c` , `-m` and other flags
128
117
 
129
118
  ```bash
130
- user-scanner -uf usernames.txt
131
- ```
132
-
133
-
134
- ### Bulk email scanning
135
-
136
- Scan multiple emails from a file (one email per line):
137
- - Can also be combined with categories or modules using `-c` and `-m` flags
138
-
139
- ```bash
140
- user-scanner -ef emails.txt
119
+ user-scanner -ef emails.txt # bulk email scan
120
+ user-scanner -uf usernames.txt # bulk username scan
141
121
  ```
142
122
 
143
123
  ### Username/Email variations (suffix only)
@@ -163,37 +143,22 @@ user-scanner -u john_doe -P proxies.txt --validate-proxies # recommended
163
143
  ```
164
144
 
165
145
  This will:
166
- 1. Test all proxies from the file
167
- 2. Filter out non-working proxies
168
- 3. Save working proxies to `validated_proxies.txt`
169
- 4. Use only validated proxies for scanning
170
-
171
- ---
172
-
173
- ### Update
174
-
175
- Update the tool to the latest PyPI version:
146
+ 1. Filter out non-working proxies
147
+ 2. Save working proxies to `validated_proxies.txt`
148
+ 3. Use only validated proxies for scanning
176
149
 
177
- ```bash
178
- user-scanner -U
179
- ```
180
150
  ---
181
151
 
182
- ## Screenshot:
152
+ ## Screenshots:
183
153
 
184
- - Note*: New modules are constantly getting added so this might have only limited, outdated output:
154
+ - Note*: New modules are constantly getting added so screenshots might show only limited, outdated output:
185
155
 
186
- <img width="1080" height="656" alt="1000146096" src="https://github.com/user-attachments/assets/1101e2f8-18ea-45a4-9492-92e237ecc670" />
156
+ <img width="1080" height="800" alt="1000146237" src="https://github.com/user-attachments/assets/1bb7d7cb-9b78-495a-ae95-01a9ef48d9a2" />
187
157
 
188
158
  ---
189
159
 
190
160
  <img width="1072" height="848" alt="user-scanner's main usage screenshot" src="https://github.com/user-attachments/assets/34e44ca6-e314-419e-9035-d951b493b47f" />
191
161
 
192
- ---
193
-
194
- <img width="1080" height="352" alt="user-scanner's wildcard username feature" src="https://github.com/user-attachments/assets/578b248c-2a05-4917-aab3-6372a7c28045" />
195
-
196
-
197
162
  ---
198
163
 
199
164
  ## Contributing
@@ -212,8 +177,7 @@ user_scanner/
212
177
  │ ├── creator/ # Creator platforms (Hashnode, Dev.to, Medium, Patreon, etc.)
213
178
  │ ├── community/ # Community platforms (forums, StackOverflow, HackerNews, etc.)
214
179
  │ ├── gaming/ # Gaming sites (chess.com, Lichess, Roblox, Minecraft, etc.)
215
- │ └── donation/ # Donation platforms (BuyMeACoffee, Liberapay)
216
- |...
180
+ ...
217
181
  ```
218
182
 
219
183
  **Module guidelines:**
@@ -1,7 +1,7 @@
1
1
  user_scanner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  user_scanner/__main__.py,sha256=6ecuWBMKZQLwmz7hSYcOk2uwSxj3jpYqYVI-2ti0zmA,10848
3
3
  user_scanner/config.json,sha256=QZoyeipL-558-lO5bwmAImgBJLG2za3lritYwoQ5kb0,33
4
- user_scanner/version.json,sha256=jxhA1m5dDVrxmAM60eQK9rSk9CzvS_bsiDQF_Icdpp8,49
4
+ user_scanner/version.json,sha256=QaTtBsYuSYvedKJmGaU6rAxZ08geC7rk5MSJzr5n3lo,49
5
5
  user_scanner/.ruff_cache/.gitignore,sha256=njpg8ebsSuYCFcEdVLFxOSdF7CXp3e1DPVvZITY68xY,35
6
6
  user_scanner/.ruff_cache/CACHEDIR.TAG,sha256=WVMVbX4MVkpCclExbq8m-IcOZIOuIZf5FrYw5Pk-Ma4,43
7
7
  user_scanner/.ruff_cache/0.14.10/12603567674167520802,sha256=cjpMRoL1Rmdr6QzQ4om_hz5oQsAQONLGJ7ILhah5Clo,421
@@ -42,11 +42,12 @@ user_scanner/email_scan/dev/codepen.py,sha256=7R0i4eNQQrO8cFp6A3aUyW_kwc-GeHNgt9
42
42
  user_scanner/email_scan/dev/devrant.py,sha256=KEp24JsAk_OJ5dCN20PQ_BV2_lVZWipy2h-zoBudj7I,1550
43
43
  user_scanner/email_scan/dev/github.py,sha256=1X735qnwokbuuzfo6oJ7JqcaHPH0JFzz-MzYIOqnVnE,3162
44
44
  user_scanner/email_scan/dev/huggingface.py,sha256=GjFNkuVZ_8eFgs9OrFakhiEb8pVRwEJO-tyx32IQMns,1229
45
+ user_scanner/email_scan/dev/leetcode.py,sha256=R728E0fVI-f8_WFCHBEI0Oe18bqg6UgRSKX9psQAkEU,2277
45
46
  user_scanner/email_scan/dev/replit.py,sha256=Jj4YA1OIibpZ17rvJbccGsJDDnOXCoiH3ybhIwj5d3E,1697
46
47
  user_scanner/email_scan/dev/wordpress.py,sha256=G4xBKZ-xB-EHbYwXNoza1KwehCuh_sR10A50M4FkzCk,1813
47
48
  user_scanner/email_scan/dev/.ruff_cache/.gitignore,sha256=njpg8ebsSuYCFcEdVLFxOSdF7CXp3e1DPVvZITY68xY,35
48
49
  user_scanner/email_scan/dev/.ruff_cache/CACHEDIR.TAG,sha256=WVMVbX4MVkpCclExbq8m-IcOZIOuIZf5FrYw5Pk-Ma4,43
49
- user_scanner/email_scan/dev/.ruff_cache/0.14.10/10328336453267387919,sha256=BcA76bIZNeK_y67LFelMGzwIpN--Zx_U-Q_l31dY2sk,298
50
+ user_scanner/email_scan/dev/.ruff_cache/0.14.10/10328336453267387919,sha256=_pE58CBEPzqUxZL3OfGlt85m_vH1Of3WtH7T3Ff7d4w,531
50
51
  user_scanner/email_scan/gaming/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
52
  user_scanner/email_scan/gaming/chess_com.py,sha256=EJF3OTxYtzDC-F4OAVfT0mRWUopmNZdwdYChw97VpE4,1841
52
53
  user_scanner/email_scan/hosting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -54,6 +55,8 @@ user_scanner/email_scan/hosting/render.py,sha256=6G66ftbCzSW_taMoqIyF9CQ9sVIL7PD
54
55
  user_scanner/email_scan/hosting/.ruff_cache/.gitignore,sha256=njpg8ebsSuYCFcEdVLFxOSdF7CXp3e1DPVvZITY68xY,35
55
56
  user_scanner/email_scan/hosting/.ruff_cache/CACHEDIR.TAG,sha256=WVMVbX4MVkpCclExbq8m-IcOZIOuIZf5FrYw5Pk-Ma4,43
56
57
  user_scanner/email_scan/hosting/.ruff_cache/0.14.10/6358275293999347997,sha256=M-yQA4afRuwrT_Ixe5Qd1PJyrImcdEyzQpMAEuatcf0,160
58
+ user_scanner/email_scan/learning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
+ user_scanner/email_scan/learning/duolingo.py,sha256=rLKLH-iwCvNtCxPd7UZcgTXssOzVKaDLl3d8TePYjHo,1297
57
60
  user_scanner/email_scan/music/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
61
  user_scanner/email_scan/music/lastfm.py,sha256=VWuwRIgeW-hgE-0VkEgMF8Muwvz523DyFUfO4RTntSU,2005
59
62
  user_scanner/email_scan/music/spotify.py,sha256=jzFa9p1IWnAYDK7k7NTJ7ipmrGqmK_PVrUQ4otjldkU,3659
@@ -61,6 +64,13 @@ user_scanner/email_scan/music/.ruff_cache/.gitignore,sha256=njpg8ebsSuYCFcEdVLFx
61
64
  user_scanner/email_scan/music/.ruff_cache/CACHEDIR.TAG,sha256=WVMVbX4MVkpCclExbq8m-IcOZIOuIZf5FrYw5Pk-Ma4,43
62
65
  user_scanner/email_scan/music/.ruff_cache/0.14.10/14677874048998292530,sha256=cIbkvYriz3xNK--m83EvzAesaxgXZBfKUoxnx9O6cuo,173
63
66
  user_scanner/email_scan/music/.ruff_cache/0.14.10/7544735312652879689,sha256=ZZrReKvwURlIMyd5sojcj5dkb8QW9tEBMxrI93VL4zU,204
67
+ user_scanner/email_scan/other/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
+ user_scanner/email_scan/other/eventbrite.py,sha256=WLSN5xTlG9YkZbP4lyyE8Ob0NyGcv_T9BVb5bQ-SzaE,1748
69
+ user_scanner/email_scan/pipeline/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
+ user_scanner/email_scan/pipeline/axonaut.py,sha256=Cv-ntMRMdVj1cDDwXOFsp_pX1m2BHHfZRyDGvWQ_8dI,1332
71
+ user_scanner/email_scan/pipeline/hubspot.py,sha256=OOYHqpjKh525iJi9_txuZGyX97tvZ-d0Osq9iP_LC-k,1648
72
+ user_scanner/email_scan/pipeline/insightly.py,sha256=JdoktrXj3E6WmyMf_6VTD13YCxp4908MXALF5_QkIV8,1518
73
+ user_scanner/email_scan/pipeline/zoho.py,sha256=tGnLqzLwqb1eJF0qmWzG-T9g0g3Ax2C6ERG2N14aeo8,2098
64
74
  user_scanner/email_scan/shopping/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
75
  user_scanner/email_scan/shopping/envato.py,sha256=ntMZKLYHhgJVC_QrWs2UmzlPi1MbMxjgtGig9MSH3m0,1493
66
76
  user_scanner/email_scan/shopping/flipkart.py,sha256=wMQJ1VIawhM6W0UQCThcIUtaYN7QeexvJSRSeXS4l04,1879
@@ -131,8 +141,8 @@ user_scanner/user_scan/social/youtube.py,sha256=UPu584teg75P7FT05RFG3nobbHgPmzjr
131
141
  user_scanner/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
132
142
  user_scanner/utils/update.py,sha256=Rj3kLuUrQ-LlKGB7bkndqVjj0IUqugbDSj2SUrPRidE,936
133
143
  user_scanner/utils/updater_logic.py,sha256=tl6kbKL02DrP-R1dkQWhHr12juVDgkJZZvKAfbI1ruU,2381
134
- user_scanner-1.1.0.4.dist-info/entry_points.txt,sha256=XqU3kssYZ0vXaPy5qYUOTCu4u-48Xie7QWFpBCYc7Nc,59
135
- user_scanner-1.1.0.4.dist-info/licenses/LICENSE,sha256=XH1QyQG68zo1opDIZHTHcTAbe9XMzewvTaFTukcN9vc,1061
136
- user_scanner-1.1.0.4.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
137
- user_scanner-1.1.0.4.dist-info/METADATA,sha256=URqoLBGxDedtDLh5uL7_oEG0T29GvILUDiuh-Xk7Wyw,9816
138
- user_scanner-1.1.0.4.dist-info/RECORD,,
144
+ user_scanner-1.1.0.5.dist-info/entry_points.txt,sha256=XqU3kssYZ0vXaPy5qYUOTCu4u-48Xie7QWFpBCYc7Nc,59
145
+ user_scanner-1.1.0.5.dist-info/licenses/LICENSE,sha256=XH1QyQG68zo1opDIZHTHcTAbe9XMzewvTaFTukcN9vc,1061
146
+ user_scanner-1.1.0.5.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
147
+ user_scanner-1.1.0.5.dist-info/METADATA,sha256=s36Bxkwjky8Hqj761n-XHkVU3eobCI2NBA8zhXUeQZ8,8768
148
+ user_scanner-1.1.0.5.dist-info/RECORD,,