build-cdn-conf.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. const { fetchWithRetry } = require('./lib/fetch-retry');
  2. const fs = require('fs');
  3. const path = require('path');
  4. const { compareAndWriteFile } = require('./lib/string-array-compare');
  5. const { withBannerArray } = require('./lib/with-banner');
  6. (async () => {
  7. console.time('Total Time - build-cdn-conf');
  8. const domains = (await (await fetchWithRetry('https://publicsuffix.org/list/public_suffix_list.dat')).text()).split('\n');
  9. const S3OSSDomains = domains.filter(line => {
  10. if (line) {
  11. return (
  12. line.startsWith('s3-')
  13. || line.startsWith('s3.')
  14. )
  15. && (
  16. line.endsWith('.amazonaws.com')
  17. || line.endsWith('.scw.cloud')
  18. )
  19. && !line.includes('cn-')
  20. }
  21. return false;
  22. })
  23. const filePath = path.resolve(__dirname, '../Source/non_ip/cdn.conf');
  24. const resultPath = path.resolve(__dirname, '../List/non_ip/cdn.conf');
  25. const content = (await fs.promises.readFile(filePath, 'utf-8'))
  26. .replace(
  27. '# --- [AWS S3 Replace Me] ---',
  28. S3OSSDomains.map(domain => `DOMAIN-SUFFIX,${domain}`).join('\n')
  29. );
  30. await compareAndWriteFile(
  31. withBannerArray(
  32. 'Sukka\'s Surge Rules - CDN Domains',
  33. [
  34. 'License: AGPL 3.0',
  35. 'Homepage: https://ruleset.skk.moe',
  36. 'GitHub: https://github.com/SukkaW/Surge',
  37. '',
  38. 'This file contains object storage and static assets CDN domains.'
  39. ],
  40. new Date(),
  41. content.split('\n')
  42. ),
  43. resultPath
  44. )
  45. console.timeEnd('Total Time - build-cdn-conf');
  46. })();