| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import express from 'npm:express';
- import { relayClient, stripIdentityOverrides } from '../../src/relay/relay-client.ts';
- import { isRelayError, redactSecrets } from '../../src/relay/relay-errors.ts';
- const router = express.Router();
- function requestIdOf(req: any): string {
- return (
- (req.headers['x-request-id'] as string) ||
- `sf_${Date.now()}_${Math.random().toString(16).slice(2)}`
- );
- }
- router.get('/health', (_req, res) => {
- res.json({
- service: 'sorftime-relay',
- mode: 'company-relay',
- upstream: '/api/voc-ecom/forward',
- authConfigured: relayClient.authConfigured,
- timestamp: new Date().toISOString(),
- });
- });
- router.get('/test', (_req, res) => {
- res.json({ message: 'Sorftime relay router loaded (company voc-ecom)' });
- });
- /**
- * 保持前端契约:POST /api/sorftime/forward
- * 内部转发到公司 https://server.fmode.cn/api/voc-ecom/forward
- */
- router.post('/forward', async (req: any, res: any) => {
- const requestId = requestIdOf(req);
- res.setHeader('X-Request-Id', requestId);
- try {
- const raw = stripIdentityOverrides(req.body || {});
- const { path, method = 'POST', query, body, isRefresh } = raw;
- if (!path) {
- res.status(400).json({ success: false, message: 'Missing required parameter: path' });
- return;
- }
- const result = await relayClient.forwardSorftime({
- path,
- method,
- query,
- body,
- isRefresh: Boolean(isRefresh),
- requestId,
- });
- res.json(result);
- } catch (error: any) {
- console.warn('[sorftime-relay] forward failed:', redactSecrets(error?.message || error));
- if (isRelayError(error)) {
- res.status(error.status).json({
- success: false,
- code: error.code,
- message: error.message,
- requestId,
- });
- return;
- }
- res.status(500).json({
- success: false,
- message: error?.message || 'Sorftime relay failed',
- requestId,
- });
- }
- });
- export default router;
|