microsoft-agents-hosting-core 0.4.0.dev18__tar.gz → 0.5.0.dev3__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.
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/PKG-INFO +2 -2
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/_oauth/_flow_state.py +2 -2
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/_oauth/_oauth_flow.py +26 -23
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/activity_handler.py +11 -11
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/agent_application.py +4 -4
- microsoft_agents_hosting_core-0.5.0.dev3/microsoft_agents/hosting/core/app/input_file.py +49 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/oauth/_handlers/_authorization_handler.py +4 -4
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/oauth/_handlers/_user_authorization.py +2 -2
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/oauth/_handlers/agentic_user_authorization.py +3 -3
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/oauth/authorization.py +1 -1
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/channel_adapter.py +9 -9
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/connector/client/user_token_client.py +40 -43
- microsoft_agents_hosting_core-0.5.0.dev3/microsoft_agents/hosting/core/connector/user_token_base.py +120 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/connector/user_token_client_base.py +3 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/state/agent_state.py +16 -20
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents_hosting_core.egg-info/PKG-INFO +2 -2
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents_hosting_core.egg-info/requires.txt +1 -1
- microsoft_agents_hosting_core-0.4.0.dev18/microsoft_agents/hosting/core/app/input_file.py +0 -45
- microsoft_agents_hosting_core-0.4.0.dev18/microsoft_agents/hosting/core/connector/user_token_base.py +0 -44
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/_oauth/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/_oauth/_flow_storage_client.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/agent.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/_routes/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/_routes/_route.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/_routes/_route_list.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/_routes/route_rank.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/_type_defs.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/app_error.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/app_options.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/oauth/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/oauth/_handlers/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/oauth/_sign_in_response.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/oauth/_sign_in_state.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/oauth/auth_handler.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/query.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/state/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/state/conversation_state.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/state/state.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/state/temp_state.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/state/turn_state.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/app/typing_indicator.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/authorization/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/authorization/access_token_provider_base.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/authorization/agent_auth_configuration.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/authorization/anonymous_token_provider.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/authorization/auth_types.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/authorization/authentication_constants.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/authorization/claims_identity.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/authorization/connections.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/authorization/jwt_token_validator.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/card_factory.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/channel_api_handler_protocol.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/channel_service_adapter.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/channel_service_client_factory_base.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/client/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/client/agent_conversation_reference.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/client/channel_factory_protocol.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/client/channel_host_protocol.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/client/channel_info_protocol.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/client/channel_protocol.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/client/channels_configuration.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/client/configuration_channel_host.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/client/conversation_constants.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/client/conversation_id_factory.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/client/conversation_id_factory_options.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/client/conversation_id_factory_protocol.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/client/http_agent_channel.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/client/http_agent_channel_factory.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/connector/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/connector/agent_sign_in_base.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/connector/attachments_base.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/connector/client/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/connector/client/connector_client.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/connector/connector_client_base.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/connector/conversations_base.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/connector/get_product_info.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/connector/teams/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/connector/teams/teams_connector_client.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/message_factory.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/middleware_set.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/rest_channel_service_client_factory.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/state/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/state/state_property_accessor.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/state/user_state.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/storage/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/storage/_type_aliases.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/storage/error_handling.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/storage/memory_storage.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/storage/storage.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/storage/store_item.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/storage/transcript_file_store.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/storage/transcript_info.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/storage/transcript_logger.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/storage/transcript_memory_store.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/storage/transcript_store.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents/hosting/core/turn_context.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents_hosting_core.egg-info/SOURCES.txt +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents_hosting_core.egg-info/dependency_links.txt +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/microsoft_agents_hosting_core.egg-info/top_level.txt +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/pyproject.toml +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/setup.cfg +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/setup.py +0 -0
{microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0.dev3}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: microsoft-agents-hosting-core
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0.dev3
|
|
4
4
|
Summary: Core library for Microsoft Agents
|
|
5
5
|
Author: Microsoft Corporation
|
|
6
6
|
Project-URL: Homepage, https://github.com/microsoft/Agents
|
|
@@ -8,7 +8,7 @@ Classifier: Programming Language :: Python :: 3
|
|
|
8
8
|
Classifier: License :: OSI Approved :: MIT License
|
|
9
9
|
Classifier: Operating System :: OS Independent
|
|
10
10
|
Requires-Python: >=3.9
|
|
11
|
-
Requires-Dist: microsoft-agents-activity==0.
|
|
11
|
+
Requires-Dist: microsoft-agents-activity==0.5.0.dev3
|
|
12
12
|
Requires-Dist: pyjwt>=2.10.1
|
|
13
13
|
Requires-Dist: isodate>=0.6.1
|
|
14
14
|
Requires-Dist: azure-core>=1.30.0
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
-
from datetime import datetime
|
|
6
|
+
from datetime import datetime, timezone
|
|
7
7
|
from enum import Enum
|
|
8
8
|
from typing import Optional
|
|
9
9
|
|
|
@@ -60,7 +60,7 @@ class _FlowState(BaseModel, StoreItem):
|
|
|
60
60
|
return _FlowState.model_validate(json_data)
|
|
61
61
|
|
|
62
62
|
def is_expired(self) -> bool:
|
|
63
|
-
return datetime.now().timestamp() >= self.expiration
|
|
63
|
+
return datetime.now(timezone.utc).timestamp() >= self.expiration
|
|
64
64
|
|
|
65
65
|
def reached_max_attempts(self) -> bool:
|
|
66
66
|
return self.attempts_remaining <= 0
|
|
@@ -6,7 +6,7 @@ from __future__ import annotations
|
|
|
6
6
|
import logging
|
|
7
7
|
|
|
8
8
|
from pydantic import BaseModel
|
|
9
|
-
from datetime import datetime
|
|
9
|
+
from datetime import datetime, timezone
|
|
10
10
|
from typing import Optional
|
|
11
11
|
|
|
12
12
|
from microsoft_agents.activity import (
|
|
@@ -30,7 +30,6 @@ class _FlowResponse(BaseModel):
|
|
|
30
30
|
flow_error_tag: _FlowErrorTag = _FlowErrorTag.NONE
|
|
31
31
|
token_response: Optional[TokenResponse] = None
|
|
32
32
|
sign_in_resource: Optional[SignInResource] = None
|
|
33
|
-
continuation_activity: Optional[Activity] = None
|
|
34
33
|
|
|
35
34
|
|
|
36
35
|
class _OAuthFlow:
|
|
@@ -112,7 +111,7 @@ class _OAuthFlow:
|
|
|
112
111
|
"""Get the user token based on the context.
|
|
113
112
|
|
|
114
113
|
Args:
|
|
115
|
-
magic_code (str,
|
|
114
|
+
magic_code (str, Optional): Defaults to None. The magic code for user authentication.
|
|
116
115
|
|
|
117
116
|
Returns:
|
|
118
117
|
TokenResponse
|
|
@@ -137,7 +136,7 @@ class _OAuthFlow:
|
|
|
137
136
|
if token_response:
|
|
138
137
|
logger.info("User token obtained successfully: %s", token_response)
|
|
139
138
|
self._flow_state.expiration = (
|
|
140
|
-
datetime.now().timestamp() + self._default_flow_duration
|
|
139
|
+
datetime.now(timezone.utc).timestamp() + self._default_flow_duration
|
|
141
140
|
)
|
|
142
141
|
self._flow_state.tag = _FlowStateTag.COMPLETE
|
|
143
142
|
|
|
@@ -183,20 +182,8 @@ class _OAuthFlow:
|
|
|
183
182
|
Notes:
|
|
184
183
|
The flow state is reset if a token is not obtained from cache.
|
|
185
184
|
"""
|
|
186
|
-
token_response = await self.get_user_token()
|
|
187
|
-
if token_response:
|
|
188
|
-
return _FlowResponse(
|
|
189
|
-
flow_state=self._flow_state, token_response=token_response
|
|
190
|
-
)
|
|
191
185
|
|
|
192
186
|
logger.debug("Starting new OAuth flow")
|
|
193
|
-
self._flow_state.tag = _FlowStateTag.BEGIN
|
|
194
|
-
self._flow_state.expiration = (
|
|
195
|
-
datetime.now().timestamp() + self._default_flow_duration
|
|
196
|
-
)
|
|
197
|
-
|
|
198
|
-
self._flow_state.attempts_remaining = self._max_attempts
|
|
199
|
-
self._flow_state.continuation_activity = activity.model_copy()
|
|
200
187
|
|
|
201
188
|
token_exchange_state = TokenExchangeState(
|
|
202
189
|
connection_name=self._abs_oauth_connection_name,
|
|
@@ -205,16 +192,33 @@ class _OAuthFlow:
|
|
|
205
192
|
ms_app_id=self._ms_app_id,
|
|
206
193
|
)
|
|
207
194
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
195
|
+
res = await self._user_token_client.user_token._get_token_or_sign_in_resource(
|
|
196
|
+
activity.from_property.id,
|
|
197
|
+
self._abs_oauth_connection_name,
|
|
198
|
+
activity.channel_id,
|
|
199
|
+
token_exchange_state.get_encoded_state(),
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
if res.token_response:
|
|
203
|
+
logger.info("Skipping flow, user token obtained.")
|
|
204
|
+
self._flow_state.tag = _FlowStateTag.COMPLETE
|
|
205
|
+
self._flow_state.expiration = (
|
|
206
|
+
datetime.now(timezone.utc).timestamp() + self._default_flow_duration
|
|
207
|
+
)
|
|
208
|
+
return _FlowResponse(
|
|
209
|
+
flow_state=self._flow_state, token_response=res.token_response
|
|
211
210
|
)
|
|
211
|
+
|
|
212
|
+
self._flow_state.tag = _FlowStateTag.BEGIN
|
|
213
|
+
self._flow_state.expiration = (
|
|
214
|
+
datetime.now(timezone.utc).timestamp() + self._default_flow_duration
|
|
212
215
|
)
|
|
216
|
+
self._flow_state.attempts_remaining = self._max_attempts
|
|
213
217
|
|
|
214
|
-
logger.debug("Sign-in resource obtained successfully: %s", sign_in_resource)
|
|
218
|
+
logger.debug("Sign-in resource obtained successfully: %s", res.sign_in_resource)
|
|
215
219
|
|
|
216
220
|
return _FlowResponse(
|
|
217
|
-
flow_state=self._flow_state, sign_in_resource=sign_in_resource
|
|
221
|
+
flow_state=self._flow_state, sign_in_resource=res.sign_in_resource
|
|
218
222
|
)
|
|
219
223
|
|
|
220
224
|
async def _continue_from_message(
|
|
@@ -299,7 +303,7 @@ class _OAuthFlow:
|
|
|
299
303
|
else:
|
|
300
304
|
self._flow_state.tag = _FlowStateTag.COMPLETE
|
|
301
305
|
self._flow_state.expiration = (
|
|
302
|
-
datetime.now().timestamp() + self._default_flow_duration
|
|
306
|
+
datetime.now(timezone.utc).timestamp() + self._default_flow_duration
|
|
303
307
|
)
|
|
304
308
|
logger.debug(
|
|
305
309
|
"OAuth flow completed successfully, got TokenResponse: %s",
|
|
@@ -310,7 +314,6 @@ class _OAuthFlow:
|
|
|
310
314
|
flow_state=self._flow_state.model_copy(),
|
|
311
315
|
flow_error_tag=flow_error_tag,
|
|
312
316
|
token_response=token_response,
|
|
313
|
-
continuation_activity=self._flow_state.continuation_activity,
|
|
314
317
|
)
|
|
315
318
|
|
|
316
319
|
async def begin_or_continue_flow(self, activity: Activity) -> _FlowResponse:
|
|
@@ -38,7 +38,7 @@ class ActivityHandler(Agent):
|
|
|
38
38
|
in order to process an inbound :class:`microsoft_agents.activity.Activity`.
|
|
39
39
|
|
|
40
40
|
:param turn_context: The context object for this turn
|
|
41
|
-
:type turn_context: :class:`microsoft_agents.
|
|
41
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
42
42
|
|
|
43
43
|
:returns: A task that represents the work queued to execute
|
|
44
44
|
|
|
@@ -143,7 +143,7 @@ class ActivityHandler(Agent):
|
|
|
143
143
|
:meth:`on_turn()` is used.
|
|
144
144
|
|
|
145
145
|
:param turn_context: The context object for this turn
|
|
146
|
-
:type turn_context: :class:`microsoft_agents.
|
|
146
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
147
147
|
:returns: A task that represents the work queued to execute
|
|
148
148
|
|
|
149
149
|
.. remarks::
|
|
@@ -216,7 +216,7 @@ class ActivityHandler(Agent):
|
|
|
216
216
|
:meth:`on_turn()` is used.
|
|
217
217
|
|
|
218
218
|
:param turn_context: The context object for this turn
|
|
219
|
-
:type turn_context: :class:`microsoft_agents.
|
|
219
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
220
220
|
|
|
221
221
|
:returns: A task that represents the work queued to execute
|
|
222
222
|
|
|
@@ -382,7 +382,7 @@ class ActivityHandler(Agent):
|
|
|
382
382
|
ActivityTypes.typing activities, such as the conversational logic.
|
|
383
383
|
|
|
384
384
|
:param turn_context: The context object for this turn
|
|
385
|
-
:type turn_context: :class:`microsoft_agents.
|
|
385
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
386
386
|
:returns: A task that represents the work queued to execute
|
|
387
387
|
"""
|
|
388
388
|
return
|
|
@@ -395,7 +395,7 @@ class ActivityHandler(Agent):
|
|
|
395
395
|
ActivityTypes.InstallationUpdate activities.
|
|
396
396
|
|
|
397
397
|
:param turn_context: The context object for this turn
|
|
398
|
-
:type turn_context: :class:`microsoft_agents.
|
|
398
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
399
399
|
:returns: A task that represents the work queued to execute
|
|
400
400
|
"""
|
|
401
401
|
if turn_context.activity.action in ("add", "add-upgrade"):
|
|
@@ -412,7 +412,7 @@ class ActivityHandler(Agent):
|
|
|
412
412
|
ActivityTypes.InstallationUpdate activities with 'action' set to 'add'.
|
|
413
413
|
|
|
414
414
|
:param turn_context: The context object for this turn
|
|
415
|
-
:type turn_context: :class:`microsoft_agents.
|
|
415
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
416
416
|
:returns: A task that represents the work queued to execute
|
|
417
417
|
"""
|
|
418
418
|
return
|
|
@@ -425,7 +425,7 @@ class ActivityHandler(Agent):
|
|
|
425
425
|
ActivityTypes.InstallationUpdate activities with 'action' set to 'remove'.
|
|
426
426
|
|
|
427
427
|
:param turn_context: The context object for this turn
|
|
428
|
-
:type turn_context: :class:`microsoft_agents.
|
|
428
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
429
429
|
:returns: A task that represents the work queued to execute
|
|
430
430
|
"""
|
|
431
431
|
return
|
|
@@ -439,7 +439,7 @@ class ActivityHandler(Agent):
|
|
|
439
439
|
If overridden, this method could potentially respond to any of the other activity types.
|
|
440
440
|
|
|
441
441
|
:param turn_context: The context object for this turn
|
|
442
|
-
:type turn_context: :class:`microsoft_agents.
|
|
442
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
443
443
|
|
|
444
444
|
:returns: A task that represents the work queued to execute
|
|
445
445
|
|
|
@@ -456,7 +456,7 @@ class ActivityHandler(Agent):
|
|
|
456
456
|
Registers an activity event handler for the _invoke_ event, emitted for every incoming event activity.
|
|
457
457
|
|
|
458
458
|
:param turn_context: The context object for this turn
|
|
459
|
-
:type turn_context: :class:`microsoft_agents.
|
|
459
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
460
460
|
|
|
461
461
|
:returns: A task that represents the work queued to execute
|
|
462
462
|
"""
|
|
@@ -492,7 +492,7 @@ class ActivityHandler(Agent):
|
|
|
492
492
|
By default, this method does nothing.
|
|
493
493
|
|
|
494
494
|
:param turn_context: The context object for this turn
|
|
495
|
-
:type turn_context: :class:`microsoft_agents.
|
|
495
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
496
496
|
|
|
497
497
|
:returns: A task that represents the work queued to execute
|
|
498
498
|
"""
|
|
@@ -508,7 +508,7 @@ class ActivityHandler(Agent):
|
|
|
508
508
|
calls this method.
|
|
509
509
|
|
|
510
510
|
:param turn_context: A context object for this turn.
|
|
511
|
-
:type turn_context: :class:`microsoft_agents.
|
|
511
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
512
512
|
:param invoke_value: A string-typed object from the incoming activity's value.
|
|
513
513
|
:type invoke_value: :class:`microsoft_agents.activity.adaptive_card_invoke_value.AdaptiveCardInvokeValue`
|
|
514
514
|
:return: The HealthCheckResponse object
|
|
@@ -221,14 +221,14 @@ class AgentApplication(Agent, Generic[StateT]):
|
|
|
221
221
|
:param handler: A function that takes a TurnContext and a TurnState and returns an Awaitable.
|
|
222
222
|
:type handler: RouteHandler[StateT]
|
|
223
223
|
:param is_invoke: Whether the route is for an invoke activity, defaults to False
|
|
224
|
-
:type is_invoke: bool,
|
|
224
|
+
:type is_invoke: bool, Optional
|
|
225
225
|
:param is_agentic: Whether the route is for an agentic request, defaults to False. For agentic requests
|
|
226
226
|
the selector will include a new check for `context.activity.is_agentic_request()`.
|
|
227
|
-
:type is_agentic: bool,
|
|
227
|
+
:type is_agentic: bool, Optional
|
|
228
228
|
:param rank: The rank of the route, defaults to RouteRank.DEFAULT
|
|
229
|
-
:type rank: RouteRank,
|
|
229
|
+
:type rank: RouteRank, Optional
|
|
230
230
|
:param auth_handlers: A list of authentication handler IDs to use for this route, defaults to None
|
|
231
|
-
:type auth_handlers: Optional[list[str]],
|
|
231
|
+
:type auth_handlers: Optional[list[str]], Optional
|
|
232
232
|
:raises ApplicationError: If the selector or handler are not valid.
|
|
233
233
|
"""
|
|
234
234
|
if not selector or not handler:
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
Licensed under the MIT License.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
from abc import ABC, abstractmethod
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
from typing import List, Optional
|
|
11
|
+
|
|
12
|
+
from microsoft_agents.hosting.core import TurnContext
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclass
|
|
16
|
+
class InputFile:
|
|
17
|
+
"""A file sent by the user to the bot.
|
|
18
|
+
|
|
19
|
+
:param content: The downloaded content of the file.
|
|
20
|
+
:type content: bytes
|
|
21
|
+
:param content_type: The content type of the file.
|
|
22
|
+
:type content_type: str
|
|
23
|
+
:param content_url: Optional. URL to the content of the file.
|
|
24
|
+
:type content_url: Optional[str]
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
content: bytes
|
|
28
|
+
content_type: str
|
|
29
|
+
content_url: Optional[str]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class InputFileDownloader(ABC):
|
|
33
|
+
"""
|
|
34
|
+
Abstract base class for a plugin responsible for downloading files provided by the user.
|
|
35
|
+
|
|
36
|
+
Implementations should download any files referenced by the incoming activity and return a
|
|
37
|
+
list of :class:`InputFile` instances representing the downloaded content.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
@abstractmethod
|
|
41
|
+
async def download_files(self, context: TurnContext) -> List[InputFile]:
|
|
42
|
+
"""
|
|
43
|
+
Download any files referenced by the incoming activity for the current turn.
|
|
44
|
+
|
|
45
|
+
:param context: The turn context for the current request.
|
|
46
|
+
:type context: :class:`microsoft_agents.hosting.core.turn_context.TurnContext`
|
|
47
|
+
:return: A list of downloaded :class:`InputFile` objects.
|
|
48
|
+
:rtype: list[:class:`microsoft_agents.hosting.core.app.input_file.InputFile`]
|
|
49
|
+
"""
|
|
@@ -43,7 +43,7 @@ class _AuthorizationHandler(ABC):
|
|
|
43
43
|
:param connection_manager: The connection manager for OAuth providers.
|
|
44
44
|
:type connection_manager: Connections
|
|
45
45
|
:param auth_handlers: Configuration for OAuth providers.
|
|
46
|
-
:type auth_handlers: dict[str, AuthHandler],
|
|
46
|
+
:type auth_handlers: dict[str, AuthHandler], Optional
|
|
47
47
|
:raises ValueError: When storage is None or no auth handlers provided.
|
|
48
48
|
"""
|
|
49
49
|
if not storage:
|
|
@@ -75,7 +75,7 @@ class _AuthorizationHandler(ABC):
|
|
|
75
75
|
:param context: The turn context for the current turn of conversation.
|
|
76
76
|
:type context: TurnContext
|
|
77
77
|
:param scopes: Optional list of scopes to request during sign-in. If None, default scopes will be used.
|
|
78
|
-
:type scopes: Optional[list[str]],
|
|
78
|
+
:type scopes: Optional[list[str]], Optional
|
|
79
79
|
:return: A SignInResponse indicating the result of the sign-in attempt.
|
|
80
80
|
:rtype: SignInResponse
|
|
81
81
|
"""
|
|
@@ -92,9 +92,9 @@ class _AuthorizationHandler(ABC):
|
|
|
92
92
|
:param context: The turn context for the current turn of conversation.
|
|
93
93
|
:type context: TurnContext
|
|
94
94
|
:param exchange_connection: Optional name of the connection to use for token exchange. If None, default connection will be used.
|
|
95
|
-
:type exchange_connection: Optional[str],
|
|
95
|
+
:type exchange_connection: Optional[str], Optional
|
|
96
96
|
:param exchange_scopes: Optional list of scopes to request during token exchange. If None, default scopes will be used.
|
|
97
|
-
:type exchange_scopes: Optional[list[str]],
|
|
97
|
+
:type exchange_scopes: Optional[list[str]], Optional
|
|
98
98
|
"""
|
|
99
99
|
raise NotImplementedError()
|
|
100
100
|
|
|
@@ -249,9 +249,9 @@ class _UserAuthorization(_AuthorizationHandler):
|
|
|
249
249
|
:param context: The turn context for the current turn of conversation.
|
|
250
250
|
:type context: TurnContext
|
|
251
251
|
:param exchange_connection: Optional name of the connection to use for token exchange. If None, default connection will be used.
|
|
252
|
-
:type exchange_connection: Optional[str],
|
|
252
|
+
:type exchange_connection: Optional[str], Optional
|
|
253
253
|
:param exchange_scopes: Optional list of scopes to request during token exchange. If None, default scopes will be used.
|
|
254
|
-
:type exchange_scopes: Optional[list[str]],
|
|
254
|
+
:type exchange_scopes: Optional[list[str]], Optional
|
|
255
255
|
"""
|
|
256
256
|
flow, _ = await self._load_flow(context)
|
|
257
257
|
input_token_response = await flow.get_user_token()
|
|
@@ -41,7 +41,7 @@ class AgenticUserAuthorization(_AuthorizationHandler):
|
|
|
41
41
|
:param connection_manager: The connection manager for OAuth providers.
|
|
42
42
|
:type connection_manager: Connections
|
|
43
43
|
:param auth_handlers: Configuration for OAuth providers.
|
|
44
|
-
:type auth_handlers: dict[str, AuthHandler],
|
|
44
|
+
:type auth_handlers: dict[str, AuthHandler], Optional
|
|
45
45
|
:raises ValueError: When storage is None or no auth handlers provided.
|
|
46
46
|
"""
|
|
47
47
|
super().__init__(
|
|
@@ -172,9 +172,9 @@ class AgenticUserAuthorization(_AuthorizationHandler):
|
|
|
172
172
|
:param context: The turn context for the current turn of conversation.
|
|
173
173
|
:type context: TurnContext
|
|
174
174
|
:param exchange_connection: Optional name of the connection to use for token exchange. If None, default connection will be used.
|
|
175
|
-
:type exchange_connection: Optional[str],
|
|
175
|
+
:type exchange_connection: Optional[str], Optional
|
|
176
176
|
:param exchange_scopes: Optional list of scopes to request during token exchange. If None, default scopes will be used.
|
|
177
|
-
:type exchange_scopes: Optional[list[str]],
|
|
177
|
+
:type exchange_scopes: Optional[list[str]], Optional
|
|
178
178
|
"""
|
|
179
179
|
if not exchange_scopes:
|
|
180
180
|
exchange_scopes = self._handler.scopes or []
|
|
@@ -59,7 +59,7 @@ class Authorization:
|
|
|
59
59
|
:param connection_manager: The connection manager for OAuth providers.
|
|
60
60
|
:type connection_manager: Connections
|
|
61
61
|
:param auth_handlers: Configuration for OAuth providers.
|
|
62
|
-
:type auth_handlers: dict[str, AuthHandler],
|
|
62
|
+
:type auth_handlers: dict[str, AuthHandler], Optional
|
|
63
63
|
:raises ValueError: When storage is None or no auth handlers provided.
|
|
64
64
|
"""
|
|
65
65
|
if not storage:
|
|
@@ -40,7 +40,7 @@ class ChannelAdapter(ABC, ChannelAdapterProtocol):
|
|
|
40
40
|
Sends a set of activities to the user. An array of responses from the server will be returned.
|
|
41
41
|
|
|
42
42
|
:param context: The context object for the turn.
|
|
43
|
-
:type context: :class:`TurnContext`
|
|
43
|
+
:type context: :class:`microsoft_agents.hosting.core.turn_context.TurnContext`
|
|
44
44
|
:param activities: The activities to send.
|
|
45
45
|
:type activities: list[Activity]
|
|
46
46
|
:return:
|
|
@@ -53,7 +53,7 @@ class ChannelAdapter(ABC, ChannelAdapterProtocol):
|
|
|
53
53
|
Replaces an existing activity.
|
|
54
54
|
|
|
55
55
|
:param context: The context object for the turn.
|
|
56
|
-
:type context: :class:`TurnContext`
|
|
56
|
+
:type context: :class:`microsoft_agents.hosting.core.turn_context.TurnContext`
|
|
57
57
|
:param activity: New replacement activity.
|
|
58
58
|
:type activity: :class:`microsoft_agents.activity.Activity`
|
|
59
59
|
:return:
|
|
@@ -68,7 +68,7 @@ class ChannelAdapter(ABC, ChannelAdapterProtocol):
|
|
|
68
68
|
Deletes an existing activity.
|
|
69
69
|
|
|
70
70
|
:param context: The context object for the turn.
|
|
71
|
-
:type context: :class:`TurnContext`
|
|
71
|
+
:type context: :class:`microsoft_agents.hosting.core.turn_context.TurnContext`
|
|
72
72
|
:param reference: Conversation reference for the activity to delete.
|
|
73
73
|
:type reference: :class:`microsoft_agents.activity.ConversationReference`
|
|
74
74
|
:return:
|
|
@@ -102,7 +102,7 @@ class ChannelAdapter(ABC, ChannelAdapterProtocol):
|
|
|
102
102
|
:param reference: A reference to the conversation to continue.
|
|
103
103
|
:type reference: :class:`microsoft_agents.activity.ConversationReference`
|
|
104
104
|
:param callback: The method to call for the resulting agent turn.
|
|
105
|
-
:type callback: Callable[[TurnContext], Awaitable]
|
|
105
|
+
:type callback: Callable[[microsoft_agents.hosting.core.turn_context.TurnContext], Awaitable]
|
|
106
106
|
:param claims_identity: A :class:`microsoft_agents.hosting.core.ClaimsIdentity` for the conversation.
|
|
107
107
|
:type claims_identity: :class:`microsoft_agents.hosting.core.ClaimsIdentity`
|
|
108
108
|
:param audience:A value signifying the recipient of the proactive message.
|
|
@@ -124,11 +124,11 @@ class ChannelAdapter(ABC, ChannelAdapterProtocol):
|
|
|
124
124
|
to the user.
|
|
125
125
|
|
|
126
126
|
:param claims_identity: A :class:`microsoft_agents.hosting.core.ClaimsIdentity` for the conversation.
|
|
127
|
-
:type claims_identity: :class:`microsoft_agents.hosting.core.ClaimsIdentity`
|
|
127
|
+
:type claims_identity: :class:`microsoft_agents.hosting.core.authorization.ClaimsIdentity`
|
|
128
128
|
:param continuation_activity: The activity to send.
|
|
129
129
|
:type continuation_activity: :class:`microsoft_agents.activity.Activity`
|
|
130
130
|
:param callback: The method to call for the resulting agent turn.
|
|
131
|
-
:type callback: Callable[[TurnContext], Awaitable]
|
|
131
|
+
:type callback: Callable[[microsoft_agents.hosting.core.turn_context.TurnContext], Awaitable]
|
|
132
132
|
:param audience: A value signifying the recipient of the proactive message.
|
|
133
133
|
:type audience: str
|
|
134
134
|
"""
|
|
@@ -155,9 +155,9 @@ class ChannelAdapter(ABC, ChannelAdapterProtocol):
|
|
|
155
155
|
:param audience: A value signifying the recipient of the proactive message.
|
|
156
156
|
:type audience: str
|
|
157
157
|
:param conversation_parameters: The information to use to create the conversation
|
|
158
|
-
:type conversation_parameters: :class:`microsoft_agents.activity.
|
|
158
|
+
:type conversation_parameters: :class:`microsoft_agents.activity.ConversationParameters`
|
|
159
159
|
:param callback: The method to call for the resulting agent turn.
|
|
160
|
-
:type callback: Callable[[TurnContext], Awaitable]
|
|
160
|
+
:type callback: Callable[[microsoft_agents.hosting.core.turn_context.TurnContext], Awaitable]
|
|
161
161
|
|
|
162
162
|
:raises: Exception - Not implemented or when the implementation fails.
|
|
163
163
|
|
|
@@ -222,7 +222,7 @@ class ChannelAdapter(ABC, ChannelAdapterProtocol):
|
|
|
222
222
|
the end of the chain.
|
|
223
223
|
|
|
224
224
|
:param context: The context object for the turn.
|
|
225
|
-
:type context: :class:`TurnContext`
|
|
225
|
+
:type context: :class:`microsoft_agents.hosting.core.turn_context.TurnContext`
|
|
226
226
|
:param callback: A callback method to run at the end of the pipeline.
|
|
227
227
|
:type callback: Callable[[TurnContext], Awaitable]
|
|
228
228
|
:return:
|
|
@@ -8,7 +8,12 @@ from typing import Optional
|
|
|
8
8
|
from aiohttp import ClientSession
|
|
9
9
|
|
|
10
10
|
from microsoft_agents.hosting.core.connector import UserTokenClientBase
|
|
11
|
-
from microsoft_agents.activity import
|
|
11
|
+
from microsoft_agents.activity import (
|
|
12
|
+
TokenOrSignInResourceResponse,
|
|
13
|
+
TokenResponse,
|
|
14
|
+
TokenStatus,
|
|
15
|
+
SignInResource,
|
|
16
|
+
)
|
|
12
17
|
from ..get_product_info import get_product_info
|
|
13
18
|
from ..user_token_base import UserTokenBase
|
|
14
19
|
from ..agent_sign_in_base import AgentSignInBase
|
|
@@ -110,15 +115,6 @@ class UserToken(UserTokenBase):
|
|
|
110
115
|
channel_id: Optional[str] = None,
|
|
111
116
|
code: Optional[str] = None,
|
|
112
117
|
) -> TokenResponse:
|
|
113
|
-
"""
|
|
114
|
-
Gets a token for a user and connection.
|
|
115
|
-
|
|
116
|
-
:param user_id: ID of the user.
|
|
117
|
-
:param connection_name: Name of the connection to use.
|
|
118
|
-
:param channel_id: ID of the channel.
|
|
119
|
-
:param code: Optional authorization code.
|
|
120
|
-
:return: A token response.
|
|
121
|
-
"""
|
|
122
118
|
params = {"userId": user_id, "connectionName": connection_name}
|
|
123
119
|
|
|
124
120
|
if channel_id:
|
|
@@ -137,6 +133,40 @@ class UserToken(UserTokenBase):
|
|
|
137
133
|
data = await response.json()
|
|
138
134
|
return TokenResponse.model_validate(data)
|
|
139
135
|
|
|
136
|
+
async def _get_token_or_sign_in_resource(
|
|
137
|
+
self,
|
|
138
|
+
user_id: str,
|
|
139
|
+
connection_name: str,
|
|
140
|
+
channel_id: str,
|
|
141
|
+
state: str,
|
|
142
|
+
code: str = "",
|
|
143
|
+
final_redirect: str = "",
|
|
144
|
+
fwd_url: str = "",
|
|
145
|
+
) -> TokenOrSignInResourceResponse:
|
|
146
|
+
|
|
147
|
+
params = {
|
|
148
|
+
"userId": user_id,
|
|
149
|
+
"connectionName": connection_name,
|
|
150
|
+
"channelId": channel_id,
|
|
151
|
+
"state": state,
|
|
152
|
+
"code": code,
|
|
153
|
+
"finalRedirect": final_redirect,
|
|
154
|
+
"fwdUrl": fwd_url,
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
logger.info("Getting token or sign-in resource with params: %s", params)
|
|
158
|
+
async with self.client.get(
|
|
159
|
+
"/api/usertoken/GetTokenOrSignInResource", params=params
|
|
160
|
+
) as response:
|
|
161
|
+
if response.status != 200:
|
|
162
|
+
logger.error(
|
|
163
|
+
"Error getting token or sign-in resource: %s", response.status
|
|
164
|
+
)
|
|
165
|
+
response.raise_for_status()
|
|
166
|
+
|
|
167
|
+
data = await response.json()
|
|
168
|
+
return TokenOrSignInResourceResponse.model_validate(data)
|
|
169
|
+
|
|
140
170
|
async def get_aad_tokens(
|
|
141
171
|
self,
|
|
142
172
|
user_id: str,
|
|
@@ -144,15 +174,6 @@ class UserToken(UserTokenBase):
|
|
|
144
174
|
channel_id: Optional[str] = None,
|
|
145
175
|
body: Optional[dict] = None,
|
|
146
176
|
) -> dict[str, TokenResponse]:
|
|
147
|
-
"""
|
|
148
|
-
Gets Azure Active Directory tokens for a user and connection.
|
|
149
|
-
|
|
150
|
-
:param user_id: ID of the user.
|
|
151
|
-
:param connection_name: Name of the connection to use.
|
|
152
|
-
:param channel_id: ID of the channel.
|
|
153
|
-
:param body: An optional dictionary containing resource URLs.
|
|
154
|
-
:return: A dictionary of tokens.
|
|
155
|
-
"""
|
|
156
177
|
params = {"userId": user_id, "connectionName": connection_name}
|
|
157
178
|
|
|
158
179
|
if channel_id:
|
|
@@ -175,13 +196,6 @@ class UserToken(UserTokenBase):
|
|
|
175
196
|
connection_name: Optional[str] = None,
|
|
176
197
|
channel_id: Optional[str] = None,
|
|
177
198
|
) -> None:
|
|
178
|
-
"""
|
|
179
|
-
Signs the user out from the specified connection.
|
|
180
|
-
|
|
181
|
-
:param user_id: ID of the user.
|
|
182
|
-
:param connection_name: Name of the connection to use.
|
|
183
|
-
:param channel_id: ID of the channel.
|
|
184
|
-
"""
|
|
185
199
|
params = {"userId": user_id}
|
|
186
200
|
|
|
187
201
|
if connection_name:
|
|
@@ -203,14 +217,6 @@ class UserToken(UserTokenBase):
|
|
|
203
217
|
channel_id: Optional[str] = None,
|
|
204
218
|
include: Optional[str] = None,
|
|
205
219
|
) -> list[TokenStatus]:
|
|
206
|
-
"""
|
|
207
|
-
Gets token status for the user.
|
|
208
|
-
|
|
209
|
-
:param user_id: ID of the user.
|
|
210
|
-
:param channel_id: ID of the channel.
|
|
211
|
-
:param include: Optional filter.
|
|
212
|
-
:return: A list of token status objects.
|
|
213
|
-
"""
|
|
214
220
|
params = {"userId": user_id}
|
|
215
221
|
|
|
216
222
|
if channel_id:
|
|
@@ -236,15 +242,6 @@ class UserToken(UserTokenBase):
|
|
|
236
242
|
channel_id: str,
|
|
237
243
|
body: Optional[dict] = None,
|
|
238
244
|
) -> TokenResponse:
|
|
239
|
-
"""
|
|
240
|
-
Exchanges a token.
|
|
241
|
-
|
|
242
|
-
:param user_id: ID of the user.
|
|
243
|
-
:param connection_name: Name of the connection to use.
|
|
244
|
-
:param channel_id: ID of the channel.
|
|
245
|
-
:param body: An optional token exchange request body.
|
|
246
|
-
:return: A token response.
|
|
247
|
-
"""
|
|
248
245
|
params = {
|
|
249
246
|
"userId": user_id,
|
|
250
247
|
"connectionName": connection_name,
|