836 lines
22 KiB
TypeScript
836 lines
22 KiB
TypeScript
import { PERMS } from "@/lib/permission-slugs";
|
|
import type { MigrationEntry } from "./types";
|
|
|
|
type PlannedPeopleEntry = Omit<
|
|
MigrationEntry,
|
|
"targetDomain" | "requiredTests" | "parityEvidence" | "status" | "notes"
|
|
> & {
|
|
requiredTests?: MigrationEntry["requiredTests"];
|
|
notes?: MigrationEntry["notes"];
|
|
};
|
|
|
|
function plannedPeopleEntry(entry: PlannedPeopleEntry): MigrationEntry {
|
|
return {
|
|
...entry,
|
|
targetDomain: "people",
|
|
requiredTests: entry.requiredTests ?? ["integration", "e2e", "visual"],
|
|
parityEvidence: [],
|
|
status: "PLANNED",
|
|
notes: entry.notes ?? [],
|
|
};
|
|
}
|
|
|
|
export const peopleMigrationEntries: readonly MigrationEntry[] = [
|
|
// Batch 1: users, aliases, online users, guilds, and applications.
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/users",
|
|
sourceFile: "src/app/admin/users/page.tsx",
|
|
targetPath: "/admin/people/users",
|
|
decision: "REBUILD",
|
|
capabilities: {
|
|
read: [PERMS.USERS_VIEW],
|
|
mutate: [PERMS.USERS_EDIT, PERMS.USERS_BAN],
|
|
},
|
|
dependencies: {
|
|
queries: ["fetchAdminList", "User"],
|
|
mutations: [
|
|
"createUser",
|
|
"bulkAdjustCurrency",
|
|
"bulkBan",
|
|
"bulkGiveBadge",
|
|
"bulkUnban",
|
|
],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "PARTIAL",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/users/edit/:id",
|
|
sourceFile: "src/app/admin/users/edit/[id]/page.tsx",
|
|
targetPath: "/admin/people/users/:id/edit",
|
|
decision: "REBUILD",
|
|
capabilities: {
|
|
read: [PERMS.USERS_EDIT],
|
|
mutate: [PERMS.USERS_EDIT, PERMS.USERS_BAN, PERMS.USERS_RESET_PASSWORD],
|
|
},
|
|
dependencies: {
|
|
queries: ["loadUserById", "getWatchedUserIds", "permissions"],
|
|
mutations: [
|
|
"updateUser",
|
|
"giveBadge",
|
|
"removeBadge",
|
|
"banUser",
|
|
"unbanUser",
|
|
"alertUser",
|
|
"disconnectUser",
|
|
"muteUser",
|
|
"unmuteUser",
|
|
"resetPassword",
|
|
"sendCredits",
|
|
"setTradeLock",
|
|
],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "PARTIAL",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/users/multi-accounts",
|
|
sourceFile: "src/app/admin/users/multi-accounts/page.tsx",
|
|
targetPath: "/admin/people/users/multi-accounts",
|
|
decision: "REBUILD",
|
|
capabilities: { read: [PERMS.USERS_VIEW], mutate: [] },
|
|
dependencies: { queries: ["detectMultiAccounts"], mutations: [] },
|
|
auditRequirement: "NONE",
|
|
localization: "PARTIAL",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/users/show/:id",
|
|
sourceFile: "src/app/admin/users/show/[id]/page.tsx",
|
|
targetPath: "/admin/people/users/:id",
|
|
decision: "REBUILD",
|
|
capabilities: {
|
|
read: [PERMS.USERS_VIEW],
|
|
mutate: [PERMS.USERS_EDIT, PERMS.USERS_BAN, PERMS.USERS_RESET_PASSWORD],
|
|
},
|
|
dependencies: {
|
|
queries: ["loadUserById", "loadUserSanctions", "getWatchedUserIds"],
|
|
mutations: [
|
|
"alertUser",
|
|
"disconnectUser",
|
|
"muteUser",
|
|
"unmuteUser",
|
|
"resetPassword",
|
|
"sendCredits",
|
|
"setTradeLock",
|
|
],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "PARTIAL",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/users/:id",
|
|
sourceFile: "src/app/admin/users/[id]/page.tsx",
|
|
targetPath: "/admin/people/users/:id",
|
|
decision: "MERGE",
|
|
capabilities: { read: [PERMS.USERS_VIEW], mutate: [] },
|
|
dependencies: { queries: [], mutations: [] },
|
|
auditRequirement: "NONE",
|
|
localization: "COMPLETE",
|
|
accessibility: "COMPLETE",
|
|
requiredTests: ["e2e"],
|
|
notes: ["Redirect-only duplicate of the canonical user detail route"],
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/users/:id/edit",
|
|
sourceFile: "src/app/admin/users/[id]/edit/page.tsx",
|
|
targetPath: "/admin/people/users/:id/edit",
|
|
decision: "MERGE",
|
|
capabilities: { read: [PERMS.USERS_EDIT], mutate: [] },
|
|
dependencies: { queries: [], mutations: [] },
|
|
auditRequirement: "NONE",
|
|
localization: "COMPLETE",
|
|
accessibility: "COMPLETE",
|
|
requiredTests: ["e2e"],
|
|
notes: ["Redirect-only duplicate of the canonical user edit route"],
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/online",
|
|
sourceFile: "src/app/admin/online/page.tsx",
|
|
targetPath: "/admin/people/community/online",
|
|
decision: "REBUILD",
|
|
capabilities: { read: [PERMS.USERS_VIEW], mutate: [] },
|
|
dependencies: { queries: ["fetchAdminList", "User"], mutations: [] },
|
|
auditRequirement: "NONE",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/guilds",
|
|
sourceFile: "src/app/admin/guilds/page.tsx",
|
|
targetPath: "/admin/people/community/guilds",
|
|
decision: "REBUILD",
|
|
capabilities: { read: [PERMS.USERS_VIEW], mutate: [] },
|
|
dependencies: {
|
|
queries: ["Guilds", "GuildsMembers", "User"],
|
|
mutations: [],
|
|
},
|
|
auditRequirement: "NONE",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/guilds/:id",
|
|
sourceFile: "src/app/admin/guilds/[id]/page.tsx",
|
|
targetPath: "/admin/people/community/guilds/:id",
|
|
decision: "REBUILD",
|
|
capabilities: {
|
|
read: [PERMS.USERS_VIEW],
|
|
mutate: [PERMS.USERS_EDIT],
|
|
},
|
|
dependencies: {
|
|
queries: ["Guilds", "GuildsForumsThreads", "GuildsMembers", "User"],
|
|
mutations: ["disbandGuild"],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/applications",
|
|
sourceFile: "src/app/admin/applications/page.tsx",
|
|
targetPath: "/admin/people/staff/applications",
|
|
decision: "REBUILD",
|
|
capabilities: {
|
|
read: [PERMS.USERS_VIEW],
|
|
mutate: [PERMS.USERS_EDIT],
|
|
},
|
|
dependencies: {
|
|
queries: ["WebsiteStaffApplications", "User"],
|
|
mutations: ["dismissApplication"],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
|
|
// Batch 2: staff, moderation, CFH, bans, IP, VPN, and word filter.
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/teams",
|
|
sourceFile: "src/app/admin/teams/page.tsx",
|
|
targetPath: "/admin/people/staff/teams",
|
|
decision: "REBUILD",
|
|
capabilities: {
|
|
read: [PERMS.USERS_VIEW],
|
|
mutate: [PERMS.USERS_EDIT],
|
|
},
|
|
dependencies: {
|
|
queries: ["WebsiteTeams"],
|
|
mutations: ["createTeam", "deleteTeam"],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/moderation",
|
|
sourceFile: "src/app/admin/moderation/page.tsx",
|
|
targetPath: "/admin/people/moderation",
|
|
decision: "REBUILD",
|
|
capabilities: { read: [PERMS.MODERATION_VIEW], mutate: [] },
|
|
dependencies: {
|
|
queries: [
|
|
"getMinStaffRank",
|
|
"AdminAuditLog",
|
|
"Ban",
|
|
"SupportTickets",
|
|
"User",
|
|
],
|
|
mutations: [],
|
|
},
|
|
auditRequirement: "NONE",
|
|
localization: "PARTIAL",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/moderation/actions",
|
|
sourceFile: "src/app/admin/moderation/actions/page.tsx",
|
|
targetPath: "/admin/people/moderation/actions",
|
|
decision: "REBUILD",
|
|
capabilities: {
|
|
read: [PERMS.MODERATION_EDIT],
|
|
mutate: [PERMS.MODERATION_EDIT],
|
|
},
|
|
dependencies: {
|
|
queries: [],
|
|
mutations: [
|
|
"broadcastAlert",
|
|
"quickAlert",
|
|
"quickKick",
|
|
"quickMute",
|
|
"quickRoomKick",
|
|
"quickUnmute",
|
|
],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "PARTIAL",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/moderation/cfh",
|
|
sourceFile: "src/app/admin/moderation/cfh/page.tsx",
|
|
targetPath: "/admin/people/moderation/cfh",
|
|
decision: "REBUILD",
|
|
capabilities: { read: [PERMS.MODERATION_VIEW], mutate: [] },
|
|
dependencies: { queries: ["SupportTickets", "User"], mutations: [] },
|
|
auditRequirement: "NONE",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/moderation/cfh/:id",
|
|
sourceFile: "src/app/admin/moderation/cfh/[id]/page.tsx",
|
|
targetPath: "/admin/people/moderation/cfh/:id",
|
|
decision: "REBUILD",
|
|
capabilities: {
|
|
read: [PERMS.MODERATION_VIEW],
|
|
mutate: [PERMS.MODERATION_EDIT],
|
|
},
|
|
dependencies: {
|
|
queries: ["Ban", "SupportTickets", "User"],
|
|
mutations: [
|
|
"assignCfhTicket",
|
|
"closeCfhTicket",
|
|
"quickAlert",
|
|
"quickKick",
|
|
"quickMute",
|
|
"updateCfhState",
|
|
],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "PARTIAL",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/moderation/team",
|
|
sourceFile: "src/app/admin/moderation/team/page.tsx",
|
|
targetPath: "/admin/people/staff/moderation-team",
|
|
decision: "REBUILD",
|
|
capabilities: { read: [PERMS.MODERATION_VIEW], mutate: [] },
|
|
dependencies: {
|
|
queries: [
|
|
"getMinStaffRank",
|
|
"AdminAuditLog",
|
|
"SupportTickets",
|
|
"User",
|
|
"WebsiteTicket",
|
|
],
|
|
mutations: [],
|
|
},
|
|
auditRequirement: "NONE",
|
|
localization: "PARTIAL",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/bans",
|
|
sourceFile: "src/app/admin/bans/page.tsx",
|
|
targetPath: "/admin/people/moderation/bans",
|
|
decision: "REBUILD",
|
|
capabilities: {
|
|
read: [PERMS.BANS_VIEW],
|
|
mutate: [PERMS.USERS_BAN],
|
|
},
|
|
dependencies: {
|
|
queries: ["Ban"],
|
|
mutations: ["createBan", "liftBan"],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/ip",
|
|
sourceFile: "src/app/admin/ip/page.tsx",
|
|
targetPath: "/admin/people/moderation/ip",
|
|
decision: "REBUILD",
|
|
capabilities: {
|
|
read: [PERMS.SETTINGS_VIEW],
|
|
mutate: [PERMS.SETTINGS_EDIT],
|
|
},
|
|
dependencies: {
|
|
queries: ["WebsiteIpBlacklist", "WebsiteIpWhitelist"],
|
|
mutations: [
|
|
"addBlacklist",
|
|
"addWhitelist",
|
|
"deleteBlacklist",
|
|
"deleteWhitelist",
|
|
],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/vpn",
|
|
sourceFile: "src/app/admin/vpn/page.tsx",
|
|
targetPath: "/admin/people/moderation/vpn",
|
|
decision: "REBUILD",
|
|
capabilities: {
|
|
read: [PERMS.SETTINGS_VIEW],
|
|
mutate: [PERMS.SETTINGS_EDIT],
|
|
},
|
|
dependencies: {
|
|
queries: ["siteSettings.getMany"],
|
|
mutations: ["saveVpn"],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/wordfilter",
|
|
sourceFile: "src/app/admin/wordfilter/page.tsx",
|
|
targetPath: "/admin/people/moderation/word-filter",
|
|
decision: "REBUILD",
|
|
capabilities: {
|
|
read: [PERMS.WORDFILTER_VIEW],
|
|
mutate: [PERMS.WORDFILTER_EDIT],
|
|
},
|
|
dependencies: {
|
|
queries: ["WebsiteWordfilter"],
|
|
mutations: ["addWord", "deleteWord"],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
|
|
// Batch 3: website tickets and help-center tickets.
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/tickets",
|
|
sourceFile: "src/app/admin/tickets/page.tsx",
|
|
targetPath: "/admin/people/support/tickets",
|
|
decision: "REBUILD",
|
|
capabilities: { read: [PERMS.TICKETS_VIEW], mutate: [] },
|
|
dependencies: {
|
|
queries: ["fetchUnifiedTicketInbox", "fetchTicketQueueOpenCounts"],
|
|
mutations: [],
|
|
},
|
|
auditRequirement: "NONE",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/tickets/desk",
|
|
sourceFile: "src/app/admin/tickets/desk/page.tsx",
|
|
targetPath: "/admin/people/support/tickets/desk",
|
|
decision: "REBUILD",
|
|
capabilities: { read: [PERMS.TICKETS_VIEW], mutate: [] },
|
|
dependencies: {
|
|
queries: ["fetchTicketQueueOpenCounts", "User", "WebsiteTicket"],
|
|
mutations: [],
|
|
},
|
|
auditRequirement: "NONE",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/tickets/templates",
|
|
sourceFile: "src/app/admin/tickets/templates/page.tsx",
|
|
targetPath: "/admin/people/support/tickets/templates",
|
|
decision: "REBUILD",
|
|
capabilities: {
|
|
read: [PERMS.TICKETS_EDIT],
|
|
mutate: [PERMS.TICKETS_EDIT],
|
|
},
|
|
dependencies: {
|
|
queries: ["WebsiteTicketTemplate"],
|
|
mutations: ["createTemplate", "deleteTemplate", "updateTemplate"],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "PARTIAL",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/tickets/:id",
|
|
sourceFile: "src/app/admin/tickets/[id]/page.tsx",
|
|
targetPath: "/admin/people/support/tickets/:id",
|
|
decision: "REBUILD",
|
|
capabilities: {
|
|
read: [PERMS.TICKETS_VIEW],
|
|
mutate: [PERMS.TICKETS_EDIT],
|
|
},
|
|
dependencies: {
|
|
queries: [
|
|
"getMinStaffRank",
|
|
"fetchTicketQueueOpenCounts",
|
|
"User",
|
|
"WebsiteTicket",
|
|
],
|
|
mutations: [
|
|
"adminReplyTicket",
|
|
"assignTicket",
|
|
"updateTicketPriority",
|
|
"updateTicketStatus",
|
|
],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/help-tickets",
|
|
sourceFile: "src/app/admin/help-tickets/page.tsx",
|
|
targetPath: "/admin/people/support/help-tickets",
|
|
decision: "REBUILD",
|
|
capabilities: { read: [PERMS.TICKETS_VIEW], mutate: [] },
|
|
dependencies: {
|
|
queries: [
|
|
"fetchTicketQueueOpenCounts",
|
|
"User",
|
|
"WebsiteHelpCenterTicketReplies",
|
|
"WebsiteHelpCenterTickets",
|
|
],
|
|
mutations: [],
|
|
},
|
|
auditRequirement: "NONE",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "admin",
|
|
legacyPath: "/admin/help-tickets/:id",
|
|
sourceFile: "src/app/admin/help-tickets/[id]/page.tsx",
|
|
targetPath: "/admin/people/support/help-tickets/:id",
|
|
decision: "REBUILD",
|
|
capabilities: {
|
|
read: [PERMS.TICKETS_VIEW],
|
|
mutate: [PERMS.TICKETS_EDIT, PERMS.USERS_BAN],
|
|
},
|
|
dependencies: {
|
|
queries: [
|
|
"getMinStaffRank",
|
|
"fetchTicketQueueOpenCounts",
|
|
"Ban",
|
|
"User",
|
|
"WebsiteHelpCenterCategories",
|
|
"WebsiteHelpCenterTicketReplies",
|
|
"WebsiteHelpCenterTickets",
|
|
],
|
|
mutations: [
|
|
"closeHelpCenterTicket",
|
|
"liftBanFromHelpTicket",
|
|
"reopenHelpCenterTicket",
|
|
"replyHelpCenterTicket",
|
|
],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
|
|
// Batch 4: merge all moderator routes into the People workflows.
|
|
plannedPeopleEntry({
|
|
surface: "mod",
|
|
legacyPath: "/mod",
|
|
sourceFile: "src/app/mod/page.tsx",
|
|
targetPath: "/admin/people/moderation",
|
|
decision: "MERGE",
|
|
capabilities: {
|
|
read: [
|
|
PERMS.MOD_CFH_VIEW,
|
|
PERMS.MODERATION_VIEW,
|
|
PERMS.MOD_ACTIONS,
|
|
PERMS.MODERATION_EDIT,
|
|
PERMS.MOD_BANS_VIEW,
|
|
PERMS.BANS_VIEW,
|
|
PERMS.MOD_TICKETS_VIEW,
|
|
PERMS.TICKETS_VIEW,
|
|
PERMS.MOD_TEAM_VIEW,
|
|
PERMS.MOD_USERS_VIEW,
|
|
PERMS.USERS_VIEW,
|
|
],
|
|
mutate: [],
|
|
},
|
|
dependencies: {
|
|
queries: [
|
|
"getMinStaffRank",
|
|
"Ban",
|
|
"SupportTickets",
|
|
"User",
|
|
"WebsiteHelpCenterTickets",
|
|
"WebsiteTicket",
|
|
],
|
|
mutations: [],
|
|
},
|
|
auditRequirement: "NONE",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
notes: ["Merge the moderator dashboard into capability-gated People work"],
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "mod",
|
|
legacyPath: "/mod/actions",
|
|
sourceFile: "src/app/mod/actions/page.tsx",
|
|
targetPath: "/admin/people/moderation/actions",
|
|
decision: "MERGE",
|
|
capabilities: {
|
|
read: [PERMS.MOD_ACTIONS, PERMS.MODERATION_EDIT],
|
|
mutate: [PERMS.MOD_ACTIONS, PERMS.MODERATION_EDIT],
|
|
},
|
|
dependencies: {
|
|
queries: [],
|
|
mutations: [
|
|
"broadcastAlert",
|
|
"quickAlert",
|
|
"quickKick",
|
|
"quickMute",
|
|
"quickRoomKick",
|
|
"quickUnmute",
|
|
],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "PARTIAL",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "mod",
|
|
legacyPath: "/mod/bans",
|
|
sourceFile: "src/app/mod/bans/page.tsx",
|
|
targetPath: "/admin/people/moderation/bans",
|
|
decision: "MERGE",
|
|
capabilities: {
|
|
read: [PERMS.MOD_BANS_VIEW, PERMS.BANS_VIEW],
|
|
mutate: [],
|
|
},
|
|
dependencies: { queries: ["Ban"], mutations: [] },
|
|
auditRequirement: "NONE",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "mod",
|
|
legacyPath: "/mod/cfh",
|
|
sourceFile: "src/app/mod/cfh/page.tsx",
|
|
targetPath: "/admin/people/moderation/cfh",
|
|
decision: "MERGE",
|
|
capabilities: {
|
|
read: [PERMS.MOD_CFH_VIEW, PERMS.MODERATION_VIEW],
|
|
mutate: [],
|
|
},
|
|
dependencies: { queries: ["SupportTickets", "User"], mutations: [] },
|
|
auditRequirement: "NONE",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "mod",
|
|
legacyPath: "/mod/cfh/:id",
|
|
sourceFile: "src/app/mod/cfh/[id]/page.tsx",
|
|
targetPath: "/admin/people/moderation/cfh/:id",
|
|
decision: "MERGE",
|
|
capabilities: {
|
|
read: [PERMS.MOD_CFH_VIEW, PERMS.MODERATION_VIEW],
|
|
mutate: [PERMS.MOD_CFH_EDIT, PERMS.MODERATION_EDIT],
|
|
},
|
|
dependencies: {
|
|
queries: ["Ban", "SupportTickets", "User"],
|
|
mutations: [
|
|
"assignCfhTicket",
|
|
"closeCfhTicket",
|
|
"quickAlert",
|
|
"quickKick",
|
|
"quickMute",
|
|
"updateCfhState",
|
|
],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "PARTIAL",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "mod",
|
|
legacyPath: "/mod/help-tickets",
|
|
sourceFile: "src/app/mod/help-tickets/page.tsx",
|
|
targetPath: "/admin/people/support/help-tickets",
|
|
decision: "MERGE",
|
|
capabilities: {
|
|
read: [PERMS.MOD_TICKETS_VIEW, PERMS.TICKETS_VIEW],
|
|
mutate: [],
|
|
},
|
|
dependencies: {
|
|
queries: [
|
|
"fetchTicketQueueOpenCounts",
|
|
"User",
|
|
"WebsiteHelpCenterTicketReplies",
|
|
"WebsiteHelpCenterTickets",
|
|
],
|
|
mutations: [],
|
|
},
|
|
auditRequirement: "NONE",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "mod",
|
|
legacyPath: "/mod/help-tickets/:id",
|
|
sourceFile: "src/app/mod/help-tickets/[id]/page.tsx",
|
|
targetPath: "/admin/people/support/help-tickets/:id",
|
|
decision: "MERGE",
|
|
capabilities: {
|
|
read: [PERMS.MOD_TICKETS_VIEW, PERMS.TICKETS_VIEW],
|
|
mutate: [PERMS.MOD_TICKETS_EDIT, PERMS.TICKETS_EDIT, PERMS.USERS_BAN],
|
|
},
|
|
dependencies: {
|
|
queries: [
|
|
"getMinStaffRank",
|
|
"fetchTicketQueueOpenCounts",
|
|
"User",
|
|
"WebsiteHelpCenterTicketReplies",
|
|
"WebsiteHelpCenterTickets",
|
|
],
|
|
mutations: [
|
|
"closeHelpCenterTicket",
|
|
"liftBanFromHelpTicket",
|
|
"reopenHelpCenterTicket",
|
|
"replyHelpCenterTicket",
|
|
],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "mod",
|
|
legacyPath: "/mod/team",
|
|
sourceFile: "src/app/mod/team/page.tsx",
|
|
targetPath: "/admin/people/staff/moderation-team",
|
|
decision: "MERGE",
|
|
capabilities: {
|
|
read: [PERMS.MOD_TEAM_VIEW, PERMS.MODERATION_VIEW],
|
|
mutate: [],
|
|
},
|
|
dependencies: {
|
|
queries: [
|
|
"getMinStaffRank",
|
|
"AdminAuditLog",
|
|
"SupportTickets",
|
|
"User",
|
|
"WebsiteTicket",
|
|
],
|
|
mutations: [],
|
|
},
|
|
auditRequirement: "NONE",
|
|
localization: "PARTIAL",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "mod",
|
|
legacyPath: "/mod/tickets",
|
|
sourceFile: "src/app/mod/tickets/page.tsx",
|
|
targetPath: "/admin/people/support/tickets",
|
|
decision: "MERGE",
|
|
capabilities: {
|
|
read: [PERMS.MOD_TICKETS_VIEW, PERMS.TICKETS_VIEW],
|
|
mutate: [],
|
|
},
|
|
dependencies: {
|
|
queries: ["fetchUnifiedTicketInbox", "fetchTicketQueueOpenCounts"],
|
|
mutations: [],
|
|
},
|
|
auditRequirement: "NONE",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "mod",
|
|
legacyPath: "/mod/tickets/desk",
|
|
sourceFile: "src/app/mod/tickets/desk/page.tsx",
|
|
targetPath: "/admin/people/support/tickets/desk",
|
|
decision: "MERGE",
|
|
capabilities: {
|
|
read: [PERMS.MOD_TICKETS_VIEW, PERMS.TICKETS_VIEW],
|
|
mutate: [],
|
|
},
|
|
dependencies: {
|
|
queries: [
|
|
"fetchTicketQueueOpenCounts",
|
|
"User",
|
|
"WebsiteTicket",
|
|
"WebsiteTicketMessage",
|
|
],
|
|
mutations: [],
|
|
},
|
|
auditRequirement: "NONE",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "mod",
|
|
legacyPath: "/mod/tickets/:id",
|
|
sourceFile: "src/app/mod/tickets/[id]/page.tsx",
|
|
targetPath: "/admin/people/support/tickets/:id",
|
|
decision: "MERGE",
|
|
capabilities: {
|
|
read: [PERMS.MOD_TICKETS_VIEW, PERMS.TICKETS_VIEW],
|
|
mutate: [PERMS.MOD_TICKETS_EDIT, PERMS.TICKETS_EDIT],
|
|
},
|
|
dependencies: {
|
|
queries: [
|
|
"getMinStaffRank",
|
|
"fetchTicketQueueOpenCounts",
|
|
"User",
|
|
"WebsiteTicket",
|
|
"WebsiteTicketMessage",
|
|
],
|
|
mutations: [
|
|
"adminReplyTicket",
|
|
"assignTicket",
|
|
"updateTicketPriority",
|
|
"updateTicketStatus",
|
|
],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "mod",
|
|
legacyPath: "/mod/users",
|
|
sourceFile: "src/app/mod/users/page.tsx",
|
|
targetPath: "/admin/people/users",
|
|
decision: "MERGE",
|
|
capabilities: {
|
|
read: [PERMS.MOD_USERS_VIEW, PERMS.USERS_VIEW],
|
|
mutate: [],
|
|
},
|
|
dependencies: { queries: ["User"], mutations: [] },
|
|
auditRequirement: "NONE",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
plannedPeopleEntry({
|
|
surface: "mod",
|
|
legacyPath: "/mod/users/:id",
|
|
sourceFile: "src/app/mod/users/[id]/page.tsx",
|
|
targetPath: "/admin/people/users/:id",
|
|
decision: "MERGE",
|
|
capabilities: {
|
|
read: [PERMS.MOD_USERS_VIEW, PERMS.USERS_VIEW],
|
|
mutate: [],
|
|
},
|
|
dependencies: { queries: ["User"], mutations: [] },
|
|
auditRequirement: "NONE",
|
|
localization: "COMPLETE",
|
|
accessibility: "PARTIAL",
|
|
}),
|
|
];
|