121121from .webhooks ._resource import Webhooks , AsyncWebhooks
122122from .widgets ._resource import Widgets , AsyncWidgets
123123from .audit_logs ._resource import AuditLogs , AsyncAuditLogs
124+ from .passwordless import AsyncPasswordless , Passwordless
124125from .session import AsyncSession , Session
126+ from .vault import AsyncVault , Vault
125127
126128try :
127129 from importlib .metadata import version as _pkg_version
@@ -147,6 +149,17 @@ def __init__(self, client: "WorkOSClient") -> None:
147149 def challenges (self ) -> MultiFactorAuthChallenges :
148150 return MultiFactorAuthChallenges (self ._client )
149151
152+ def verify_challenge (
153+ self ,
154+ * ,
155+ authentication_challenge_id : str ,
156+ code : str ,
157+ request_options : Optional [RequestOptions ] = None ,
158+ ) -> Any :
159+ return self .challenges .verify (
160+ authentication_challenge_id , code = code , request_options = request_options
161+ )
162+
150163
151164class FeatureFlagsNamespace (FeatureFlags ):
152165 """FeatureFlags resources."""
@@ -259,6 +272,17 @@ def __init__(self, client: "AsyncWorkOSClient") -> None:
259272 def challenges (self ) -> AsyncMultiFactorAuthChallenges :
260273 return AsyncMultiFactorAuthChallenges (self ._client )
261274
275+ async def verify_challenge (
276+ self ,
277+ * ,
278+ authentication_challenge_id : str ,
279+ code : str ,
280+ request_options : Optional [RequestOptions ] = None ,
281+ ) -> Any :
282+ return await self .challenges .verify (
283+ authentication_challenge_id , code = code , request_options = request_options
284+ )
285+
262286
263287class AsyncFeatureFlagsNamespace (AsyncFeatureFlags ):
264288 """FeatureFlags resources (async)."""
@@ -513,14 +537,25 @@ def _raise_error(response: httpx.Response) -> None:
513537 request = response .request
514538 request_url = str (request .url ) if request is not None else None
515539 request_method = request .method if request is not None else None
540+ response_json : Optional [Dict [str , Any ]] = None
516541 try :
517- body : Dict [str , Any ] = response .json ()
518- message : str = str (body .get ("message" , response .text ))
519- code : Optional [str ] = str (body ["code" ]) if "code" in body else None
520- param = cast (Optional [str ], body .get ("param" ))
542+ response_json = cast (Dict [str , Any ], response .json ())
543+ message : str = str (response_json .get ("message" , response .text ))
544+ error = cast (Optional [str ], response_json .get ("error" ))
545+ errors = response_json .get ("errors" )
546+ code : Optional [str ] = (
547+ str (response_json ["code" ]) if "code" in response_json else None
548+ )
549+ error_description = cast (
550+ Optional [str ], response_json .get ("error_description" )
551+ )
552+ param = cast (Optional [str ], response_json .get ("param" ))
521553 except Exception :
522554 message = response .text
555+ error = None
556+ errors = None
523557 code = None
558+ error_description = None
524559 param = None
525560
526561 error_class = STATUS_CODE_TO_EXCEPTION .get (response .status_code )
@@ -535,6 +570,11 @@ def _raise_error(response: httpx.Response) -> None:
535570 request_id = request_id ,
536571 code = code ,
537572 param = param ,
573+ response = response ,
574+ response_json = response_json ,
575+ error = error ,
576+ errors = errors ,
577+ error_description = error_description ,
538578 raw_body = raw_body ,
539579 request_url = request_url ,
540580 request_method = request_method ,
@@ -544,6 +584,11 @@ def _raise_error(response: httpx.Response) -> None:
544584 request_id = request_id ,
545585 code = code ,
546586 param = param ,
587+ response = response ,
588+ response_json = response_json ,
589+ error = error ,
590+ errors = errors ,
591+ error_description = error_description ,
547592 raw_body = raw_body ,
548593 request_url = request_url ,
549594 request_method = request_method ,
@@ -556,6 +601,11 @@ def _raise_error(response: httpx.Response) -> None:
556601 request_id = request_id ,
557602 code = code ,
558603 param = param ,
604+ response = response ,
605+ response_json = response_json ,
606+ error = error ,
607+ errors = errors ,
608+ error_description = error_description ,
559609 raw_body = raw_body ,
560610 request_url = request_url ,
561611 request_method = request_method ,
@@ -567,6 +617,11 @@ def _raise_error(response: httpx.Response) -> None:
567617 request_id = request_id ,
568618 code = code ,
569619 param = param ,
620+ response = response ,
621+ response_json = response_json ,
622+ error = error ,
623+ errors = errors ,
624+ error_description = error_description ,
570625 raw_body = raw_body ,
571626 request_url = request_url ,
572627 request_method = request_method ,
@@ -717,6 +772,18 @@ def user_management(self) -> UserManagementNamespace:
717772 def user_management_users (self ) -> UserManagementUsersNamespace :
718773 return UserManagementUsersNamespace (self )
719774
775+ @functools .cached_property
776+ def mfa (self ) -> Any :
777+ return self .multi_factor_auth
778+
779+ @functools .cached_property
780+ def passwordless (self ) -> Passwordless :
781+ return Passwordless (self )
782+
783+ @functools .cached_property
784+ def vault (self ) -> Vault :
785+ return Vault (self )
786+
720787 @overload
721788 def request (
722789 self ,
@@ -984,6 +1051,18 @@ def user_management(self) -> AsyncUserManagementNamespace:
9841051 def user_management_users (self ) -> AsyncUserManagementUsersNamespace :
9851052 return AsyncUserManagementUsersNamespace (self )
9861053
1054+ @functools .cached_property
1055+ def mfa (self ) -> Any :
1056+ return self .multi_factor_auth
1057+
1058+ @functools .cached_property
1059+ def passwordless (self ) -> AsyncPasswordless :
1060+ return AsyncPasswordless (self )
1061+
1062+ @functools .cached_property
1063+ def vault (self ) -> AsyncVault :
1064+ return AsyncVault (self )
1065+
9871066 @overload
9881067 async def request (
9891068 self ,
0 commit comments