sorftime-routes.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import express from 'npm:express';
  2. import { relayClient, stripIdentityOverrides } from '../../src/relay/relay-client.ts';
  3. import { isRelayError, redactSecrets } from '../../src/relay/relay-errors.ts';
  4. const router = express.Router();
  5. function requestIdOf(req: any): string {
  6. return (
  7. (req.headers['x-request-id'] as string) ||
  8. `sf_${Date.now()}_${Math.random().toString(16).slice(2)}`
  9. );
  10. }
  11. router.get('/health', (_req, res) => {
  12. res.json({
  13. service: 'sorftime-relay',
  14. mode: 'company-relay',
  15. upstream: '/api/voc-ecom/forward',
  16. authConfigured: relayClient.authConfigured,
  17. timestamp: new Date().toISOString(),
  18. });
  19. });
  20. router.get('/test', (_req, res) => {
  21. res.json({ message: 'Sorftime relay router loaded (company voc-ecom)' });
  22. });
  23. /**
  24. * 保持前端契约:POST /api/sorftime/forward
  25. * 内部转发到公司 https://server.fmode.cn/api/voc-ecom/forward
  26. */
  27. router.post('/forward', async (req: any, res: any) => {
  28. const requestId = requestIdOf(req);
  29. res.setHeader('X-Request-Id', requestId);
  30. try {
  31. const raw = stripIdentityOverrides(req.body || {});
  32. const { path, method = 'POST', query, body, isRefresh } = raw;
  33. if (!path) {
  34. res.status(400).json({ success: false, message: 'Missing required parameter: path' });
  35. return;
  36. }
  37. const result = await relayClient.forwardSorftime({
  38. path,
  39. method,
  40. query,
  41. body,
  42. isRefresh: Boolean(isRefresh),
  43. requestId,
  44. });
  45. res.json(result);
  46. } catch (error: any) {
  47. console.warn('[sorftime-relay] forward failed:', redactSecrets(error?.message || error));
  48. if (isRelayError(error)) {
  49. res.status(error.status).json({
  50. success: false,
  51. code: error.code,
  52. message: error.message,
  53. requestId,
  54. });
  55. return;
  56. }
  57. res.status(500).json({
  58. success: false,
  59. message: error?.message || 'Sorftime relay failed',
  60. requestId,
  61. });
  62. }
  63. });
  64. export default router;