From 2e0b4aa1cd3685e3e49646794cc5880a0a60673a Mon Sep 17 00:00:00 2001 From: Namit Nathwani Date: Tue, 10 Jun 2025 22:58:29 +0530 Subject: [PATCH 1/2] feat: adds support for token transfer method - Adds route for `createNewSession` --- tests/test-server/app.py | 11 ++++++++++- tests/test-server/session.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/tests/test-server/app.py b/tests/test-server/app.py index 1cddc75e3..ef87ee887 100644 --- a/tests/test-server/app.py +++ b/tests/test-server/app.py @@ -2,7 +2,7 @@ import json import os import traceback -from typing import Any, Callable, Dict, List, Optional, Tuple, TypeVar +from typing import Any, Callable, Dict, List, Literal, Optional, Tuple, TypeVar, Union import override_logging from accountlinking import add_accountlinking_routes # pylint: disable=import-error @@ -55,6 +55,7 @@ from supertokens_python.recipe.session import InputErrorHandlers, SessionContainer from supertokens_python.recipe.session.framework.flask import verify_session from supertokens_python.recipe.session.recipe import SessionRecipe +from supertokens_python.recipe.session.utils import TokenTransferMethod from supertokens_python.recipe.thirdparty.provider import UserFields, UserInfoMap from supertokens_python.recipe.thirdparty.recipe import ThirdPartyRecipe from supertokens_python.recipe.totp.recipe import TOTPRecipe @@ -298,6 +299,13 @@ async def custom_unauthorised_callback( ) return response + def get_token_transfer_method( + _: BaseRequest, + __: bool, + ___: Dict[str, Any], + ) -> Union[TokenTransferMethod, Literal["any"]]: + return recipe_config_json.get("getTokenTransferMethod", "any") + recipe_config_json = json.loads(recipe_config.get("config", "{}")) recipe_list.append( session.init( @@ -318,6 +326,7 @@ async def custom_unauthorised_callback( use_dynamic_access_token_signing_key=recipe_config_json.get( "useDynamicAccessTokenSigningKey" ), + get_token_transfer_method=get_token_transfer_method, override=session.InputOverrideConfig( apis=override_builder_with_logging( "Session.override.apis", diff --git a/tests/test-server/session.py b/tests/test-server/session.py index a5d2d0952..a9165cb6c 100644 --- a/tests/test-server/session.py +++ b/tests/test-server/session.py @@ -59,6 +59,40 @@ def create_new_session_without_request_response(): # type: ignore return jsonify(convert_session_to_json(session_container)) + @app.route("/test/session/createnewsession", methods=["POST"]) # type: ignore + def create_new_session(): # type: ignore + data = request.json + if data is None: + return jsonify({"status": "MISSING_DATA_ERROR"}) + + tenant_id = data.get("tenantId", "public") + from supertokens_python import convert_to_recipe_user_id + + fdi_version = request.headers.get("fdi-version") + assert fdi_version is not None + if get_max_version("1.17", fdi_version) == "1.17" or ( + get_max_version("2.0", fdi_version) == fdi_version + and get_max_version("3.0", fdi_version) != fdi_version + ): + # fdi_version <= "1.17" or (fdi_version >= "2.0" and fdi_version < "3.0") + recipe_user_id = convert_to_recipe_user_id(data["userId"]) + else: + recipe_user_id = convert_to_recipe_user_id(data["recipeUserId"]) + access_token_payload = data.get("accessTokenPayload", {}) + session_data_in_database = data.get("sessionDataInDatabase", {}) + user_context = data.get("userContext", {}) + + session_container = session.create_new_session( + request, + tenant_id, + recipe_user_id, + access_token_payload, + session_data_in_database, + user_context, + ) + + return jsonify(convert_session_to_json(session_container)) + @app.route("/test/session/getallsessionhandlesforuser", methods=["POST"]) # type: ignore def get_all_session_handles_for_user_api(): # type: ignore data = request.json From 85b94fa1a72bc7df68492cf3a449089bd31ba0bb Mon Sep 17 00:00:00 2001 From: Namit Nathwani Date: Mon, 30 Jun 2025 18:08:01 +0530 Subject: [PATCH 2/2] update: remove added endpoint --- tests/test-server/session.py | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/tests/test-server/session.py b/tests/test-server/session.py index a9165cb6c..a5d2d0952 100644 --- a/tests/test-server/session.py +++ b/tests/test-server/session.py @@ -59,40 +59,6 @@ def create_new_session_without_request_response(): # type: ignore return jsonify(convert_session_to_json(session_container)) - @app.route("/test/session/createnewsession", methods=["POST"]) # type: ignore - def create_new_session(): # type: ignore - data = request.json - if data is None: - return jsonify({"status": "MISSING_DATA_ERROR"}) - - tenant_id = data.get("tenantId", "public") - from supertokens_python import convert_to_recipe_user_id - - fdi_version = request.headers.get("fdi-version") - assert fdi_version is not None - if get_max_version("1.17", fdi_version) == "1.17" or ( - get_max_version("2.0", fdi_version) == fdi_version - and get_max_version("3.0", fdi_version) != fdi_version - ): - # fdi_version <= "1.17" or (fdi_version >= "2.0" and fdi_version < "3.0") - recipe_user_id = convert_to_recipe_user_id(data["userId"]) - else: - recipe_user_id = convert_to_recipe_user_id(data["recipeUserId"]) - access_token_payload = data.get("accessTokenPayload", {}) - session_data_in_database = data.get("sessionDataInDatabase", {}) - user_context = data.get("userContext", {}) - - session_container = session.create_new_session( - request, - tenant_id, - recipe_user_id, - access_token_payload, - session_data_in_database, - user_context, - ) - - return jsonify(convert_session_to_json(session_container)) - @app.route("/test/session/getallsessionhandlesforuser", methods=["POST"]) # type: ignore def get_all_session_handles_for_user_api(): # type: ignore data = request.json