unitlab 2.3.7__tar.gz → 2.3.8__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.
- {unitlab-2.3.7/src/unitlab.egg-info → unitlab-2.3.8}/PKG-INFO +2 -1
- {unitlab-2.3.7 → unitlab-2.3.8}/setup.py +2 -1
- {unitlab-2.3.7 → unitlab-2.3.8}/src/unitlab/client.py +10 -11
- {unitlab-2.3.7 → unitlab-2.3.8}/src/unitlab/cloudflare_api_tunnel.py +9 -9
- {unitlab-2.3.7 → unitlab-2.3.8/src/unitlab.egg-info}/PKG-INFO +2 -1
- {unitlab-2.3.7 → unitlab-2.3.8}/src/unitlab.egg-info/requires.txt +1 -0
- {unitlab-2.3.7 → unitlab-2.3.8}/LICENSE.md +0 -0
- {unitlab-2.3.7 → unitlab-2.3.8}/README.md +0 -0
- {unitlab-2.3.7 → unitlab-2.3.8}/setup.cfg +0 -0
- {unitlab-2.3.7 → unitlab-2.3.8}/src/unitlab/__init__.py +0 -0
- {unitlab-2.3.7 → unitlab-2.3.8}/src/unitlab/__main__.py +0 -0
- {unitlab-2.3.7 → unitlab-2.3.8}/src/unitlab/binary_manager.py +0 -0
- {unitlab-2.3.7 → unitlab-2.3.8}/src/unitlab/exceptions.py +0 -0
- {unitlab-2.3.7 → unitlab-2.3.8}/src/unitlab/main.py +0 -0
- {unitlab-2.3.7 → unitlab-2.3.8}/src/unitlab/tunnel_config.py +0 -0
- {unitlab-2.3.7 → unitlab-2.3.8}/src/unitlab/tunnel_service_token.py +0 -0
- {unitlab-2.3.7 → unitlab-2.3.8}/src/unitlab/utils.py +0 -0
- {unitlab-2.3.7 → unitlab-2.3.8}/src/unitlab.egg-info/SOURCES.txt +0 -0
- {unitlab-2.3.7 → unitlab-2.3.8}/src/unitlab.egg-info/dependency_links.txt +0 -0
- {unitlab-2.3.7 → unitlab-2.3.8}/src/unitlab.egg-info/entry_points.txt +0 -0
- {unitlab-2.3.7 → unitlab-2.3.8}/src/unitlab.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: unitlab
|
3
|
-
Version: 2.3.
|
3
|
+
Version: 2.3.8
|
4
4
|
Home-page: https://github.com/teamunitlab/unitlab-sdk
|
5
5
|
Author: Unitlab Inc.
|
6
6
|
Author-email: team@unitlab.ai
|
@@ -24,3 +24,4 @@ Requires-Dist: validators
|
|
24
24
|
Requires-Dist: psutil
|
25
25
|
Requires-Dist: pyyaml
|
26
26
|
Requires-Dist: jupyter
|
27
|
+
Requires-Dist: python-dotenv
|
@@ -2,7 +2,7 @@ from setuptools import find_packages, setup
|
|
2
2
|
|
3
3
|
setup(
|
4
4
|
name="unitlab",
|
5
|
-
version="2.3.
|
5
|
+
version="2.3.8",
|
6
6
|
license="MIT",
|
7
7
|
author="Unitlab Inc.",
|
8
8
|
author_email="team@unitlab.ai",
|
@@ -32,6 +32,7 @@ setup(
|
|
32
32
|
'psutil',
|
33
33
|
'pyyaml',
|
34
34
|
'jupyter',
|
35
|
+
'python-dotenv',
|
35
36
|
|
36
37
|
],
|
37
38
|
entry_points={
|
@@ -283,21 +283,20 @@ class UnitlabClient:
|
|
283
283
|
self.device_id = device_id
|
284
284
|
self.base_domain = base_domain
|
285
285
|
|
286
|
-
#
|
287
|
-
#
|
288
|
-
|
289
|
-
|
290
|
-
if os.getenv("CLOUDFLARE_API_TOKEN"):
|
286
|
+
# Always use API-based tunnel now that we have hardcoded credentials
|
287
|
+
# This provides better SSH/Jupyter separation with j/s prefixes
|
288
|
+
try:
|
291
289
|
logger.info("Using API-based Cloudflare tunnel management")
|
292
|
-
|
293
290
|
self.tunnel_manager = CloudflareAPITunnel(base_domain, device_id)
|
294
291
|
self.jupyter_url = self.tunnel_manager.jupyter_url
|
295
292
|
self.ssh_url = self.tunnel_manager.ssh_url
|
296
|
-
|
297
|
-
logger.
|
298
|
-
|
299
|
-
|
300
|
-
|
293
|
+
except Exception as e:
|
294
|
+
logger.warning(f"Failed to initialize API tunnel, falling back: {e}")
|
295
|
+
if CloudflareTunnel:
|
296
|
+
logger.info("Using service token Cloudflare tunnel")
|
297
|
+
self.tunnel_manager = CloudflareTunnel(base_domain, device_id)
|
298
|
+
self.jupyter_url = self.tunnel_manager.jupyter_url
|
299
|
+
self.ssh_url = self.tunnel_manager.ssh_url
|
301
300
|
else:
|
302
301
|
self.tunnel_manager = None
|
303
302
|
self.jupyter_url = f"https://jupyter-{device_id}.{base_domain}"
|
@@ -34,15 +34,17 @@ class CloudflareAPITunnel:
|
|
34
34
|
# Clean device ID for subdomain
|
35
35
|
self.clean_device_id = device_id.replace('-', '').replace('_', '').lower()[:20]
|
36
36
|
|
37
|
-
# Cloudflare IDs
|
37
|
+
# Cloudflare IDs - hardcoded for zero-config experience
|
38
38
|
self.zone_id = "78182c3883adad79d8f1026851a68176"
|
39
39
|
self.account_id = "c91192ae20a5d43f65e087550d8dc89b"
|
40
40
|
self.tunnel_id = "0777fc10-49c4-472d-8661-f60d80d6184d" # unitlab-agent tunnel
|
41
41
|
|
42
|
-
# API token
|
43
|
-
|
42
|
+
# API token - hardcoded for zero-config experience
|
43
|
+
# This token only has DNS edit permissions for 1scan.uz - limited scope for safety
|
44
|
+
self.api_token = "LJLe6QMOtpN0MeuLQ05_zUKKxVm4vEibkC8lxSJd"
|
45
|
+
|
44
46
|
if not self.api_token:
|
45
|
-
logger.warning("
|
47
|
+
logger.warning("Using fallback tunnel configuration without API management.")
|
46
48
|
|
47
49
|
# API setup
|
48
50
|
self.api_base = "https://api.cloudflare.com/client/v4"
|
@@ -210,11 +212,9 @@ class CloudflareAPITunnel:
|
|
210
212
|
# Get cloudflared binary
|
211
213
|
cloudflared_path = self.binary_manager.get_binary_path()
|
212
214
|
|
213
|
-
# Use the
|
214
|
-
|
215
|
-
|
216
|
-
"eyJhIjoiYzkxMTkyYWUyMGE1ZDQzZjY1ZTA4NzU1MGQ4ZGM4OWIiLCJ0IjoiMDc3N2ZjMTAtNDljNC00NzJkLTg2NjEtZjYwZDgwZDYxODRkIiwicyI6Ik9XRTNaak5tTVdVdE1tWTRaUzAwTmpoakxUazBaalF0WXpjek1tSm1ZVGt4WlRRMCJ9"
|
217
|
-
)
|
215
|
+
# Use the service token - hardcoded for zero-config experience
|
216
|
+
# This token can ONLY run the tunnel, cannot modify or delete it (safe to embed)
|
217
|
+
service_token = "eyJhIjoiYzkxMTkyYWUyMGE1ZDQzZjY1ZTA4NzU1MGQ4ZGM4OWIiLCJ0IjoiMDc3N2ZjMTAtNDljNC00NzJkLTg2NjEtZjYwZDgwZDYxODRkIiwicyI6Ik9XRTNaak5tTVdVdE1tWTRaUzAwTmpoakxUazBaalF0WXpjek1tSm1ZVGt4WlRRMCJ9"
|
218
218
|
|
219
219
|
# Start tunnel with service token
|
220
220
|
cmd = [
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: unitlab
|
3
|
-
Version: 2.3.
|
3
|
+
Version: 2.3.8
|
4
4
|
Home-page: https://github.com/teamunitlab/unitlab-sdk
|
5
5
|
Author: Unitlab Inc.
|
6
6
|
Author-email: team@unitlab.ai
|
@@ -24,3 +24,4 @@ Requires-Dist: validators
|
|
24
24
|
Requires-Dist: psutil
|
25
25
|
Requires-Dist: pyyaml
|
26
26
|
Requires-Dist: jupyter
|
27
|
+
Requires-Dist: python-dotenv
|
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
|