client-headers.test.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. // Run with `node --test apps/next/lib/client-headers.test.ts` from the NEO root (Node 24 strips the types).
  2. import assert from 'node:assert/strict';
  3. import test from 'node:test';
  4. import { dropForeignClientHeaders, resolveEdge } from './client-headers.ts';
  5. const sent = (): Headers =>
  6. new Headers({
  7. 'x-forwarded-for': '203.0.113.77',
  8. 'x-real-ip': '203.0.113.78',
  9. 'cf-connecting-ip': '203.0.113.79',
  10. 'true-client-ip': '203.0.113.80',
  11. 'cf-ipcountry': 'KP',
  12. 'cf-ipcity': 'Pyongyang',
  13. 'x-vercel-ip-country': 'DE',
  14. 'x-vercel-ip-city': 'Berlin',
  15. 'cloudfront-viewer-country': 'FR',
  16. 'x-country-code': 'US',
  17. 'accept-language': 'en',
  18. });
  19. const names = (headers: Headers): string[] => [...headers.keys()].sort();
  20. test('the edge comes from NEO_EDGE, then Vercel, then a proxy', () => {
  21. assert.equal(resolveEdge({ NEO_EDGE: 'Cloudflare' }), 'cloudflare');
  22. assert.equal(resolveEdge({ NEO_EDGE: 'none', VERCEL: '1' }), 'none');
  23. assert.equal(resolveEdge({ VERCEL: '1' }), 'vercel');
  24. assert.equal(resolveEdge({ NEO_EDGE: 'fastly' }), 'proxy');
  25. assert.equal(resolveEdge({}), 'proxy');
  26. });
  27. test('only the edge headers reach UNA', () => {
  28. assert.deepEqual(names(dropForeignClientHeaders(sent(), 'vercel')), ['accept-language', 'x-forwarded-for', 'x-real-ip', 'x-vercel-ip-city', 'x-vercel-ip-country']);
  29. assert.deepEqual(names(dropForeignClientHeaders(sent(), 'cloudflare')), ['accept-language', 'cf-connecting-ip', 'cf-ipcity', 'cf-ipcountry', 'x-forwarded-for']);
  30. assert.deepEqual(names(dropForeignClientHeaders(sent(), 'cloudfront')), ['accept-language', 'cloudfront-viewer-country', 'x-forwarded-for']);
  31. assert.deepEqual(names(dropForeignClientHeaders(sent(), 'proxy')), ['accept-language', 'x-forwarded-for', 'x-real-ip']);
  32. assert.deepEqual(names(dropForeignClientHeaders(sent(), 'none')), ['accept-language']);
  33. assert.deepEqual(names(dropForeignClientHeaders(sent(), 'unknown')), ['accept-language']);
  34. });