|
48 | 48 | from workos.types.user_management.password_hash_type import PasswordHashType |
49 | 49 | from workos.types.user_management.screen_hint import ScreenHintType |
50 | 50 | from workos.types.user_management.session import SessionConfig |
| 51 | +from workos.types.user_management.session import Session as UserManagementSession |
51 | 52 | from workos.types.user_management.user_management_provider_type import ( |
52 | 53 | UserManagementProviderType, |
53 | 54 | ) |
|
86 | 87 | MAGIC_AUTH_PATH = "user_management/magic_auth" |
87 | 88 | USER_SEND_MAGIC_AUTH_PATH = "user_management/magic_auth/send" |
88 | 89 | USER_AUTH_FACTORS_PATH = "user_management/users/{0}/auth_factors" |
| 90 | +USER_SESSIONS_PATH = "user_management/users/{0}/sessions" |
| 91 | +SESSIONS_REVOKE_PATH = "user_management/sessions/revoke" |
89 | 92 | EMAIL_VERIFICATION_DETAIL_PATH = "user_management/email_verification/{0}" |
90 | 93 | INVITATION_PATH = "user_management/invitations" |
91 | 94 | INVITATION_DETAIL_PATH = "user_management/invitations/{0}" |
|
109 | 112 | Invitation, InvitationsListFilters, ListMetadata |
110 | 113 | ] |
111 | 114 |
|
| 115 | +from workos.types.user_management.list_filters import SessionsListFilters |
| 116 | + |
| 117 | +SessionsListResource = WorkOSListResource[ |
| 118 | + UserManagementSession, SessionsListFilters, ListMetadata |
| 119 | +] |
| 120 | + |
112 | 121 |
|
113 | 122 | class UserManagementModule(Protocol): |
114 | 123 | """Offers methods for using the WorkOS User Management API.""" |
@@ -720,6 +729,20 @@ def verify_email(self, *, user_id: str, code: str) -> SyncOrAsync[User]: |
720 | 729 | """ |
721 | 730 | ... |
722 | 731 |
|
| 732 | + def list_sessions( |
| 733 | + self, |
| 734 | + *, |
| 735 | + user_id: str, |
| 736 | + limit: Optional[int] = None, |
| 737 | + before: Optional[str] = None, |
| 738 | + after: Optional[str] = None, |
| 739 | + order: Optional[PaginationOrder] = "desc", |
| 740 | + ) -> SyncOrAsync["SessionsListResource"]: ... |
| 741 | + |
| 742 | + def revoke_session( |
| 743 | + self, *, session_id: str |
| 744 | + ) -> SyncOrAsync[UserManagementSession]: ... |
| 745 | + |
723 | 746 | def get_magic_auth(self, magic_auth_id: str) -> SyncOrAsync[MagicAuth]: |
724 | 747 | """Get the details of a Magic Auth object. |
725 | 748 |
|
@@ -1377,6 +1400,54 @@ def create_magic_auth( |
1377 | 1400 |
|
1378 | 1401 | return MagicAuth.model_validate(response) |
1379 | 1402 |
|
| 1403 | + def list_sessions( |
| 1404 | + self, |
| 1405 | + *, |
| 1406 | + user_id: str, |
| 1407 | + limit: Optional[int] = DEFAULT_LIST_RESPONSE_LIMIT, |
| 1408 | + before: Optional[str] = None, |
| 1409 | + after: Optional[str] = None, |
| 1410 | + order: Optional[PaginationOrder] = "desc", |
| 1411 | + ) -> "SessionsListResource": |
| 1412 | + limit_value: int = limit if limit is not None else DEFAULT_LIST_RESPONSE_LIMIT |
| 1413 | + |
| 1414 | + params: ListArgs = { |
| 1415 | + "limit": limit_value, |
| 1416 | + "before": before, |
| 1417 | + "after": after, |
| 1418 | + "order": order, |
| 1419 | + } |
| 1420 | + |
| 1421 | + response = self._http_client.request( |
| 1422 | + USER_SESSIONS_PATH.format(user_id), |
| 1423 | + method=REQUEST_METHOD_GET, |
| 1424 | + params=params, |
| 1425 | + ) |
| 1426 | + |
| 1427 | + list_args: SessionsListFilters = { |
| 1428 | + "limit": limit_value, |
| 1429 | + "before": before, |
| 1430 | + "after": after, |
| 1431 | + "user_id": user_id, |
| 1432 | + } |
| 1433 | + if order is not None: |
| 1434 | + list_args["order"] = order |
| 1435 | + |
| 1436 | + return SessionsListResource( |
| 1437 | + list_method=self.list_sessions, |
| 1438 | + list_args=list_args, |
| 1439 | + **ListPage[UserManagementSession](**response).model_dump(), |
| 1440 | + ) |
| 1441 | + |
| 1442 | + def revoke_session(self, *, session_id: str) -> UserManagementSession: |
| 1443 | + json = {"session_id": session_id} |
| 1444 | + |
| 1445 | + response = self._http_client.request( |
| 1446 | + SESSIONS_REVOKE_PATH, method=REQUEST_METHOD_POST, json=json |
| 1447 | + ) |
| 1448 | + |
| 1449 | + return UserManagementSession.model_validate(response) |
| 1450 | + |
1380 | 1451 | def enroll_auth_factor( |
1381 | 1452 | self, |
1382 | 1453 | *, |
@@ -2033,6 +2104,54 @@ async def create_magic_auth( |
2033 | 2104 |
|
2034 | 2105 | return MagicAuth.model_validate(response) |
2035 | 2106 |
|
| 2107 | + async def list_sessions( |
| 2108 | + self, |
| 2109 | + *, |
| 2110 | + user_id: str, |
| 2111 | + limit: Optional[int] = DEFAULT_LIST_RESPONSE_LIMIT, |
| 2112 | + before: Optional[str] = None, |
| 2113 | + after: Optional[str] = None, |
| 2114 | + order: Optional[PaginationOrder] = "desc", |
| 2115 | + ) -> "SessionsListResource": |
| 2116 | + limit_value: int = limit if limit is not None else DEFAULT_LIST_RESPONSE_LIMIT |
| 2117 | + |
| 2118 | + params: ListArgs = { |
| 2119 | + "limit": limit_value, |
| 2120 | + "before": before, |
| 2121 | + "after": after, |
| 2122 | + "order": order, |
| 2123 | + } |
| 2124 | + |
| 2125 | + response = await self._http_client.request( |
| 2126 | + USER_SESSIONS_PATH.format(user_id), |
| 2127 | + method=REQUEST_METHOD_GET, |
| 2128 | + params=params, |
| 2129 | + ) |
| 2130 | + |
| 2131 | + list_args: SessionsListFilters = { |
| 2132 | + "limit": limit_value, |
| 2133 | + "before": before, |
| 2134 | + "after": after, |
| 2135 | + "user_id": user_id, |
| 2136 | + } |
| 2137 | + if order is not None: |
| 2138 | + list_args["order"] = order |
| 2139 | + |
| 2140 | + return SessionsListResource( |
| 2141 | + list_method=self.list_sessions, |
| 2142 | + list_args=list_args, |
| 2143 | + **ListPage[UserManagementSession](**response).model_dump(), |
| 2144 | + ) |
| 2145 | + |
| 2146 | + async def revoke_session(self, *, session_id: str) -> UserManagementSession: |
| 2147 | + json = {"session_id": session_id} |
| 2148 | + |
| 2149 | + response = await self._http_client.request( |
| 2150 | + SESSIONS_REVOKE_PATH, method=REQUEST_METHOD_POST, json=json |
| 2151 | + ) |
| 2152 | + |
| 2153 | + return UserManagementSession.model_validate(response) |
| 2154 | + |
2036 | 2155 | async def enroll_auth_factor( |
2037 | 2156 | self, |
2038 | 2157 | *, |
|
0 commit comments