feat: advance browser agent integration workflows

This commit is contained in:
go0p
2026-08-06 15:11:35 +08:00
committed by go0p
parent af5a4db694
commit 0c8e1c7b69
215 changed files with 35137 additions and 5442 deletions
+72
View File
@@ -0,0 +1,72 @@
import type { BackgroundRequestHandler } from '../router';
import { ok } from '../response';
import { getState } from '@/platform/storage/state';
import { resolveUserAgent, userAgentHostname } from '@/features/identity/user-agent';
import {
applyUserAgentToSite,
deleteUserAgentProfile,
resetUserAgentForSite,
saveUserAgentProfile,
} from '@/features/identity/user-agent-service';
import { getUserAgentProfiles } from '@/features/identity/user-agent-profiles';
import { appendAuditEvent } from '@/features/diagnostics/audit';
export const handleUserAgentRequest: BackgroundRequestHandler = async (request) => {
switch (request.action) {
case 'ua.catalog': {
const state = await getState();
return ok(getUserAgentProfiles(state.customUserAgentProfiles));
}
case 'ua.resolve': {
const state = await getState();
return ok(resolveUserAgent(
request.payload.url,
state.userAgentAssignments,
state.customUserAgentProfiles,
));
}
case 'ua.profile.save': {
const { profile } = await saveUserAgentProfile(request.payload);
void appendAuditEvent({
category: 'settings',
action: 'ua.profile.save',
outcome: 'success',
summary: profile.name,
});
return ok(profile);
}
case 'ua.profile.delete': {
const state = await deleteUserAgentProfile(request.payload.id);
void appendAuditEvent({
category: 'settings', action: 'ua.profile.delete', outcome: 'success',
});
return ok(state);
}
case 'ua.site.apply': {
const input = request.payload;
const hostname = userAgentHostname(input.url);
const state = await applyUserAgentToSite(input.url, input.profileId);
const profile = getUserAgentProfiles(state.customUserAgentProfiles)
.find((item) => item.id === input.profileId)!;
void appendAuditEvent({
category: 'settings',
action: 'ua.site.apply',
outcome: 'success',
summary: `${hostname} · ${profile.name}`,
});
return ok(state);
}
case 'ua.site.reset': {
const hostname = userAgentHostname(request.payload.url);
const state = await resetUserAgentForSite(request.payload.url);
void appendAuditEvent({
category: 'settings',
action: 'ua.site.reset',
outcome: 'success',
summary: hostname,
});
return ok(state);
}
default: return undefined;
}
};