"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