build-cloudmounter-rules.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import path from 'path';
  2. import { DOMAINS, PROCESS_NAMES } from '../Source/non_ip/cloudmounter';
  3. import { SHARED_DESCRIPTION } from './lib/constants';
  4. import { createRuleset } from './lib/create-file';
  5. import { task } from './trace';
  6. const outputSurgeDir = path.resolve(__dirname, '../List');
  7. const outputClashDir = path.resolve(__dirname, '../Clash');
  8. const outputSingboxDir = path.resolve(__dirname, '../sing-box');
  9. export const buildCloudMounterRules = task(require.main === module, __filename)(async (span) => {
  10. // AND,((SRC-IP,192.168.1.110), (DOMAIN, example.com))
  11. const results = DOMAINS.flatMap(domain => {
  12. return PROCESS_NAMES.flatMap(process => [
  13. `AND,((${domain}),(PROCESS-NAME,${process}))`,
  14. ...[
  15. '10.0.0.0/8',
  16. '127.0.0.0/8',
  17. '172.16.0.0/12',
  18. '192.168.0.0/16'
  19. ].map(cidr => `AND,((${domain}),(SRC-IP,${cidr}))`)
  20. ]);
  21. });
  22. const description = SHARED_DESCRIPTION;
  23. return createRuleset(
  24. span,
  25. 'Sukka\'s Ruleset - CloudMounter / RaiDrive',
  26. description,
  27. new Date(),
  28. results,
  29. 'ruleset',
  30. path.resolve(outputSurgeDir, 'non_ip', 'cloudmounter.conf'),
  31. path.resolve(outputClashDir, 'non_ip', 'cloudmounter.txt'),
  32. path.resolve(outputSingboxDir, 'non_ip', 'cloudmounter.json')
  33. );
  34. });