scalekit-sdk-python 2.9.0__tar.gz → 2.11.0__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.
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/PKG-INFO +1 -1
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/_version.py +1 -1
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/actions.py +327 -31
- scalekit_sdk_python-2.11.0/scalekit/actions/models/custom_provider.py +348 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/mcp_config.py +6 -0
- scalekit_sdk_python-2.11.0/scalekit/actions/models/mcp_connection_auth_state.py +62 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/requests/create_connected_account_request.py +13 -2
- scalekit_sdk_python-2.11.0/scalekit/actions/models/requests/create_custom_provider_request.py +74 -0
- scalekit_sdk_python-2.11.0/scalekit/actions/models/requests/delete_custom_provider_request.py +22 -0
- scalekit_sdk_python-2.11.0/scalekit/actions/models/requests/list_providers_request.py +56 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/requests/update_connected_account_request.py +12 -1
- scalekit_sdk_python-2.11.0/scalekit/actions/models/requests/update_custom_provider_request.py +71 -0
- scalekit_sdk_python-2.11.0/scalekit/actions/models/responses/create_custom_provider_response.py +46 -0
- scalekit_sdk_python-2.11.0/scalekit/actions/models/responses/create_mcp_session_token_response.py +52 -0
- scalekit_sdk_python-2.11.0/scalekit/actions/models/responses/delete_custom_provider_response.py +32 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/get_connected_account_auth_response.py +13 -4
- scalekit_sdk_python-2.11.0/scalekit/actions/models/responses/list_mcp_connected_accounts_response.py +52 -0
- scalekit_sdk_python-2.11.0/scalekit/actions/models/responses/list_providers_response.py +65 -0
- scalekit_sdk_python-2.11.0/scalekit/actions/models/responses/update_custom_provider_response.py +45 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/types.py +27 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/client.py +4 -2
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/connected_accounts.py +19 -11
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/connection.py +70 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/core.py +1 -1
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/mcp.py +104 -13
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/organization.py +75 -0
- scalekit_sdk_python-2.11.0/scalekit/providers.py +211 -0
- scalekit_sdk_python-2.11.0/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.py +62 -0
- scalekit_sdk_python-2.11.0/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.pyi +91 -0
- scalekit_sdk_python-2.11.0/scalekit/v1/agentkit_logs/agentkit_analytics_pb2_grpc.py +66 -0
- scalekit_sdk_python-2.11.0/scalekit/v1/agentkit_logs/agentkit_logs_pb2.py +80 -0
- scalekit_sdk_python-2.11.0/scalekit/v1/agentkit_logs/agentkit_logs_pb2.pyi +101 -0
- scalekit_sdk_python-2.11.0/scalekit/v1/agentkit_logs/agentkit_logs_pb2_grpc.py +99 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/auth/auth_pb2.py +42 -36
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/auth/auth_pb2.pyi +12 -6
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/clients/clients_pb2.py +90 -82
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/clients/clients_pb2.pyi +12 -2
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/commons/commons_pb2.py +21 -11
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/commons/commons_pb2.pyi +21 -0
- scalekit_sdk_python-2.11.0/scalekit/v1/connected_accounts/connected_accounts_pb2.py +323 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi +58 -4
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/connected_accounts/connected_accounts_pb2_grpc.py +102 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/connections/connections_pb2.py +157 -137
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/connections/connections_pb2.pyi +32 -6
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/domains/domains_pb2.py +48 -39
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/domains/domains_pb2.pyi +22 -2
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/domains/domains_pb2_grpc.py +3 -4
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/environments/environments_pb2.py +144 -114
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/environments/environments_pb2.pyi +54 -8
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/environments/environments_pb2_grpc.py +66 -0
- scalekit_sdk_python-2.11.0/scalekit/v1/mcp/mcp_pb2.py +358 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/mcp/mcp_pb2.pyi +59 -4
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/mcp/mcp_pb2_grpc.py +66 -0
- scalekit_sdk_python-2.11.0/scalekit/v1/migrations/migrations_pb2.py +101 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/migrations/migrations_pb2.pyi +21 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/migrations/migrations_pb2_grpc.py +33 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/options/options_pb2.py +2 -2
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/options/options_pb2.pyi +14 -0
- scalekit_sdk_python-2.11.0/scalekit/v1/organizations/organizations_pb2.py +367 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/organizations/organizations_pb2.pyi +103 -72
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/organizations/organizations_pb2_grpc.py +53 -86
- scalekit_sdk_python-2.11.0/scalekit/v1/providers/providers_pb2.py +184 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/providers/providers_pb2.pyi +37 -6
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/roles/roles_pb2.py +4 -4
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/tools/tools_pb2.py +34 -32
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/tools/tools_pb2.pyi +4 -2
- scalekit_sdk_python-2.11.0/scalekit/v1/workspaces/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit_sdk_python.egg-info/PKG-INFO +1 -1
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit_sdk_python.egg-info/SOURCES.txt +23 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/tests/test_actions.py +268 -2
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/tests/test_connected_accounts.py +65 -0
- scalekit_sdk_python-2.11.0/tests/test_connection.py +238 -0
- scalekit_sdk_python-2.11.0/tests/test_mcp.py +301 -0
- scalekit_sdk_python-2.11.0/tests/test_organization_session_policy.py +107 -0
- scalekit_sdk_python-2.11.0/tests/test_organization_slug_logo.py +89 -0
- scalekit_sdk_python-2.11.0/tests/test_providers.py +260 -0
- scalekit_sdk_python-2.9.0/scalekit/v1/connected_accounts/connected_accounts_pb2.py +0 -281
- scalekit_sdk_python-2.9.0/scalekit/v1/mcp/mcp_pb2.py +0 -309
- scalekit_sdk_python-2.9.0/scalekit/v1/migrations/migrations_pb2.py +0 -90
- scalekit_sdk_python-2.9.0/scalekit/v1/organizations/organizations_pb2.py +0 -347
- scalekit_sdk_python-2.9.0/scalekit/v1/providers/providers_pb2.py +0 -162
- scalekit_sdk_python-2.9.0/tests/test_connection.py +0 -100
- scalekit_sdk_python-2.9.0/tests/test_mcp.py +0 -156
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/LICENSE +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/README.md +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/buf/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/buf/validate/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/buf/validate/expression_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/buf/validate/expression_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/buf/validate/expression_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/buf/validate/priv/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/buf/validate/priv/private_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/buf/validate/priv/private_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/buf/validate/priv/private_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/buf/validate/validate_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/buf/validate/validate_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/buf/validate/validate_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/pyproject.toml +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/frameworks/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/frameworks/google_adk.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/frameworks/langchain.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/frameworks/types/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/frameworks/types/google_adk_tool.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/frameworks/util.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/mcp_instance.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/requests/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/requests/mcp_request.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/requests/tool_request.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/create_connected_account_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/create_mcp_config_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/create_mcp_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/delete_connected_account_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/delete_mcp_config_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/delete_mcp_instance_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/ensure_mcp_instance_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/execute_tool_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/get_mcp_instance_auth_state_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/get_mcp_instance_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/get_mcp_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/list_connected_accounts_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/list_mcp_configs_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/list_mcp_instances_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/magic_link_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/update_connected_account_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/update_mcp_config_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/update_mcp_instance_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/responses/verify_connected_account_user_response.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/tool_input_output.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/models/tool_mapping.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/actions/modifier.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/auth.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/common/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/common/exceptions.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/common/scalekit.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/common/user.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/constants/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/constants/user.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/directory.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/domain.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/m2m_client.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/passwordless.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/permissions.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/role.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/sessions.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/token.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/tools.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/users.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/utils/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/utils/directory.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/auditlogs → scalekit_sdk_python-2.11.0/scalekit/v1/agentkit_logs}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/auth → scalekit_sdk_python-2.11.0/scalekit/v1/auditlogs}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/auditlogs/auditlogs_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/auditlogs/auditlogs_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/auditlogs/auditlogs_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/clients → scalekit_sdk_python-2.11.0/scalekit/v1/auth}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/auth/auth_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/auth/passwordless_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/auth/passwordless_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/auth/passwordless_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/auth/totp_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/auth/totp_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/auth/totp_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/auth/webauthn_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/auth/webauthn_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/auth/webauthn_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/commons → scalekit_sdk_python-2.11.0/scalekit/v1/clients}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/clients/clients_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/connected_accounts → scalekit_sdk_python-2.11.0/scalekit/v1/commons}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/commons/commons_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/connections → scalekit_sdk_python-2.11.0/scalekit/v1/connected_accounts}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/directories → scalekit_sdk_python-2.11.0/scalekit/v1/connections}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/connections/connections_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/domains → scalekit_sdk_python-2.11.0/scalekit/v1/directories}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/directories/directories_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/directories/directories_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/directories/directories_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/emails → scalekit_sdk_python-2.11.0/scalekit/v1/domains}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/environments → scalekit_sdk_python-2.11.0/scalekit/v1/emails}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/emails/emails_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/emails/emails_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/emails/emails_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/errdetails → scalekit_sdk_python-2.11.0/scalekit/v1/environments}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/events → scalekit_sdk_python-2.11.0/scalekit/v1/errdetails}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/errdetails/errdetails_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/errdetails/errdetails_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/errdetails/errdetails_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/interceptors → scalekit_sdk_python-2.11.0/scalekit/v1/events}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/events/events_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/events/events_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/events/events_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/keys → scalekit_sdk_python-2.11.0/scalekit/v1/interceptors}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/interceptors/interceptors_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/interceptors/interceptors_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/interceptors/interceptors_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/mcp → scalekit_sdk_python-2.11.0/scalekit/v1/keys}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/keys/keys_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/keys/keys_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/keys/keys_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/members → scalekit_sdk_python-2.11.0/scalekit/v1/mcp}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/migrations → scalekit_sdk_python-2.11.0/scalekit/v1/members}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/members/members_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/members/members_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/members/members_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/options → scalekit_sdk_python-2.11.0/scalekit/v1/migrations}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/organizations → scalekit_sdk_python-2.11.0/scalekit/v1/options}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/options/options_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/providers → scalekit_sdk_python-2.11.0/scalekit/v1/organizations}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/roles → scalekit_sdk_python-2.11.0/scalekit/v1/providers}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/providers/providers_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/secrets → scalekit_sdk_python-2.11.0/scalekit/v1/roles}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/roles/roles_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/roles/roles_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/sessions → scalekit_sdk_python-2.11.0/scalekit/v1/secrets}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/secrets/secrets_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/secrets/secrets_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/secrets/secrets_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/tokens → scalekit_sdk_python-2.11.0/scalekit/v1/sessions}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/sessions/sessions_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/sessions/sessions_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/sessions/sessions_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/tools → scalekit_sdk_python-2.11.0/scalekit/v1/tokens}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/tokens/tokens_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/tokens/tokens_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/tokens/tokens_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/user_attributes → scalekit_sdk_python-2.11.0/scalekit/v1/tools}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/tools/tools_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/users → scalekit_sdk_python-2.11.0/scalekit/v1/user_attributes}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/user_attributes/user_attributes_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/user_attributes/user_attributes_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/user_attributes/user_attributes_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/webhooks → scalekit_sdk_python-2.11.0/scalekit/v1/users}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/users/users_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/users/users_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/users/users_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0/scalekit/v1/workspaces → scalekit_sdk_python-2.11.0/scalekit/v1/webhooks}/__init__.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/webhooks/webhooks_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/webhooks/webhooks_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/webhooks/webhooks_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/workspaces/workspaces_pb2.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/workspaces/workspaces_pb2.pyi +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/v1/workspaces/workspaces_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit/webauthn.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit_sdk_python.egg-info/dependency_links.txt +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit_sdk_python.egg-info/requires.txt +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/scalekit_sdk_python.egg-info/top_level.txt +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/setup.cfg +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/setup.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/tests/test_directory.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/tests/test_domain.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/tests/test_m2m_client.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/tests/test_org_roles.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/tests/test_organization.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/tests/test_passwordless.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/tests/test_permissions.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/tests/test_role_defaults_dependent.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/tests/test_roles.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/tests/test_sessions.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/tests/test_tokens.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/tests/test_tools.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/tests/test_user_roles_permissions.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/tests/test_users.py +0 -0
- {scalekit_sdk_python-2.9.0 → scalekit_sdk_python-2.11.0}/tests/test_webauthn_credentials.py +0 -0
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
from datetime import timedelta
|
|
1
2
|
from typing import Optional, Any, List, Dict, Union
|
|
2
3
|
import requests
|
|
3
4
|
from scalekit.actions.types import ToolRequest,ExecuteToolResponse,MagicLinkResponse,ListConnectedAccountsResponse,DeleteConnectedAccountResponse,GetConnectedAccountAuthResponse,GetConnectedAccountDetailsResponse,ToolInput, \
|
|
4
5
|
UpdateConnectedAccountResponse,CreateMcpConfigResponse,ListMcpConfigsResponse,UpdateMcpConfigResponse,DeleteMcpConfigResponse, \
|
|
5
6
|
EnsureMcpInstanceResponse,UpdateMcpInstanceResponse,GetMcpInstanceResponse,ListMcpInstancesResponse,DeleteMcpInstanceResponse,GetMcpInstanceAuthStateResponse, \
|
|
6
|
-
McpConfig,McpConfigConnectionToolMapping,VerifyConnectedAccountUserResponse
|
|
7
|
+
McpConfig,McpConfigConnectionToolMapping,VerifyConnectedAccountUserResponse, \
|
|
8
|
+
CreateCustomProviderRequest,UpdateCustomProviderRequest,ListProvidersRequest,DeleteCustomProviderRequest, \
|
|
9
|
+
CreateCustomProviderResponse,UpdateCustomProviderResponse,ListProvidersResponse,DeleteCustomProviderResponse, \
|
|
10
|
+
ListMcpConnectedAccountsResponse,CreateMcpSessionTokenResponse,McpConnectionAuthState
|
|
7
11
|
from scalekit.actions.models.responses.create_connected_account_response import CreateConnectedAccountResponse
|
|
8
12
|
from scalekit.actions.models.requests.create_connected_account_request import CreateConnectedAccountRequest
|
|
9
13
|
from scalekit.actions.models.requests.update_connected_account_request import UpdateConnectedAccountRequest
|
|
@@ -19,17 +23,19 @@ from scalekit.common.exceptions import ScalekitNotFoundException
|
|
|
19
23
|
class ActionClient:
|
|
20
24
|
"""Class definition for Connect Client"""
|
|
21
25
|
|
|
22
|
-
def __init__(self,tools_client, connected_accounts_client, mcp_client=None):
|
|
26
|
+
def __init__(self,tools_client, connected_accounts_client, mcp_client=None, providers_client=None):
|
|
23
27
|
"""
|
|
24
28
|
Initialize ActionClient with tools, connected accounts, and MCP dependencies
|
|
25
|
-
|
|
29
|
+
|
|
26
30
|
:param tools_client: ToolsClient instance
|
|
27
31
|
:type: ToolsClient
|
|
28
32
|
:param connected_accounts_client: ConnectedAccountsClient instance
|
|
29
33
|
:type: ConnectedAccountsClient
|
|
30
34
|
:param mcp_client: McpClient instance (optional)
|
|
31
35
|
:type: McpClient
|
|
32
|
-
|
|
36
|
+
:param providers_client: ProvidersClient instance (optional)
|
|
37
|
+
:type: ProvidersClient
|
|
38
|
+
|
|
33
39
|
:returns:
|
|
34
40
|
None
|
|
35
41
|
"""
|
|
@@ -38,6 +44,8 @@ class ActionClient:
|
|
|
38
44
|
self.connected_accounts = connected_accounts_client
|
|
39
45
|
self._mcp_client = mcp_client
|
|
40
46
|
self._mcp_actions = None
|
|
47
|
+
self._providers_client = providers_client
|
|
48
|
+
self._providers_actions = None
|
|
41
49
|
self._modifiers: List[Modifier] = []
|
|
42
50
|
self._google = None
|
|
43
51
|
self._langchain = None
|
|
@@ -87,6 +95,20 @@ class ActionClient:
|
|
|
87
95
|
self._mcp_actions = ActionMcp(self)
|
|
88
96
|
return self._mcp_actions
|
|
89
97
|
|
|
98
|
+
@property
|
|
99
|
+
def providers(self) -> "ActionProviders":
|
|
100
|
+
"""Expose custom provider CRUD with typed request and response objects.
|
|
101
|
+
|
|
102
|
+
:returns: ActionProviders instance bound to the configured ProvidersClient.
|
|
103
|
+
:rtype: ActionProviders
|
|
104
|
+
:raises ValueError: If no ProvidersClient was passed at construction time.
|
|
105
|
+
"""
|
|
106
|
+
if self._providers_client is None:
|
|
107
|
+
raise ValueError("Providers client not initialized.")
|
|
108
|
+
if self._providers_actions is None:
|
|
109
|
+
self._providers_actions = ActionProviders(self._providers_client)
|
|
110
|
+
return self._providers_actions
|
|
111
|
+
|
|
90
112
|
def execute_tool(
|
|
91
113
|
self,
|
|
92
114
|
tool_input:ToolInput,
|
|
@@ -222,37 +244,35 @@ class ActionClient:
|
|
|
222
244
|
return VerifyConnectedAccountUserResponse.from_proto(proto_response)
|
|
223
245
|
|
|
224
246
|
def list_connected_accounts(
|
|
225
|
-
self,
|
|
247
|
+
self,
|
|
226
248
|
connection_name: Optional[str] = None,
|
|
227
249
|
identifier: Optional[str] = None,
|
|
228
250
|
provider: Optional[str] = None,
|
|
251
|
+
connection_names: Optional[List[str]] = None,
|
|
229
252
|
**kwargs
|
|
230
253
|
) -> ListConnectedAccountsResponse:
|
|
254
|
+
"""List connected accounts with optional filtering.
|
|
255
|
+
|
|
256
|
+
Args:
|
|
257
|
+
connection_name: Filter by a single connector slug, e.g. ``"github"``.
|
|
258
|
+
Mapped to the ``connector`` field in the underlying request.
|
|
259
|
+
identifier: Filter by end-user identifier, e.g. email or opaque user ID.
|
|
260
|
+
provider: Filter by OAuth/API-key provider slug, e.g. ``"google"``.
|
|
261
|
+
connection_names: Filter results to connected accounts belonging to *any*
|
|
262
|
+
of these connection slugs. Useful when you want to check multiple
|
|
263
|
+
connectors at once, e.g. ``["github", "google-calendar", "slack"]``.
|
|
264
|
+
Can be combined with ``identifier`` to narrow results to a specific user.
|
|
265
|
+
|
|
266
|
+
Returns:
|
|
267
|
+
ListConnectedAccountsResponse containing the matching connected accounts.
|
|
231
268
|
"""
|
|
232
|
-
List connected accounts with optional filtering
|
|
233
|
-
|
|
234
|
-
:param connection_name: Connector identifier (optional)
|
|
235
|
-
:type: str
|
|
236
|
-
:param identifier: Identifier filter (optional)
|
|
237
|
-
:type: str
|
|
238
|
-
:param provider: Provider filter (optional)
|
|
239
|
-
:type: str
|
|
240
|
-
|
|
241
|
-
:returns:
|
|
242
|
-
ListConnectedAccountsResponse containing list of connected accounts
|
|
243
|
-
"""
|
|
244
|
-
# Call the existing connected_accounts method which returns (response, metadata) tuple
|
|
245
269
|
result_tuple = self.connected_accounts.list_connected_accounts(
|
|
246
270
|
connector=connection_name,
|
|
247
271
|
identifier=identifier,
|
|
248
|
-
provider=provider
|
|
272
|
+
provider=provider,
|
|
273
|
+
connection_names=connection_names,
|
|
249
274
|
)
|
|
250
|
-
|
|
251
|
-
# Extract the response[0] (the actual ListConnectedAccountsResponse proto object)
|
|
252
|
-
proto_response = result_tuple[0]
|
|
253
|
-
|
|
254
|
-
# Convert proto to our ListConnectedAccountsResponse class
|
|
255
|
-
return ListConnectedAccountsResponse.from_proto(proto_response)
|
|
275
|
+
return ListConnectedAccountsResponse.from_proto(result_tuple[0])
|
|
256
276
|
|
|
257
277
|
def delete_connected_account(
|
|
258
278
|
self,
|
|
@@ -523,6 +543,7 @@ class ActionClient:
|
|
|
523
543
|
filter_id: Optional[str] = None,
|
|
524
544
|
filter_provider: Optional[str] = None,
|
|
525
545
|
filter_name: Optional[str] = None,
|
|
546
|
+
filter_mcp_server_url: Optional[str] = None,
|
|
526
547
|
search: Optional[str] = None,
|
|
527
548
|
**kwargs,
|
|
528
549
|
) -> ListMcpConfigsResponse:
|
|
@@ -534,6 +555,7 @@ class ActionClient:
|
|
|
534
555
|
filter_id=filter_id,
|
|
535
556
|
filter_provider=filter_provider,
|
|
536
557
|
filter_name=filter_name,
|
|
558
|
+
filter_mcp_server_url=filter_mcp_server_url,
|
|
537
559
|
search=search,
|
|
538
560
|
)
|
|
539
561
|
|
|
@@ -880,23 +902,43 @@ class ActionMcp:
|
|
|
880
902
|
filter_id: Optional[str] = None,
|
|
881
903
|
filter_provider: Optional[str] = None,
|
|
882
904
|
filter_name: Optional[str] = None,
|
|
905
|
+
filter_mcp_server_url: Optional[str] = None,
|
|
883
906
|
search: Optional[str] = None,
|
|
884
907
|
) -> ListMcpConfigsResponse:
|
|
885
908
|
"""List MCP configurations with optional pagination and filtering.
|
|
886
909
|
|
|
887
910
|
Args:
|
|
888
911
|
page_size: Maximum number of configs to include in the current page.
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
912
|
+
Defaults to the server-side default (typically 20).
|
|
913
|
+
page_token: Cursor token returned by a previous ``list_configs`` call.
|
|
914
|
+
Pass this to fetch the next page of results.
|
|
915
|
+
filter_id: Restrict results to a specific configuration by its Scalekit ID,
|
|
916
|
+
e.g. ``"cfg_01abc123"``.
|
|
917
|
+
filter_provider: Restrict results to configs for a given provider slug,
|
|
918
|
+
e.g. ``"github"`` or ``"google-calendar"``.
|
|
919
|
+
filter_name: Restrict results to configs whose name matches exactly,
|
|
920
|
+
e.g. ``"My GitHub Config"``.
|
|
921
|
+
filter_mcp_server_url: Restrict results to configs whose MCP server URL
|
|
922
|
+
matches this value, e.g. ``"https://mcp.example.com/sse"``.
|
|
923
|
+
search: Free-form search query applied to the config name field.
|
|
894
924
|
|
|
895
925
|
Returns:
|
|
896
|
-
ListMcpConfigsResponse: Parsed wrapper around the proto response
|
|
926
|
+
ListMcpConfigsResponse: Parsed wrapper around the proto response containing
|
|
927
|
+
a ``configs`` list, ``next_page_token``, and ``total_count``.
|
|
897
928
|
|
|
898
929
|
Raises:
|
|
899
930
|
ValueError: If an MCP client has not been configured on the action client.
|
|
931
|
+
|
|
932
|
+
Example::
|
|
933
|
+
|
|
934
|
+
page1 = client.actions.mcp.list_configs(page_size=10)
|
|
935
|
+
for cfg in page1.configs:
|
|
936
|
+
print(cfg.name, cfg.mcp_server_url)
|
|
937
|
+
|
|
938
|
+
if page1.next_page_token:
|
|
939
|
+
page2 = client.actions.mcp.list_configs(
|
|
940
|
+
page_size=10, page_token=page1.next_page_token
|
|
941
|
+
)
|
|
900
942
|
"""
|
|
901
943
|
client = self._client()
|
|
902
944
|
result_tuple = client.list_configs(
|
|
@@ -905,6 +947,7 @@ class ActionMcp:
|
|
|
905
947
|
filter_id=filter_id,
|
|
906
948
|
filter_provider=filter_provider,
|
|
907
949
|
filter_name=filter_name,
|
|
950
|
+
filter_mcp_server_url=filter_mcp_server_url,
|
|
908
951
|
search=search,
|
|
909
952
|
)
|
|
910
953
|
return ListMcpConfigsResponse.from_proto(result_tuple[0])
|
|
@@ -1139,3 +1182,256 @@ class ActionMcp:
|
|
|
1139
1182
|
include_auth_links=include_auth_links,
|
|
1140
1183
|
)
|
|
1141
1184
|
return GetMcpInstanceAuthStateResponse.from_proto(result_tuple[0])
|
|
1185
|
+
|
|
1186
|
+
def list_mcp_connected_accounts(
|
|
1187
|
+
self,
|
|
1188
|
+
config_id: str,
|
|
1189
|
+
identifier: str,
|
|
1190
|
+
include_auth_link: Optional[bool] = None,
|
|
1191
|
+
) -> ListMcpConnectedAccountsResponse:
|
|
1192
|
+
"""List the connected account auth state for all connections in an MCP config.
|
|
1193
|
+
|
|
1194
|
+
For each connection defined in the MCP configuration, this method returns the
|
|
1195
|
+
current authorisation status of the end-user's connected account and,
|
|
1196
|
+
optionally, a one-time link the user can open to authorise or re-authorise
|
|
1197
|
+
the connection.
|
|
1198
|
+
|
|
1199
|
+
This is typically called server-side before serving MCP tool calls, to
|
|
1200
|
+
determine whether the user still has valid credentials for every connector
|
|
1201
|
+
the MCP config requires.
|
|
1202
|
+
|
|
1203
|
+
Args:
|
|
1204
|
+
config_id: Scalekit ID of the MCP configuration to inspect,
|
|
1205
|
+
e.g. ``"cfg_01abc123"``.
|
|
1206
|
+
identifier: End-user identifier for whom to fetch auth state — usually
|
|
1207
|
+
an email address or opaque user ID that was used when calling
|
|
1208
|
+
``ensure_instance``, e.g. ``"alice@example.com"``.
|
|
1209
|
+
include_auth_link: When ``True``, every connected account in the response
|
|
1210
|
+
will include an ``authentication_link`` regardless of its current
|
|
1211
|
+
status. Set this to ``True`` when building a connected-account
|
|
1212
|
+
integration page for an MCP server — it lets the end user see the
|
|
1213
|
+
status of all their connections and authorise or re-authorise any of
|
|
1214
|
+
them in one pass.
|
|
1215
|
+
|
|
1216
|
+
When ``False`` (default), ``authentication_link`` is omitted from
|
|
1217
|
+
the response. If a connected account does not yet exist for a given
|
|
1218
|
+
connection, ``connected_account_id`` will be an empty string. In
|
|
1219
|
+
that situation you can either call ``get_authorization_link`` for
|
|
1220
|
+
the specific connection or re-call this method with
|
|
1221
|
+
``include_auth_link=True``.
|
|
1222
|
+
|
|
1223
|
+
**Auth links are valid for 1 minute only** — generate them close
|
|
1224
|
+
to the time you redirect the user.
|
|
1225
|
+
|
|
1226
|
+
Returns:
|
|
1227
|
+
ListMcpConnectedAccountsResponse: Contains a ``connected_accounts`` list.
|
|
1228
|
+
Each item is a :class:`McpConnectionAuthState` with fields:
|
|
1229
|
+
|
|
1230
|
+
- ``connection_name`` — slug of the connector (``"github"``)
|
|
1231
|
+
- ``provider`` — OAuth provider (``"github"``)
|
|
1232
|
+
- ``connected_account_id`` — Scalekit ID for the user's connected account;
|
|
1233
|
+
empty string if no connected account exists yet for this connection
|
|
1234
|
+
- ``connected_account_status`` — ``"active"``, ``"expired"``, or ``"disconnected"``
|
|
1235
|
+
- ``authentication_link`` — auth/re-auth URL valid for 1 minute;
|
|
1236
|
+
present for all connections when ``include_auth_link=True``,
|
|
1237
|
+
otherwise omitted
|
|
1238
|
+
|
|
1239
|
+
Raises:
|
|
1240
|
+
ValueError: If ``config_id`` or ``identifier`` is blank.
|
|
1241
|
+
|
|
1242
|
+
Example::
|
|
1243
|
+
|
|
1244
|
+
state = client.actions.mcp.list_mcp_connected_accounts(
|
|
1245
|
+
config_id="cfg_01abc123",
|
|
1246
|
+
identifier="alice@example.com",
|
|
1247
|
+
include_auth_link=True,
|
|
1248
|
+
)
|
|
1249
|
+
for account in state.connected_accounts:
|
|
1250
|
+
if account.connected_account_status != "active":
|
|
1251
|
+
print(
|
|
1252
|
+
f"{account.connection_name} needs auth: "
|
|
1253
|
+
f"{account.authentication_link}"
|
|
1254
|
+
)
|
|
1255
|
+
"""
|
|
1256
|
+
if not config_id:
|
|
1257
|
+
raise ValueError("config_id is required")
|
|
1258
|
+
if not identifier:
|
|
1259
|
+
raise ValueError("identifier is required")
|
|
1260
|
+
result_tuple = self._client().list_mcp_connected_accounts(
|
|
1261
|
+
config_id=config_id,
|
|
1262
|
+
identifier=identifier,
|
|
1263
|
+
include_auth_link=include_auth_link,
|
|
1264
|
+
)
|
|
1265
|
+
return ListMcpConnectedAccountsResponse.from_proto(result_tuple[0])
|
|
1266
|
+
|
|
1267
|
+
def create_session_token(
|
|
1268
|
+
self,
|
|
1269
|
+
mcp_config_id: str,
|
|
1270
|
+
identifier: str,
|
|
1271
|
+
expiry: Optional[timedelta] = None,
|
|
1272
|
+
) -> CreateMcpSessionTokenResponse:
|
|
1273
|
+
"""Create a short-lived session token for a user to access an MCP server.
|
|
1274
|
+
|
|
1275
|
+
The token is scoped to a specific MCP configuration and end-user. Pass it
|
|
1276
|
+
as a ``Bearer`` token in the ``Authorization`` header when making requests
|
|
1277
|
+
to the MCP server URL associated with the config.
|
|
1278
|
+
|
|
1279
|
+
Args:
|
|
1280
|
+
mcp_config_id: Scalekit ID of the MCP configuration the token should
|
|
1281
|
+
grant access to, e.g. ``"cfg_01abc123"``.
|
|
1282
|
+
identifier: End-user identifier for whom the token is minted — typically
|
|
1283
|
+
the same email or opaque ID used when calling ``ensure_instance``,
|
|
1284
|
+
e.g. ``"alice@example.com"``.
|
|
1285
|
+
expiry: Requested lifetime for the token as a Python ``timedelta``.
|
|
1286
|
+
When omitted, the server-side default TTL is applied (typically
|
|
1287
|
+
1 hour). Example values:
|
|
1288
|
+
|
|
1289
|
+
- ``timedelta(minutes=30)`` — 30-minute token
|
|
1290
|
+
- ``timedelta(hours=8)`` — 8-hour token (work-day session)
|
|
1291
|
+
- ``timedelta(days=1)`` — 24-hour token
|
|
1292
|
+
|
|
1293
|
+
Returns:
|
|
1294
|
+
CreateMcpSessionTokenResponse: Contains:
|
|
1295
|
+
|
|
1296
|
+
- ``token`` (``str``) — opaque bearer token string.
|
|
1297
|
+
- ``expires_at`` (``datetime``) — UTC datetime when the token expires.
|
|
1298
|
+
|
|
1299
|
+
Raises:
|
|
1300
|
+
ValueError: If ``mcp_config_id`` or ``identifier`` is blank.
|
|
1301
|
+
|
|
1302
|
+
Example::
|
|
1303
|
+
|
|
1304
|
+
from datetime import timedelta
|
|
1305
|
+
|
|
1306
|
+
resp = client.actions.mcp.create_session_token(
|
|
1307
|
+
mcp_config_id="cfg_01abc123",
|
|
1308
|
+
identifier="alice@example.com",
|
|
1309
|
+
expiry=timedelta(hours=8),
|
|
1310
|
+
)
|
|
1311
|
+
|
|
1312
|
+
headers = {"Authorization": f"Bearer {resp.token}"}
|
|
1313
|
+
# Use headers when calling the MCP server URL
|
|
1314
|
+
"""
|
|
1315
|
+
if not mcp_config_id:
|
|
1316
|
+
raise ValueError("mcp_config_id is required")
|
|
1317
|
+
if not identifier:
|
|
1318
|
+
raise ValueError("identifier is required")
|
|
1319
|
+
result_tuple = self._client().create_session_token(
|
|
1320
|
+
mcp_config_id=mcp_config_id,
|
|
1321
|
+
identifier=identifier,
|
|
1322
|
+
expiry=expiry,
|
|
1323
|
+
)
|
|
1324
|
+
return CreateMcpSessionTokenResponse.from_proto(result_tuple[0])
|
|
1325
|
+
|
|
1326
|
+
|
|
1327
|
+
class ActionProviders:
|
|
1328
|
+
"""Typed action layer over ProvidersClient for custom provider CRUD.
|
|
1329
|
+
|
|
1330
|
+
Accepts typed request objects and returns typed response objects.
|
|
1331
|
+
Access via ActionClient.providers — do not instantiate directly.
|
|
1332
|
+
"""
|
|
1333
|
+
|
|
1334
|
+
def __init__(self, providers_client) -> None:
|
|
1335
|
+
self._providers_client = providers_client
|
|
1336
|
+
|
|
1337
|
+
def create_custom_provider(
|
|
1338
|
+
self,
|
|
1339
|
+
request: CreateCustomProviderRequest,
|
|
1340
|
+
) -> CreateCustomProviderResponse:
|
|
1341
|
+
"""Create a new custom provider.
|
|
1342
|
+
|
|
1343
|
+
:param request: Request object containing display_name (required),
|
|
1344
|
+
proxy_url (required), and optional description,
|
|
1345
|
+
proxy_enabled, and auth_patterns.
|
|
1346
|
+
:type request: CreateCustomProviderRequest
|
|
1347
|
+
|
|
1348
|
+
:returns: Response containing the created provider with its server-assigned
|
|
1349
|
+
identifier and all decoded auth_patterns.
|
|
1350
|
+
:rtype: CreateCustomProviderResponse
|
|
1351
|
+
|
|
1352
|
+
:raises ScalekitBadRequestException: If required fields are missing or invalid.
|
|
1353
|
+
:raises ScalekitConflictException: If a provider with the same name already exists.
|
|
1354
|
+
"""
|
|
1355
|
+
result_tuple = self._providers_client.create_custom_provider(
|
|
1356
|
+
display_name=request.display_name,
|
|
1357
|
+
proxy_url=request.proxy_url,
|
|
1358
|
+
proxy_enabled=request.proxy_enabled,
|
|
1359
|
+
description=request.description,
|
|
1360
|
+
auth_patterns=request.auth_patterns,
|
|
1361
|
+
)
|
|
1362
|
+
return CreateCustomProviderResponse.from_proto(result_tuple[0])
|
|
1363
|
+
|
|
1364
|
+
def update_custom_provider(
|
|
1365
|
+
self,
|
|
1366
|
+
request: UpdateCustomProviderRequest,
|
|
1367
|
+
) -> UpdateCustomProviderResponse:
|
|
1368
|
+
"""Update an existing custom provider.
|
|
1369
|
+
|
|
1370
|
+
Only fields set to a non-None value in the request are applied.
|
|
1371
|
+
Fields left as None are ignored and their existing server values are kept.
|
|
1372
|
+
|
|
1373
|
+
:param request: Request object containing identifier (required) and any
|
|
1374
|
+
combination of display_name, description, proxy_url, and
|
|
1375
|
+
auth_patterns to update.
|
|
1376
|
+
:type request: UpdateCustomProviderRequest
|
|
1377
|
+
|
|
1378
|
+
:returns: Response containing the provider's full state after the update.
|
|
1379
|
+
:rtype: UpdateCustomProviderResponse
|
|
1380
|
+
|
|
1381
|
+
:raises ScalekitNotFoundException: If no provider with the given identifier exists.
|
|
1382
|
+
:raises ScalekitBadRequestException: If any updated field value is invalid.
|
|
1383
|
+
"""
|
|
1384
|
+
result_tuple = self._providers_client.update_custom_provider(
|
|
1385
|
+
identifier=request.identifier,
|
|
1386
|
+
display_name=request.display_name,
|
|
1387
|
+
proxy_url=request.proxy_url,
|
|
1388
|
+
description=request.description,
|
|
1389
|
+
auth_patterns=request.auth_patterns,
|
|
1390
|
+
)
|
|
1391
|
+
return UpdateCustomProviderResponse.from_proto(result_tuple[0])
|
|
1392
|
+
|
|
1393
|
+
def list_providers(
|
|
1394
|
+
self,
|
|
1395
|
+
request: ListProvidersRequest,
|
|
1396
|
+
) -> ListProvidersResponse:
|
|
1397
|
+
"""List providers with optional filtering and pagination.
|
|
1398
|
+
|
|
1399
|
+
:param request: Request object with optional provider_type, page_size,
|
|
1400
|
+
page_token, and identifier filters. All fields are optional —
|
|
1401
|
+
an empty ListProvidersRequest() returns all providers.
|
|
1402
|
+
:type request: ListProvidersRequest
|
|
1403
|
+
|
|
1404
|
+
:returns: Response containing a page of providers and a next_page_token
|
|
1405
|
+
for fetching subsequent pages.
|
|
1406
|
+
:rtype: ListProvidersResponse
|
|
1407
|
+
"""
|
|
1408
|
+
result_tuple = self._providers_client.list_providers(
|
|
1409
|
+
page_size=request.page_size,
|
|
1410
|
+
page_token=request.page_token,
|
|
1411
|
+
provider_type=request.provider_type,
|
|
1412
|
+
identifier=request.identifier,
|
|
1413
|
+
)
|
|
1414
|
+
return ListProvidersResponse.from_proto(result_tuple[0])
|
|
1415
|
+
|
|
1416
|
+
def delete_custom_provider(
|
|
1417
|
+
self,
|
|
1418
|
+
request: DeleteCustomProviderRequest,
|
|
1419
|
+
) -> DeleteCustomProviderResponse:
|
|
1420
|
+
"""Delete a custom provider by identifier.
|
|
1421
|
+
|
|
1422
|
+
Deletion is permanent. Returns an empty response on success. Any error
|
|
1423
|
+
(provider not found, insufficient permissions) raises a
|
|
1424
|
+
ScalekitServerException subclass before this method returns.
|
|
1425
|
+
|
|
1426
|
+
:param request: Request object containing the identifier of the provider
|
|
1427
|
+
to delete.
|
|
1428
|
+
:type request: DeleteCustomProviderRequest
|
|
1429
|
+
|
|
1430
|
+
:returns: Empty response confirming deletion.
|
|
1431
|
+
:rtype: DeleteCustomProviderResponse
|
|
1432
|
+
|
|
1433
|
+
:raises ScalekitNotFoundException: If no provider with the given identifier exists.
|
|
1434
|
+
:raises ScalekitForbiddenException: If the caller lacks permission to delete.
|
|
1435
|
+
"""
|
|
1436
|
+
result_tuple = self._providers_client.delete_custom_provider(request.identifier)
|
|
1437
|
+
return DeleteCustomProviderResponse.from_proto(result_tuple[0])
|