@herbertgao/surgio
Version:
Generating rules for Surge, Clash, Quantumult like a PRO
38 lines • 1.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseTrojanUri = void 0;
const url_1 = require("url");
const logger_1 = require("@surgio/logger");
const types_1 = require("../types");
const logger = (0, logger_1.createLogger)({ service: 'surgio:utils:trojan' });
const parseTrojanUri = (str) => {
logger.debug('Trojan URI', str);
const scheme = new url_1.URL(str);
if (scheme.protocol !== 'trojan:') {
throw new Error('Invalid Trojan URI.');
}
const allowInsecure = scheme.searchParams.get('allowInsecure') === '1' ||
scheme.searchParams.get('allowInsecure') === 'true';
const sni = scheme.searchParams.get('sni') || scheme.searchParams.get('peer');
return {
type: types_1.NodeTypeEnum.Trojan,
hostname: scheme.hostname,
port: scheme.port,
password: scheme.username,
nodeName: scheme.hash
? decodeURIComponent(scheme.hash.slice(1))
: `${scheme.hostname}:${scheme.port}`,
...(allowInsecure
? {
skipCertVerify: true,
}
: null),
...(sni
? {
sni,
}
: null),
};
};
exports.parseTrojanUri = parseTrojanUri;
//# sourceMappingURL=trojan.js.map