This repository has no description
Something went wrong. Try again.
1.9 kB · 50 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051// SPDX-License-Identifier: AGPL-3.0-or-later
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';import {FeatureNotAvailableSelfHostedError} from '@fluxer/errors/src/domains/core/FeatureNotAvailableSelfHostedError';import {CodesResponse, GenerateGiftCodesRequest} from '@fluxer/schema/src/domains/admin/AdminSchemas';import {Config} from '../../Config';import {requireAdminACL} from '../../middleware/AdminMiddleware';import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';import {RateLimitConfigs} from '../../RateLimitConfig';import type {HonoApp} from '../../types/HonoEnv';import {Validator} from '../../Validator';
function trimTrailingSlash(value: string): string { return value.endsWith('/') ? value.slice(0, -1) : value;}
export function CodesAdminController(app: HonoApp) { app.post( '/admin/codes/gift', RateLimitMiddleware(RateLimitConfigs.ADMIN_CODE_GENERATION), requireAdminACL(AdminACLs.GIFT_CODES_GENERATE), Validator('json', GenerateGiftCodesRequest), OpenAPI({ operationId: 'generate_gift_codes', summary: 'Generate gift codes', description: 'Create one-use Plutonium gift codes with an explicit positive duration. Lifetime gifts are not supported.', responseSchema: CodesResponse, statusCode: 200, security: 'adminApiKey', tags: 'Admin', }), async (ctx) => { if (Config.instance.selfHosted) { throw new FeatureNotAvailableSelfHostedError(); } const {count, duration_type, duration_quantity} = ctx.req.valid('json'); const codes = await ctx.get('adminService').codeGenerationService.generateGiftCodes({ count, durationType: duration_type, durationQuantity: duration_quantity, }); const baseUrl = trimTrailingSlash(Config.endpoints.gift); return ctx.json({ codes: codes.map((code) => `${baseUrl}/${code}`), }); }, );}