intuned-runtime 1.0.0__py3-none-any.whl → 1.1.1__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.
- intuned_cli/__init__.py +40 -0
- intuned_cli/commands/__init__.py +18 -0
- intuned_cli/commands/attempt_api_command.py +51 -0
- intuned_cli/commands/attempt_authsession_check_command.py +38 -0
- intuned_cli/commands/attempt_authsession_command.py +12 -0
- intuned_cli/commands/attempt_authsession_create_command.py +44 -0
- intuned_cli/commands/attempt_command.py +12 -0
- intuned_cli/commands/command.py +26 -0
- intuned_cli/commands/deploy_command.py +47 -0
- intuned_cli/commands/init_command.py +21 -0
- intuned_cli/commands/run_api_command.py +69 -0
- intuned_cli/commands/run_authsession_command.py +12 -0
- intuned_cli/commands/run_authsession_create_command.py +50 -0
- intuned_cli/commands/run_authsession_update_command.py +52 -0
- intuned_cli/commands/run_authsession_validate_command.py +49 -0
- intuned_cli/commands/run_command.py +12 -0
- intuned_cli/constants/__init__.py +1 -0
- intuned_cli/constants/readme.py +134 -0
- intuned_cli/controller/__test__/__init__.py +0 -0
- intuned_cli/controller/__test__/test_api.py +529 -0
- intuned_cli/controller/__test__/test_authsession.py +907 -0
- intuned_cli/controller/api.py +212 -0
- intuned_cli/controller/authsession.py +458 -0
- intuned_cli/controller/deploy.py +352 -0
- intuned_cli/controller/init.py +97 -0
- intuned_cli/types.py +33 -0
- intuned_cli/utils/api_helpers.py +32 -0
- intuned_cli/utils/auth_session_helpers.py +57 -0
- intuned_cli/utils/backend.py +5 -0
- intuned_cli/utils/confirmation.py +0 -0
- intuned_cli/utils/console.py +6 -0
- intuned_cli/utils/error.py +27 -0
- intuned_cli/utils/exclusions.py +40 -0
- intuned_cli/utils/get_auth_parameters.py +18 -0
- intuned_cli/utils/import_function.py +15 -0
- intuned_cli/utils/timeout.py +25 -0
- {cli → intuned_internal_cli}/__init__.py +1 -1
- {cli → intuned_internal_cli}/commands/__init__.py +2 -0
- {cli → intuned_internal_cli}/commands/ai_source/deploy.py +1 -1
- {cli → intuned_internal_cli}/commands/browser/save_state.py +2 -2
- {cli → intuned_internal_cli}/commands/project/auth_session/load.py +2 -2
- {cli → intuned_internal_cli}/commands/project/type_check.py +39 -32
- intuned_internal_cli/commands/root.py +15 -0
- {intuned_runtime-1.0.0.dist-info → intuned_runtime-1.1.1.dist-info}/METADATA +5 -1
- intuned_runtime-1.1.1.dist-info/RECORD +99 -0
- intuned_runtime-1.1.1.dist-info/entry_points.txt +4 -0
- runtime/__init__.py +2 -1
- runtime/backend_functions/_call_backend_function.py +0 -5
- runtime/browser/__init__.py +5 -2
- runtime/browser/helpers.py +21 -0
- runtime/browser/launch_browser.py +31 -0
- runtime/browser/launch_camoufox.py +61 -0
- runtime/browser/launch_chromium.py +64 -61
- runtime/browser/storage_state.py +11 -12
- runtime/env.py +4 -0
- runtime/errors/run_api_errors.py +14 -10
- runtime/run/playwright_constructs.py +6 -5
- runtime/run/pydantic_encoder.py +15 -0
- runtime/run/run_api.py +5 -4
- runtime/types/run_types.py +16 -0
- intuned_runtime-1.0.0.dist-info/RECORD +0 -58
- intuned_runtime-1.0.0.dist-info/entry_points.txt +0 -3
- {cli → intuned_internal_cli}/commands/ai_source/__init__.py +0 -0
- {cli → intuned_internal_cli}/commands/ai_source/ai_source.py +0 -0
- {cli → intuned_internal_cli}/commands/browser/__init__.py +0 -0
- {cli → intuned_internal_cli}/commands/init.py +0 -0
- {cli → intuned_internal_cli}/commands/project/__init__.py +0 -0
- {cli → intuned_internal_cli}/commands/project/auth_session/__init__.py +0 -0
- {cli → intuned_internal_cli}/commands/project/auth_session/check.py +0 -0
- {cli → intuned_internal_cli}/commands/project/auth_session/create.py +0 -0
- {cli → intuned_internal_cli}/commands/project/project.py +0 -0
- {cli → intuned_internal_cli}/commands/project/run.py +0 -0
- {cli → intuned_internal_cli}/commands/project/run_interface.py +0 -0
- {cli → intuned_internal_cli}/commands/project/upgrade.py +0 -0
- {cli → intuned_internal_cli}/commands/publish_packages.py +0 -0
- {cli → intuned_internal_cli}/logger.py +0 -0
- {cli → intuned_internal_cli}/utils/ai_source_project.py +0 -0
- {cli → intuned_internal_cli}/utils/code_tree.py +0 -0
- {cli → intuned_internal_cli}/utils/run_apis.py +0 -0
- {cli → intuned_internal_cli}/utils/unix_socket.py +0 -0
- {intuned_runtime-1.0.0.dist-info → intuned_runtime-1.1.1.dist-info}/LICENSE +0 -0
- {intuned_runtime-1.0.0.dist-info → intuned_runtime-1.1.1.dist-info}/WHEEL +0 -0
@@ -1,31 +1,15 @@
|
|
1
|
+
import asyncio
|
1
2
|
import json
|
3
|
+
import logging
|
2
4
|
import os
|
3
|
-
import tempfile
|
4
5
|
from contextlib import asynccontextmanager
|
5
|
-
from os.path import join
|
6
6
|
from typing import Any
|
7
|
-
from typing import Optional
|
8
|
-
from typing import Literal
|
9
|
-
import logging
|
10
|
-
import aiofiles
|
11
|
-
from playwright.async_api import async_playwright
|
12
|
-
from playwright.async_api import Browser
|
13
|
-
from playwright.async_api import ProxySettings
|
14
7
|
|
15
|
-
|
8
|
+
import anyio
|
16
9
|
|
10
|
+
from .helpers import get_proxy_env
|
17
11
|
|
18
|
-
|
19
|
-
server = os.getenv("PROXY_SERVER")
|
20
|
-
username = os.getenv("PROXY_USERNAME")
|
21
|
-
password = os.getenv("PROXY_PASSWORD")
|
22
|
-
if server is None or username is None or password is None:
|
23
|
-
return None
|
24
|
-
return {
|
25
|
-
"server": server,
|
26
|
-
"username": username,
|
27
|
-
"password": password,
|
28
|
-
}
|
12
|
+
logger = logging.getLogger(__name__)
|
29
13
|
|
30
14
|
|
31
15
|
chromium_launch_args_to_ignore = [
|
@@ -64,12 +48,12 @@ chromium_launch_args_to_ignore = [
|
|
64
48
|
|
65
49
|
async def create_user_dir_with_preferences():
|
66
50
|
# Create a temporary directory
|
67
|
-
playwright_temp_dir =
|
68
|
-
user_dir =
|
69
|
-
default_dir =
|
51
|
+
playwright_temp_dir = anyio.Path(await anyio.mkdtemp(prefix="pw-"))
|
52
|
+
user_dir = playwright_temp_dir / "userdir"
|
53
|
+
default_dir = user_dir / "Default"
|
70
54
|
|
71
55
|
# Create the default directory recursively
|
72
|
-
|
56
|
+
await default_dir.mkdir(parents=True, exist_ok=True)
|
73
57
|
|
74
58
|
# Preferences data
|
75
59
|
preferences = {
|
@@ -79,10 +63,10 @@ async def create_user_dir_with_preferences():
|
|
79
63
|
}
|
80
64
|
|
81
65
|
# Write preferences to file
|
82
|
-
async with
|
66
|
+
async with await (default_dir / "Preferences").open("w") as f:
|
83
67
|
await f.write(json.dumps(preferences))
|
84
68
|
|
85
|
-
return
|
69
|
+
return await user_dir.absolute(), await playwright_temp_dir.absolute()
|
86
70
|
|
87
71
|
|
88
72
|
extra_args = [
|
@@ -95,7 +79,9 @@ extra_args = [
|
|
95
79
|
"--disable-blink-features=AutomationControlled",
|
96
80
|
]
|
97
81
|
|
98
|
-
default_user_agent =
|
82
|
+
default_user_agent = (
|
83
|
+
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36"
|
84
|
+
)
|
99
85
|
|
100
86
|
|
101
87
|
@asynccontextmanager
|
@@ -105,13 +91,17 @@ async def launch_chromium(
|
|
105
91
|
cdp_address: str | None = None,
|
106
92
|
**kwargs: Any,
|
107
93
|
):
|
94
|
+
from playwright.async_api import async_playwright
|
95
|
+
from playwright.async_api import Browser
|
96
|
+
|
108
97
|
async with async_playwright() as playwright:
|
109
98
|
if cdp_address is not None:
|
110
99
|
browser: Browser = await playwright.chromium.connect_over_cdp(cdp_address)
|
111
100
|
context = browser.contexts[0]
|
112
|
-
|
101
|
+
user_preferences_dir = None
|
102
|
+
dir_to_clean = None
|
113
103
|
else:
|
114
|
-
|
104
|
+
user_preferences_dir, dir_to_clean = await create_user_dir_with_preferences()
|
115
105
|
if kwargs.get("proxy") is None:
|
116
106
|
proxy_env = get_proxy_env()
|
117
107
|
else:
|
@@ -126,7 +116,7 @@ async def launch_chromium(
|
|
126
116
|
extra_args.append("--headless=new")
|
127
117
|
|
128
118
|
context = await playwright.chromium.launch_persistent_context(
|
129
|
-
|
119
|
+
os.fspath(user_preferences_dir),
|
130
120
|
headless=headless,
|
131
121
|
viewport=viewport,
|
132
122
|
proxy=proxy_env,
|
@@ -138,9 +128,19 @@ async def launch_chromium(
|
|
138
128
|
context.set_default_timeout(timeout * 1000)
|
139
129
|
|
140
130
|
async def remove_dir_after_close(*_: Any, **__: Any) -> None:
|
141
|
-
if not
|
131
|
+
if not dir_to_clean:
|
142
132
|
return
|
143
|
-
|
133
|
+
if not await dir_to_clean.exists():
|
134
|
+
return
|
135
|
+
|
136
|
+
process = await asyncio.create_subprocess_exec(
|
137
|
+
"rm",
|
138
|
+
"-rf",
|
139
|
+
os.fspath(dir_to_clean), # Using subprocess to remove the directory
|
140
|
+
stdout=asyncio.subprocess.DEVNULL,
|
141
|
+
stderr=asyncio.subprocess.DEVNULL,
|
142
|
+
)
|
143
|
+
await process.wait()
|
144
144
|
|
145
145
|
context.once("close", remove_dir_after_close)
|
146
146
|
yield context, context.pages[0]
|
@@ -149,31 +149,25 @@ async def launch_chromium(
|
|
149
149
|
async def dangerous_launch_chromium(
|
150
150
|
headless: bool = True,
|
151
151
|
timeout: int = 10,
|
152
|
-
web_socket: str | None = None,
|
153
152
|
cdp_url: str | None = None,
|
154
|
-
|
153
|
+
port: int | None = None,
|
155
154
|
**kwargs: Any,
|
156
155
|
):
|
156
|
+
from playwright.async_api import async_playwright
|
157
|
+
from playwright.async_api import Browser
|
158
|
+
|
157
159
|
playwright = await async_playwright().start()
|
158
|
-
if
|
159
|
-
logging.info(f"Connecting to ws: {web_socket}")
|
160
|
-
browser: Browser = await playwright.chromium.connect(web_socket)
|
161
|
-
browser.on("disconnected", lambda: logging.info("Browser Session disconnected"))
|
162
|
-
await browser.new_context(
|
163
|
-
viewport={"width": 1280, "height": 800}, user_agent=default_user_agent
|
164
|
-
)
|
165
|
-
context = browser.contexts[0]
|
166
|
-
dir = None
|
167
|
-
elif cdp_url is not None and connection_method == "cdp":
|
160
|
+
if cdp_url is not None:
|
168
161
|
logging.info(f"Connecting to cdp: {cdp_url}")
|
169
162
|
browser: Browser = await playwright.chromium.connect_over_cdp(cdp_url)
|
170
|
-
browser.on("disconnected", lambda: logging.info("Browser Session disconnected"))
|
163
|
+
browser.on("disconnected", lambda _: logging.info("Browser Session disconnected"))
|
171
164
|
context = browser.contexts[0]
|
172
|
-
|
173
|
-
|
165
|
+
user_preferences_dir = None
|
166
|
+
dir_to_clean = None
|
167
|
+
else:
|
174
168
|
logging.info("Launching local browser")
|
175
|
-
|
176
|
-
logging.info(f"Using user data directory: {
|
169
|
+
user_preferences_dir, dir_to_clean = await create_user_dir_with_preferences()
|
170
|
+
logging.info(f"Using user data directory: {user_preferences_dir}")
|
177
171
|
if kwargs.get("proxy") is None:
|
178
172
|
proxy_env = get_proxy_env()
|
179
173
|
else:
|
@@ -187,8 +181,11 @@ async def dangerous_launch_chromium(
|
|
187
181
|
chromium_launch_args_to_ignore.append("--headless")
|
188
182
|
extra_args.append("--headless=new")
|
189
183
|
|
184
|
+
if port:
|
185
|
+
extra_args.append(f"--remote-debugging-port={port}")
|
186
|
+
|
190
187
|
context = await playwright.chromium.launch_persistent_context(
|
191
|
-
|
188
|
+
os.fspath(user_preferences_dir),
|
192
189
|
headless=headless,
|
193
190
|
viewport=viewport,
|
194
191
|
proxy=proxy_env,
|
@@ -197,16 +194,22 @@ async def dangerous_launch_chromium(
|
|
197
194
|
args=extra_args,
|
198
195
|
**kwargs,
|
199
196
|
)
|
200
|
-
|
201
|
-
raise ValueError(
|
202
|
-
"You have to provide method if you are launching a remote browser with ws or cdp"
|
203
|
-
)
|
204
|
-
context.set_default_timeout(timeout * 1000)
|
197
|
+
context.set_default_timeout(timeout * 1000)
|
205
198
|
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
199
|
+
async def remove_dir_after_close(*_: Any, **__: Any) -> None:
|
200
|
+
if not dir_to_clean:
|
201
|
+
return
|
202
|
+
if not await dir_to_clean.exists():
|
203
|
+
return
|
210
204
|
|
211
|
-
|
205
|
+
process = await asyncio.create_subprocess_exec(
|
206
|
+
"rm",
|
207
|
+
"-rf",
|
208
|
+
os.fspath(dir_to_clean), # Using subprocess to remove the directory
|
209
|
+
stdout=asyncio.subprocess.DEVNULL,
|
210
|
+
stderr=asyncio.subprocess.DEVNULL,
|
211
|
+
)
|
212
|
+
await process.wait()
|
213
|
+
|
214
|
+
context.once("close", remove_dir_after_close)
|
212
215
|
return playwright, context
|
runtime/browser/storage_state.py
CHANGED
@@ -1,23 +1,22 @@
|
|
1
1
|
from typing import Any
|
2
|
+
from typing import TYPE_CHECKING
|
2
3
|
|
3
|
-
|
4
|
-
from playwright.async_api import
|
4
|
+
if TYPE_CHECKING:
|
5
|
+
from playwright.async_api import BrowserContext
|
6
|
+
|
7
|
+
import logging
|
5
8
|
|
6
9
|
from ..types.run_types import Cookie
|
7
10
|
from ..types.run_types import Origin
|
8
11
|
from ..types.run_types import SessionStorageOrigin
|
9
12
|
from ..types.run_types import StorageState
|
10
13
|
|
11
|
-
import logging
|
12
|
-
|
13
14
|
logger = logging.getLogger(__name__)
|
14
15
|
|
15
16
|
|
16
|
-
async def set_storage_state(context: BrowserContext, state: StorageState):
|
17
|
+
async def set_storage_state(context: "BrowserContext", state: StorageState):
|
17
18
|
# Add cookies if they exist
|
18
|
-
await context.add_cookies(
|
19
|
-
[cookie.model_dump(by_alias=True) for cookie in state.cookies]
|
20
|
-
) # type: ignore
|
19
|
+
await context.add_cookies([cookie.model_dump(by_alias=True) for cookie in state.cookies]) # type: ignore
|
21
20
|
|
22
21
|
# Apply localStorage for each origin
|
23
22
|
page = await context.new_page()
|
@@ -67,7 +66,9 @@ async def set_storage_state(context: BrowserContext, state: StorageState):
|
|
67
66
|
await page.close()
|
68
67
|
|
69
68
|
|
70
|
-
async def get_storage_state(context: BrowserContext) -> StorageState:
|
69
|
+
async def get_storage_state(context: "BrowserContext") -> StorageState:
|
70
|
+
from playwright.async_api import Error as PlaywrightError
|
71
|
+
|
71
72
|
storage_state = await context.storage_state()
|
72
73
|
cookies = storage_state.get("cookies") or []
|
73
74
|
origins = storage_state.get("origins") or []
|
@@ -92,9 +93,7 @@ async def get_storage_state(context: BrowserContext) -> StorageState:
|
|
92
93
|
session_storage.append(SessionStorageOrigin(**session_data))
|
93
94
|
except PlaywrightError as e:
|
94
95
|
if "SecurityError" in e.message:
|
95
|
-
logger.warning(
|
96
|
-
f"Could not get storage state for page due '{page.url}' to security error."
|
97
|
-
)
|
96
|
+
logger.warning(f"Could not get storage state for page due '{page.url}' to security error.")
|
98
97
|
continue
|
99
98
|
raise e
|
100
99
|
|
runtime/env.py
CHANGED
runtime/errors/run_api_errors.py
CHANGED
@@ -66,22 +66,30 @@ class AutomationNotCoroutineError(RunApiError):
|
|
66
66
|
|
67
67
|
|
68
68
|
class AutomationError(RunApiError):
|
69
|
-
|
69
|
+
_error: BaseException
|
70
|
+
|
71
|
+
def __init__(self, error: BaseException):
|
70
72
|
# Get all public attributes of the exception
|
71
|
-
error_props = {key: str(value) for key, value in
|
73
|
+
error_props = {key: str(value) for key, value in error.__dict__.items() if not key.startswith("_")}
|
72
74
|
|
73
75
|
super().__init__(
|
74
|
-
str(
|
76
|
+
str(error),
|
75
77
|
"AutomationError",
|
76
78
|
)
|
77
79
|
|
80
|
+
self._error = error
|
81
|
+
|
78
82
|
self.details = {
|
79
83
|
"error_props": error_props,
|
80
|
-
"error_type":
|
81
|
-
"name":
|
82
|
-
"message": str(
|
84
|
+
"error_type": error.__class__.__name__,
|
85
|
+
"name": error.__class__.__name__,
|
86
|
+
"message": str(error),
|
83
87
|
}
|
84
88
|
|
89
|
+
@property
|
90
|
+
def error(self) -> BaseException:
|
91
|
+
return self._error
|
92
|
+
|
85
93
|
|
86
94
|
class AutomationTimeoutError(RunApiError):
|
87
95
|
def __init__(self):
|
@@ -111,10 +119,6 @@ class InternalInvalidInputError(RunApiError):
|
|
111
119
|
def __init__(self, message: str, details: Any | None = None):
|
112
120
|
super().__init__(
|
113
121
|
f"Internal error: {message}. Please report this issue to the Intuned team.",
|
114
|
-
RunApiResponse(
|
115
|
-
status_code=500,
|
116
|
-
response={"error": "Internal error", "message": f"Internal error: {message}"},
|
117
|
-
),
|
118
122
|
"InternalInvalidInputError",
|
119
123
|
)
|
120
124
|
self.details = details
|
@@ -1,18 +1,19 @@
|
|
1
1
|
from contextlib import asynccontextmanager
|
2
|
+
from typing import TYPE_CHECKING
|
2
3
|
|
3
|
-
|
4
|
-
|
5
|
-
from ..browser import
|
4
|
+
if TYPE_CHECKING:
|
5
|
+
from playwright.async_api import ProxySettings
|
6
|
+
from ..browser import launch_browser
|
6
7
|
|
7
8
|
|
8
9
|
@asynccontextmanager
|
9
10
|
async def get_production_playwright_constructs(
|
10
|
-
proxy: ProxySettings | None = None,
|
11
|
+
proxy: "ProxySettings | None" = None,
|
11
12
|
headless: bool = False,
|
12
13
|
*,
|
13
14
|
cdp_address: str | None = None,
|
14
15
|
):
|
15
|
-
async with
|
16
|
+
async with launch_browser(headless=headless, cdp_address=cdp_address, proxy=proxy) as (context, page):
|
16
17
|
try:
|
17
18
|
yield context, page
|
18
19
|
finally:
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import json
|
2
|
+
from typing import Any
|
3
|
+
from typing import override
|
4
|
+
|
5
|
+
from pydantic import BaseModel
|
6
|
+
|
7
|
+
|
8
|
+
class PydanticEncoder(json.JSONEncoder):
|
9
|
+
@override
|
10
|
+
def default(self, o: Any):
|
11
|
+
if isinstance(o, BaseModel):
|
12
|
+
return o.model_dump(
|
13
|
+
by_alias=True,
|
14
|
+
)
|
15
|
+
return super().default(o)
|
runtime/run/run_api.py
CHANGED
@@ -31,7 +31,7 @@ from ..errors import AutomationError
|
|
31
31
|
from ..errors import AutomationNotCoroutineError
|
32
32
|
from ..errors import NoAutomationInApiError
|
33
33
|
from .playwright_constructs import get_production_playwright_constructs
|
34
|
-
from .
|
34
|
+
from .pydantic_encoder import PydanticEncoder
|
35
35
|
|
36
36
|
|
37
37
|
def import_function_from_api_dir(
|
@@ -111,7 +111,9 @@ async def run_api(
|
|
111
111
|
parameters: RunApiParameters,
|
112
112
|
*,
|
113
113
|
import_function: ImportFunction | None = None,
|
114
|
-
):
|
114
|
+
) -> RunAutomationSuccessResult:
|
115
|
+
from playwright.async_api import ProxySettings
|
116
|
+
|
115
117
|
trace_started: bool = False
|
116
118
|
|
117
119
|
headless = False
|
@@ -145,7 +147,6 @@ async def run_api(
|
|
145
147
|
context=context,
|
146
148
|
state=state,
|
147
149
|
)
|
148
|
-
|
149
150
|
import_function = import_function or (
|
150
151
|
lambda file_path, name=None: import_function_from_api_dir(
|
151
152
|
file_path=file_path, automation_function_name=name
|
@@ -181,7 +182,7 @@ async def run_api(
|
|
181
182
|
else:
|
182
183
|
automation_result = await automation_coroutine_with_page(parameters.automation_function.params)
|
183
184
|
try:
|
184
|
-
json.dumps(automation_result)
|
185
|
+
json.dumps(automation_result, cls=PydanticEncoder)
|
185
186
|
except TypeError as e:
|
186
187
|
raise AutomationError(TypeError("Result is not JSON serializable")) from e
|
187
188
|
|
runtime/types/run_types.py
CHANGED
@@ -5,6 +5,7 @@ from typing import List
|
|
5
5
|
from typing import Literal
|
6
6
|
from typing import Optional
|
7
7
|
from typing import Union
|
8
|
+
from urllib.parse import urlparse
|
8
9
|
|
9
10
|
from pydantic import BaseModel
|
10
11
|
from pydantic import ConfigDict
|
@@ -24,6 +25,21 @@ class ProxyConfig(CamelBaseModel):
|
|
24
25
|
username: str
|
25
26
|
password: str
|
26
27
|
|
28
|
+
@classmethod
|
29
|
+
def parse_from_str(cls, proxy_str: str) -> "ProxyConfig":
|
30
|
+
parts = urlparse(proxy_str)
|
31
|
+
username = parts.username or ""
|
32
|
+
password = parts.password or ""
|
33
|
+
hostname = parts.hostname or ""
|
34
|
+
port = f":{parts.port}" if parts.port else ""
|
35
|
+
domain = f"{parts.scheme}://{hostname}{port}"
|
36
|
+
|
37
|
+
return ProxyConfig(
|
38
|
+
server=domain,
|
39
|
+
username=username,
|
40
|
+
password=password,
|
41
|
+
)
|
42
|
+
|
27
43
|
|
28
44
|
class SameSite(str, Enum):
|
29
45
|
STRICT = "Strict"
|
@@ -1,58 +0,0 @@
|
|
1
|
-
cli/__init__.py,sha256=QvTM82L3VLVOFGpu_bziWupgwjsAgv07u6o_gUwO3z0,1314
|
2
|
-
cli/commands/__init__.py,sha256=QF-zy-iOZXY-9m-1O-JjWnugjulgJtsODtnkhvlNKq8,944
|
3
|
-
cli/commands/ai_source/__init__.py,sha256=lg7owgcK8owNn2a4VBUP9RKxzFsLruhtnnQV0F_z6pc,149
|
4
|
-
cli/commands/ai_source/ai_source.py,sha256=2woQtCmhxKvLfEz832eUoCT9gMsuSvEE6rMnHSYXC7w,138
|
5
|
-
cli/commands/ai_source/deploy.py,sha256=XVN_alilwIaoVniuSpE8RkAveuaB3MaUtsRjIcpQTXo,2440
|
6
|
-
cli/commands/browser/__init__.py,sha256=AuVbvh7aSBTFKYvewXZyPoIvfBTe2uHiPcnaAkzapas,95
|
7
|
-
cli/commands/browser/save_state.py,sha256=eHKfvBfeFR_U9VQbsjOnIZjWepyDjNn9NL3naDYWP2s,841
|
8
|
-
cli/commands/init.py,sha256=8rWBenWZfwNtLxOBqhEMbOATyQNEnmDUmrFJ1xBGyxI,4384
|
9
|
-
cli/commands/project/__init__.py,sha256=t97wvhSenerYRdbSeCKXqHASA6EWA3lc1hnRhF9baOE,734
|
10
|
-
cli/commands/project/auth_session/__init__.py,sha256=gt7mlaW6xmqAc_4-pfF_FiecsR51C6fqCaq_NFbcbwA,300
|
11
|
-
cli/commands/project/auth_session/check.py,sha256=AFILp7m34nAO_RD3IfRpuJm5Zh0wnCRtBXqIrerdbwo,4565
|
12
|
-
cli/commands/project/auth_session/create.py,sha256=r-eYu3uLUo2mzF836CbVgu4oBzcIIDekzzFwwekxmg0,3374
|
13
|
-
cli/commands/project/auth_session/load.py,sha256=UUvg9Vyj15xiR44XlJzojLoFm5esv-o4E3qA3JqnBsE,1201
|
14
|
-
cli/commands/project/project.py,sha256=_MSh6Xor2Cbh-ItifwgOPq_BP8UDuKB7S6w796FULKQ,137
|
15
|
-
cli/commands/project/run.py,sha256=FDYYkU24aURYbljyYLFo8wLF-nvb86EVr9gMEjAfeE0,12274
|
16
|
-
cli/commands/project/run_interface.py,sha256=4RyR8WZriIF7Va4z1wt-q6zZDQOI31n62Ho2dyimzUY,8717
|
17
|
-
cli/commands/project/type_check.py,sha256=3BKMqTzJ73_J-RYrjba7Yv2mM_VzHR0gnXQEg_Us7JA,3384
|
18
|
-
cli/commands/project/upgrade.py,sha256=XmkZLflM4O-mwvhwcswlZpazRotwi3xesLgE0Zz8fTI,3061
|
19
|
-
cli/commands/publish_packages.py,sha256=sijkaG7_s0I1EWgLekGy1qm8Aqi_gYY8poXbMX0B6Yw,10505
|
20
|
-
cli/logger.py,sha256=bZK3q-KUdGxk_qzDb6pn-n0LOhKJvi6a9p8oSwZtq3s,594
|
21
|
-
cli/utils/ai_source_project.py,sha256=xUCM6p3i1XN4bJbuQz8LCzeI4BwqAdSvCl_vwDAEi0k,831
|
22
|
-
cli/utils/code_tree.py,sha256=1wfxZoQ5kRCfqs2SEPAicbAIPTiD6P1LxSuwYu_eeaI,2790
|
23
|
-
cli/utils/run_apis.py,sha256=Zee4zkgt9R8XY1XCGzj2Nc4zJ3jlRz1xnO493wotuWw,4690
|
24
|
-
cli/utils/unix_socket.py,sha256=UISmkJMHrir5iBLUm6vxC3uzTGIFyOk_wa0C9LUw4Cc,1889
|
25
|
-
runtime/__init__.py,sha256=wgS7k3f10LBbjSYJdjKeKUptizNw6OrBgNx-ECT5Ox8,124
|
26
|
-
runtime/backend_functions/__init__.py,sha256=j2EaK4FK8bmdFtqc5FxtFwx1KhIn_7qKPChrrAhJI3s,119
|
27
|
-
runtime/backend_functions/_call_backend_function.py,sha256=sER0op3vE9EVEB5-ZNwpGraxrqkFh5ZgOIV2B5fgmg4,3028
|
28
|
-
runtime/backend_functions/get_auth_session_parameters.py,sha256=pOvB7XiWpphEuBpazdKALw9EWgBU1PeY3gkzBfVLpkc,869
|
29
|
-
runtime/browser/__init__.py,sha256=9Nqf-80l1F7KGjy2pYBC5S5SeEXJ4YJ4Dl71hi_GWdI,132
|
30
|
-
runtime/browser/launch_chromium.py,sha256=sML_XpjmlMf5QpuqMGeaS42D43pAXWKswm2q-3a2jAM,7459
|
31
|
-
runtime/browser/storage_state.py,sha256=AmiHMfWbFVr7XUEYXoaWWZH4pXGdPv4wTNPXunm19rA,3591
|
32
|
-
runtime/context/__init__.py,sha256=hg8ejm4bJy4tNkwmZ9lKgYJx6bU7OgOdBS684Uv5XGg,73
|
33
|
-
runtime/context/context.py,sha256=pl_0x77_d5CiAznz1qGSk6o9cW-msNvlCt-2eFoMKlA,1739
|
34
|
-
runtime/env.py,sha256=h4BJI-XVSZKgtTxjkzj2HsyN3DlY5Ml9GZqeH4CKDE8,238
|
35
|
-
runtime/errors/__init__.py,sha256=oqiBSvT_yFLQ3hG0AbCUA3WYFaxkTDVkDMSy59xvBCo,688
|
36
|
-
runtime/errors/auth_session_errors.py,sha256=6b4XTI8UCDHDPX4jEA8_HyrNUp4VZ1TrEA8DRh6Z3rM,228
|
37
|
-
runtime/errors/run_api_errors.py,sha256=etqS18ZxDzr30qUezG6D8gcH0Yc1XNtQ8GMkUZx3Rmw,3400
|
38
|
-
runtime/errors/trace_errors.py,sha256=Lzfo0sH3zGaWz1kn5DHcAXQMn3aR2y2bnauj6xP1LYE,110
|
39
|
-
runtime/helpers/__init__.py,sha256=jozYPKHgZJ7Na5U1Wjt83egzjPATMZ_OMInEI6swSbY,234
|
40
|
-
runtime/helpers/extend_payload.py,sha256=towZF08WTpTTDBL4AV1bUU3XpKAQHEB66kGUfTICDe0,246
|
41
|
-
runtime/helpers/extend_timeout.py,sha256=KjfSLEUrqoz7v00rhnPAKq2OmUzEzcv-eQ3M8c2U46s,348
|
42
|
-
runtime/helpers/get_auth_session_parameters.py,sha256=7bopGhJ7vjKAn_UxnHSAah-k2rVOPbq0zi9FQOOCFds,472
|
43
|
-
runtime/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
44
|
-
runtime/run/__init__.py,sha256=zxMYVb7hn147YTrhMLsrcX6-KTd71HLrYHstJOWeWXQ,52
|
45
|
-
runtime/run/intuned_settings.py,sha256=vy2-ktEzUfUp5Z90dp3l7jPKHNjgB-8GSMDgAY-rYaU,1074
|
46
|
-
runtime/run/playwright_constructs.py,sha256=kOa95d4m4DTcIDKq_QajBs-9FkPz5yZFcsafLtx5288,519
|
47
|
-
runtime/run/run_api.py,sha256=88u91YS5-m_aGwQnNfeN7Mszm1MRfOmciCpzuAXjdoI,8853
|
48
|
-
runtime/run/traces.py,sha256=fKzh11LqV47ujgq_9I2tdp-dgld566wffWaHwU_4gis,1123
|
49
|
-
runtime/types/__init__.py,sha256=IJkDfqsau8F8R_j8TO6j-JwW4ElQr6aU6LNaWRehg5U,401
|
50
|
-
runtime/types/payload.py,sha256=sty8HgDEn3nJbZrwEOMCXyuG7_ICGDwlBIIWSON5ABY,124
|
51
|
-
runtime/types/run_types.py,sha256=_ZoW0rv4VnjqVwVxJBWsdh0S5toppNL3AfL456rn5yM,4076
|
52
|
-
runtime_helpers/__init__.py,sha256=XBrEiE9yNC8Lgn8NgIkqNXbI6e4ap237E83Zj_nlhCQ,249
|
53
|
-
runtime_helpers/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
54
|
-
intuned_runtime-1.0.0.dist-info/LICENSE,sha256=9LIjQdgyU_ptzNIfItNCR7VmEHqYnrY1f1XwOreKFI0,3714
|
55
|
-
intuned_runtime-1.0.0.dist-info/METADATA,sha256=i6-dbJpG78FttN_tw7HgA3qd_fE99cHW7bkASh2z16o,5134
|
56
|
-
intuned_runtime-1.0.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
57
|
-
intuned_runtime-1.0.0.dist-info/entry_points.txt,sha256=4VXmTtVfaolAgt2owC9QF1bQpzCVv6Qh_cqW6ZGpftw,35
|
58
|
-
intuned_runtime-1.0.0.dist-info/RECORD,,
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|