1use std::collections::HashMap;
2
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5use simd_json::OwnedValue;
6use typed_builder::TypedBuilder;
7
8pub type UserMetadata = OwnedValue;
9pub type AppMetadata = OwnedValue;
10
11#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
13pub struct LoginCredentials {
14 #[builder(setter(strip_option), default)]
15 pub email: Option<String>,
16 #[builder(setter(strip_option), default)]
17 pub password: Option<String>,
18 #[builder(setter(strip_option), default)]
19 pub phone: Option<String>,
20}
21
22#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
24pub struct TokenRequestBody {
25 #[builder(default)]
26 pub email: Option<String>,
27 #[builder(default)]
28 pub phone: Option<String>,
29 #[builder(default)]
30 pub password: Option<String>,
31 #[builder(setter(strip_option), default)]
32 pub refresh_token: Option<String>,
33 #[builder(setter(strip_option), default)]
34 pub grant_type: Option<String>,
35 #[builder(setter(strip_option), default)]
36 pub gotrue_meta_security: Option<GoTrueMetaSecurity>,
37 #[builder(setter(strip_option), default)]
38 pub code: Option<String>,
39 #[builder(setter(strip_option), default)]
40 pub redirect_to: Option<String>,
41 #[builder(setter(strip_option), default)]
42 pub scope: Option<String>,
43 #[builder(setter(strip_option), default)]
44 pub client_id: Option<String>,
45 #[builder(setter(strip_option), default)]
46 pub client_secret: Option<String>,
47 #[builder(setter(strip_option), default)]
48 pub id_token: Option<String>,
49 #[builder(setter(strip_option), default)]
50 pub nonce: Option<String>,
51 #[builder(setter(strip_option), default)]
52 pub invite_token: Option<String>,
53 #[builder(setter(strip_option), default)]
54 pub provider_token: Option<String>,
55 #[builder(setter(strip_option), default)]
56 pub code_verifier: Option<String>,
57}
58
59#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
61pub struct SignupPayload {
62 #[builder(setter(strip_option), default)]
63 pub email: Option<String>,
64 #[builder(setter(strip_option), default)]
65 pub password: Option<String>,
66 #[builder(setter(strip_option), default)]
67 pub phone: Option<String>,
68 #[builder(setter(strip_option), default)]
69 pub data: Option<UserMetadata>,
70 #[builder(setter(strip_option), default)]
71 pub gotrue_meta_security: Option<GoTrueMetaSecurity>,
72 #[builder(setter(strip_option), default)]
73 pub code_challenge: Option<String>,
74 #[builder(setter(strip_option), default)]
75 pub code_challenge_method: Option<String>,
76}
77
78pub type SignupResponse = AccessTokenResponseSchema;
80
81#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
83pub struct ResendResponse {
84 #[builder(setter(strip_option), default)]
86 pub message_id: Option<String>,
87}
88
89#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
91pub struct OtpResponse {
92 #[builder(setter(strip_option), default)]
94 pub message_id: Option<String>,
95}
96
97#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
99pub struct FactorsResponse {
100 pub id: String,
101 #[serde(rename = "type")]
102 pub factor_type: MFAFactorType,
103 #[builder(setter(strip_option), default)]
104 pub totp: Option<TotpDetails>,
105 #[builder(setter(strip_option), default)]
106 pub phone: Option<String>,
107}
108
109#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
111pub struct TotpDetails {
112 #[builder(setter(strip_option), default)]
113 pub qr_code: Option<String>,
114 #[builder(setter(strip_option), default)]
115 pub secret: Option<String>,
116 #[builder(setter(strip_option), default)]
117 pub uri: Option<String>,
118}
119
120#[derive(Debug, Serialize, Deserialize, Clone)]
122#[serde(untagged)]
123pub enum ChallengeResponse {
124 TOTPPhone(Box<TOTPPhoneChallengeResponse>),
125 WebAuthn(Box<WebAuthnChallengeResponse>),
126}
127
128#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
130pub struct FactorDeleteResponse {
131 pub id: String,
132}
133
134#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
136pub struct SsoResponse {
137 pub url: String,
138}
139
140#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
142pub struct AdminUsersResponse {
143 #[builder(setter(strip_option), default)]
144 pub aud: Option<String>, pub users: Vec<UserSchema>,
146}
147
148#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
150pub struct MFAFactorUpdateData {
151 #[builder(setter(strip_option), default)]
152 pub friendly_name: Option<String>,
153 #[builder(setter(strip_option), default)]
154 pub status: Option<MFAFactorStatus>,
155 }
157
158#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
160pub struct SsoProvidersResponse {
161 pub items: Vec<SSOProviderSchema>,
162}
163
164#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
166pub struct GoTrueMetaSecurity {
167 #[serde(rename = "captcha_token")]
169 #[builder(setter(strip_option), default)]
170 pub captcha_token: Option<String>,
171}
172
173#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder, thiserror::Error)]
175pub struct ErrorSchema {
176 #[serde(rename = "error")]
186 #[builder(setter(strip_option), default)]
187 pub error: Option<String>,
188
189 #[serde(rename = "error_description")]
192 #[builder(setter(strip_option), default)]
193 pub error_description: Option<String>,
194
195 #[serde(rename = "code")]
197 #[builder(setter(strip_option), default)]
198 pub code: Option<i32>,
199
200 #[serde(rename = "msg")]
203 #[builder(setter(strip_option), default)]
204 pub msg: Option<String>,
205
206 #[serde(rename = "weak_password")]
209 #[builder(setter(strip_option), default)]
210 pub weak_password: Option<WeakPassword>,
211}
212
213impl core::fmt::Display for ErrorSchema {
214 fn fmt(&self, fmt: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
215 if let Some(ref error) = self.error {
217 write!(fmt, "Error: {error}")?;
218 }
219
220 if let Some(ref description) = self.error_description {
222 if self.error.is_some() {
223 write!(fmt, " - Description: {description}")?;
224 } else {
225 write!(fmt, "Description: {description}")?;
226 }
227 }
228
229 if let Some(code) = self.code {
231 write!(fmt, " (HTTP Code: {code})")?;
232 }
233
234 if let Some(ref msg) = self.msg {
236 write!(fmt, ". Message: {msg}")?;
237 }
238
239 if let Some(ref weak_password) = self.weak_password {
241 write!(fmt, ". Weak Password: {weak_password}")?;
242 }
243
244 Ok(())
245 }
246}
247
248#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
250pub struct WeakPassword {
251 #[serde(rename = "reasons")]
253 pub reasons: Vec<WeakPasswordReason>,
254}
255
256#[derive(Debug, Serialize, Deserialize, Clone)]
258#[serde(rename_all = "lowercase")]
259pub enum WeakPasswordReason {
260 Length,
261 Characters,
262 Pwned,
263}
264
265impl core::fmt::Display for WeakPassword {
266 fn fmt(&self, fmt: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
267 let reasons = self
268 .reasons
269 .iter()
270 .map(|reason| format!("{reason:?}"))
271 .collect::<Vec<_>>()
272 .join(", ");
273 write!(fmt, "reasons: [{reasons}]")
274 }
275}
276
277#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
279pub struct UserSchema {
280 #[serde(rename = "id")]
282 #[builder(setter(strip_option), default)]
283 pub id: Option<String>,
284
285 #[serde(rename = "aud")]
287 #[builder(setter(strip_option), default)]
288 pub aud: Option<String>,
289
290 #[serde(rename = "role")]
292 #[builder(setter(strip_option), default)]
293 pub role: Option<String>,
294
295 #[serde(rename = "email")]
297 #[builder(setter(strip_option), default)]
298 pub email: Option<String>,
299
300 #[serde(rename = "email_confirmed_at")]
302 #[builder(setter(strip_option), default)]
303 pub email_confirmed_at: Option<DateTime<Utc>>,
304
305 #[serde(rename = "phone")]
307 #[builder(setter(strip_option), default)]
308 pub phone: Option<String>,
309
310 #[serde(rename = "phone_confirmed_at")]
312 #[builder(setter(strip_option), default)]
313 pub phone_confirmed_at: Option<DateTime<Utc>>,
314
315 #[serde(rename = "confirmation_sent_at")]
317 #[builder(setter(strip_option), default)]
318 pub confirmation_sent_at: Option<DateTime<Utc>>,
319
320 #[serde(rename = "confirmed_at")]
322 #[builder(setter(strip_option), default)]
323 pub confirmed_at: Option<DateTime<Utc>>,
324
325 #[serde(rename = "recovery_sent_at")]
327 #[builder(setter(strip_option), default)]
328 pub recovery_sent_at: Option<DateTime<Utc>>,
329
330 #[serde(rename = "new_email")]
332 #[builder(setter(strip_option), default)]
333 pub new_email: Option<String>,
334
335 #[serde(rename = "email_change_sent_at")]
337 #[builder(setter(strip_option), default)]
338 pub email_change_sent_at: Option<DateTime<Utc>>,
339
340 #[serde(rename = "new_phone")]
342 #[builder(setter(strip_option), default)]
343 pub new_phone: Option<String>,
344
345 #[serde(rename = "phone_change_sent_at")]
347 #[builder(setter(strip_option), default)]
348 pub phone_change_sent_at: Option<DateTime<Utc>>,
349
350 #[serde(rename = "reauthentication_sent_at")]
352 #[builder(setter(strip_option), default)]
353 pub reauthentication_sent_at: Option<DateTime<Utc>>,
354
355 #[serde(rename = "last_sign_in_at")]
357 #[builder(setter(strip_option), default)]
358 pub last_sign_in_at: Option<DateTime<Utc>>,
359
360 #[serde(rename = "app_metadata")]
362 #[builder(setter(strip_option), default)]
363 pub app_metadata: Option<OwnedValue>,
364
365 #[serde(rename = "user_metadata")]
367 #[builder(setter(strip_option), default)]
368 pub user_metadata: Option<OwnedValue>,
369
370 #[serde(rename = "factors")]
372 #[builder(setter(strip_option), default)]
373 pub factors: Option<Vec<MFAFactorSchema>>,
374
375 #[serde(rename = "identities")]
377 #[builder(setter(strip_option), default)]
378 pub identities: Option<Vec<IdentitySchema>>,
379
380 #[serde(rename = "banned_until")]
382 #[builder(setter(strip_option), default)]
383 pub banned_until: Option<DateTime<Utc>>,
384
385 #[serde(rename = "created_at")]
387 #[builder(setter(strip_option), default)]
388 pub created_at: Option<DateTime<Utc>>,
389
390 #[serde(rename = "updated_at")]
392 #[builder(setter(strip_option), default)]
393 pub updated_at: Option<DateTime<Utc>>,
394
395 #[serde(rename = "deleted_at")]
397 #[builder(setter(strip_option), default)]
398 pub deleted_at: Option<DateTime<Utc>>,
399
400 #[serde(rename = "is_anonymous")]
402 #[builder(setter(strip_option), default)]
403 pub is_anonymous: Option<bool>,
404}
405
406#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
408pub struct SAMLAttributeMappingSchema {
409 #[serde(rename = "keys")]
411 #[builder(setter(strip_option), default)]
412 pub keys: Option<HashMap<String, SAMLAttributeMappingKey>>,
413}
414
415#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
417pub struct SAMLAttributeMappingKey {
418 #[serde(rename = "name")]
419 #[builder(setter(strip_option), default)]
420 pub name: Option<String>,
421 #[serde(rename = "names")]
422 #[builder(setter(strip_option), default)]
423 pub names: Option<Vec<String>>,
424 #[serde(rename = "default")]
425 #[builder(setter(strip_option), default)]
426 pub default: Option<OwnedValue>,
427}
428
429#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
431pub struct SSOProviderSchema {
432 #[serde(rename = "id")]
434 #[builder(setter(strip_option), default)]
435 pub id: Option<String>,
436
437 #[serde(rename = "sso_domains")]
439 #[builder(setter(strip_option), default)]
440 pub sso_domains: Option<Vec<SSODomain>>,
441
442 #[serde(rename = "saml")]
444 #[builder(setter(strip_option), default)]
445 pub saml: Option<SAMLConfiguration>,
446}
447
448#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
450pub struct SSODomain {
451 #[serde(rename = "domain")]
453 #[builder(setter(strip_option), default)]
454 pub domain: Option<String>,
455}
456
457#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
459pub struct SAMLConfiguration {
460 #[serde(rename = "entity_id")]
462 #[builder(setter(strip_option), default)]
463 pub entity_id: Option<String>,
464
465 #[serde(rename = "metadata_xml")]
467 #[builder(setter(strip_option), default)]
468 pub metadata_xml: Option<String>,
469
470 #[serde(rename = "metadata_url")]
472 #[builder(setter(strip_option), default)]
473 pub metadata_url: Option<String>,
474
475 #[serde(rename = "attribute_mapping")]
477 #[builder(setter(strip_option), default)]
478 pub attribute_mapping: Option<SAMLAttributeMappingSchema>,
479}
480
481#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
483pub struct AccessTokenResponseSchema {
484 #[serde(rename = "access_token")]
486 #[builder(setter(strip_option), default)]
487 pub access_token: Option<String>,
488
489 #[serde(rename = "refresh_token")]
491 #[builder(setter(strip_option), default)]
492 pub refresh_token: Option<String>,
493
494 #[serde(rename = "token_type")]
496 #[builder(setter(strip_option), default)]
497 pub token_type: Option<String>,
498
499 #[serde(rename = "expires_in")]
501 #[builder(setter(strip_option), default)]
502 pub expires_in: Option<i64>,
503
504 #[serde(rename = "expires_at")]
506 #[builder(setter(strip_option), default)]
507 pub expires_at: Option<i64>,
508
509 #[serde(rename = "weak_password")]
511 #[builder(setter(strip_option), default)]
512 pub weak_password: Option<WeakPasswordResponse>,
513
514 #[serde(rename = "user")]
516 #[builder(setter(strip_option), default)]
517 pub user: Option<UserSchema>,
518}
519
520#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
522pub struct WeakPasswordResponse {
523 #[serde(rename = "reasons")]
525 #[builder(setter(strip_option), default)]
526 pub reasons: Option<Vec<WeakPasswordReason>>,
527
528 #[serde(rename = "message")]
530 #[builder(setter(strip_option), default)]
531 pub message: Option<String>,
532}
533
534#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
536pub struct MFAFactorSchema {
537 #[serde(rename = "id")]
539 #[builder(setter(strip_option), default)]
540 pub id: Option<String>,
541
542 #[serde(rename = "status")]
548 #[builder(setter(strip_option), default)]
549 pub status: Option<MFAFactorStatus>,
550
551 #[serde(rename = "friendly_name")]
553 #[builder(setter(strip_option), default)]
554 pub friendly_name: Option<String>,
555
556 #[serde(rename = "factor_type")]
563 #[builder(setter(strip_option), default)]
564 pub factor_type: Option<MFAFactorType>,
565
566 #[serde(rename = "web_authn_credential")]
568 #[builder(setter(strip_option), default)]
569 pub web_authn_credential: Option<OwnedValue>,
570
571 #[serde(rename = "phone")]
573 #[builder(setter(strip_option), default)]
574 pub phone: Option<String>,
575
576 #[serde(rename = "created_at")]
578 #[builder(setter(strip_option), default)]
579 pub created_at: Option<DateTime<Utc>>,
580
581 #[serde(rename = "updated_at")]
583 #[builder(setter(strip_option), default)]
584 pub updated_at: Option<DateTime<Utc>>,
585
586 #[serde(rename = "last_challenged_at")]
588 #[builder(setter(strip_option), default)]
589 pub last_challenged_at: Option<DateTime<Utc>>,
590}
591
592#[derive(Debug, Serialize, Deserialize, Clone)]
594#[serde(rename_all = "lowercase")]
595pub enum MFAFactorStatus {
596 Verified,
597 Unverified,
598}
599
600#[derive(Debug, Serialize, Deserialize, Clone)]
602#[serde(rename_all = "lowercase")]
603pub enum MFAFactorType {
604 Totp,
605 Phone,
606 Webauthn,
607}
608
609#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
611pub struct IdentitySchema {
612 #[serde(rename = "identity_id")]
613 #[builder(setter(strip_option), default)]
614 pub identity_id: Option<String>,
615
616 #[serde(rename = "id")]
617 #[builder(setter(strip_option), default)]
618 pub id: Option<String>,
619
620 #[serde(rename = "user_id")]
621 #[builder(setter(strip_option), default)]
622 pub user_id: Option<String>,
623
624 #[serde(rename = "identity_data")]
625 #[builder(setter(strip_option), default)]
626 pub identity_data: Option<OwnedValue>,
627
628 #[serde(rename = "provider")]
629 #[builder(setter(strip_option), default)]
630 pub provider: Option<String>,
631
632 #[serde(rename = "last_sign_in_at")]
633 #[builder(setter(strip_option), default)]
634 pub last_sign_in_at: Option<DateTime<Utc>>,
635
636 #[serde(rename = "created_at")]
637 #[builder(setter(strip_option), default)]
638 pub created_at: Option<DateTime<Utc>>,
639
640 #[serde(rename = "updated_at")]
641 #[builder(setter(strip_option), default)]
642 pub updated_at: Option<DateTime<Utc>>,
643
644 #[serde(rename = "email")]
645 #[builder(setter(strip_option), default)]
646 pub email: Option<String>,
647}
648
649#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
651pub struct TOTPPhoneChallengeResponse {
652 #[serde(rename = "id")]
654 pub id: String,
655
656 #[serde(rename = "type")]
658 pub challenge_type: TOTPPhoneChallengeType,
659
660 #[serde(rename = "expires_at")]
662 pub expires_at: i64,
663}
664
665#[derive(Debug, Serialize, Deserialize, Clone)]
667#[serde(rename_all = "lowercase")]
668pub enum TOTPPhoneChallengeType {
669 Totp,
670 Phone,
671}
672
673#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
675pub struct WebAuthnChallengeResponse {
676 #[serde(rename = "id")]
678 pub id: String,
679
680 #[serde(rename = "type")]
682 pub challenge_type: WebAuthnChallengeType,
683
684 #[serde(rename = "expires_at")]
686 pub expires_at: i64,
687
688 #[serde(rename = "credential_request_options")]
690 #[builder(setter(strip_option), default)]
691 pub credential_request_options: Option<CredentialRequestOptions>,
692
693 #[serde(rename = "credential_creation_options")]
695 #[builder(setter(strip_option), default)]
696 pub credential_creation_options: Option<CredentialCreationOptions>,
697}
698
699#[derive(Debug, Serialize, Deserialize, Clone)]
701#[serde(rename_all = "lowercase")]
702pub enum WebAuthnChallengeType {
703 Webauthn,
704}
705
706#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
708pub struct CredentialAssertion {
709 #[serde(rename = "challenge")]
711 pub challenge: String,
712
713 #[serde(rename = "rpId")]
715 pub rp_id: String,
716
717 #[serde(rename = "allowCredentials")]
719 pub allow_credentials: Vec<PublicKeyCredentialDescriptor>,
720
721 #[serde(rename = "timeout")]
723 pub timeout: i64,
724
725 #[serde(rename = "userVerification")]
727 #[builder(setter(strip_option), default)]
728 pub user_verification: Option<UserVerificationRequirement>,
729
730 #[serde(rename = "extensions")]
732 #[builder(setter(strip_option), default)]
733 pub extensions: Option<OwnedValue>,
734
735 #[serde(rename = "status")]
737 #[builder(setter(strip_option), default)]
738 pub status: Option<CredentialAssertionStatus>,
739
740 #[serde(rename = "errorMessage")]
742 #[builder(setter(strip_option), default)]
743 pub error_message: Option<String>,
744
745 #[serde(rename = "userHandle")]
747 #[builder(setter(strip_option), default)]
748 pub user_handle: Option<String>,
749
750 #[serde(rename = "authenticatorAttachment")]
752 #[builder(setter(strip_option), default)]
753 pub authenticator_attachment: Option<AuthenticatorAttachment>,
754}
755
756#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
758pub struct CredentialRequestOptions {
759 #[serde(rename = "challenge")]
761 #[builder(setter(strip_option), default)]
762 pub challenge: Option<String>,
763
764 #[serde(rename = "timeout")]
766 #[builder(setter(strip_option), default)]
767 pub timeout: Option<i64>,
768
769 #[serde(rename = "rpId")]
771 #[builder(setter(strip_option), default)]
772 pub rp_id: Option<String>,
773
774 #[serde(rename = "allowCredentials")]
776 #[builder(setter(strip_option), default)]
777 pub allow_credentials: Option<Vec<PublicKeyCredentialDescriptor>>,
778
779 #[serde(rename = "userVerification")]
781 #[builder(setter(strip_option), default)]
782 pub user_verification: Option<UserVerificationRequirement>,
783}
784
785#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
787pub struct CredentialCreationOptions {
788 #[serde(rename = "rp")]
790 #[builder(setter(strip_option), default)]
791 pub rp: Option<RelyingPartyInfo>,
792
793 #[serde(rename = "user")]
795 #[builder(setter(strip_option), default)]
796 pub user: Option<UserInfo>,
797
798 #[serde(rename = "challenge")]
800 #[builder(setter(strip_option), default)]
801 pub challenge: Option<String>,
802
803 #[serde(rename = "pubKeyCredParams")]
805 #[builder(setter(strip_option), default)]
806 pub pub_key_cred_params: Option<Vec<PublicKeyCredentialParameters>>,
807
808 #[serde(rename = "timeout")]
810 #[builder(setter(strip_option), default)]
811 pub timeout: Option<i64>,
812
813 #[serde(rename = "excludeCredentials")]
815 #[builder(setter(strip_option), default)]
816 pub exclude_credentials: Option<Vec<PublicKeyCredentialDescriptor>>,
817
818 #[serde(rename = "authenticatorSelection")]
820 #[builder(setter(strip_option), default)]
821 pub authenticator_selection: Option<AuthenticatorSelectionCriteria>,
822
823 #[serde(rename = "attestation")]
825 #[builder(setter(strip_option), default)]
826 pub attestation: Option<AttestationConveyancePreference>,
827}
828
829#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
831pub struct RelyingPartyInfo {
832 #[serde(rename = "id")]
833 #[builder(setter(strip_option), default)]
834 pub id: Option<String>,
835 #[serde(rename = "name")]
836 #[builder(setter(strip_option), default)]
837 pub name: Option<String>,
838}
839
840#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
842pub struct UserInfo {
843 #[serde(rename = "name")]
844 #[builder(setter(strip_option), default)]
845 pub name: Option<String>,
846 }
848
849#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
851pub struct PublicKeyCredentialParameters {
852 #[serde(rename = "type")]
853 #[builder(setter(strip_option), default)]
854 pub cred_type: Option<String>,
855 #[serde(rename = "alg")]
856 #[builder(setter(strip_option), default)]
857 pub alg: Option<i32>,
858}
859
860#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
862pub struct PublicKeyCredentialDescriptor {
863 #[serde(rename = "type")]
864 #[builder(setter(strip_option), default)]
865 pub cred_type: Option<String>,
866 #[serde(rename = "id")]
867 #[builder(setter(strip_option), default)]
868 pub id: Option<String>,
869 #[serde(rename = "transports")]
870 #[builder(setter(strip_option), default)]
871 pub transports: Option<Vec<String>>,
872}
873
874#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
876pub struct AuthenticatorSelectionCriteria {
877 #[serde(rename = "authenticatorAttachment")]
878 #[builder(setter(strip_option), default)]
879 pub authenticator_attachment: Option<AuthenticatorAttachment>,
880 #[serde(rename = "requireResidentKey")]
881 #[builder(setter(strip_option), default)]
882 pub require_resident_key: Option<bool>,
883 #[serde(rename = "userVerification")]
884 #[builder(setter(strip_option), default)]
885 pub user_verification: Option<UserVerificationRequirement>,
886}
887
888#[derive(Debug, Serialize, Deserialize, Clone)]
890#[serde(rename_all = "lowercase")]
891pub enum UserVerificationRequirement {
892 Required,
893 Preferred,
894 Discouraged,
895}
896
897#[derive(Debug, Serialize, Deserialize, Clone)]
899#[serde(rename_all = "lowercase")]
900pub enum CredentialAssertionStatus {
901 Ok,
902 Failed,
903}
904
905#[derive(Debug, Serialize, Deserialize, Clone)]
907#[serde(rename_all = "kebab-case")]
908pub enum AuthenticatorAttachment {
909 Platform,
910 CrossPlatform,
911}
912
913#[derive(Debug, Serialize, Deserialize, Clone)]
915#[serde(rename_all = "lowercase")]
916pub enum AttestationConveyancePreference {
917 None,
918 Indirect,
919 Direct,
920}
921
922#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
924pub struct AdminGenerateLinkResponse {
925 pub action_link: String,
926 #[builder(setter(strip_option), default)]
927 pub email_otp: Option<String>,
928 #[builder(setter(strip_option), default)]
929 pub hashed_token: Option<String>,
930 #[builder(setter(strip_option), default)]
931 pub verification_type: Option<String>,
932 #[builder(setter(strip_option), default)]
933 pub redirect_to: Option<String>,
934 }
936
937#[expect(clippy::struct_excessive_bools, reason = "this struct is a DTO")]
939#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
940pub struct SettingsResponse {
941 pub disable_signup: bool,
942 pub mailer_autoconfirm: bool,
943 pub phone_autoconfirm: bool,
944 #[builder(setter(strip_option), default)]
945 pub sms_provider: Option<String>,
946 pub saml_enabled: bool,
947 pub external: std::collections::HashMap<String, bool>,
948}
949
950#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
952pub struct AuditLogEntry {
953 pub id: String,
954 pub payload: AuditLogPayload,
955 pub created_at: DateTime<Utc>,
956 #[builder(setter(strip_option), default)]
957 pub ip_address: Option<String>,
958}
959
960#[derive(Debug, Serialize, Deserialize, Clone, TypedBuilder)]
962pub struct AuditLogPayload {
963 #[builder(setter(strip_option), default)]
964 pub actor_id: Option<String>,
965 #[builder(setter(strip_option), default)]
966 pub actor_via_sso: Option<bool>,
967 #[builder(setter(strip_option), default)]
968 pub actor_username: Option<String>,
969 #[builder(setter(strip_option), default)]
970 pub actor_name: Option<String>,
971 #[builder(setter(strip_option), default)]
972 pub traits: Option<OwnedValue>,
973 #[builder(setter(strip_option), default)]
974 pub action: Option<String>,
975 #[builder(setter(strip_option), default)]
976 pub log_type: Option<String>,
977}