File size: 1,892 Bytes
c78c312
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
/**
 * STM (Semantic Transformation Module) API Routes
 *
 * POST /v1/transform — Apply one or more STM modules to text
 */

import { Router } from 'express'
import {
  allModules,
  applySTMs,
  type STMModule,
} from '../../src/stm/modules'

export const transformRoutes = Router()

const AVAILABLE_MODULE_IDS = allModules.map(m => m.id)

transformRoutes.post('/', (req, res) => {
  try {
    const { text, modules: requestedModules } = req.body

    if (!text || typeof text !== 'string') {
      res.status(400).json({ error: 'text (string) is required' })
      return
    }

    // Default: apply all modules
    let moduleIds: string[] = AVAILABLE_MODULE_IDS
    if (Array.isArray(requestedModules)) {
      // Validate module IDs
      const invalid = requestedModules.filter((id: string) => !AVAILABLE_MODULE_IDS.includes(id))
      if (invalid.length > 0) {
        res.status(400).json({
          error: `Invalid module ID(s): ${invalid.join(', ')}. Available: ${AVAILABLE_MODULE_IDS.join(', ')}`,
        })
        return
      }
      moduleIds = requestedModules
    }

    // Create module copies with enabled set based on request
    const enabledModules: STMModule[] = allModules.map(m => ({
      ...m,
      enabled: moduleIds.includes(m.id),
    }))

    const result = applySTMs(text, enabledModules)

    res.json({
      original_text: text,
      transformed_text: result,
      modules_applied: moduleIds,
      available_modules: allModules.map(m => ({
        id: m.id,
        name: m.name,
        description: m.description,
      })),
    })
  } catch (err: any) {
    res.status(500).json({ error: err.message })
  }
})

transformRoutes.get('/modules', (_req, res) => {
  res.json({
    modules: allModules.map(m => ({
      id: m.id,
      name: m.name,
      description: m.description,
      version: m.version,
      author: m.author,
    })),
  })
})