# DO NOT EDIT THIS FILE! # # This file is generated from the CDP specification. If you need to make # changes, edit the generator and regenerate all of the modules. # # CDP domain: FedCm (experimental) from __future__ import annotations from .util import event_class, T_JSON_DICT from dataclasses import dataclass import enum import typing class LoginState(enum.Enum): ''' Whether this is a sign-up or sign-in action for this account, i.e. whether this account has ever been used to sign in to this RP before. ''' SIGN_IN = "SignIn" SIGN_UP = "SignUp" def to_json(self): return self.value @classmethod def from_json(cls, json): return cls(json) @dataclass class Account: ''' Corresponds to IdentityRequestAccount ''' account_id: str email: str name: str given_name: str picture_url: str idp_config_url: str idp_signin_url: str login_state: LoginState #: These two are only set if the loginState is signUp terms_of_service_url: typing.Optional[str] = None privacy_policy_url: typing.Optional[str] = None def to_json(self): json = dict() json['accountId'] = self.account_id json['email'] = self.email json['name'] = self.name json['givenName'] = self.given_name json['pictureUrl'] = self.picture_url json['idpConfigUrl'] = self.idp_config_url json['idpSigninUrl'] = self.idp_signin_url json['loginState'] = self.login_state.to_json() if self.terms_of_service_url is not None: json['termsOfServiceUrl'] = self.terms_of_service_url if self.privacy_policy_url is not None: json['privacyPolicyUrl'] = self.privacy_policy_url return json @classmethod def from_json(cls, json): return cls( account_id=str(json['accountId']), email=str(json['email']), name=str(json['name']), given_name=str(json['givenName']), picture_url=str(json['pictureUrl']), idp_config_url=str(json['idpConfigUrl']), idp_signin_url=str(json['idpSigninUrl']), login_state=LoginState.from_json(json['loginState']), terms_of_service_url=str(json['termsOfServiceUrl']) if 'termsOfServiceUrl' in json else None, privacy_policy_url=str(json['privacyPolicyUrl']) if 'privacyPolicyUrl' in json else None, ) def enable( disable_rejection_delay: typing.Optional[bool] = None ) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]: ''' :param disable_rejection_delay: *(Optional)* Allows callers to disable the promise rejection delay that would normally happen, if this is unimportant to what's being tested. (step 4 of https://fedidcg.github.io/FedCM/#browser-api-rp-sign-in) ''' params: T_JSON_DICT = dict() if disable_rejection_delay is not None: params['disableRejectionDelay'] = disable_rejection_delay cmd_dict: T_JSON_DICT = { 'method': 'FedCm.enable', 'params': params, } json = yield cmd_dict def disable() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]: cmd_dict: T_JSON_DICT = { 'method': 'FedCm.disable', } json = yield cmd_dict def select_account( dialog_id: str, account_index: int ) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]: ''' :param dialog_id: :param account_index: ''' params: T_JSON_DICT = dict() params['dialogId'] = dialog_id params['accountIndex'] = account_index cmd_dict: T_JSON_DICT = { 'method': 'FedCm.selectAccount', 'params': params, } json = yield cmd_dict def dismiss_dialog( dialog_id: str, trigger_cooldown: typing.Optional[bool] = None ) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]: ''' :param dialog_id: :param trigger_cooldown: *(Optional)* ''' params: T_JSON_DICT = dict() params['dialogId'] = dialog_id if trigger_cooldown is not None: params['triggerCooldown'] = trigger_cooldown cmd_dict: T_JSON_DICT = { 'method': 'FedCm.dismissDialog', 'params': params, } json = yield cmd_dict def reset_cooldown() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]: ''' Resets the cooldown time, if any, to allow the next FedCM call to show a dialog even if one was recently dismissed by the user. ''' cmd_dict: T_JSON_DICT = { 'method': 'FedCm.resetCooldown', } json = yield cmd_dict @event_class('FedCm.dialogShown') @dataclass class DialogShown: dialog_id: str accounts: typing.List[Account] #: These exist primarily so that the caller can verify the #: RP context was used appropriately. title: str subtitle: typing.Optional[str] @classmethod def from_json(cls, json: T_JSON_DICT) -> DialogShown: return cls( dialog_id=str(json['dialogId']), accounts=[Account.from_json(i) for i in json['accounts']], title=str(json['title']), subtitle=str(json['subtitle']) if 'subtitle' in json else None )