Spaces:
Running
Running
File size: 30,914 Bytes
303c85f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 | "use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var AdminRouter_1;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AdminRouter = void 0;
const common_1 = require("@nestjs/common");
const zod_1 = require("zod");
const trpc_init_1 = require("../trpc/trpc.init");
const shared_types_1 = require("@micprotocol/shared-types");
const admin_realtime_service_1 = require("./admin-realtime.service");
const admin_clip_scorer_service_1 = require("./admin-clip-scorer.service");
const admin_auth_service_1 = require("./admin-auth.service");
const admin_users_service_1 = require("./admin-users.service");
const admin_workspaces_service_1 = require("./admin-workspaces.service");
const admin_billing_service_1 = require("./admin-billing.service");
const admin_moderation_service_1 = require("./admin-moderation.service");
const admin_operations_service_1 = require("./admin-operations.service");
const admin_settings_service_1 = require("./admin-settings.service");
const admin_audit_service_1 = require("./admin-audit.service");
const admin_comms_service_1 = require("./admin-comms.service");
const admin_supervision_service_1 = require("./admin-supervision.service");
const cursorListSchema = zod_1.z.object({
cursor: zod_1.z.string().uuid().optional(),
limit: zod_1.z.number().int().min(1).max(200).optional(),
});
let AdminRouter = AdminRouter_1 = class AdminRouter {
realtime;
clipScorer;
adminAuth;
users;
workspaces;
billing;
moderation;
operations;
settings;
audit;
comms;
supervision;
logger = new common_1.Logger(AdminRouter_1.name);
constructor(realtime, clipScorer, adminAuth, users, workspaces, billing, moderation, operations, settings, audit, comms, supervision) {
this.realtime = realtime;
this.clipScorer = clipScorer;
this.adminAuth = adminAuth;
this.users = users;
this.workspaces = workspaces;
this.billing = billing;
this.moderation = moderation;
this.operations = operations;
this.settings = settings;
this.audit = audit;
this.comms = comms;
this.supervision = supervision;
}
get router() {
return (0, trpc_init_1.router)({
realtime: (0, trpc_init_1.router)({
stats: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.OPS_READ).query(async () => this.realtime.getStats()),
metrics: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.OPS_READ).query(async () => this.realtime.getMetrics()),
traces: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.OPS_READ)
.input(zod_1.z.object({ limit: zod_1.z.number().int().min(1).max(1000).optional() }))
.query(async ({ input }) => this.realtime.getTraces(input.limit ?? 50)),
}),
clipScorer: (0, trpc_init_1.router)({
locks: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.OPS_LOCKS).query(async () => this.clipScorer.getLocks()),
releaseLock: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.OPS_LOCKS)
.input(zod_1.z.object({ key: zod_1.z.string() }))
.mutation(async ({ input }) => this.clipScorer.forceReleaseLock(input.key)),
scratch: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.OPS_HEALTH).query(async () => this.clipScorer.getScratchStorage()),
}),
aiEngines: (0, trpc_init_1.router)({
listEngines: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.OPS_READ)
.input(zod_1.z.object({ includeMetrics: zod_1.z.boolean().optional() }))
.query(async ({ input }) => {
const locks = await this.clipScorer.getLocks();
const scratch = await this.clipScorer.getScratchStorage();
const usedGB = scratch.dirs.reduce((sum, d) => sum + d.bytes, 0) / (1024 * 1024 * 1024);
return {
items: [
{
id: "clip-scorer",
name: "CLIP Scorer",
engineType: "ml-engine",
status: locks.error ? "down" : "healthy",
requestsPerSecond: 12.5,
avgLatencyMs: 145.5,
errorRate: 0.01,
queueDepth: 0,
jobsProcessed: 12450,
jobsFailed: 23,
scratchUsedGB: usedGB,
},
],
};
}),
clipScorerStatus: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.OPS_READ)
.query(async () => {
const locks = await this.clipScorer.getLocks();
const scratch = await this.clipScorer.getScratchStorage();
const usedGB = scratch.dirs.reduce((sum, d) => sum + d.bytes, 0) / (1024 * 1024 * 1024);
return {
status: locks.error ? "down" : "healthy",
uptimeSeconds: 86400,
jobsProcessed: 12450,
jobsFailed: 23,
avgLatencyMs: 145.5,
queueDepth: 0,
scoringAxes: [
{ name: "Visual Relevance", weight: 0.4, enabled: true },
{ name: "Audio Clarity", weight: 0.3, enabled: true },
{ name: "Semantic Match", weight: 0.2, enabled: true },
{ name: "Loudness Norm", weight: 0.1, enabled: false },
],
locks: locks.locks,
storage: {
usedGB,
totalGB: 100,
utilization: Math.round((usedGB / 100) * 100),
},
};
}),
}),
users: (0, trpc_init_1.router)({
list: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.USERS_READ)
.input(cursorListSchema.extend({
search: zod_1.z.string().max(200).optional(),
role: zod_1.z.string().optional(),
suspended: zod_1.z.boolean().optional(),
}))
.query(async ({ input }) => this.users.listUsers(input)),
get: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.USERS_READ)
.input(zod_1.z.object({ userId: zod_1.z.string().uuid() }))
.query(async ({ input }) => this.users.getUser(input.userId)),
suspend: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.USERS_SUSPEND)
.input(zod_1.z.object({ userId: zod_1.z.string().uuid(), reason: zod_1.z.string().max(1000).optional().nullable() }))
.mutation(async ({ input, ctx }) => this.users.suspendUser(input.userId, input.reason ?? null, ctx.userId)),
reactivate: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.USERS_SUSPEND)
.input(zod_1.z.object({ userId: zod_1.z.string().uuid() }))
.mutation(async ({ input, ctx }) => this.users.reactivateUser(input.userId, ctx.userId)),
revokeSessions: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.USERS_REVOKE_SESSIONS)
.input(zod_1.z.object({ userId: zod_1.z.string().uuid(), exceptToken: zod_1.z.string().optional() }))
.mutation(async ({ input, ctx }) => this.users.revokeSessions(input.userId, ctx.userId, input.exceptToken)),
impersonate: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.USERS_IMPERSONATE)
.input(zod_1.z.object({
userId: zod_1.z.string().uuid(),
reason: zod_1.z.string().max(1000).optional(),
ttlMinutes: zod_1.z.number().int().min(5).max(480).optional().default(60),
}))
.mutation(async ({ input, ctx }) => this.users.impersonate(input.userId, ctx.userId, input.reason, input.ttlMinutes)),
grantAdmin: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.USERS_GRANT_ADMIN)
.input(zod_1.z.object({
userId: zod_1.z.string().uuid(),
role: zod_1.z.nativeEnum(shared_types_1.AdminRole),
permissions: zod_1.z.array(zod_1.z.string()).optional().nullable(),
}))
.mutation(async ({ input, ctx }) => this.users.grantAdmin(input.userId, input.role, input.permissions ?? null, ctx.userId)),
revokeAdmin: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.USERS_GRANT_ADMIN)
.input(zod_1.z.object({ userId: zod_1.z.string().uuid() }))
.mutation(async ({ input, ctx }) => this.users.revokeAdmin(input.userId, ctx.userId)),
deleteUser: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.USERS_DELETE)
.input(zod_1.z.object({ userId: zod_1.z.string().uuid(), anonymize: zod_1.z.boolean().optional().default(true) }))
.mutation(async ({ input, ctx }) => this.users.deleteUser(input.userId, ctx.userId, input.anonymize)),
addNote: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.USERS_NOTES)
.input(zod_1.z.object({ userId: zod_1.z.string().uuid(), body: zod_1.z.string().min(1).max(5000) }))
.mutation(async ({ input, ctx }) => this.users.addUserNote(input.userId, input.body, ctx.userId)),
}),
workspaces: (0, trpc_init_1.router)({
list: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.WORKSPACES_READ)
.input(cursorListSchema.extend({
search: zod_1.z.string().max(200).optional(),
suspended: zod_1.z.boolean().optional(),
}))
.query(async ({ input }) => this.workspaces.listWorkspaces(input)),
get: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.WORKSPACES_READ)
.input(zod_1.z.object({ workspaceId: zod_1.z.string().uuid() }))
.query(async ({ input }) => this.workspaces.getWorkspace(input.workspaceId)),
suspend: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.WORKSPACES_SUSPEND)
.input(zod_1.z.object({ workspaceId: zod_1.z.string().uuid(), reason: zod_1.z.string().max(1000).optional().nullable() }))
.mutation(async ({ input, ctx }) => this.workspaces.suspendWorkspace(input.workspaceId, input.reason ?? null, ctx.userId)),
reactivate: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.WORKSPACES_SUSPEND)
.input(zod_1.z.object({ workspaceId: zod_1.z.string().uuid() }))
.mutation(async ({ input, ctx }) => this.workspaces.reactivateWorkspace(input.workspaceId, ctx.userId)),
overridePlan: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.WORKSPACES_PLAN)
.input(zod_1.z.object({ workspaceId: zod_1.z.string().uuid(), planId: zod_1.z.string().min(1) }))
.mutation(async ({ input, ctx }) => this.workspaces.overridePlan(input.workspaceId, input.planId, ctx.userId)),
setCredits: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.WORKSPACES_CREDITS)
.input(zod_1.z.object({ workspaceId: zod_1.z.string().uuid(), credits: zod_1.z.number() }))
.mutation(async ({ input, ctx }) => this.workspaces.setCredits(input.workspaceId, input.credits, ctx.userId)),
transferOwner: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.WORKSPACES_TRANSFER_OWNER)
.input(zod_1.z.object({ workspaceId: zod_1.z.string().uuid(), newOwnerUserId: zod_1.z.string().uuid() }))
.mutation(async ({ input, ctx }) => this.workspaces.transferOwner(input.workspaceId, input.newOwnerUserId, ctx.userId)),
addNote: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.WORKSPACES_NOTES)
.input(zod_1.z.object({ workspaceId: zod_1.z.string().uuid(), body: zod_1.z.string().min(1).max(5000) }))
.mutation(async ({ input, ctx }) => this.workspaces.addWorkspaceNote(input.workspaceId, input.body, ctx.userId)),
}),
billing: (0, trpc_init_1.router)({
listSubscriptions: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.BILLING_READ)
.query(async () => this.billing.listSubscriptions()),
getWallet: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.BILLING_READ)
.input(zod_1.z.object({ workspaceId: zod_1.z.string().uuid() }))
.query(async ({ input }) => this.billing.getWallet(input.workspaceId)),
listWallets: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.BILLING_READ)
.query(async () => this.billing.listWallets()),
listTransactions: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.BILLING_READ)
.input(zod_1.z.object({ walletId: zod_1.z.string().uuid(), limit: zod_1.z.number().int().min(1).max(200).optional().default(50) }))
.query(async ({ input }) => this.billing.listTransactions(input.walletId, input.limit)),
refund: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.BILLING_REFUND)
.input(zod_1.z.object({
workspaceId: zod_1.z.string().uuid(),
amount: zod_1.z.number().positive(),
reference: zod_1.z.string().min(1),
description: zod_1.z.string().max(1000).optional().nullable(),
}))
.mutation(async ({ input, ctx }) => this.billing.refund(input.workspaceId, input.amount, input.reference, input.description ?? null, ctx.userId)),
planOverride: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.BILLING_PLAN_OVERRIDE)
.input(zod_1.z.object({ workspaceId: zod_1.z.string().uuid(), planId: zod_1.z.string().min(1) }))
.mutation(async ({ input, ctx }) => this.billing.planOverride(input.workspaceId, input.planId, ctx.userId)),
}),
moderation: (0, trpc_init_1.router)({
listReports: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.MODERATION_READ)
.input(cursorListSchema.extend({
status: zod_1.z.string().optional(),
category: zod_1.z.string().optional(),
targetType: zod_1.z.string().optional(),
}))
.query(async ({ input }) => this.moderation.listAbuseReports(input)),
getReport: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.MODERATION_READ)
.input(zod_1.z.object({ reportId: zod_1.z.string().uuid() }))
.query(async ({ input }) => this.moderation.getAbuseReport(input.reportId)),
resolve: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.MODERATION_RESOLVE)
.input(zod_1.z.object({
reportId: zod_1.z.string().uuid(),
resolution: zod_1.z.string().min(1).max(2000),
status: zod_1.z.string().optional(),
}))
.mutation(async ({ input, ctx }) => this.moderation.resolveReport(input.reportId, input.resolution, ctx.userId, input.status)),
takedown: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.MODERATION_TAKEDOWN)
.input(zod_1.z.object({ reportId: zod_1.z.string().uuid(), reason: zod_1.z.string().max(1000).optional() }))
.mutation(async ({ input, ctx }) => this.moderation.takedown(input.reportId, ctx.userId, input.reason)),
}),
settings: (0, trpc_init_1.router)({
list: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.SETTINGS_READ)
.query(async () => this.settings.listSettings()),
get: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.SETTINGS_READ)
.input(zod_1.z.object({ key: zod_1.z.string().min(1) }))
.query(async ({ input }) => this.settings.getSetting(input.key)),
upsert: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.SETTINGS_WRITE)
.input(zod_1.z.object({
key: zod_1.z.string().min(1),
value: zod_1.z.unknown(),
description: zod_1.z.string().max(1000).optional().nullable(),
category: zod_1.z.string().min(1),
}))
.mutation(async ({ input, ctx }) => this.settings.upsertSetting(input.key, input.value, input.description ?? null, input.category, ctx.userId)),
delete: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.SETTINGS_WRITE)
.input(zod_1.z.object({ key: zod_1.z.string().min(1) }))
.mutation(async ({ input, ctx }) => this.settings.deleteSetting(input.key, ctx.userId)),
}),
flags: (0, trpc_init_1.router)({
list: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.FLAGS_READ)
.query(async () => this.settings.listFlags()),
isEnabled: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.FLAGS_READ)
.input(zod_1.z.object({ key: zod_1.z.string().min(1), workspaceId: zod_1.z.string().uuid().optional() }))
.query(async ({ input }) => this.settings.isFlagEnabled(input.key, input.workspaceId)),
upsert: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.FLAGS_WRITE)
.input(zod_1.z.object({
key: zod_1.z.string().min(1),
enabled: zod_1.z.boolean(),
rolloutPercentage: zod_1.z.number().int().min(0).max(100),
allowlistWorkspaceIds: zod_1.z.array(zod_1.z.string().uuid()).optional().default([]),
description: zod_1.z.string().max(1000).optional().nullable(),
}))
.mutation(async ({ input, ctx }) => this.settings.upsertFlag(input.key, input.enabled, input.rolloutPercentage, input.allowlistWorkspaceIds, input.description ?? null, ctx.userId)),
delete: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.FLAGS_WRITE)
.input(zod_1.z.object({ key: zod_1.z.string().min(1) }))
.mutation(async ({ input, ctx }) => this.settings.deleteFlag(input.key, ctx.userId)),
}),
audit: (0, trpc_init_1.router)({
list: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.AUDIT_READ)
.input(cursorListSchema.extend({
action: zod_1.z.string().optional(),
entityType: zod_1.z.string().optional(),
userId: zod_1.z.string().uuid().optional(),
workspaceId: zod_1.z.string().uuid().optional(),
startDate: zod_1.z.string().optional(),
endDate: zod_1.z.string().optional(),
search: zod_1.z.string().max(200).optional(),
}))
.query(async ({ input }) => this.audit.list(input)),
verify: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.AUDIT_READ)
.query(async () => this.audit.verify()),
stats: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.AUDIT_READ)
.query(async () => this.audit.stats()),
export: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.AUDIT_EXPORT)
.input(zod_1.z.object({ startDate: zod_1.z.string().optional(), endDate: zod_1.z.string().optional() }))
.query(async ({ input, ctx }) => this.audit.export(input, ctx.userId)),
getEntry: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.AUDIT_READ)
.input(zod_1.z.object({ entryId: zod_1.z.string().uuid() }))
.query(async ({ input }) => this.audit.getEntry(input.entryId)),
}),
comms: (0, trpc_init_1.router)({
list: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.ANNOUNCEMENTS_READ)
.query(async () => this.comms.listAnnouncements()),
create: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.ANNOUNCEMENTS_WRITE)
.input(zod_1.z.object({
title: zod_1.z.string().min(1).max(200),
body: zod_1.z.string().min(1).max(10_000),
audience: zod_1.z.unknown(),
severity: zod_1.z.string().min(1),
status: zod_1.z.string().min(1),
publishedAt: zod_1.z.string().datetime().optional().nullable(),
expiresAt: zod_1.z.string().datetime().optional().nullable(),
}))
.mutation(async ({ input, ctx }) => this.comms.createAnnouncement(input.title, input.body, input.audience, input.severity, input.status, input.publishedAt ? new Date(input.publishedAt) : null, input.expiresAt ? new Date(input.expiresAt) : null, ctx.userId)),
update: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.ANNOUNCEMENTS_WRITE)
.input(zod_1.z.object({
id: zod_1.z.string().uuid(),
title: zod_1.z.string().min(1).max(200).optional(),
body: zod_1.z.string().min(1).max(10_000).optional(),
audience: zod_1.z.unknown().optional(),
severity: zod_1.z.string().min(1).optional(),
status: zod_1.z.string().min(1).optional(),
publishedAt: zod_1.z.string().datetime().optional().nullable(),
expiresAt: zod_1.z.string().datetime().optional().nullable(),
}))
.mutation(async ({ input, ctx }) => {
const { id, ...patch } = input;
return this.comms.updateAnnouncement(id, patch, ctx.userId);
}),
archive: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.ANNOUNCEMENTS_WRITE)
.input(zod_1.z.object({ id: zod_1.z.string().uuid() }))
.mutation(async ({ input, ctx }) => this.comms.archiveAnnouncement(input.id, ctx.userId)),
}),
supervision: (0, trpc_init_1.router)({
run: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.SUPERVISION_RUN)
.input(zod_1.z.object({ kind: zod_1.z.string().optional() }))
.query(async ({ input, ctx }) => this.supervision.runSupervision(input.kind ?? "other", ctx.userId)),
listRuns: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.SUPERVISION_READ)
.query(async () => this.supervision.listRuns()),
listFindings: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.SUPERVISION_READ)
.input(zod_1.z.object({ runId: zod_1.z.string().uuid().optional(), status: zod_1.z.string().optional() }))
.query(async ({ input }) => this.supervision.listFindings(input.runId, input.status)),
acknowledge: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.SUPERVISION_RUN)
.input(zod_1.z.object({ findingId: zod_1.z.string().uuid(), assignedToId: zod_1.z.string().uuid().optional() }))
.mutation(async ({ input, ctx }) => this.supervision.acknowledgeFinding(input.findingId, input.assignedToId ?? ctx.userId)),
resolve: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.SUPERVISION_RUN)
.input(zod_1.z.object({ findingId: zod_1.z.string().uuid() }))
.mutation(async ({ input }) => this.supervision.resolveFinding(input.findingId)),
}),
operations: (0, trpc_init_1.router)({
queueHealth: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.OPS_READ)
.query(async () => this.operations.getQueueHealth()),
queueJobs: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.OPS_QUEUES)
.input(zod_1.z.object({
queue: zod_1.z.string(),
type: zod_1.z.enum(["waiting", "active", "failed", "completed", "delayed"]),
limit: zod_1.z.number().int().min(1).max(200).optional().default(50),
}))
.query(async ({ input }) => this.operations.getQueueJobs(input.queue, input.type, input.limit)),
retryJob: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.OPS_RETRY_JOBS)
.input(zod_1.z.object({ queue: zod_1.z.string(), jobId: zod_1.z.string() }))
.mutation(async ({ input, ctx }) => this.operations.retryJob(input.queue, input.jobId, ctx.userId)),
purgeFailed: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.OPS_PURGE_JOBS)
.input(zod_1.z.object({ queue: zod_1.z.string() }))
.mutation(async ({ input, ctx }) => this.operations.purgeFailedJobs(input.queue, ctx.userId)),
getLocks: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.OPS_LOCKS)
.input(zod_1.z.object({ pattern: zod_1.z.string().optional().default("lock:clip:*"), limit: zod_1.z.number().int().min(1).max(1000).optional().default(100) }))
.query(async ({ input }) => this.operations.getLocks(input.pattern, input.limit)),
releaseLock: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.OPS_LOCKS)
.input(zod_1.z.object({ key: zod_1.z.string() }))
.mutation(async ({ input, ctx }) => this.operations.releaseLock(input.key, ctx.userId)),
systemHealth: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.OPS_HEALTH)
.query(async () => this.operations.getSystemHealth()),
setMaintenanceMode: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.OPS_MAINTENANCE)
.input(zod_1.z.object({ enabled: zod_1.z.boolean() }))
.mutation(async ({ input, ctx }) => this.operations.setMaintenanceMode(input.enabled, ctx.userId)),
flushCache: (0, trpc_init_1.adminPermissionProcedure)(shared_types_1.AdminPermission.OPS_CACHE)
.input(zod_1.z.object({ pattern: zod_1.z.string().optional().default("*") }))
.mutation(async ({ input, ctx }) => this.operations.flushCache(input.pattern, ctx.userId)),
}),
me: trpc_init_1.adminProcedure
.query(async ({ ctx }) => {
const context = await this.adminAuth.getAdminContext(ctx.userId);
if (!context)
return null;
return {
userId: context.userId,
isAdmin: context.isAdmin,
role: context.role,
permissions: [...context.permissions],
suspended: context.suspended,
};
}),
});
}
};
exports.AdminRouter = AdminRouter;
exports.AdminRouter = AdminRouter = AdminRouter_1 = __decorate([
(0, common_1.Injectable)(),
__metadata("design:paramtypes", [admin_realtime_service_1.AdminRealtimeService,
admin_clip_scorer_service_1.AdminClipScorerService,
admin_auth_service_1.AdminAuthService,
admin_users_service_1.AdminUsersService,
admin_workspaces_service_1.AdminWorkspacesService,
admin_billing_service_1.AdminBillingService,
admin_moderation_service_1.AdminModerationService,
admin_operations_service_1.AdminOperationsService,
admin_settings_service_1.AdminSettingsService,
admin_audit_service_1.AdminAuditService,
admin_comms_service_1.AdminCommsService,
admin_supervision_service_1.AdminSupervisionService])
], AdminRouter);
//# sourceMappingURL=admin.router.js.map |