syntax = "v1" type ( MemberMeData { TenantID string `json:"tenant_id"` UID string `json:"uid"` ZitadelEmail string `json:"zitadel_email,omitempty"` DisplayName string `json:"display_name,omitempty"` Avatar string `json:"avatar,omitempty"` Phone string `json:"phone,omitempty"` Language string `json:"language,omitempty"` Currency string `json:"currency,omitempty"` Status string `json:"status"` Origin string `json:"origin"` BusinessEmail string `json:"business_email,omitempty"` BusinessEmailVerified bool `json:"business_email_verified"` BusinessPhone string `json:"business_phone,omitempty"` BusinessPhoneVerified bool `json:"business_phone_verified"` TOTPEnrolled bool `json:"totp_enrolled"` CreateAt int64 `json:"create_at"` UpdateAt int64 `json:"update_at"` } UpdateMemberMeReq { DisplayName string `json:"display_name,optional"` Avatar string `json:"avatar,optional"` Language string `json:"language,optional"` Currency string `json:"currency,optional"` Phone string `json:"phone,optional"` } VerificationStartReq { Target string `json:"target"` } VerificationStartData { ChallengeID string `json:"challenge_id"` ExpiresIn int `json:"expires_in"` } VerificationConfirmReq { ChallengeID string `json:"challenge_id"` Code string `json:"code"` } TOTPStatusData { Enrolled bool `json:"enrolled"` EnrolledAt int64 `json:"enrolled_at,omitempty"` BackupCodesRemaining int `json:"backup_codes_remaining"` Digits int `json:"digits,omitempty"` PeriodSeconds int `json:"period_seconds,omitempty"` } TOTPEnrollStartData { OtpauthURL string `json:"otpauth_url"` Issuer string `json:"issuer"` Account string `json:"account"` Digits int `json:"digits"` PeriodSec int `json:"period_seconds"` ExpiresIn int `json:"expires_in"` } TOTPEnrollConfirmReq { Code string `json:"code"` } TOTPEnrollConfirmData { BackupCodes []string `json:"backup_codes"` } TOTPVerifyReq { Code string `json:"code"` } TOTPBackupCodesData { BackupCodes []string `json:"backup_codes"` } ) @server( group: member prefix: /api/v1/members ) service gateway { @doc "取得當前會員 profile(dev:Header X-Tenant-ID + X-UID)" @handler getMemberMe get /me returns (MemberMeData) @doc "更新當前會員 profile" @handler updateMemberMe patch /me (UpdateMemberMeReq) returns (MemberMeData) @doc "開始業務 email 驗證" @handler startEmailVerification post /me/verifications/email/start (VerificationStartReq) returns (VerificationStartData) @doc "確認業務 email 驗證" @handler confirmEmailVerification post /me/verifications/email/confirm (VerificationConfirmReq) @doc "開始業務 phone 驗證" @handler startPhoneVerification post /me/verifications/phone/start (VerificationStartReq) returns (VerificationStartData) @doc "確認業務 phone 驗證" @handler confirmPhoneVerification post /me/verifications/phone/confirm (VerificationConfirmReq) @doc "TOTP 狀態" @handler getTOTPStatus get /me/totp returns (TOTPStatusData) @doc "開始 TOTP 綁定" @handler startTOTPEnroll post /me/totp/enroll-start returns (TOTPEnrollStartData) @doc "確認 TOTP 綁定" @handler confirmTOTPEnroll post /me/totp/enroll-confirm (TOTPEnrollConfirmReq) returns (TOTPEnrollConfirmData) @doc "驗證 TOTP(step-up 測試)" @handler verifyTOTP post /me/totp/verify (TOTPVerifyReq) @doc "重產 TOTP 備援碼" @handler regenerateTOTPBackupCodes post /me/totp/backup-codes returns (TOTPBackupCodesData) @doc "解除 TOTP 綁定" @handler disableTOTP delete /me/totp }