'use strict';Object.defineProperty(exports,Symbol.toStringTag,{value:'Module'});const buildCdnDownloadConf=require('../_virtual/build-cdn-download-conf.cjs'),require$$0$1=require('node:path'),fetchTextByLine=require('./lib/fetch-text-by-line.cjs'),trie=require('./lib/trie.cjs'),index=require('./trace/index.cjs'),description=require('./constants/description.cjs'),appendArrayInPlace=require('./lib/append-array-in-place.cjs'),dir=require('./constants/dir.cjs'),domainset=require('./lib/rules/domainset.cjs'),rejectDataSource=require('./constants/reject-data-source.cjs'),require$$0=require('foxts/append-set-elements-to-array');var hasRequiredBuildCdnDownloadConf; function requireBuildCdnDownloadConf () { if (hasRequiredBuildCdnDownloadConf) return buildCdnDownloadConf.__module.exports; hasRequiredBuildCdnDownloadConf = 1; (function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "buildCdnDownloadConf", { enumerable: true, get: function() { return buildCdnDownloadConf; } }); const _nodepath = /*#__PURE__*/ _interop_require_default(require$$0$1); const _fetchtextbyline = /*@__PURE__*/ fetchTextByLine.__require(); const _trie = /*@__PURE__*/ trie.__require(); const _trace = /*@__PURE__*/ index.__require(); const _description = /*@__PURE__*/ description.__require(); const _appendarrayinplace = /*@__PURE__*/ appendArrayInPlace.__require(); const _dir = /*@__PURE__*/ dir.__require(); const _domainset = /*@__PURE__*/ domainset.__require(); const _rejectdatasource = /*@__PURE__*/ rejectDataSource.__require(); const _appendsetelementstoarray = require$$0; function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const getS3OSSDomainsPromise = (async ()=>{ const trie = new _trie.HostnameTrie(); for await (const line of (await (0, _fetchtextbyline.fetchRemoteTextByLine)('https://publicsuffix.org/list/public_suffix_list.dat', true))){ trie.add(line); } /** * Extract OSS domain from publicsuffix list */ const S3OSSDomains = new Set(); trie.find('.amazonaws.com').forEach((line)=>{ if ((line.startsWith('s3-') || line.startsWith('s3.')) && !line.includes('cn-')) { S3OSSDomains.add('.' + line); } }); trie.find('.scw.cloud').forEach((line)=>{ if ((line.startsWith('s3-') || line.startsWith('s3.')) && !line.includes('cn-')) { S3OSSDomains.add('.' + line); } }); trie.find('sakurastorage.jp').forEach((line)=>{ if (line.startsWith('s3-') || line.startsWith('s3.')) { S3OSSDomains.add('.' + line); } }); return S3OSSDomains; })(); const cdnDomainsListPromise = (0, _fetchtextbyline.readFileIntoProcessedArray)(_nodepath.default.join(_dir.SOURCE_DIR, 'domainset/cdn.conf')); const downloadDomainSetPromise = (0, _fetchtextbyline.readFileIntoProcessedArray)(_nodepath.default.join(_dir.SOURCE_DIR, 'domainset/download.conf')); const steamDomainSetPromise = (0, _fetchtextbyline.readFileIntoProcessedArray)(_nodepath.default.join(_dir.SOURCE_DIR, 'domainset/game-download.conf')); const buildCdnDownloadConf = (0, _trace.task)(require.main === module, __filename)(async (span)=>{ const [S3OSSDomains, cdnDomainsList, downloadDomainSet, steamDomainSet] = await Promise.all([ getS3OSSDomainsPromise, cdnDomainsListPromise, downloadDomainSetPromise, steamDomainSetPromise ]); // Move S3 domains to download domain set, since S3 files may be large (0, _appendsetelementstoarray.appendSetElementsToArray)(downloadDomainSet, S3OSSDomains); (0, _appendarrayinplace.appendArrayInPlace)(downloadDomainSet, steamDomainSet); // we have whitelisted the crashlytics domain, and we also want to put it in CDN policy (0, _appendarrayinplace.appendArrayInPlace)(cdnDomainsList, _rejectdatasource.CRASHLYTICS_WHITELIST); return Promise.all([ new _domainset.DomainsetOutput(span, 'cdn').withTitle('Sukka\'s Ruleset - CDN Domains').withDescription([ ..._description.SHARED_DESCRIPTION, '', 'This file contains object storage and static assets CDN domains.' ]).addFromDomainset(cdnDomainsList).write(), new _domainset.DomainsetOutput(span, 'download').withTitle('Sukka\'s Ruleset - Large Files Hosting Domains').withDescription([ ..._description.SHARED_DESCRIPTION, '', 'This file contains domains for software updating & large file hosting.' ]).addFromDomainset(downloadDomainSet).write() ]); }); } (buildCdnDownloadConf.__module, buildCdnDownloadConf.__module.exports)); return buildCdnDownloadConf.__module.exports; }exports.__require=requireBuildCdnDownloadConf;