scalekit-sdk-python 2.6.1__tar.gz → 2.7.1__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.6.1 → scalekit_sdk_python-2.7.1}/PKG-INFO +3 -3
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/_version.py +1 -1
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/__init__.py +0 -1
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/actions.py +48 -9
- scalekit_sdk_python-2.7.1/scalekit/actions/models/responses/verify_connected_account_user_response.py +41 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/types.py +2 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/client.py +28 -31
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/connected_accounts.py +54 -4
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/core.py +2 -1
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/directory.py +8 -14
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/organization.py +19 -1
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/role.py +46 -1
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/token.py +43 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/users.py +77 -2
- scalekit_sdk_python-2.7.1/scalekit/v1/auditlogs/auditlogs_pb2.py +51 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/auditlogs/auditlogs_pb2.pyi +1 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/auth/totp_pb2.py +6 -6
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/clients/clients_pb2.py +87 -87
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/connected_accounts/connected_accounts_pb2.py +72 -56
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi +22 -2
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/connected_accounts/connected_accounts_pb2_grpc.py +34 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/connections/connections_pb2.py +142 -120
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/connections/connections_pb2.pyi +30 -2
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/connections/connections_pb2_grpc.py +66 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/directories/directories_pb2.py +29 -11
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/directories/directories_pb2.pyi +24 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/directories/directories_pb2_grpc.py +66 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/emails/emails_pb2.py +16 -16
- scalekit_sdk_python-2.7.1/scalekit/v1/environments/environments_pb2.py +408 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/environments/environments_pb2.pyi +90 -2
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/environments/environments_pb2_grpc.py +132 -0
- scalekit_sdk_python-2.7.1/scalekit/v1/keys/keys_pb2.py +111 -0
- scalekit_sdk_python-2.7.1/scalekit/v1/keys/keys_pb2.pyi +178 -0
- scalekit_sdk_python-2.7.1/scalekit/v1/keys/keys_pb2_grpc.py +386 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/members/members_pb2.py +8 -8
- scalekit_sdk_python-2.7.1/scalekit/v1/migrations/migrations_pb2.py +90 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/migrations/migrations_pb2.pyi +12 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/migrations/migrations_pb2_grpc.py +33 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/organizations/organizations_pb2.py +4 -2
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/organizations/organizations_pb2_grpc.py +33 -0
- scalekit_sdk_python-2.7.1/scalekit/v1/providers/providers_pb2.py +160 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/providers/providers_pb2.pyi +65 -4
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/providers/providers_pb2_grpc.py +99 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/tools/tools_pb2.py +42 -24
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/tools/tools_pb2.pyi +22 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/tools/tools_pb2_grpc.py +33 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/users/users_pb2.py +63 -63
- scalekit_sdk_python-2.7.1/scalekit/v1/workspaces/__init__.py +0 -0
- scalekit_sdk_python-2.7.1/scalekit/v1/workspaces/workspaces_pb2.py +269 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/workspaces/workspaces_pb2.pyi +48 -2
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/workspaces/workspaces_pb2_grpc.py +133 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit_sdk_python.egg-info/PKG-INFO +3 -3
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit_sdk_python.egg-info/SOURCES.txt +6 -19
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit_sdk_python.egg-info/requires.txt +2 -2
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/setup.py +3 -3
- scalekit_sdk_python-2.6.1/scalekit/v1/auditlogs/auditlogs_pb2.py +0 -50
- scalekit_sdk_python-2.6.1/scalekit/v1/environments/environments_pb2.py +0 -347
- scalekit_sdk_python-2.6.1/scalekit/v1/migrations/migrations_pb2.py +0 -84
- scalekit_sdk_python-2.6.1/scalekit/v1/providers/providers_pb2.py +0 -110
- scalekit_sdk_python-2.6.1/scalekit/v1/workspaces/workspaces_pb2.py +0 -243
- scalekit_sdk_python-2.6.1/tests/basetest.py +0 -17
- scalekit_sdk_python-2.6.1/tests/test_actions.py +0 -1958
- scalekit_sdk_python-2.6.1/tests/test_connected_accounts.py +0 -417
- scalekit_sdk_python-2.6.1/tests/test_connection.py +0 -100
- scalekit_sdk_python-2.6.1/tests/test_directory.py +0 -133
- scalekit_sdk_python-2.6.1/tests/test_domain.py +0 -195
- scalekit_sdk_python-2.6.1/tests/test_m2m_client.py +0 -404
- scalekit_sdk_python-2.6.1/tests/test_mcp.py +0 -156
- scalekit_sdk_python-2.6.1/tests/test_org_roles.py +0 -121
- scalekit_sdk_python-2.6.1/tests/test_organization.py +0 -183
- scalekit_sdk_python-2.6.1/tests/test_passwordless.py +0 -242
- scalekit_sdk_python-2.6.1/tests/test_permissions.py +0 -331
- scalekit_sdk_python-2.6.1/tests/test_roles.py +0 -384
- scalekit_sdk_python-2.6.1/tests/test_sessions.py +0 -192
- scalekit_sdk_python-2.6.1/tests/test_tokens.py +0 -234
- scalekit_sdk_python-2.6.1/tests/test_tools.py +0 -117
- scalekit_sdk_python-2.6.1/tests/test_users.py +0 -557
- scalekit_sdk_python-2.6.1/tests/test_webauthn_credentials.py +0 -113
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/LICENSE +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/README.md +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/buf/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/buf/validate/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/buf/validate/expression_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/buf/validate/expression_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/buf/validate/expression_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/buf/validate/priv/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/buf/validate/priv/private_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/buf/validate/priv/private_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/buf/validate/priv/private_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/buf/validate/validate_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/buf/validate/validate_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/buf/validate/validate_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/pyproject.toml +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/frameworks/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/frameworks/google_adk.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/frameworks/langchain.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/frameworks/types/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/frameworks/types/google_adk_tool.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/frameworks/util.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/mcp_config.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/mcp_instance.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/requests/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/requests/create_connected_account_request.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/requests/mcp_request.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/requests/tool_request.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/requests/update_connected_account_request.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/create_connected_account_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/create_mcp_config_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/create_mcp_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/delete_connected_account_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/delete_mcp_config_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/delete_mcp_instance_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/ensure_mcp_instance_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/execute_tool_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/get_connected_account_auth_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/get_mcp_instance_auth_state_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/get_mcp_instance_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/get_mcp_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/list_connected_accounts_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/list_mcp_configs_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/list_mcp_instances_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/magic_link_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/update_connected_account_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/update_mcp_config_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/responses/update_mcp_instance_response.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/tool_input_output.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/models/tool_mapping.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/actions/modifier.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/auth.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/common/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/common/exceptions.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/common/scalekit.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/common/user.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/connection.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/constants/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/constants/user.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/domain.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/m2m_client.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/mcp.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/passwordless.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/permissions.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/sessions.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/tools.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/utils/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/utils/directory.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/auditlogs/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/auditlogs/auditlogs_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/auth/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/auth/auth_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/auth/auth_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/auth/auth_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/auth/passwordless_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/auth/passwordless_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/auth/passwordless_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/auth/totp_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/auth/totp_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/auth/webauthn_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/auth/webauthn_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/auth/webauthn_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/clients/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/clients/clients_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/clients/clients_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/commons/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/commons/commons_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/commons/commons_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/commons/commons_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/connected_accounts/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/connections/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/directories/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/domains/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/domains/domains_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/domains/domains_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/domains/domains_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/emails/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/emails/emails_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/emails/emails_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/environments/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/errdetails/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/errdetails/errdetails_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/errdetails/errdetails_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/errdetails/errdetails_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/events/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/events/events_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/events/events_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/events/events_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/interceptors/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/interceptors/interceptors_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/interceptors/interceptors_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/interceptors/interceptors_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1/scalekit/v1/mcp → scalekit_sdk_python-2.7.1/scalekit/v1/keys}/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1/scalekit/v1/members → scalekit_sdk_python-2.7.1/scalekit/v1/mcp}/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/mcp/mcp_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/mcp/mcp_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/mcp/mcp_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1/scalekit/v1/migrations → scalekit_sdk_python-2.7.1/scalekit/v1/members}/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/members/members_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/members/members_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1/scalekit/v1/options → scalekit_sdk_python-2.7.1/scalekit/v1/migrations}/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1/scalekit/v1/organizations → scalekit_sdk_python-2.7.1/scalekit/v1/options}/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/options/options_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/options/options_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/options/options_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1/scalekit/v1/providers → scalekit_sdk_python-2.7.1/scalekit/v1/organizations}/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/organizations/organizations_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1/scalekit/v1/roles → scalekit_sdk_python-2.7.1/scalekit/v1/providers}/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1/scalekit/v1/secrets → scalekit_sdk_python-2.7.1/scalekit/v1/roles}/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/roles/roles_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/roles/roles_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/roles/roles_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1/scalekit/v1/sessions → scalekit_sdk_python-2.7.1/scalekit/v1/secrets}/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/secrets/secrets_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/secrets/secrets_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/secrets/secrets_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1/scalekit/v1/tokens → scalekit_sdk_python-2.7.1/scalekit/v1/sessions}/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/sessions/sessions_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/sessions/sessions_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/sessions/sessions_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1/scalekit/v1/tools → scalekit_sdk_python-2.7.1/scalekit/v1/tokens}/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/tokens/tokens_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/tokens/tokens_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/tokens/tokens_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1/scalekit/v1/user_attributes → scalekit_sdk_python-2.7.1/scalekit/v1/tools}/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1/scalekit/v1/users → scalekit_sdk_python-2.7.1/scalekit/v1/user_attributes}/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/user_attributes/user_attributes_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/user_attributes/user_attributes_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/user_attributes/user_attributes_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1/scalekit/v1/webhooks → scalekit_sdk_python-2.7.1/scalekit/v1/users}/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/users/users_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/users/users_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1/scalekit/v1/workspaces → scalekit_sdk_python-2.7.1/scalekit/v1/webhooks}/__init__.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/webhooks/webhooks_pb2.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/webhooks/webhooks_pb2.pyi +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/v1/webhooks/webhooks_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit/webauthn.py +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit_sdk_python.egg-info/dependency_links.txt +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/scalekit_sdk_python.egg-info/top_level.txt +0 -0
- {scalekit_sdk_python-2.6.1 → scalekit_sdk_python-2.7.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: scalekit-sdk-python
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.7.1
|
|
4
4
|
Summary: Scalekit official Python SDK
|
|
5
5
|
Home-page: https://github.com/scalekit-inc/scalekit-sdk-python
|
|
6
6
|
Author: Team Scalekit
|
|
@@ -15,9 +15,9 @@ Requires-Dist: grpcio>=1.64.1
|
|
|
15
15
|
Requires-Dist: protobuf<7.0.0,>=5.29.5
|
|
16
16
|
Requires-Dist: google>=3.0
|
|
17
17
|
Requires-Dist: requests>=2.32.3
|
|
18
|
-
Requires-Dist: PyJWT
|
|
18
|
+
Requires-Dist: PyJWT>=2.12.0
|
|
19
19
|
Requires-Dist: cffi>=1.15.1
|
|
20
|
-
Requires-Dist: cryptography<47,==46.0.
|
|
20
|
+
Requires-Dist: cryptography<47,==46.0.6
|
|
21
21
|
Requires-Dist: setuptools<81.0,>=78.1.1
|
|
22
22
|
Requires-Dist: grpcio-status<1.67,>=1.64
|
|
23
23
|
Requires-Dist: protoc-gen-openapiv2>=0.0.1
|
|
@@ -3,7 +3,7 @@ import requests
|
|
|
3
3
|
from scalekit.actions.types import ToolRequest,ExecuteToolResponse,MagicLinkResponse,ListConnectedAccountsResponse,DeleteConnectedAccountResponse,GetConnectedAccountAuthResponse,ToolInput, \
|
|
4
4
|
UpdateConnectedAccountResponse,CreateMcpConfigResponse,ListMcpConfigsResponse,UpdateMcpConfigResponse,DeleteMcpConfigResponse, \
|
|
5
5
|
EnsureMcpInstanceResponse,UpdateMcpInstanceResponse,GetMcpInstanceResponse,ListMcpInstancesResponse,DeleteMcpInstanceResponse,GetMcpInstanceAuthStateResponse, \
|
|
6
|
-
McpConfig,McpConfigConnectionToolMapping
|
|
6
|
+
McpConfig,McpConfigConnectionToolMapping,VerifyConnectedAccountUserResponse
|
|
7
7
|
from scalekit.actions.models.responses.create_connected_account_response import CreateConnectedAccountResponse
|
|
8
8
|
from scalekit.actions.models.requests.create_connected_account_request import CreateConnectedAccountRequest
|
|
9
9
|
from scalekit.actions.models.requests.update_connected_account_request import UpdateConnectedAccountRequest
|
|
@@ -143,18 +143,24 @@ class ActionClient:
|
|
|
143
143
|
identifier: Optional[str] = None,
|
|
144
144
|
connection_name: Optional[str] = None,
|
|
145
145
|
connected_account_id: Optional[str] = None,
|
|
146
|
+
state: Optional[str] = None,
|
|
147
|
+
user_verify_url: Optional[str] = None,
|
|
146
148
|
**kwargs
|
|
147
149
|
) -> MagicLinkResponse:
|
|
148
150
|
"""
|
|
149
151
|
Get authorization magic link for a connected account
|
|
150
|
-
|
|
152
|
+
|
|
151
153
|
:param connection_name: Connector identifier
|
|
152
154
|
:type: str
|
|
153
155
|
:param identifier: Connected account identifier
|
|
154
156
|
:type: str
|
|
155
157
|
:param connected_account_id: Connected account ID (optional)
|
|
156
158
|
:type: str
|
|
157
|
-
|
|
159
|
+
:param state: Opaque state value passed through to the user verify redirect URL query params (optional)
|
|
160
|
+
:type: str
|
|
161
|
+
:param user_verify_url: B2B app's user verify redirect URL (optional)
|
|
162
|
+
:type: str
|
|
163
|
+
|
|
158
164
|
:returns:
|
|
159
165
|
MagicLinkResponse containing magic link and expiry
|
|
160
166
|
"""
|
|
@@ -162,14 +168,47 @@ class ActionClient:
|
|
|
162
168
|
result_tuple = self.connected_accounts.get_magic_link_for_connected_account(
|
|
163
169
|
connector=connection_name,
|
|
164
170
|
identifier=identifier,
|
|
165
|
-
connected_account_id=connected_account_id
|
|
171
|
+
connected_account_id=connected_account_id,
|
|
172
|
+
state=state,
|
|
173
|
+
user_verify_url=user_verify_url
|
|
166
174
|
)
|
|
167
|
-
|
|
175
|
+
|
|
168
176
|
# Extract the response[0] (the actual GetMagicLinkForConnectedAccountResponse proto object)
|
|
169
177
|
proto_response = result_tuple[0]
|
|
170
|
-
|
|
178
|
+
|
|
171
179
|
# Convert proto to our MagicLinkResponse class
|
|
172
180
|
return MagicLinkResponse.from_proto(proto_response)
|
|
181
|
+
|
|
182
|
+
def verify_connected_account_user(
|
|
183
|
+
self,
|
|
184
|
+
auth_request_id: str,
|
|
185
|
+
identifier: str,
|
|
186
|
+
) -> VerifyConnectedAccountUserResponse:
|
|
187
|
+
"""
|
|
188
|
+
Verify a connected account user after OAuth callback
|
|
189
|
+
|
|
190
|
+
:param auth_request_id: Auth request ID as base64url-encoded opaque token from the
|
|
191
|
+
user verify redirect URL query params
|
|
192
|
+
:type: str
|
|
193
|
+
:param identifier: Current logged in user's connected account identifier
|
|
194
|
+
:type: str
|
|
195
|
+
|
|
196
|
+
:returns:
|
|
197
|
+
VerifyConnectedAccountUserResponse containing the post-verification redirect URL
|
|
198
|
+
"""
|
|
199
|
+
if not auth_request_id:
|
|
200
|
+
raise ValueError("auth_request_id is required")
|
|
201
|
+
if not identifier:
|
|
202
|
+
raise ValueError("identifier is required")
|
|
203
|
+
|
|
204
|
+
result_tuple = self.connected_accounts.verify_connected_account_user(
|
|
205
|
+
auth_request_id=auth_request_id,
|
|
206
|
+
identifier=identifier
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
proto_response = result_tuple[0]
|
|
210
|
+
|
|
211
|
+
return VerifyConnectedAccountUserResponse.from_proto(proto_response)
|
|
173
212
|
|
|
174
213
|
def list_connected_accounts(
|
|
175
214
|
self,
|
|
@@ -565,7 +604,7 @@ class ActionClient:
|
|
|
565
604
|
self,
|
|
566
605
|
connection_name: str,
|
|
567
606
|
identifier: str,
|
|
568
|
-
authorization_details: Dict[str, Any],
|
|
607
|
+
authorization_details: Optional[Dict[str, Any]] = None,
|
|
569
608
|
organization_id: Optional[str] = None,
|
|
570
609
|
user_id: Optional[str] = None,
|
|
571
610
|
api_config: Optional[Dict[str, Any]] = None,
|
|
@@ -578,8 +617,8 @@ class ActionClient:
|
|
|
578
617
|
:type: str
|
|
579
618
|
:param identifier: Connected account identifier (required)
|
|
580
619
|
:type: str
|
|
581
|
-
:param authorization_details: Authorization details (OAuth token or static auth) (
|
|
582
|
-
:type: Dict[str, Any]
|
|
620
|
+
:param authorization_details: Authorization details (OAuth token or static auth) (optional)
|
|
621
|
+
:type: Optional[Dict[str, Any]]
|
|
583
622
|
:param organization_id: Organization ID (optional)
|
|
584
623
|
:type: str
|
|
585
624
|
:param user_id: User ID (optional)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
from pydantic import BaseModel, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class VerifyConnectedAccountUserResponse(BaseModel):
|
|
6
|
+
"""Verify connected account user response with one-to-one mapping to proto VerifyConnectedAccountUserResponse"""
|
|
7
|
+
|
|
8
|
+
post_user_verify_redirect_url: Optional[str] = Field(
|
|
9
|
+
None,
|
|
10
|
+
description="URL to redirect the user to after successful verification"
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
@classmethod
|
|
14
|
+
def from_proto(cls, proto_response) -> 'VerifyConnectedAccountUserResponse':
|
|
15
|
+
"""
|
|
16
|
+
Create VerifyConnectedAccountUserResponse from protobuf VerifyConnectedAccountUserResponse
|
|
17
|
+
|
|
18
|
+
:param proto_response: The protobuf VerifyConnectedAccountUserResponse object
|
|
19
|
+
:type proto_response: VerifyConnectedAccountUserResponse (from connected_accounts_pb2)
|
|
20
|
+
|
|
21
|
+
:returns:
|
|
22
|
+
VerifyConnectedAccountUserResponse instance
|
|
23
|
+
"""
|
|
24
|
+
return cls(
|
|
25
|
+
post_user_verify_redirect_url=proto_response.post_user_verify_redirect_url or None
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
def to_dict(self) -> dict:
|
|
29
|
+
"""
|
|
30
|
+
Convert to dictionary representation
|
|
31
|
+
|
|
32
|
+
:returns:
|
|
33
|
+
Dictionary representation of the response
|
|
34
|
+
"""
|
|
35
|
+
return {
|
|
36
|
+
"post_user_verify_redirect_url": self.post_user_verify_redirect_url
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
class Config:
|
|
40
|
+
"""Pydantic configuration"""
|
|
41
|
+
validate_assignment = True
|
|
@@ -21,6 +21,7 @@ from .models.responses.update_mcp_config_response import UpdateMcpConfigResponse
|
|
|
21
21
|
from .models.responses.update_mcp_instance_response import UpdateMcpInstanceResponse
|
|
22
22
|
from .models.responses.delete_mcp_config_response import DeleteMcpConfigResponse
|
|
23
23
|
from .models.responses.delete_mcp_instance_response import DeleteMcpInstanceResponse
|
|
24
|
+
from .models.responses.verify_connected_account_user_response import VerifyConnectedAccountUserResponse
|
|
24
25
|
from .models.tool_input_output import ToolInput, ToolOutput
|
|
25
26
|
from .models.tool_mapping import ToolMapping
|
|
26
27
|
from .models.mcp_config import McpConfig, McpConfigConnectionToolMapping
|
|
@@ -58,4 +59,5 @@ __all__ = [
|
|
|
58
59
|
'McpConfigConnectionToolMapping',
|
|
59
60
|
'McpInstance',
|
|
60
61
|
'McpInstanceConnectionAuthState',
|
|
62
|
+
'VerifyConnectedAccountUserResponse',
|
|
61
63
|
]
|
|
@@ -83,8 +83,8 @@ class ScalekitClient:
|
|
|
83
83
|
self.auth = AuthClient(self.core_client)
|
|
84
84
|
self.webauthn = WebAuthnClient(self.core_client)
|
|
85
85
|
self.tokens = TokenClient(self.core_client)
|
|
86
|
-
except Exception
|
|
87
|
-
raise
|
|
86
|
+
except Exception:
|
|
87
|
+
raise
|
|
88
88
|
|
|
89
89
|
def get_authorization_url(
|
|
90
90
|
self, redirect_uri: str, options: AuthorizationUrlOptions | None
|
|
@@ -123,8 +123,8 @@ class ScalekitClient:
|
|
|
123
123
|
query_string = urlencode(valid_auth_params)
|
|
124
124
|
|
|
125
125
|
return f"{self.core_client.env_url}/{AUTHORIZE_ENDPOINT}?{query_string}"
|
|
126
|
-
except Exception
|
|
127
|
-
raise
|
|
126
|
+
except Exception:
|
|
127
|
+
raise
|
|
128
128
|
|
|
129
129
|
def authenticate_with_code(
|
|
130
130
|
self, code, redirect_uri, options: CodeAuthenticationOptions
|
|
@@ -181,8 +181,8 @@ class ScalekitClient:
|
|
|
181
181
|
|
|
182
182
|
except jwt.exceptions.InvalidTokenError as exp:
|
|
183
183
|
raise ScalekitValidateTokenFailureException(exp)
|
|
184
|
-
except Exception
|
|
185
|
-
raise
|
|
184
|
+
except Exception:
|
|
185
|
+
raise
|
|
186
186
|
|
|
187
187
|
def validate_access_token(self, token: str, options: Optional[TokenValidationOptions] = None, audience = None) -> bool:
|
|
188
188
|
"""
|
|
@@ -217,20 +217,17 @@ class ScalekitClient:
|
|
|
217
217
|
:returns:
|
|
218
218
|
access token
|
|
219
219
|
"""
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
payload["scope"] = " ".join(scopes)
|
|
220
|
+
payload = {
|
|
221
|
+
"grant_type": GrantType.ClientCredentials.value,
|
|
222
|
+
"client_id": client_id,
|
|
223
|
+
"client_secret": client_secret,
|
|
224
|
+
}
|
|
225
|
+
if scopes:
|
|
226
|
+
payload["scope"] = " ".join(scopes)
|
|
228
227
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
except Exception as exp:
|
|
233
|
-
raise exp
|
|
228
|
+
response = self.core_client.authenticate(payload)
|
|
229
|
+
response = json.loads(response.content)
|
|
230
|
+
return response['access_token']
|
|
234
231
|
|
|
235
232
|
def get_client_access_token(self) -> str:
|
|
236
233
|
"""
|
|
@@ -266,8 +263,8 @@ class ScalekitClient:
|
|
|
266
263
|
return claims
|
|
267
264
|
except jwt.exceptions.InvalidTokenError as exp:
|
|
268
265
|
raise ScalekitValidateTokenFailureException(exp)
|
|
269
|
-
except Exception
|
|
270
|
-
raise
|
|
266
|
+
except Exception:
|
|
267
|
+
raise
|
|
271
268
|
|
|
272
269
|
def get_idp_initiated_login_claims(self, idp_initiated_login_token: str, options: Optional[TokenValidationOptions] = None, audience = None) -> IdpInitiatedLoginClaims:
|
|
273
270
|
"""
|
|
@@ -288,8 +285,8 @@ class ScalekitClient:
|
|
|
288
285
|
return claims
|
|
289
286
|
except jwt.exceptions.InvalidTokenError as exp:
|
|
290
287
|
raise ScalekitValidateTokenFailureException(exp)
|
|
291
|
-
except Exception
|
|
292
|
-
raise
|
|
288
|
+
except Exception:
|
|
289
|
+
raise
|
|
293
290
|
|
|
294
291
|
def validate_token(
|
|
295
292
|
self, token: str, options: Optional[TokenValidationOptions] = None, audience: Optional[str] = None
|
|
@@ -411,13 +408,13 @@ class ScalekitClient:
|
|
|
411
408
|
|
|
412
409
|
try:
|
|
413
410
|
secret_bytes = base64.b64decode(secret_parts[1])
|
|
414
|
-
except Exception
|
|
415
|
-
raise
|
|
411
|
+
except Exception:
|
|
412
|
+
raise
|
|
416
413
|
|
|
417
414
|
try:
|
|
418
415
|
timestamp = self.__verify_timestamp(webhook_timestamp)
|
|
419
|
-
except Exception
|
|
420
|
-
raise
|
|
416
|
+
except Exception:
|
|
417
|
+
raise
|
|
421
418
|
|
|
422
419
|
timestamp_str = str(floor(timestamp.replace(tzinfo=timezone.utc).timestamp()))
|
|
423
420
|
data = f"{webhook_id}.{timestamp_str}.{payload}"
|
|
@@ -549,8 +546,8 @@ class ScalekitClient:
|
|
|
549
546
|
"refresh_token": response["refresh_token"]
|
|
550
547
|
}
|
|
551
548
|
|
|
552
|
-
except Exception
|
|
553
|
-
raise
|
|
549
|
+
except Exception:
|
|
550
|
+
raise
|
|
554
551
|
|
|
555
552
|
def get_logout_url(self, options: LogoutUrlOptions) -> str:
|
|
556
553
|
"""
|
|
@@ -573,5 +570,5 @@ class ScalekitClient:
|
|
|
573
570
|
query_string = urlencode(valid_params)
|
|
574
571
|
|
|
575
572
|
return f"{self.core_client.env_url}/{LOGOUT_ENDPOINT}?{query_string}"
|
|
576
|
-
except Exception
|
|
577
|
-
raise
|
|
573
|
+
except Exception:
|
|
574
|
+
raise
|
|
@@ -1,7 +1,24 @@
|
|
|
1
1
|
from typing import Optional
|
|
2
2
|
|
|
3
3
|
from scalekit.core import CoreClient
|
|
4
|
-
from scalekit.v1.connected_accounts.connected_accounts_pb2 import
|
|
4
|
+
from scalekit.v1.connected_accounts.connected_accounts_pb2 import (
|
|
5
|
+
CreateConnectedAccount,
|
|
6
|
+
CreateConnectedAccountRequest,
|
|
7
|
+
CreateConnectedAccountResponse,
|
|
8
|
+
DeleteConnectedAccountRequest,
|
|
9
|
+
DeleteConnectedAccountResponse,
|
|
10
|
+
GetConnectedAccountByIdentifierRequest,
|
|
11
|
+
GetConnectedAccountByIdentifierResponse,
|
|
12
|
+
GetMagicLinkForConnectedAccountRequest,
|
|
13
|
+
GetMagicLinkForConnectedAccountResponse,
|
|
14
|
+
ListConnectedAccountsRequest,
|
|
15
|
+
ListConnectedAccountsResponse,
|
|
16
|
+
UpdateConnectedAccount,
|
|
17
|
+
UpdateConnectedAccountRequest,
|
|
18
|
+
UpdateConnectedAccountResponse,
|
|
19
|
+
VerifyConnectedAccountUserRequest,
|
|
20
|
+
VerifyConnectedAccountUserResponse,
|
|
21
|
+
)
|
|
5
22
|
from scalekit.v1.connected_accounts.connected_accounts_pb2_grpc import ConnectedAccountServiceStub
|
|
6
23
|
|
|
7
24
|
|
|
@@ -184,7 +201,9 @@ class ConnectedAccountsClient:
|
|
|
184
201
|
identifier: str,
|
|
185
202
|
organization_id: Optional[str] = None,
|
|
186
203
|
user_id: Optional[str] = None,
|
|
187
|
-
connected_account_id: Optional[str] = None
|
|
204
|
+
connected_account_id: Optional[str] = None,
|
|
205
|
+
state: Optional[str] = None,
|
|
206
|
+
user_verify_url: Optional[str] = None
|
|
188
207
|
) -> GetMagicLinkForConnectedAccountResponse:
|
|
189
208
|
"""
|
|
190
209
|
Method to get magic link for a connected account
|
|
@@ -199,6 +218,10 @@ class ConnectedAccountsClient:
|
|
|
199
218
|
:type : ``` str ```
|
|
200
219
|
:param connected_account_id : ID of the connected account
|
|
201
220
|
:type : ``` str ```
|
|
221
|
+
:param state : Opaque state value passed through to the user verify redirect URL query params
|
|
222
|
+
:type : ``` str ```
|
|
223
|
+
:param user_verify_url : B2B app's user verify redirect URL
|
|
224
|
+
:type : ``` str ```
|
|
202
225
|
|
|
203
226
|
:returns:
|
|
204
227
|
Get Magic Link For Connected Account Response
|
|
@@ -210,7 +233,9 @@ class ConnectedAccountsClient:
|
|
|
210
233
|
user_id=user_id,
|
|
211
234
|
connector=connector,
|
|
212
235
|
identifier=identifier,
|
|
213
|
-
id=connected_account_id
|
|
236
|
+
id=connected_account_id,
|
|
237
|
+
state=state,
|
|
238
|
+
user_verify_url=user_verify_url
|
|
214
239
|
),
|
|
215
240
|
)
|
|
216
241
|
|
|
@@ -248,4 +273,29 @@ class ConnectedAccountsClient:
|
|
|
248
273
|
identifier=identifier,
|
|
249
274
|
id=connected_account_id
|
|
250
275
|
),
|
|
251
|
-
)
|
|
276
|
+
)
|
|
277
|
+
|
|
278
|
+
def verify_connected_account_user(
|
|
279
|
+
self,
|
|
280
|
+
auth_request_id: str,
|
|
281
|
+
identifier: str
|
|
282
|
+
) -> VerifyConnectedAccountUserResponse:
|
|
283
|
+
"""
|
|
284
|
+
Method to verify a connected account user after OAuth callback
|
|
285
|
+
|
|
286
|
+
:param auth_request_id : Auth request ID as base64url-encoded opaque token from the
|
|
287
|
+
user verify redirect URL query params
|
|
288
|
+
:type : ``` str ```
|
|
289
|
+
:param identifier : Current logged in user's connected account identifier
|
|
290
|
+
:type : ``` str ```
|
|
291
|
+
|
|
292
|
+
:returns:
|
|
293
|
+
Verify Connected Account User Response
|
|
294
|
+
"""
|
|
295
|
+
return self.core_client.grpc_exec(
|
|
296
|
+
self.connected_accounts_service.VerifyConnectedAccountUser.with_call,
|
|
297
|
+
VerifyConnectedAccountUserRequest(
|
|
298
|
+
auth_request_id=auth_request_id,
|
|
299
|
+
identifier=identifier
|
|
300
|
+
),
|
|
301
|
+
)
|
|
@@ -28,7 +28,8 @@ class CoreClient:
|
|
|
28
28
|
"""Class definition for Core Client"""
|
|
29
29
|
|
|
30
30
|
sdk_version = f"Scalekit-Python/{_sdk_version}"
|
|
31
|
-
|
|
31
|
+
# YYYYMMDD
|
|
32
|
+
api_version = "20260403"
|
|
32
33
|
user_agent = f"{sdk_version} Python/{platform.python_version()} ({platform.system()}; {platform.architecture()}"
|
|
33
34
|
|
|
34
35
|
def __init__(self, env_url, client_id, client_secret):
|
|
@@ -117,14 +117,11 @@ class DirectoryClient:
|
|
|
117
117
|
dir_user.emails = user.emails
|
|
118
118
|
dir_user.groups = user.groups
|
|
119
119
|
dir_user.user_detail = MessageToJson(user.user_detail)
|
|
120
|
+
user_response[0].users.append(dir_user)
|
|
120
121
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
user_response[0].users.append(dir_user)
|
|
125
|
-
user_response[0].total_size = response[0].total_size
|
|
126
|
-
user_response[0].next_page_token = response[0].next_page_token
|
|
127
|
-
user_response[0].prev_page_token = response[0].prev_page_token
|
|
122
|
+
user_response[0].total_size = response[0].total_size
|
|
123
|
+
user_response[0].next_page_token = response[0].next_page_token
|
|
124
|
+
user_response[0].prev_page_token = response[0].prev_page_token
|
|
128
125
|
|
|
129
126
|
return user_response
|
|
130
127
|
|
|
@@ -177,14 +174,11 @@ class DirectoryClient:
|
|
|
177
174
|
dir_group.updated_at = group.updated_at
|
|
178
175
|
dir_group.group_detail = MessageToJson(group.group_detail)
|
|
179
176
|
|
|
180
|
-
|
|
181
|
-
group_response[0].groups = [dir_group]
|
|
182
|
-
else:
|
|
183
|
-
group_response[0].groups.append(dir_group)
|
|
177
|
+
group_response[0].groups.append(dir_group)
|
|
184
178
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
179
|
+
group_response[0].total_size = response[0].total_size
|
|
180
|
+
group_response[0].next_page_token = response[0].next_page_token
|
|
181
|
+
group_response[0].prev_page_token = response[0].prev_page_token
|
|
188
182
|
|
|
189
183
|
return group_response
|
|
190
184
|
|
|
@@ -2,7 +2,25 @@ from typing import Optional, List, Dict
|
|
|
2
2
|
|
|
3
3
|
from google.protobuf import wrappers_pb2
|
|
4
4
|
from scalekit.core import CoreClient
|
|
5
|
-
from scalekit.v1.organizations.organizations_pb2 import
|
|
5
|
+
from scalekit.v1.organizations.organizations_pb2 import (
|
|
6
|
+
ListOrganizationsRequest,
|
|
7
|
+
ListOrganizationsResponse,
|
|
8
|
+
CreateOrganization,
|
|
9
|
+
CreateOrganizationRequest,
|
|
10
|
+
CreateOrganizationResponse,
|
|
11
|
+
UpdateOrganization,
|
|
12
|
+
UpdateOrganizationRequest,
|
|
13
|
+
UpdateOrganizationResponse,
|
|
14
|
+
GetOrganizationRequest,
|
|
15
|
+
GetOrganizationResponse,
|
|
16
|
+
DeleteOrganizationRequest,
|
|
17
|
+
Feature,
|
|
18
|
+
GeneratePortalLinkRequest,
|
|
19
|
+
GeneratePortalLinkResponse,
|
|
20
|
+
UpdateOrganizationSettingsRequest,
|
|
21
|
+
OrganizationUserManagementSettings,
|
|
22
|
+
UpsertUserManagementSettingsRequest,
|
|
23
|
+
)
|
|
6
24
|
from scalekit.v1.organizations.organizations_pb2_grpc import OrganizationServiceStub
|
|
7
25
|
|
|
8
26
|
|
|
@@ -329,7 +329,7 @@ class RoleClient:
|
|
|
329
329
|
)
|
|
330
330
|
|
|
331
331
|
def delete_organization_role_base(
|
|
332
|
-
self,
|
|
332
|
+
self,
|
|
333
333
|
org_id: str,
|
|
334
334
|
role_name: str
|
|
335
335
|
):
|
|
@@ -351,3 +351,48 @@ class RoleClient:
|
|
|
351
351
|
role_name=role_name
|
|
352
352
|
),
|
|
353
353
|
)
|
|
354
|
+
|
|
355
|
+
def update_default_roles(
|
|
356
|
+
self,
|
|
357
|
+
default_creator_role: Optional[str] = None,
|
|
358
|
+
default_member_role: Optional[str] = None,
|
|
359
|
+
) -> UpdateDefaultRolesResponse:
|
|
360
|
+
"""
|
|
361
|
+
Method to update default environment-level roles
|
|
362
|
+
|
|
363
|
+
Both default_creator_role and default_member_role must be provided.
|
|
364
|
+
|
|
365
|
+
:param default_creator_role : Name of the role to set as default creator role
|
|
366
|
+
:type : ``` str ```
|
|
367
|
+
:param default_member_role : Name of the role to set as default member role
|
|
368
|
+
:type : ``` str ```
|
|
369
|
+
|
|
370
|
+
:returns:
|
|
371
|
+
Update Default Roles Response
|
|
372
|
+
"""
|
|
373
|
+
if not default_creator_role:
|
|
374
|
+
raise ValueError("default_creator_role is required")
|
|
375
|
+
if not default_member_role:
|
|
376
|
+
raise ValueError("default_member_role is required")
|
|
377
|
+
req = UpdateDefaultRolesRequest()
|
|
378
|
+
req.default_creator_role = default_creator_role
|
|
379
|
+
req.default_member_role = default_member_role
|
|
380
|
+
return self.core_client.grpc_exec(
|
|
381
|
+
self.role_service.UpdateDefaultRoles.with_call,
|
|
382
|
+
req,
|
|
383
|
+
)
|
|
384
|
+
|
|
385
|
+
def list_dependent_roles(self, role_name: str) -> ListDependentRolesResponse:
|
|
386
|
+
"""
|
|
387
|
+
Method to list roles that directly extend (depend on) the specified base role
|
|
388
|
+
|
|
389
|
+
:param role_name : Name of the base role
|
|
390
|
+
:type : ``` str ```
|
|
391
|
+
|
|
392
|
+
:returns:
|
|
393
|
+
List Dependent Roles Response
|
|
394
|
+
"""
|
|
395
|
+
return self.core_client.grpc_exec(
|
|
396
|
+
self.role_service.ListDependentRoles.with_call,
|
|
397
|
+
ListDependentRolesRequest(role_name=role_name),
|
|
398
|
+
)
|
|
@@ -13,6 +13,8 @@ from scalekit.v1.tokens.tokens_pb2 import (
|
|
|
13
13
|
InvalidateTokenRequest,
|
|
14
14
|
ListTokensRequest,
|
|
15
15
|
ListTokensResponse,
|
|
16
|
+
UpdateTokenRequest,
|
|
17
|
+
UpdateTokenResponse,
|
|
16
18
|
)
|
|
17
19
|
from scalekit.v1.tokens.tokens_pb2_grpc import ApiTokenServiceStub
|
|
18
20
|
|
|
@@ -121,6 +123,47 @@ class TokenClient:
|
|
|
121
123
|
InvalidateTokenRequest(token=token),
|
|
122
124
|
)
|
|
123
125
|
|
|
126
|
+
def update_token(
|
|
127
|
+
self,
|
|
128
|
+
token: str,
|
|
129
|
+
custom_claims: Optional[Dict[str, str]] = None,
|
|
130
|
+
description: Optional[str] = None,
|
|
131
|
+
) -> UpdateTokenResponse:
|
|
132
|
+
"""
|
|
133
|
+
Method to update the custom claims and/or description of an existing API token
|
|
134
|
+
|
|
135
|
+
Custom claims are merged into the existing set. To remove a claim, set its value to an empty string.
|
|
136
|
+
|
|
137
|
+
:param token : Opaque token string or token_id (apit_xxxxx)
|
|
138
|
+
:type : ``` str ```
|
|
139
|
+
:param custom_claims : Claims to merge; set value to "" to remove a claim
|
|
140
|
+
:type : ``` dict[str, str] ```
|
|
141
|
+
:param description : Replacement description; empty string clears it
|
|
142
|
+
:type : ``` str ```
|
|
143
|
+
:returns:
|
|
144
|
+
UpdateTokenResponse with updated token_info
|
|
145
|
+
"""
|
|
146
|
+
if not token:
|
|
147
|
+
raise ValueError("Invalid token")
|
|
148
|
+
request = UpdateTokenRequest(token=token)
|
|
149
|
+
if custom_claims is not None:
|
|
150
|
+
# Fetch current token to get existing claims for merge
|
|
151
|
+
current = self.validate_token(token)
|
|
152
|
+
merged_claims = dict(current.token_info.custom_claims)
|
|
153
|
+
# Apply updates and removals (empty string means remove)
|
|
154
|
+
for key, value in custom_claims.items():
|
|
155
|
+
if value == "":
|
|
156
|
+
merged_claims.pop(key, None)
|
|
157
|
+
else:
|
|
158
|
+
merged_claims[key] = value
|
|
159
|
+
request.custom_claims.update(merged_claims)
|
|
160
|
+
if description is not None:
|
|
161
|
+
request.description = description
|
|
162
|
+
return self.core_client.grpc_exec(
|
|
163
|
+
self.token_service.UpdateToken,
|
|
164
|
+
request,
|
|
165
|
+
)
|
|
166
|
+
|
|
124
167
|
def list_tokens(
|
|
125
168
|
self,
|
|
126
169
|
organization_id: str,
|