From 96f223cf082cd7efc643dc10d52694534bd476ee Mon Sep 17 00:00:00 2001
From: SukkaW
Date: Fri, 17 Jan 2025 09:51:58 +0800
Subject: [PATCH 01/35] Update Global Hosts
---
Source/non_ip/global.conf | 1 +
1 file changed, 1 insertion(+)
diff --git a/Source/non_ip/global.conf b/Source/non_ip/global.conf
index bafe0c434..7c1a983c4 100644
--- a/Source/non_ip/global.conf
+++ b/Source/non_ip/global.conf
@@ -733,6 +733,7 @@ DOMAIN-SUFFIX,mapbox.com
DOMAIN-SUFFIX,mastodon.social
DOMAIN-SUFFIX,macpaw.com
DOMAIN-SUFFIX,matrix.org
+DOMAIN-SUFFIX,matters.town
DOMAIN-SUFFIX,mayoclinic.org
DOMAIN-SUFFIX,meetup.com
DOMAIN-SUFFIX,medallia.com
From 8d5da9776acdca0dc8151aa2e15d29abe6a56712 Mon Sep 17 00:00:00 2001
From: SukkaW
Date: Fri, 17 Jan 2025 10:02:38 +0800
Subject: [PATCH 02/35] Remove dead/outdated domains
---
Source/domainset/reject_sukka_extra.conf | 6 ------
Source/non_ip/direct.conf | 1 -
2 files changed, 7 deletions(-)
diff --git a/Source/domainset/reject_sukka_extra.conf b/Source/domainset/reject_sukka_extra.conf
index 330462dac..30e4bfcdf 100644
--- a/Source/domainset/reject_sukka_extra.conf
+++ b/Source/domainset/reject_sukka_extra.conf
@@ -1004,7 +1004,6 @@
.elhereum.com
.oggnalive.com
.hashitmining.com
-.equihashmining.com
.tucanpool.com
.erstweal.com
.ethashpool.com
@@ -1509,7 +1508,6 @@
.smartcoinpool.net
.theminershaven.net
.aevocoin.net
-.cryptopool.net
.cccpool.net
.airfreedom.net
.miningpeon.net
@@ -2510,8 +2508,6 @@
.gabberpool.nl
.123unlock.nl
.stx.nl
-.adcash.ga
-.wordc.ga
.adzjzewsma.cf
.as.cf
.bitcoin-server.cf
@@ -2944,7 +2940,6 @@
.eos.blue
.ape.capital
.bitetimes.fishing
-.diabase.zone
.raptoreum.zone
.bitmining.zone
.candid.zone
@@ -2969,7 +2964,6 @@
.cloudcdn.gdn
.binance.click
.gemini.click
-.korbit.click
.bloc.money
.bitnet.money
.iwanttoearn.money
diff --git a/Source/non_ip/direct.conf b/Source/non_ip/direct.conf
index 25b85c9b5..05fe9f02b 100644
--- a/Source/non_ip/direct.conf
+++ b/Source/non_ip/direct.conf
@@ -111,7 +111,6 @@ DOMAIN-SUFFIX,hdhome.org
DOMAIN-SUFFIX,hdpost.top
DOMAIN-SUFFIX,hdroute.org
DOMAIN-SUFFIX,hdsky.me
-DOMAIN-SUFFIX,hdstreet.club
DOMAIN-SUFFIX,hdtime.org
DOMAIN-SUFFIX,hdupt.com
DOMAIN-SUFFIX,hdzone.me
From 6858cd63b46aa66e3f40fe2e4092167c98145ab5 Mon Sep 17 00:00:00 2001
From: SukkaW
Date: Fri, 17 Jan 2025 14:43:35 +0800
Subject: [PATCH 03/35] Feat: `sukka_local_dns_mapping.sgmodule` now uses new
rule-set syntax
---
...c-direct-lan-ruleset-dns-mapping-module.ts | 76 ++++++++++++++-----
Build/constants/dir.ts | 1 +
Build/lib/rules/base.ts | 46 +++++++----
Build/lib/rules/ruleset.ts | 2 +-
Source/non_ip/direct.ts | 6 ++
Source/non_ip/domestic.ts | 40 +++++-----
6 files changed, 119 insertions(+), 52 deletions(-)
diff --git a/Build/build-domestic-direct-lan-ruleset-dns-mapping-module.ts b/Build/build-domestic-direct-lan-ruleset-dns-mapping-module.ts
index e501aded1..cc16a0712 100644
--- a/Build/build-domestic-direct-lan-ruleset-dns-mapping-module.ts
+++ b/Build/build-domestic-direct-lan-ruleset-dns-mapping-module.ts
@@ -10,7 +10,7 @@ import { SHARED_DESCRIPTION } from './constants/description';
import { createMemoizedPromise } from './lib/memo-promise';
import * as yaml from 'yaml';
import { appendArrayInPlace } from './lib/append-array-in-place';
-import { OUTPUT_INTERNAL_DIR, OUTPUT_MODULES_DIR, SOURCE_DIR } from './constants/dir';
+import { OUTPUT_INTERNAL_DIR, OUTPUT_MODULES_DIR, OUTPUT_MODULES_RULES_DIR, SOURCE_DIR } from './constants/dir';
import { RulesetOutput } from './lib/create-file';
export function createGetDnsMappingRule(allowWildcard: boolean) {
@@ -78,7 +78,7 @@ export const getDomesticAndDirectDomainsRulesetPromise = createMemoizedPromise(a
export const buildDomesticRuleset = task(require.main === module, __filename)(async (span) => {
const [domestics, directs, lans] = await getDomesticAndDirectDomainsRulesetPromise();
- const dataset: DNSMapping[] = ([DOH_BOOTSTRAP, DOMESTICS, DIRECTS] as const).flatMap(Object.values);
+ const dataset: Array<[name: string, DNSMapping]> = ([DOH_BOOTSTRAP, DOMESTICS, DIRECTS, LAN] as const).flatMap(Object.entries);
return Promise.all([
new RulesetOutput(span, 'domestic', 'non_ip')
@@ -108,6 +108,41 @@ export const buildDomesticRuleset = task(require.main === module, __filename)(as
])
.addFromRuleset(lans)
.write(),
+
+ ...dataset.map(([name, { ruleset, domains }]) => {
+ if (!ruleset) {
+ return;
+ }
+
+ const output = new RulesetOutput(span, name.toLowerCase(), 'sukka_local_dns_mapping').withTitle(`Sukka's Ruleset - Local DNS Mapping (${name})`).withDescription([
+ ...SHARED_DESCRIPTION,
+ '',
+ 'This is an internal rule that is only referenced by sukka_local_dns_mapping.sgmodule',
+ 'Do not use this file in your Rule section, all rules are included in non_ip/domestic.conf already.'
+ ]);
+
+ domains.forEach((domain) => {
+ switch (domain[0]) {
+ case '$':
+ output.addDomain(domain.slice(1));
+ break;
+ case '+':
+ output.addDomainSuffix(domain.slice(1));
+ break;
+ default:
+ output.addDomainSuffix(domain);
+ break;
+ }
+ });
+
+ return output.write({
+ surge: true,
+ clash: false,
+ singbox: false,
+ surgeDir: OUTPUT_MODULES_RULES_DIR
+ });
+ }),
+
compareAndWriteFile(
span,
[
@@ -119,26 +154,31 @@ export const buildDomesticRuleset = task(require.main === module, __filename)(as
// I use an object to deduplicate the domains
// Otherwise I could just construct an array directly
dataset.reduce>((acc, cur) => {
- const { domains, dns, hosts } = cur;
+ const ruleset_name = cur[0].toLowerCase();
+ const { domains, dns, hosts, ruleset } = cur[1];
Object.entries(hosts).forEach(([dns, ips]) => {
acc[dns] ||= ips.join(', ');
});
- domains.forEach((domain) => {
- switch (domain[0]) {
- case '$':
- acc[domain.slice(1)] ||= `server:${dns}`;
- break;
- case '+':
- acc[`*.${domain.slice(1)}`] ||= `server:${dns}`;
- break;
- default:
- acc[domain] ||= `server:${dns}`;
- acc[`*.${domain}`] ||= `server:${dns}`;
- break;
- }
- });
+ if (ruleset) {
+ acc[`RULE-SET:https://ruleset.skk.moe/Modules/Rules/sukka_local_dns_mapping/${ruleset_name}.conf`] ||= `server:${dns}`;
+ } else {
+ domains.forEach((domain) => {
+ switch (domain[0]) {
+ case '$':
+ acc[domain.slice(1)] ||= `server:${dns}`;
+ break;
+ case '+':
+ acc[`*.${domain.slice(1)}`] ||= `server:${dns}`;
+ break;
+ default:
+ acc[domain] ||= `server:${dns}`;
+ acc[`*.${domain}`] ||= `server:${dns}`;
+ break;
+ }
+ });
+ }
return acc;
}, {})
@@ -153,7 +193,7 @@ export const buildDomesticRuleset = task(require.main === module, __filename)(as
dns: { 'nameserver-policy': Record },
hosts: Record
}>((acc, cur) => {
- const { domains, dns, ...rest } = cur;
+ const { domains, dns, ...rest } = cur[1];
domains.forEach((domain) => {
let domainWildcard = domain;
if (domain[0] === '$') {
diff --git a/Build/constants/dir.ts b/Build/constants/dir.ts
index 335bb5cdf..956154267 100644
--- a/Build/constants/dir.ts
+++ b/Build/constants/dir.ts
@@ -11,5 +11,6 @@ export const OUTPUT_SURGE_DIR = path.join(PUBLIC_DIR, 'List');
export const OUTPUT_CLASH_DIR = path.resolve(PUBLIC_DIR, 'Clash');
export const OUTPUT_SINGBOX_DIR = path.resolve(PUBLIC_DIR, 'sing-box');
export const OUTPUT_MODULES_DIR = path.resolve(PUBLIC_DIR, 'Modules');
+export const OUTPUT_MODULES_RULES_DIR = path.resolve(OUTPUT_MODULES_DIR, 'Rules');
export const OUTPUT_INTERNAL_DIR = path.resolve(PUBLIC_DIR, 'Internal');
export const OUTPUT_MOCK_DIR = path.resolve(PUBLIC_DIR, 'Mock');
diff --git a/Build/lib/rules/base.ts b/Build/lib/rules/base.ts
index 1d681a382..b0ddf2899 100644
--- a/Build/lib/rules/base.ts
+++ b/Build/lib/rules/base.ts
@@ -34,7 +34,7 @@ export abstract class RuleOutput {
protected destPort = new Set();
protected otherRules: string[] = [];
- protected abstract type: 'domainset' | 'non_ip' | 'ip';
+ protected abstract type: 'domainset' | 'non_ip' | 'ip' | (string & {});
private pendingPromise: Promise | null = null;
@@ -295,13 +295,29 @@ export abstract class RuleOutput {
);
}
- write(): Promise {
+ write({
+ surge = true,
+ clash = true,
+ singbox = true,
+ surgeDir = OUTPUT_SURGE_DIR,
+ clashDir = OUTPUT_CLASH_DIR,
+ singboxDir = OUTPUT_SINGBOX_DIR
+ }: {
+ surge?: boolean,
+ clash?: boolean,
+ singbox?: boolean,
+ surgeDir?: string,
+ clashDir?: string,
+ singboxDir?: string
+ } = {}): Promise {
return this.done().then(() => this.span.traceChildAsync('write all', async () => {
invariant(this.title, 'Missing title');
invariant(this.description, 'Missing description');
- const promises = [
- compareAndWriteFile(
+ const promises: Array> = [];
+
+ if (surge) {
+ promises.push(compareAndWriteFile(
this.span,
withBannerArray(
this.title,
@@ -309,9 +325,11 @@ export abstract class RuleOutput {
this.date,
this.surge()
),
- path.join(OUTPUT_SURGE_DIR, this.type, this.id + '.conf')
- ),
- compareAndWriteFile(
+ path.join(surgeDir, this.type, this.id + '.conf')
+ ));
+ }
+ if (clash) {
+ promises.push(compareAndWriteFile(
this.span,
withBannerArray(
this.title,
@@ -319,14 +337,16 @@ export abstract class RuleOutput {
this.date,
this.clash()
),
- path.join(OUTPUT_CLASH_DIR, this.type, this.id + '.txt')
- ),
- compareAndWriteFile(
+ path.join(clashDir, this.type, this.id + '.txt')
+ ));
+ }
+ if (singbox) {
+ promises.push(compareAndWriteFile(
this.span,
this.singbox(),
- path.join(OUTPUT_SINGBOX_DIR, this.type, this.id + '.json')
- )
- ];
+ path.join(singboxDir, this.type, this.id + '.json')
+ ));
+ }
if (this.mitmSgmodule) {
const sgmodule = this.mitmSgmodule();
diff --git a/Build/lib/rules/ruleset.ts b/Build/lib/rules/ruleset.ts
index 87da0865b..c45e1cf51 100644
--- a/Build/lib/rules/ruleset.ts
+++ b/Build/lib/rules/ruleset.ts
@@ -12,7 +12,7 @@ import { isProbablyIpv4, isProbablyIpv6 } from 'foxts/is-probably-ip';
type Preprocessed = [domain: string[], domainSuffix: string[], sortedDomainRules: string[]];
export class RulesetOutput extends RuleOutput {
- constructor(span: Span, id: string, protected type: 'non_ip' | 'ip') {
+ constructor(span: Span, id: string, protected type: 'non_ip' | 'ip' | (string & {})) {
super(span, id);
}
diff --git a/Source/non_ip/direct.ts b/Source/non_ip/direct.ts
index 1217d37c1..4b55af003 100644
--- a/Source/non_ip/direct.ts
+++ b/Source/non_ip/direct.ts
@@ -4,6 +4,8 @@ export interface DNSMapping {
},
/** which also disallows wildcard */
realip: boolean,
+ /** should convert to ruleset */
+ ruleset: boolean,
dns: string,
/**
* domain[0]
@@ -20,6 +22,7 @@ export const DIRECTS = {
dns: 'system',
hosts: {},
realip: false,
+ ruleset: false,
domains: [
'securelogin.com.cn',
'$captive.apple.com',
@@ -30,6 +33,7 @@ export const DIRECTS = {
dns: 'system',
hosts: {},
realip: true,
+ ruleset: false,
domains: [
'+m2m',
// '+ts.net', // TailScale Magic DNS
@@ -47,6 +51,7 @@ export const LAN = {
dns: 'system',
hosts: {},
realip: false,
+ ruleset: true,
domains: [
'+home',
// 'zte.home', // ZTE CPE
@@ -106,6 +111,7 @@ export const LAN = {
localhost: ['127.0.0.1']
},
realip: true,
+ ruleset: true,
domains: [
'+lan',
// 'amplifi.lan',
diff --git a/Source/non_ip/domestic.ts b/Source/non_ip/domestic.ts
index 9e16f18ed..62fb25696 100644
--- a/Source/non_ip/domestic.ts
+++ b/Source/non_ip/domestic.ts
@@ -5,6 +5,7 @@ export const DOMESTICS: Record = {
hosts: {},
dns: 'quic://dns.alidns.com:853',
realip: false,
+ ruleset: true,
domains: [
'uc.cn',
// 'ucweb.com', // UC International
@@ -82,13 +83,18 @@ export const DOMESTICS: Record = {
'tanx.com',
'hellobike.com',
'+hichina.com',
- '+yunos.com'
+ '+yunos.com',
+
+ // Bilibili Aliyun CDN
+ '$upos-sz-mirrorali.bilivideo.com',
+ '$upos-sz-estgoss.bilivideo.com'
]
},
TENCENT: {
hosts: {},
dns: 'https://doh.pub/dns-query',
realip: false,
+ ruleset: true,
domains: [
// 'dns.pub',
// 'doh.pub',
@@ -144,28 +150,11 @@ export const DOMESTICS: Record = {
'+codehub.cn'
]
},
- BILIBILI_ALI: {
- dns: 'quic://dns.alidns.com:853',
- hosts: {},
- realip: false,
- domains: [
- '$upos-sz-mirrorali.bilivideo.com',
- '$upos-sz-estgoss.bilivideo.com'
- ]
- },
- BILIBILI_BD: {
- dns: '180.76.76.76',
- hosts: {},
- realip: false,
- domains: [
- '$upos-sz-mirrorbd.bilivideo.com',
- '$upos-sz-mirrorbos.bilivideo.com'
- ]
- },
BILIBILI: {
dns: 'https://doh.pub/dns-query',
hosts: {},
realip: false,
+ ruleset: true,
domains: [
// '$upos-sz-mirrorcoso1.bilivideo.com', // already included in bilivideo.com
// '$upos-sz-estgcos.bilivideo.com', // already included in bilivideo.com, tencent cloud cdn
@@ -196,6 +185,7 @@ export const DOMESTICS: Record = {
dns: 'https://doh.pub/dns-query',
hosts: {},
realip: false,
+ ruleset: true,
domains: [
'mi.com',
'duokan.com',
@@ -218,6 +208,7 @@ export const DOMESTICS: Record = {
dns: '180.184.2.2',
hosts: {},
realip: false,
+ ruleset: true,
domains: [
'bytedance.com',
'+bytecdn.cn',
@@ -271,6 +262,7 @@ export const DOMESTICS: Record = {
dns: '180.76.76.76',
hosts: {},
realip: false,
+ ruleset: true,
domains: [
'91.com',
'hao123.com',
@@ -295,13 +287,18 @@ export const DOMESTICS: Record = {
'+bdydns.com',
'+jomoxc.com', // Baidu PCDN, of sort
'+duapp.com',
- '+antpcdn.com' // Baidu PCDN
+ '+antpcdn.com', // Baidu PCDN
+
+ // Bilibili Baidu CDN
+ '$upos-sz-mirrorbd.bilivideo.com',
+ '$upos-sz-mirrorbos.bilivideo.com'
]
},
QIHOO360: {
hosts: {},
dns: 'https://doh.360.cn/dns-query',
realip: false,
+ ruleset: true,
domains: [
'+qhimg.com',
'+qhimgs.com',
@@ -350,6 +347,7 @@ export const DOH_BOOTSTRAP: Record = {
'dns.alidns.com': ['223.5.5.5', '223.6.6.6', '2400:3200:baba::1', '2400:3200::1']
},
realip: false,
+ ruleset: false,
dns: 'quic://223.5.5.5:853',
domains: [
'$dns.alidns.com'
@@ -362,6 +360,7 @@ export const DOH_BOOTSTRAP: Record = {
// 'dns.pub': ['120.53.53.53', '1.12.12.12']
},
realip: false,
+ ruleset: false,
dns: 'https://1.12.12.12/dns-query',
domains: [
// '$dot.pub',
@@ -382,6 +381,7 @@ export const DOH_BOOTSTRAP: Record = {
// dot.360.net CNAME dns.360.net
},
realip: false,
+ ruleset: false,
// Surge only supports UDP 53 or Hosts as the bootstrap server of domain DoH
dns: '101.198.198.198', // 'https://101.198.198.198/dns-query', // https://101.198.199.200/dns-query
domains: [
From 79c8e2ceef4a5eb618c25ae19ea50a39e5838129 Mon Sep 17 00:00:00 2001
From: SukkaW
Date: Fri, 17 Jan 2025 17:36:38 +0800
Subject: [PATCH 04/35] Update CDN & Global Hosts
---
Source/domainset/cdn.conf | 5 +++++
Source/non_ip/global.conf | 2 ++
2 files changed, 7 insertions(+)
diff --git a/Source/domainset/cdn.conf b/Source/domainset/cdn.conf
index 56e6ef9f5..a4306db47 100644
--- a/Source/domainset/cdn.conf
+++ b/Source/domainset/cdn.conf
@@ -325,6 +325,9 @@ openapi.vercel.sh
# >> Static.app
.static.domains
+# >> Fleek
+.on-fleek.app
+
# >> Twitter
.twimg.com
cdn.cms-twdigitalassets.com
@@ -478,6 +481,7 @@ ip-ranges.amazonaws.com
.assets.shortbread.aws.dev
.cdn.chrome.marketplace.aws.dev
.widgets.marketplace.aws.dev
+cdn.builderprofile.aws.dev
# >> SB.SB
ooo.0o0.ooo
@@ -3892,3 +3896,4 @@ media.lantern.io
image.vuukle.com
cdn.vuukle.com
touchgal-image.moyu.moe
+libraries.hund.io
diff --git a/Source/non_ip/global.conf b/Source/non_ip/global.conf
index 7c1a983c4..6f9305bf8 100644
--- a/Source/non_ip/global.conf
+++ b/Source/non_ip/global.conf
@@ -679,6 +679,7 @@ DOMAIN-SUFFIX,iheart.com
DOMAIN-SUFFIX,iloveimg.com
DOMAIN-SUFFIX,imo.im
DOMAIN-SUFFIX,influxdata.com
+DOMAIN-SUFFIX,instatus.com
DOMAIN-SUFFIX,imdb.com
DOMAIN-SUFFIX,imgur.com
DOMAIN-SUFFIX,intel.com
@@ -932,6 +933,7 @@ DOMAIN-SUFFIX,vivaldi.com
DOMAIN-SUFFIX,vk.com
DOMAIN-SUFFIX,vmware.com
DOMAIN-SUFFIX,voachinese.com
+DOMAIN-SUFFIX,voanews.com
DOMAIN-SUFFIX,wakatime.com
DOMAIN-SUFFIX,w3schools.com
DOMAIN-SUFFIX,waifu2x.net
From 43085cc00e075ea5183a3913f39cbe32142fc9e2 Mon Sep 17 00:00:00 2001
From: SukkaW
Date: Fri, 17 Jan 2025 20:43:56 +0800
Subject: [PATCH 05/35] Chore: drop reject stats generation
---
Build/build-public.ts | 5 +++--
Build/build-reject-domainset.ts | 17 --------------
Build/lib/rules/domainset.ts | 40 ---------------------------------
3 files changed, 3 insertions(+), 59 deletions(-)
diff --git a/Build/build-public.ts b/Build/build-public.ts
index 68e21dc83..44a27373b 100644
--- a/Build/build-public.ts
+++ b/Build/build-public.ts
@@ -6,7 +6,7 @@ import { task } from './trace';
import { treeDir, TreeFileType } from './lib/tree-dir';
import type { TreeType, TreeTypeArray } from './lib/tree-dir';
-import { OUTPUT_MOCK_DIR, OUTPUT_MODULES_DIR, PUBLIC_DIR, ROOT_DIR } from './constants/dir';
+import { OUTPUT_MOCK_DIR, OUTPUT_MODULES_DIR, OUTPUT_MODULES_RULES_DIR, PUBLIC_DIR, ROOT_DIR } from './constants/dir';
import { fastStringCompare, mkdirp, writeFile } from './lib/misc';
import picocolors from 'picocolors';
import { tagged as html } from 'foxts/tagged';
@@ -34,7 +34,8 @@ async function copyDirContents(srcDir: string, destDir: string) {
export const buildPublic = task(require.main === module, __filename)(async (span) => {
await span.traceChildAsync('copy rest of the files', async () => {
await Promise.all([
- mkdirp(OUTPUT_MODULES_DIR),
+ // mkdirp(OUTPUT_MODULES_DIR),
+ mkdirp(OUTPUT_MODULES_RULES_DIR),
mkdirp(OUTPUT_MOCK_DIR)
]);
diff --git a/Build/build-reject-domainset.ts b/Build/build-reject-domainset.ts
index f837c3dcc..bd713292d 100644
--- a/Build/build-reject-domainset.ts
+++ b/Build/build-reject-domainset.ts
@@ -129,26 +129,9 @@ export const buildRejectDomainSet = task(require.main === module, __filename)(as
}
});
- // Create reject stats
- const rejectDomainsStats: string[] = span
- .traceChild('create reject stats')
- .traceSyncFn(() => {
- const results = [];
- results.push('=== base ===');
- appendArrayInPlace(results, rejectOutput.getStatMap());
- results.push('=== extra ===');
- appendArrayInPlace(results, rejectExtraOutput.getStatMap());
- return results;
- });
-
return Promise.all([
rejectOutput.write(),
rejectExtraOutput.write(),
- compareAndWriteFile(
- span,
- rejectDomainsStats,
- path.join(OUTPUT_INTERNAL_DIR, 'reject-stats.txt')
- ),
compareAndWriteFile(
span,
appendArrayInPlace(
diff --git a/Build/lib/rules/domainset.ts b/Build/lib/rules/domainset.ts
index 845de59bf..5643774f1 100644
--- a/Build/lib/rules/domainset.ts
+++ b/Build/lib/rules/domainset.ts
@@ -1,11 +1,7 @@
-import { invariant } from 'foxts/guard';
import { createRetrieKeywordFilter as createKeywordFilter } from 'foxts/retrie';
import { RuleOutput } from './base';
import type { SingboxSourceFormat } from '../singbox';
-import * as tldts from 'tldts-experimental';
-import { looseTldtsOpt } from '../../constants/loose-tldts-opt';
-import { fastStringCompare } from '../misc';
import { escapeStringRegexp } from 'foxts/escape-string-regexp';
export class DomainsetOutput extends RuleOutput {
@@ -55,42 +51,6 @@ export class DomainsetOutput extends RuleOutput {
} satisfies SingboxSourceFormat);
}
- protected apexDomainMap: Map | null = null;
- getStatMap() {
- this.runPreprocess();
-
- invariant(this.$preprocessed, 'Non dumped yet');
-
- if (!this.apexDomainMap) {
- const domainMap = new Map();
-
- for (let i = 0, len = this.$preprocessed.length; i < len; i++) {
- const cur = this.$preprocessed[i];
- if (!domainMap.has(cur)) {
- const domain = tldts.getDomain(cur, looseTldtsOpt);
- domainMap.set(cur, domain ?? cur);
- }
- }
- this.apexDomainMap = domainMap;
- }
-
- return Array.from(this.$preprocessed
- .reduce
+
+
+
+
From 0774cb4fa41a06097fc88c8c607393231324ece6 Mon Sep 17 00:00:00 2001
From: SukkaW
Date: Sun, 19 Jan 2025 16:54:08 +0800
Subject: [PATCH 33/35] Update CDN Hosts
---
Source/domainset/cdn.conf | 6 +++---
Source/non_ip/cdn.conf | 2 ++
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/Source/domainset/cdn.conf b/Source/domainset/cdn.conf
index a4306db47..e709124e9 100644
--- a/Source/domainset/cdn.conf
+++ b/Source/domainset/cdn.conf
@@ -1030,9 +1030,6 @@ na-library.klarnaservices.com
cdn.onesignal.com
cdn.privacy-mgmt.com
cdn.concert.io
-euc-widget.freshworks.com
-widget.freshworks.com
-dam.freshworks.com
cdn-public.sociabble.com
embed.savvycal.com
js.pusher.com
@@ -3183,6 +3180,8 @@ creativajs.altervista.org
s.namemc.com
minotar.net
dam.freshworks.com
+euc-widget.freshworks.com
+widget.freshworks.com
cdn.now.gg
cms-cdn.now.gg
cdn-www.bluestacks.com
@@ -3897,3 +3896,4 @@ image.vuukle.com
cdn.vuukle.com
touchgal-image.moyu.moe
libraries.hund.io
+cdn.geekzone.co.nz
diff --git a/Source/non_ip/cdn.conf b/Source/non_ip/cdn.conf
index e41e04f22..3cdc25d3f 100644
--- a/Source/non_ip/cdn.conf
+++ b/Source/non_ip/cdn.conf
@@ -43,6 +43,8 @@ DOMAIN-WILDCARD,static-??-cdn.eporner.com
# Mikufuns
DOMAIN-WILDCARD,file?.mikuclub.fun
DOMAIN-WILDCARD,cdn?.mikuclub.fun
+# FreshDesk
+DOMAIN-WILDCARD,assets*.freshdesk.com
# >> Embed
DOMAIN-WILDCARD,cdns.*.gigya.com
# >> Braze SDK
From 86bec809cbd155346e8a86c79c2721d9c551c567 Mon Sep 17 00:00:00 2001
From: SukkaW
Date: Mon, 20 Jan 2025 09:23:25 +0800
Subject: [PATCH 34/35] Update CDN & Global Hosts
---
Source/domainset/cdn.conf | 1 +
Source/non_ip/global.conf | 1 +
2 files changed, 2 insertions(+)
diff --git a/Source/domainset/cdn.conf b/Source/domainset/cdn.conf
index e709124e9..4174adb04 100644
--- a/Source/domainset/cdn.conf
+++ b/Source/domainset/cdn.conf
@@ -112,6 +112,7 @@ eslint.style
.eggjs.org
.stylexjs.com
pytorch.org
+nextra.site
# JS.ORG
.js.org
diff --git a/Source/non_ip/global.conf b/Source/non_ip/global.conf
index 6f9305bf8..1f2b3e43e 100644
--- a/Source/non_ip/global.conf
+++ b/Source/non_ip/global.conf
@@ -774,6 +774,7 @@ DOMAIN-SUFFIX,npm.io
DOMAIN-SUFFIX,npmjs.com
DOMAIN-SUFFIX,nssurge.com
DOMAIN-SUFFIX,netify.ai
+DOMAIN-SUFFIX,nextra.site
DOMAIN-SUFFIX,nyaa.si
DOMAIN-SUFFIX,nypost.com
DOMAIN-SUFFIX,nyt.com
From a0ccd43be978973fcd1b535dfc32538bce299cea Mon Sep 17 00:00:00 2001
From: SukkaW
Date: Mon, 20 Jan 2025 09:55:01 +0800
Subject: [PATCH 35/35] Update Reject Hosts
---
Source/domainset/reject_sukka.conf | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Source/domainset/reject_sukka.conf b/Source/domainset/reject_sukka.conf
index 4d5b2ffa8..45b54f09b 100644
--- a/Source/domainset/reject_sukka.conf
+++ b/Source/domainset/reject_sukka.conf
@@ -714,6 +714,8 @@ pub-7a9aae2813a742e1b02d588e632e401b.r2.dev
.sc.origins.en25.com
.ignite.technology
.zayac2volk11.com
+.xad.js.org
+.affiliates.purevpn.com
adimg.daumcdn.net
.ad.daum.net