e2e-web-server.mjs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { randomBytes, scryptSync } from 'node:crypto'
  2. import { mkdirSync, rmSync, writeFileSync } from 'node:fs'
  3. const testHome = '/tmp/hermes-yaoyao-e2e-home'
  4. const testUserID = '11111111-1111-4111-8111-111111111112'
  5. rmSync(testHome, { recursive: true, force: true })
  6. mkdirSync(testHome, { recursive: true, mode: 0o700 })
  7. // The browser fixture exercises the ownership registry, not the mutable
  8. // upstream `source` field. Seed only the sessions that were explicitly
  9. // created by this local Web user; session-history-only deliberately remains
  10. // unowned even though fake Hermes labels it source=web.
  11. const salt = randomBytes(16)
  12. const now = Date.now()
  13. writeFileSync(`${testHome}/users.json`, JSON.stringify({
  14. version: 1,
  15. users: [{
  16. id: testUserID,
  17. username: 'admin',
  18. normalizedUsername: 'admin',
  19. role: 'admin',
  20. enabled: true,
  21. mustChangePassword: false,
  22. salt: salt.toString('base64'),
  23. passwordHash: scryptSync('e2e-password', salt, 32, {
  24. N: 2 ** 14,
  25. r: 8,
  26. p: 1,
  27. maxmem: 64 * 1024 * 1024,
  28. }).toString('base64'),
  29. authVersion: 1,
  30. createdAt: now,
  31. updatedAt: now,
  32. }],
  33. }), { mode: 0o600 })
  34. const ownedSessions = [
  35. ['session-demo', 'yaoyao'],
  36. ['session-second', 'yaoyao'],
  37. ['session-yaoer', 'yaoer'],
  38. ['session-media', 'yaoer'],
  39. ['session-user-media', 'yaoer'],
  40. ...Array.from({ length: 101 }, (_, index) => [`session-page-${index + 1}`, 'yaoyao']),
  41. ]
  42. const { ChatCacheStore } = await import('../../dist-server/server/chatCache.js')
  43. const registry = new ChatCacheStore(testHome, testUserID)
  44. for (const [sessionID, profile] of ownedSessions) {
  45. registry.recordCommand(testUserID, profile, sessionID, 'session.create', {
  46. profile,
  47. source: 'web',
  48. })
  49. }
  50. registry.close()
  51. Object.assign(process.env, {
  52. NODE_ENV: 'production',
  53. HERMES_YAOYAO_HOME: testHome,
  54. HERMES_YAOYAO_HOST: '127.0.0.1',
  55. HERMES_YAOYAO_PORT: '18801',
  56. HERMES_YAOYAO_UPSTREAM: 'http://127.0.0.1:19119',
  57. HERMES_YAOYAO_UPSTREAM_USERNAME: 'test',
  58. HERMES_YAOYAO_UPSTREAM_PASSWORD: 'test',
  59. })
  60. if (process.env.FAKE_HERMES_LOCAL_AUTH === '1') {
  61. delete process.env.HERMES_YAOYAO_UPSTREAM_USERNAME
  62. delete process.env.HERMES_YAOYAO_UPSTREAM_PASSWORD
  63. delete process.env.HERMES_YAOYAO_UPSTREAM_PASSWORD_FILE
  64. }
  65. await import('../../dist-server/server/index.js')