supernote.models.auth

Module for authentication API data models.

The following endpoints are supported:

  • /api/official/user/account/login/equipment
  • /api/official/user/account/login/new
  • /api/official/user/query/random/code
  • /api/official/user/sms/login
  • /api/user/sms/validcode/send
  • /api/user/query/token
  • /api/user/validcode/pre-auth
  • /api/user/logout (empty body)
  1"""Module for authentication API data models.
  2
  3The following endpoints are supported:
  4- /api/official/user/account/login/equipment
  5- /api/official/user/account/login/new
  6- /api/official/user/query/random/code
  7- /api/official/user/sms/login
  8- /api/user/sms/validcode/send
  9- /api/user/query/token
 10- /api/user/validcode/pre-auth
 11- /api/user/logout (empty body)
 12"""
 13
 14from dataclasses import dataclass, field
 15
 16from mashumaro import field_options
 17from mashumaro.config import BaseConfig
 18from mashumaro.mixins.json import DataClassJSONMixin
 19
 20from .base import BaseEnum, BaseResponse
 21
 22COUNTRY_CODE = 1
 23BROWSER = "Chrome142"
 24LANGUAGE = "en"
 25
 26
 27class Equipment(BaseEnum):
 28    """Device type."""
 29
 30    WEB = 1
 31    APP = 2
 32    TERMINAL = 3
 33    USER_PLATFORM = 4
 34
 35
 36def _deserialize_int_equipment(value: str) -> Equipment:
 37    return Equipment(int(value))
 38
 39
 40@dataclass
 41class UserCheckDTO(DataClassJSONMixin):
 42    """Request to check user existence."""
 43
 44    email: str
 45    country_code: str = field(metadata=field_options(alias="countryCode"), default="")
 46    telephone: str = ""
 47    user_name: str = field(metadata=field_options(alias="userName"), default="")
 48    domain: str = ""
 49
 50    class Config(BaseConfig):
 51        serialize_by_alias = True
 52
 53
 54class LoginMethod(str, BaseEnum):
 55    """Method for logging in to account."""
 56
 57    PHONE = "1"
 58    EMAIL = "2"
 59    WECHAT = "3"
 60
 61
 62@dataclass
 63class LoginDTO(DataClassJSONMixin):
 64    """Request to login.
 65
 66    This is used by the following POST endpoints:
 67        /api/official/user/account/login/equipment
 68        /api/official/user/account/login/new
 69    """
 70
 71    account: str
 72    """User account (must be an email address)."""
 73
 74    password: str
 75    """Hashed password. Schema: SHA256(MD5(pwd) + randomCode)) or MD5(pwd + randomCode)."""
 76
 77    timestamp: str
 78    """Client timestamp in milliseconds."""
 79
 80    login_method: LoginMethod = field(metadata=field_options(alias="loginMethod"))
 81    """Login method."""
 82
 83    language: str = LANGUAGE
 84    """Language code."""
 85
 86    country_code: int | None = field(
 87        metadata=field_options(alias="countryCode"), default=None
 88    )
 89    """Country code."""
 90
 91    browser: str = BROWSER
 92    """Browser name (user agent info)."""
 93
 94    equipment: Equipment = field(
 95        metadata=field_options(deserialize=_deserialize_int_equipment),
 96        default=Equipment.WEB,
 97    )
 98    """Device type."""
 99
100    equipment_no: str | None = field(
101        metadata=field_options(alias="equipmentNo"), default=None
102    )
103    """Device serial number (SN12345678) or other client identifier (WEB)."""
104
105    class Config(BaseConfig):
106        serialize_by_alias = True
107
108
109@dataclass(kw_only=True)
110class LoginVO(BaseResponse):
111    """Response from login endpoints."""
112
113    token: str
114    """JWT Access Token."""
115
116    counts: str
117    """Error count."""
118
119    user_name: str | None = field(
120        metadata=field_options(alias="userName"), default=None
121    )
122    """User nickname."""
123
124    is_bind: str = field(metadata=field_options(alias="isBind"), default="N")
125    """Is account bound."""
126
127    is_bind_equipment: str = field(
128        metadata=field_options(alias="isBindEquipment"), default="N"
129    )
130    """Is device bound (Terminal only)."""
131
132    sold_out_count: int = field(metadata=field_options(alias="soldOutCount"), default=0)
133    """Logout count."""
134
135
136@dataclass
137class RandomCodeDTO(DataClassJSONMixin):
138    """Request to get a random code.
139
140    This is used by the following POST endpoint:
141        /api/official/user/query/random/code
142    """
143
144    account: str
145    """User account (must be an email address)."""
146
147    country_code: int | None = field(
148        metadata=field_options(alias="countryCode"), default=None
149    )
150    """Country code."""
151
152    version: str | None = None
153    """Version."""
154
155    class Config(BaseConfig):
156        serialize_by_alias = True
157
158
159@dataclass(kw_only=True)
160class RandomCodeVO(BaseResponse):
161    """Response from random code endpoint."""
162
163    random_code: str = field(metadata=field_options(alias="randomCode"), default="")
164    """Server-side nonce (salt) used for password hashing."""
165
166    timestamp: str = ""
167    """Client timestamp in milliseconds."""
168
169
170@dataclass
171class QueryTokenDTO(DataClassJSONMixin):
172    """Request to token endpoint.
173
174    This is used by the following POST endpoint:
175        /api/user/query/token
176    """
177
178
179@dataclass(kw_only=True)
180class QueryTokenVO(BaseResponse):
181    """Response from token endpoint."""
182
183    token: str | None = None
184    """JWT Access Token."""
185
186    class Config(BaseConfig):
187        serialize_by_alias = True
188        omit_none = False
189        code_generation_options = ["TO_DICT_ADD_OMIT_NONE_FLAG"]
190
191
192class OSType(str, BaseEnum):
193    """OS Type."""
194
195    WINDOWS = "WINDOWS"
196    MACOS = "MACOS"
197    LINUX = "LINUX"
198    ANDROID = "ANDROID"
199    IOS = "IOS"
200
201
202@dataclass
203class UserVO(DataClassJSONMixin):
204    """User profile VO."""
205
206    user_id: int = field(metadata=field_options(alias="userId"), default=0)
207    user_name: str | None = field(
208        metadata=field_options(alias="userName"), default=None
209    )
210    email: str | None = None
211    phone: str | None = None
212    country_code: str | None = field(
213        metadata=field_options(alias="countryCode"), default=None
214    )
215    total_capacity: str = field(
216        metadata=field_options(alias="totalCapacity"), default="0"
217    )
218    file_server: str = field(metadata=field_options(alias="fileServer"), default="0")
219    avatars_url: str | None = field(
220        metadata=field_options(alias="avatarsUrl"), default=None
221    )
222    birthday: str | None = None
223    sex: str | None = None
224
225    class Config(BaseConfig):
226        serialize_by_alias = True
227        omit_none = True
228        code_generation_options = ["TO_DICT_ADD_OMIT_NONE_FLAG"]
229
230
231@dataclass
232class SmsLoginDTO(DataClassJSONMixin):
233    """Request to login via sms.
234
235    This is used by the following POST endpoint:
236        /api/user/sms/login
237    """
238
239    valid_code: str = field(metadata=field_options(alias="validCode"))
240    """SMS/Email verification code."""
241
242    valid_code_key: str = field(metadata=field_options(alias="validCodeKey"))
243    """Redis session key for the code (e.g., '{email}_validCode')."""
244
245    country_code: int = field(
246        metadata=field_options(alias="countryCode"), default=COUNTRY_CODE
247    )
248
249    telephone: str | None = None
250    """User phone number."""
251
252    timestamp: str | None = None
253    """Client timestamp in milliseconds."""
254
255    email: str | None = None
256    """User email."""
257
258    browser: str = BROWSER
259    """Browser name (user agent info)."""
260
261    equipment: Equipment = Equipment.WEB
262    """Device type."""
263
264    devices: OSType | None = OSType.WINDOWS
265    """OS Type: WINDOWS, MACOS, LINUX, ANDROID, IOS."""
266
267    class Config(BaseConfig):
268        serialize_by_alias = True
269
270
271@dataclass(kw_only=True)
272class SmsLoginVO(BaseResponse):
273    """Response from access token call."""
274
275    token: str
276
277
278@dataclass
279class UserPreAuthRequest(DataClassJSONMixin):
280    """Request for pre-auth.
281
282    This is used by the following POST endpoint:
283        /api/user/validcode/pre-auth
284    """
285
286    account: str
287
288
289@dataclass
290class UserPreAuthResponse(BaseResponse):
291    """Response from pre-auth."""
292
293    token: str = ""
294
295
296@dataclass
297class SendSmsDTO(DataClassJSONMixin):
298    """Request to send SMS code.
299
300    This is used by the following POST endpoint:
301        /api/user/sms/validcode/send
302    """
303
304    telephone: str
305    """User phone number."""
306
307    timestamp: str
308    """Client timestamp in milliseconds."""
309
310    token: str
311    """JWT Access Token."""
312
313    sign: str
314    """JWT Signature."""
315
316    extend: str | None = None
317    """JWT Extension."""
318
319    nationcode: int = field(
320        metadata=field_options(alias="nationcode"), default=COUNTRY_CODE
321    )
322    """Country code."""
323
324    class Config(BaseConfig):
325        serialize_by_alias = True
326
327
328@dataclass
329class SendSmsVO(BaseResponse):
330    """Response from send SMS."""
331
332    valid_code_key: str = field(
333        metadata=field_options(alias="validCodeKey"), default=""
334    )
335
336
337@dataclass
338class EmailDTO(DataClassJSONMixin):
339    """Request to send email code.
340
341    Used by:
342        /api/user/mail/validcode (POST)
343    """
344
345    email: str
346    """User email."""
347
348    language: str | None = None
349    """Language code."""
350
351    class Config(BaseConfig):
352        serialize_by_alias = True
353
354
355@dataclass
356class ValidCodeDTO(DataClassJSONMixin):
357    """Request to check validation code.
358
359    Used by:
360        /api/user/check/validcode (POST)
361    """
362
363    valid_code_key: str = field(metadata=field_options(alias="validCodeKey"))
364    """Key for the validation code."""
365
366    valid_code: str = field(metadata=field_options(alias="validCode"))
367    """The validation code."""
368
369    class Config(BaseConfig):
370        serialize_by_alias = True
COUNTRY_CODE = 1
BROWSER = 'Chrome142'
LANGUAGE = 'en'
class Equipment(supernote.models.base.BaseEnum):
28class Equipment(BaseEnum):
29    """Device type."""
30
31    WEB = 1
32    APP = 2
33    TERMINAL = 3
34    USER_PLATFORM = 4

Device type.

WEB = <Equipment.WEB: 1>
APP = <Equipment.APP: 2>
TERMINAL = <Equipment.TERMINAL: 3>
USER_PLATFORM = <Equipment.USER_PLATFORM: 4>
@dataclass
class UserCheckDTO(mashumaro.mixins.json.DataClassJSONMixin):
41@dataclass
42class UserCheckDTO(DataClassJSONMixin):
43    """Request to check user existence."""
44
45    email: str
46    country_code: str = field(metadata=field_options(alias="countryCode"), default="")
47    telephone: str = ""
48    user_name: str = field(metadata=field_options(alias="userName"), default="")
49    domain: str = ""
50
51    class Config(BaseConfig):
52        serialize_by_alias = True

Request to check user existence.

UserCheckDTO( email: str, country_code: str = '', telephone: str = '', user_name: str = '', domain: str = '')
email: str
country_code: str = ''
telephone: str = ''
user_name: str = ''
domain: str = ''
def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

class UserCheckDTO.Config(mashumaro.config.BaseConfig):
51    class Config(BaseConfig):
52        serialize_by_alias = True
serialize_by_alias = True
class LoginMethod(builtins.str, supernote.models.base.BaseEnum):
55class LoginMethod(str, BaseEnum):
56    """Method for logging in to account."""
57
58    PHONE = "1"
59    EMAIL = "2"
60    WECHAT = "3"

Method for logging in to account.

PHONE = <LoginMethod.PHONE: '1'>
EMAIL = <LoginMethod.EMAIL: '2'>
WECHAT = <LoginMethod.WECHAT: '3'>
@dataclass
class LoginDTO(mashumaro.mixins.json.DataClassJSONMixin):
 63@dataclass
 64class LoginDTO(DataClassJSONMixin):
 65    """Request to login.
 66
 67    This is used by the following POST endpoints:
 68        /api/official/user/account/login/equipment
 69        /api/official/user/account/login/new
 70    """
 71
 72    account: str
 73    """User account (must be an email address)."""
 74
 75    password: str
 76    """Hashed password. Schema: SHA256(MD5(pwd) + randomCode)) or MD5(pwd + randomCode)."""
 77
 78    timestamp: str
 79    """Client timestamp in milliseconds."""
 80
 81    login_method: LoginMethod = field(metadata=field_options(alias="loginMethod"))
 82    """Login method."""
 83
 84    language: str = LANGUAGE
 85    """Language code."""
 86
 87    country_code: int | None = field(
 88        metadata=field_options(alias="countryCode"), default=None
 89    )
 90    """Country code."""
 91
 92    browser: str = BROWSER
 93    """Browser name (user agent info)."""
 94
 95    equipment: Equipment = field(
 96        metadata=field_options(deserialize=_deserialize_int_equipment),
 97        default=Equipment.WEB,
 98    )
 99    """Device type."""
100
101    equipment_no: str | None = field(
102        metadata=field_options(alias="equipmentNo"), default=None
103    )
104    """Device serial number (SN12345678) or other client identifier (WEB)."""
105
106    class Config(BaseConfig):
107        serialize_by_alias = True

Request to login.

This is used by the following POST endpoints: /api/official/user/account/login/equipment /api/official/user/account/login/new

LoginDTO( account: str, password: str, timestamp: str, login_method: LoginMethod, language: str = 'en', country_code: int | None = None, browser: str = 'Chrome142', equipment: Equipment = <Equipment.WEB: 1>, equipment_no: str | None = None)
account: str

User account (must be an email address).

password: str

Hashed password. Schema: SHA256(MD5(pwd) + randomCode)) or MD5(pwd + randomCode).

timestamp: str

Client timestamp in milliseconds.

login_method: LoginMethod

Login method.

language: str = 'en'

Language code.

country_code: int | None = None

Country code.

browser: str = 'Chrome142'

Browser name (user agent info).

equipment: Equipment = <Equipment.WEB: 1>

Device type.

equipment_no: str | None = None

Device serial number (SN12345678) or other client identifier (WEB).

def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

class LoginDTO.Config(mashumaro.config.BaseConfig):
106    class Config(BaseConfig):
107        serialize_by_alias = True
serialize_by_alias = True
@dataclass(kw_only=True)
class LoginVO(supernote.models.base.BaseResponse):
110@dataclass(kw_only=True)
111class LoginVO(BaseResponse):
112    """Response from login endpoints."""
113
114    token: str
115    """JWT Access Token."""
116
117    counts: str
118    """Error count."""
119
120    user_name: str | None = field(
121        metadata=field_options(alias="userName"), default=None
122    )
123    """User nickname."""
124
125    is_bind: str = field(metadata=field_options(alias="isBind"), default="N")
126    """Is account bound."""
127
128    is_bind_equipment: str = field(
129        metadata=field_options(alias="isBindEquipment"), default="N"
130    )
131    """Is device bound (Terminal only)."""
132
133    sold_out_count: int = field(metadata=field_options(alias="soldOutCount"), default=0)
134    """Logout count."""

Response from login endpoints.

LoginVO( success: bool = True, error_code: str | None = None, error_msg: str | None = None, *, token: str, counts: str, user_name: str | None = None, is_bind: str = 'N', is_bind_equipment: str = 'N', sold_out_count: int = 0)
token: str

JWT Access Token.

counts: str

Error count.

user_name: str | None = None

User nickname.

is_bind: str = 'N'

Is account bound.

is_bind_equipment: str = 'N'

Is device bound (Terminal only).

sold_out_count: int = 0

Logout count.

def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

@dataclass
class RandomCodeDTO(mashumaro.mixins.json.DataClassJSONMixin):
137@dataclass
138class RandomCodeDTO(DataClassJSONMixin):
139    """Request to get a random code.
140
141    This is used by the following POST endpoint:
142        /api/official/user/query/random/code
143    """
144
145    account: str
146    """User account (must be an email address)."""
147
148    country_code: int | None = field(
149        metadata=field_options(alias="countryCode"), default=None
150    )
151    """Country code."""
152
153    version: str | None = None
154    """Version."""
155
156    class Config(BaseConfig):
157        serialize_by_alias = True

Request to get a random code.

This is used by the following POST endpoint: /api/official/user/query/random/code

RandomCodeDTO( account: str, country_code: int | None = None, version: str | None = None)
account: str

User account (must be an email address).

country_code: int | None = None

Country code.

version: str | None = None

Version.

def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

class RandomCodeDTO.Config(mashumaro.config.BaseConfig):
156    class Config(BaseConfig):
157        serialize_by_alias = True
serialize_by_alias = True
@dataclass(kw_only=True)
class RandomCodeVO(supernote.models.base.BaseResponse):
160@dataclass(kw_only=True)
161class RandomCodeVO(BaseResponse):
162    """Response from random code endpoint."""
163
164    random_code: str = field(metadata=field_options(alias="randomCode"), default="")
165    """Server-side nonce (salt) used for password hashing."""
166
167    timestamp: str = ""
168    """Client timestamp in milliseconds."""

Response from random code endpoint.

RandomCodeVO( success: bool = True, error_code: str | None = None, error_msg: str | None = None, *, random_code: str = '', timestamp: str = '')
random_code: str = ''

Server-side nonce (salt) used for password hashing.

timestamp: str = ''

Client timestamp in milliseconds.

def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

@dataclass
class QueryTokenDTO(mashumaro.mixins.json.DataClassJSONMixin):
171@dataclass
172class QueryTokenDTO(DataClassJSONMixin):
173    """Request to token endpoint.
174
175    This is used by the following POST endpoint:
176        /api/user/query/token
177    """

Request to token endpoint.

This is used by the following POST endpoint: /api/user/query/token

def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

@dataclass(kw_only=True)
class QueryTokenVO(supernote.models.base.BaseResponse):
180@dataclass(kw_only=True)
181class QueryTokenVO(BaseResponse):
182    """Response from token endpoint."""
183
184    token: str | None = None
185    """JWT Access Token."""
186
187    class Config(BaseConfig):
188        serialize_by_alias = True
189        omit_none = False
190        code_generation_options = ["TO_DICT_ADD_OMIT_NONE_FLAG"]

Response from token endpoint.

QueryTokenVO( success: bool = True, error_code: str | None = None, error_msg: str | None = None, *, token: str | None = None)
token: str | None = None

JWT Access Token.

def to_dict(self, *, omit_none=False):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

class QueryTokenVO.Config(mashumaro.config.BaseConfig):
187    class Config(BaseConfig):
188        serialize_by_alias = True
189        omit_none = False
190        code_generation_options = ["TO_DICT_ADD_OMIT_NONE_FLAG"]
serialize_by_alias = True
omit_none = False
code_generation_options = ['TO_DICT_ADD_OMIT_NONE_FLAG']
class OSType(builtins.str, supernote.models.base.BaseEnum):
193class OSType(str, BaseEnum):
194    """OS Type."""
195
196    WINDOWS = "WINDOWS"
197    MACOS = "MACOS"
198    LINUX = "LINUX"
199    ANDROID = "ANDROID"
200    IOS = "IOS"

OS Type.

WINDOWS = <OSType.WINDOWS: 'WINDOWS'>
MACOS = <OSType.MACOS: 'MACOS'>
LINUX = <OSType.LINUX: 'LINUX'>
ANDROID = <OSType.ANDROID: 'ANDROID'>
IOS = <OSType.IOS: 'IOS'>
@dataclass
class UserVO(mashumaro.mixins.json.DataClassJSONMixin):
203@dataclass
204class UserVO(DataClassJSONMixin):
205    """User profile VO."""
206
207    user_id: int = field(metadata=field_options(alias="userId"), default=0)
208    user_name: str | None = field(
209        metadata=field_options(alias="userName"), default=None
210    )
211    email: str | None = None
212    phone: str | None = None
213    country_code: str | None = field(
214        metadata=field_options(alias="countryCode"), default=None
215    )
216    total_capacity: str = field(
217        metadata=field_options(alias="totalCapacity"), default="0"
218    )
219    file_server: str = field(metadata=field_options(alias="fileServer"), default="0")
220    avatars_url: str | None = field(
221        metadata=field_options(alias="avatarsUrl"), default=None
222    )
223    birthday: str | None = None
224    sex: str | None = None
225
226    class Config(BaseConfig):
227        serialize_by_alias = True
228        omit_none = True
229        code_generation_options = ["TO_DICT_ADD_OMIT_NONE_FLAG"]

User profile VO.

UserVO( user_id: int = 0, user_name: str | None = None, email: str | None = None, phone: str | None = None, country_code: str | None = None, total_capacity: str = '0', file_server: str = '0', avatars_url: str | None = None, birthday: str | None = None, sex: str | None = None)
user_id: int = 0
user_name: str | None = None
email: str | None = None
phone: str | None = None
country_code: str | None = None
total_capacity: str = '0'
file_server: str = '0'
avatars_url: str | None = None
birthday: str | None = None
sex: str | None = None
def to_dict(self, *, omit_none=True):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

class UserVO.Config(mashumaro.config.BaseConfig):
226    class Config(BaseConfig):
227        serialize_by_alias = True
228        omit_none = True
229        code_generation_options = ["TO_DICT_ADD_OMIT_NONE_FLAG"]
serialize_by_alias = True
omit_none = True
code_generation_options = ['TO_DICT_ADD_OMIT_NONE_FLAG']
@dataclass
class SmsLoginDTO(mashumaro.mixins.json.DataClassJSONMixin):
232@dataclass
233class SmsLoginDTO(DataClassJSONMixin):
234    """Request to login via sms.
235
236    This is used by the following POST endpoint:
237        /api/user/sms/login
238    """
239
240    valid_code: str = field(metadata=field_options(alias="validCode"))
241    """SMS/Email verification code."""
242
243    valid_code_key: str = field(metadata=field_options(alias="validCodeKey"))
244    """Redis session key for the code (e.g., '{email}_validCode')."""
245
246    country_code: int = field(
247        metadata=field_options(alias="countryCode"), default=COUNTRY_CODE
248    )
249
250    telephone: str | None = None
251    """User phone number."""
252
253    timestamp: str | None = None
254    """Client timestamp in milliseconds."""
255
256    email: str | None = None
257    """User email."""
258
259    browser: str = BROWSER
260    """Browser name (user agent info)."""
261
262    equipment: Equipment = Equipment.WEB
263    """Device type."""
264
265    devices: OSType | None = OSType.WINDOWS
266    """OS Type: WINDOWS, MACOS, LINUX, ANDROID, IOS."""
267
268    class Config(BaseConfig):
269        serialize_by_alias = True

Request to login via sms.

This is used by the following POST endpoint: /api/user/sms/login

SmsLoginDTO( valid_code: str, valid_code_key: str, country_code: int = 1, telephone: str | None = None, timestamp: str | None = None, email: str | None = None, browser: str = 'Chrome142', equipment: Equipment = <Equipment.WEB: 1>, devices: OSType | None = <OSType.WINDOWS: 'WINDOWS'>)
valid_code: str

SMS/Email verification code.

valid_code_key: str

Redis session key for the code (e.g., '{email}_validCode').

country_code: int = 1
telephone: str | None = None

User phone number.

timestamp: str | None = None

Client timestamp in milliseconds.

email: str | None = None

User email.

browser: str = 'Chrome142'

Browser name (user agent info).

equipment: Equipment = <Equipment.WEB: 1>

Device type.

devices: OSType | None = <OSType.WINDOWS: 'WINDOWS'>

OS Type: WINDOWS, MACOS, LINUX, ANDROID, IOS.

def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

class SmsLoginDTO.Config(mashumaro.config.BaseConfig):
268    class Config(BaseConfig):
269        serialize_by_alias = True
serialize_by_alias = True
@dataclass(kw_only=True)
class SmsLoginVO(supernote.models.base.BaseResponse):
272@dataclass(kw_only=True)
273class SmsLoginVO(BaseResponse):
274    """Response from access token call."""
275
276    token: str

Response from access token call.

SmsLoginVO( success: bool = True, error_code: str | None = None, error_msg: str | None = None, *, token: str)
token: str
def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

@dataclass
class UserPreAuthRequest(mashumaro.mixins.json.DataClassJSONMixin):
279@dataclass
280class UserPreAuthRequest(DataClassJSONMixin):
281    """Request for pre-auth.
282
283    This is used by the following POST endpoint:
284        /api/user/validcode/pre-auth
285    """
286
287    account: str

Request for pre-auth.

This is used by the following POST endpoint: /api/user/validcode/pre-auth

UserPreAuthRequest(account: str)
account: str
def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

@dataclass
class UserPreAuthResponse(supernote.models.base.BaseResponse):
290@dataclass
291class UserPreAuthResponse(BaseResponse):
292    """Response from pre-auth."""
293
294    token: str = ""

Response from pre-auth.

UserPreAuthResponse( success: bool = True, error_code: str | None = None, error_msg: str | None = None, token: str = '')
token: str = ''
def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

@dataclass
class SendSmsDTO(mashumaro.mixins.json.DataClassJSONMixin):
297@dataclass
298class SendSmsDTO(DataClassJSONMixin):
299    """Request to send SMS code.
300
301    This is used by the following POST endpoint:
302        /api/user/sms/validcode/send
303    """
304
305    telephone: str
306    """User phone number."""
307
308    timestamp: str
309    """Client timestamp in milliseconds."""
310
311    token: str
312    """JWT Access Token."""
313
314    sign: str
315    """JWT Signature."""
316
317    extend: str | None = None
318    """JWT Extension."""
319
320    nationcode: int = field(
321        metadata=field_options(alias="nationcode"), default=COUNTRY_CODE
322    )
323    """Country code."""
324
325    class Config(BaseConfig):
326        serialize_by_alias = True

Request to send SMS code.

This is used by the following POST endpoint: /api/user/sms/validcode/send

SendSmsDTO( telephone: str, timestamp: str, token: str, sign: str, extend: str | None = None, nationcode: int = 1)
telephone: str

User phone number.

timestamp: str

Client timestamp in milliseconds.

token: str

JWT Access Token.

sign: str

JWT Signature.

extend: str | None = None

JWT Extension.

nationcode: int = 1

Country code.

def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

class SendSmsDTO.Config(mashumaro.config.BaseConfig):
325    class Config(BaseConfig):
326        serialize_by_alias = True
serialize_by_alias = True
@dataclass
class SendSmsVO(supernote.models.base.BaseResponse):
329@dataclass
330class SendSmsVO(BaseResponse):
331    """Response from send SMS."""
332
333    valid_code_key: str = field(
334        metadata=field_options(alias="validCodeKey"), default=""
335    )

Response from send SMS.

SendSmsVO( success: bool = True, error_code: str | None = None, error_msg: str | None = None, valid_code_key: str = '')
valid_code_key: str = ''
def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

@dataclass
class EmailDTO(mashumaro.mixins.json.DataClassJSONMixin):
338@dataclass
339class EmailDTO(DataClassJSONMixin):
340    """Request to send email code.
341
342    Used by:
343        /api/user/mail/validcode (POST)
344    """
345
346    email: str
347    """User email."""
348
349    language: str | None = None
350    """Language code."""
351
352    class Config(BaseConfig):
353        serialize_by_alias = True

Request to send email code.

Used by: /api/user/mail/validcode (POST)

EmailDTO(email: str, language: str | None = None)
email: str

User email.

language: str | None = None

Language code.

def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

class EmailDTO.Config(mashumaro.config.BaseConfig):
352    class Config(BaseConfig):
353        serialize_by_alias = True
serialize_by_alias = True
@dataclass
class ValidCodeDTO(mashumaro.mixins.json.DataClassJSONMixin):
356@dataclass
357class ValidCodeDTO(DataClassJSONMixin):
358    """Request to check validation code.
359
360    Used by:
361        /api/user/check/validcode (POST)
362    """
363
364    valid_code_key: str = field(metadata=field_options(alias="validCodeKey"))
365    """Key for the validation code."""
366
367    valid_code: str = field(metadata=field_options(alias="validCode"))
368    """The validation code."""
369
370    class Config(BaseConfig):
371        serialize_by_alias = True

Request to check validation code.

Used by: /api/user/check/validcode (POST)

ValidCodeDTO(valid_code_key: str, valid_code: str)
valid_code_key: str

Key for the validation code.

valid_code: str

The validation code.

def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

class ValidCodeDTO.Config(mashumaro.config.BaseConfig):
370    class Config(BaseConfig):
371        serialize_by_alias = True
serialize_by_alias = True