import * as plugins from '../../plugins.js'; import type { OpsServer } from '../classes.opsserver.js'; import * as interfaces from '../../../ts_interfaces/index.js'; export class ApiTokenHandler { constructor(private opsServerRef: OpsServer) { this.registerHandlers(); } private registerHandlers(): void { // All token management endpoints register directly on adminRouter // (middleware enforces admin JWT check, so no per-handler requireAdmin needed) const router = this.opsServerRef.adminRouter; // Create API token router.addTypedHandler( new plugins.typedrequest.TypedHandler( 'createApiToken', async (dataArg) => { const manager = this.opsServerRef.dcRouterRef.apiTokenManager; if (!manager) { return { success: false, message: 'Token management not initialized' }; } const result = await manager.createToken( dataArg.name, dataArg.scopes, dataArg.expiresInDays ?? null, dataArg.identity.userId, ); return { success: true, tokenId: result.id, tokenValue: result.rawToken }; }, ), ); // List API tokens router.addTypedHandler( new plugins.typedrequest.TypedHandler( 'listApiTokens', async (dataArg) => { const manager = this.opsServerRef.dcRouterRef.apiTokenManager; if (!manager) { return { tokens: [] }; } return { tokens: manager.listTokens() }; }, ), ); // Revoke API token router.addTypedHandler( new plugins.typedrequest.TypedHandler( 'revokeApiToken', async (dataArg) => { const manager = this.opsServerRef.dcRouterRef.apiTokenManager; if (!manager) { return { success: false, message: 'Token management not initialized' }; } const ok = await manager.revokeToken(dataArg.id); return { success: ok, message: ok ? undefined : 'Token not found' }; }, ), ); // Roll API token router.addTypedHandler( new plugins.typedrequest.TypedHandler( 'rollApiToken', async (dataArg) => { const manager = this.opsServerRef.dcRouterRef.apiTokenManager; if (!manager) { return { success: false, message: 'Token management not initialized' }; } const result = await manager.rollToken(dataArg.id); if (!result) { return { success: false, message: 'Token not found' }; } return { success: true, tokenValue: result.rawToken }; }, ), ); // Toggle API token router.addTypedHandler( new plugins.typedrequest.TypedHandler( 'toggleApiToken', async (dataArg) => { const manager = this.opsServerRef.dcRouterRef.apiTokenManager; if (!manager) { return { success: false, message: 'Token management not initialized' }; } const ok = await manager.toggleToken(dataArg.id, dataArg.enabled); return { success: ok, message: ok ? undefined : 'Token not found' }; }, ), ); } }