check-captcha-image-src.mjs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import assert from 'node:assert/strict';
  2. import { existsSync, readFileSync } from 'node:fs';
  3. import { Buffer } from 'node:buffer';
  4. import ts from 'typescript';
  5. const moduleUrl = new URL('../client/src/utils/captchaImage.ts', import.meta.url);
  6. assert.ok(
  7. existsSync(moduleUrl),
  8. 'client/src/utils/captchaImage.ts should export captcha image source helpers',
  9. );
  10. const source = readFileSync(moduleUrl, 'utf8');
  11. const { outputText } = ts.transpileModule(source, {
  12. compilerOptions: {
  13. module: ts.ModuleKind.ES2022,
  14. target: ts.ScriptTarget.ES2022,
  15. },
  16. });
  17. const dataUrl = `data:text/javascript;base64,${Buffer.from(outputText, 'utf8').toString('base64')}`;
  18. const { normalizeCaptchaImageSrc, isDisplayableCaptchaImageSrc } = await import(dataUrl);
  19. assert.equal(
  20. normalizeCaptchaImageSrc('/9j/4AAQSkZJRgABAQAAAQABAAD'),
  21. 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD',
  22. );
  23. assert.equal(
  24. normalizeCaptchaImageSrc('iVBORw0KGgoAAAANSUhEUgAAAAUA'),
  25. 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA',
  26. );
  27. assert.equal(
  28. normalizeCaptchaImageSrc('data:image/webp;base64,UklGRiIAAABXRUJQVlA4'),
  29. 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4',
  30. );
  31. assert.equal(
  32. normalizeCaptchaImageSrc('https://example.com/captcha.png'),
  33. 'https://example.com/captcha.png',
  34. );
  35. assert.equal(normalizeCaptchaImageSrc('captcha required'), '');
  36. assert.equal(normalizeCaptchaImageSrc(''), '');
  37. assert.equal(isDisplayableCaptchaImageSrc('/9j/4AAQSkZJRgABAQAAAQABAAD'), true);
  38. assert.equal(isDisplayableCaptchaImageSrc('data:image/png;base64,iVBORw0KGgo='), true);
  39. assert.equal(isDisplayableCaptchaImageSrc('http://127.0.0.1/captcha.jpg'), true);
  40. assert.equal(isDisplayableCaptchaImageSrc('captcha required'), false);
  41. console.log('captcha image source checks passed');