feat(f6.2): add per-act representative signing and user smtp
Android CI / RC / Android · lint, tests, debug APK, release compile (push) Failing after 1m25s
DH V2 CI / API · typecheck, tests, build (push) Successful in 34s
DH V2 CI / WEB · typecheck, build (push) Successful in 20s
Production dependency audit / API · production dependencies (push) Successful in 9s
Production dependency audit / WEB · production dependencies (push) Successful in 9s
DH V2 CI / Docker / scripts contract (push) Successful in 1m16s

This commit is contained in:
2026-09-14 15:53:55 -03:00
parent 103ecf2fae
commit 7fe59bccd2
46 changed files with 907 additions and 154 deletions
+1
View File
@@ -98,6 +98,7 @@ export interface AdministrativeUser {
createdAt: string;
updatedAt: string;
roles: RoleSummary[];
smtpMode: 'SYSTEM' | 'CUSTOM';
}
export interface Permission { id: string; code: string; description: string }
+67
View File
@@ -0,0 +1,67 @@
import { apiRequest } from './api';
import type { AdministrativeUserProfile } from './userProfileApi';
export type UserSmtpMode = 'SYSTEM' | 'CUSTOM';
export type UserSmtpSecurityMode = 'NONE' | 'STARTTLS' | 'TLS';
export interface UserSmtpCustomSettings {
host: string;
port: number;
securityMode: UserSmtpSecurityMode;
username: string;
hasPassword: boolean;
fromName: string;
fromEmail: string;
enabled: boolean;
updatedAt: string | null;
}
export interface UserSmtpSettings {
mode: UserSmtpMode;
email: string;
generalConfigured: boolean;
custom: UserSmtpCustomSettings | null;
}
export interface UserSmtpSettingsInput {
mode: UserSmtpMode;
host?: string;
port?: number;
securityMode?: UserSmtpSecurityMode;
username?: string | null;
password?: string | null;
fromName?: string | null;
enabled?: boolean;
}
export function getSelfProfile() {
return apiRequest<AdministrativeUserProfile>('/users/self/profile');
}
export function updateSelfProfile(input: {
email: string;
phone?: string | null;
jobTitle?: string | null;
}) {
return apiRequest<AdministrativeUserProfile>('/users/self/profile', {
method: 'PATCH',
body: JSON.stringify(input),
});
}
export function getSelfSmtpSettings() {
return apiRequest<UserSmtpSettings>('/users/self/smtp');
}
export function saveSelfSmtpSettings(input: UserSmtpSettingsInput) {
return apiRequest<UserSmtpSettings>('/users/self/smtp', {
method: 'PUT',
body: JSON.stringify(input),
});
}
export function testSelfSmtpSettings() {
return apiRequest<{ ok: boolean; recipient: string; messageId: string }>('/users/self/smtp/test', {
method: 'POST',
});
}
+1
View File
@@ -21,6 +21,7 @@ export interface UserProfileInput {
export interface CreateUserProfileInput extends UserProfileInput {
username: string;
email: string;
firstName: string;
lastName: string;
password: string;