fcdns 0.3.1 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cli.js CHANGED
@@ -1,89 +1,92 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- const commander_1 = require("commander");
5
- const server_1 = require("./server");
6
- const router_1 = require("./router");
7
- const ip_whitelist_1 = require("./ip-whitelist");
8
- const hostname_whitelist_1 = require("./hostname-whitelist");
9
- const tester_1 = require("./tester");
10
- const create_dns_resolver_1 = require("./utils/create-dns-resolver");
11
- const parse_log_level_1 = require("./utils/parse-log-level");
12
- const errors_1 = require("@blackglory/errors");
13
- const logger_1 = require("./logger");
14
- const parse_server_info_1 = require("./utils/parse-server-info");
15
- commander_1.program
16
- .name(require('../package.json').name)
17
- .version(require('../package.json').version)
18
- .description(require('../package.json').description)
19
- .option('--test-server <server>', '')
20
- .option('--untrusted-server <server>', '')
21
- .option('--trusted-server <server>', '')
22
- .option('--port <port>', '', '53')
23
- .option('--ip-whitelist <filename>', '', 'ip-whitelist.txt')
24
- .option('--hostname-whitelist <filename>', '', 'hostname-whitelist.txt')
25
- .option('--route-cache <filename>', '', 'route.txt')
26
- .option('--test-cache <filename>', '', 'test.txt')
27
- .option('--test-timeout <ms>', '', '200')
28
- .option('--log <level>', '', 'info')
29
- .option('--loose-mode')
30
- .action(async () => {
31
- const options = getOptions();
32
- const tester = await tester_1.Tester.create({
33
- server: options.testServer,
34
- timeout: options.testTimeout,
35
- cacheFilename: options.testCacheFilename
36
- });
37
- const untrustedResolver = (0, create_dns_resolver_1.createDNSResolver)(options.untrustedServer);
38
- const ipWhitelist = await ip_whitelist_1.IPWhitelist.create(options.ipWhitelistFilename);
39
- const hostnameWhitelist = await hostname_whitelist_1.HostnameWhitelist.create(options.hostnameWhitelistFilename);
40
- const router = await router_1.Router.create({
41
- tester,
42
- untrustedResolver,
43
- ipWhitelist,
44
- hostnameWhitelist,
45
- cacheFilename: options.routeCacheFilename,
46
- looseMode: options.looseMode
47
- });
48
- const logger = (0, logger_1.createCustomLogger)(options.logLevel);
49
- const untrustedServer = (0, parse_server_info_1.parseServerInfo)(options.untrustedServer);
50
- const trustedServer = (0, parse_server_info_1.parseServerInfo)(options.trustedServer);
51
- (0, server_1.startServer)({
52
- router,
53
- logger,
54
- trustedServer,
55
- untrustedServer,
56
- port: options.port
57
- });
58
- })
59
- .parse();
60
- function getOptions() {
61
- const opts = commander_1.program.opts();
62
- const testServer = opts.testServer;
63
- const untrustedServer = opts.untrustedServer;
64
- const trustedServer = opts.trustedServer;
65
- (0, errors_1.assert)(/^\d+$/.test(opts.port), 'The parameter port must be integer');
66
- const port = Number.parseInt(opts.port, 10);
67
- const ipWhitelistFilename = opts.ipWhitelist;
68
- const hostnameWhitelistFilename = opts.hostnameWhitelist;
69
- const routeCacheFilename = opts.routeCache;
70
- const testCacheFilename = opts.testCache;
71
- (0, errors_1.assert)(/^\d+$/.test(opts.testTimeout), 'The parameter test timeout must be integer');
72
- const testTimeout = Number.parseInt(opts.testTimeout, 10);
73
- const logLevel = (0, parse_log_level_1.parseLogLevel)(opts.log);
74
- const looseMode = opts.looseMode;
75
- return {
76
- testServer,
77
- untrustedServer,
78
- trustedServer,
79
- port,
80
- ipWhitelistFilename,
81
- hostnameWhitelistFilename,
82
- routeCacheFilename,
83
- testCacheFilename,
84
- testTimeout,
85
- logLevel,
86
- looseMode
87
- };
88
- }
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const commander_1 = require("commander");
5
+ const server_1 = require("./server");
6
+ const router_1 = require("./router");
7
+ const ip_whitelist_1 = require("./ip-whitelist");
8
+ const hostname_whitelist_1 = require("./hostname-whitelist");
9
+ const tester_1 = require("./tester");
10
+ const create_dns_resolver_1 = require("./utils/create-dns-resolver");
11
+ const parse_log_level_1 = require("./utils/parse-log-level");
12
+ const errors_1 = require("@blackglory/errors");
13
+ const extra_logger_1 = require("extra-logger");
14
+ const parse_server_info_1 = require("./utils/parse-server-info");
15
+ commander_1.program
16
+ .name(require('../package.json').name)
17
+ .version(require('../package.json').version)
18
+ .description(require('../package.json').description)
19
+ .option('--test-server <server>', '')
20
+ .option('--untrusted-server <server>', '')
21
+ .option('--trusted-server <server>', '')
22
+ .option('--port <port>', '', '53')
23
+ .option('--ip-whitelist <filename>', '', 'ip-whitelist.txt')
24
+ .option('--hostname-whitelist <filename>', '', 'hostname-whitelist.txt')
25
+ .option('--route-cache <filename>', '', 'route.txt')
26
+ .option('--test-cache <filename>', '', 'test.txt')
27
+ .option('--test-timeout <ms>', '', '200')
28
+ .option('--log <level>', '', 'info')
29
+ .option('--loose-mode')
30
+ .action(async () => {
31
+ const options = getOptions();
32
+ const tester = await tester_1.Tester.create({
33
+ server: options.testServer,
34
+ timeout: options.testTimeout,
35
+ cacheFilename: options.testCacheFilename
36
+ });
37
+ const untrustedResolver = (0, create_dns_resolver_1.createDNSResolver)(options.untrustedServer);
38
+ const ipWhitelist = await ip_whitelist_1.IPWhitelist.create(options.ipWhitelistFilename);
39
+ const hostnameWhitelist = await hostname_whitelist_1.HostnameWhitelist.create(options.hostnameWhitelistFilename);
40
+ const router = await router_1.Router.create({
41
+ tester,
42
+ untrustedResolver,
43
+ ipWhitelist,
44
+ hostnameWhitelist,
45
+ cacheFilename: options.routeCacheFilename,
46
+ looseMode: options.looseMode
47
+ });
48
+ const logger = new extra_logger_1.Logger({
49
+ level: options.logLevel,
50
+ transport: new extra_logger_1.TerminalTransport({})
51
+ });
52
+ const untrustedServer = (0, parse_server_info_1.parseServerInfo)(options.untrustedServer);
53
+ const trustedServer = (0, parse_server_info_1.parseServerInfo)(options.trustedServer);
54
+ (0, server_1.startServer)({
55
+ router,
56
+ logger,
57
+ trustedServer,
58
+ untrustedServer,
59
+ port: options.port
60
+ });
61
+ })
62
+ .parse();
63
+ function getOptions() {
64
+ const opts = commander_1.program.opts();
65
+ const testServer = opts.testServer;
66
+ const untrustedServer = opts.untrustedServer;
67
+ const trustedServer = opts.trustedServer;
68
+ (0, errors_1.assert)(/^\d+$/.test(opts.port), 'The parameter port must be integer');
69
+ const port = Number.parseInt(opts.port, 10);
70
+ const ipWhitelistFilename = opts.ipWhitelist;
71
+ const hostnameWhitelistFilename = opts.hostnameWhitelist;
72
+ const routeCacheFilename = opts.routeCache;
73
+ const testCacheFilename = opts.testCache;
74
+ (0, errors_1.assert)(/^\d+$/.test(opts.testTimeout), 'The parameter test timeout must be integer');
75
+ const testTimeout = Number.parseInt(opts.testTimeout, 10);
76
+ const logLevel = (0, parse_log_level_1.parseLogLevel)(opts.log);
77
+ const looseMode = opts.looseMode;
78
+ return {
79
+ testServer,
80
+ untrustedServer,
81
+ trustedServer,
82
+ port,
83
+ ipWhitelistFilename,
84
+ hostnameWhitelistFilename,
85
+ routeCacheFilename,
86
+ testCacheFilename,
87
+ testTimeout,
88
+ logLevel,
89
+ looseMode
90
+ };
91
+ }
89
92
  //# sourceMappingURL=cli.js.map
package/lib/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,18 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HostnameWhitelist = void 0;
4
- const hostname_list_file_1 = require("./utils/hostname-list-file");
5
- class HostnameWhitelist {
6
- constructor(patterns) {
7
- this.patterns = patterns;
8
- }
9
- static async create(filename) {
10
- const patterns = await (0, hostname_list_file_1.readHostnameListFile)(filename);
11
- return new HostnameWhitelist(patterns);
12
- }
13
- includes(hostname) {
14
- return this.patterns.some(x => x.match(hostname));
15
- }
16
- }
17
- exports.HostnameWhitelist = HostnameWhitelist;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HostnameWhitelist = void 0;
4
+ const hostname_list_file_1 = require("./utils/hostname-list-file");
5
+ class HostnameWhitelist {
6
+ constructor(patterns) {
7
+ this.patterns = patterns;
8
+ }
9
+ static async create(filename) {
10
+ const patterns = await (0, hostname_list_file_1.readHostnameListFile)(filename);
11
+ return new HostnameWhitelist(patterns);
12
+ }
13
+ includes(hostname) {
14
+ return this.patterns.some(x => x.match(hostname));
15
+ }
16
+ }
17
+ exports.HostnameWhitelist = HostnameWhitelist;
18
18
  //# sourceMappingURL=hostname-whitelist.js.map
@@ -1,27 +1,27 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.IPWhitelist = void 0;
4
- const ip_list_file_1 = require("./utils/ip-list-file");
5
- const is_ipv4_address_1 = require("./utils/is-ipv4-address");
6
- const is_ipv6_address_1 = require("./utils/is-ipv6-address");
7
- class IPWhitelist {
8
- constructor(ipv4, ipv6) {
9
- this.ipv4 = ipv4;
10
- this.ipv6 = ipv6;
11
- }
12
- static async create(filename) {
13
- const { ipv4, ipv6 } = await (0, ip_list_file_1.readIPListFile)(filename);
14
- return new IPWhitelist(ipv4, ipv6);
15
- }
16
- includes(address) {
17
- if ((0, is_ipv4_address_1.isIPv4Address)(address)) {
18
- return this.ipv4.some(x => x.includes(address));
19
- }
20
- if ((0, is_ipv6_address_1.isIPv6Address)(address)) {
21
- return this.ipv6.some(x => x.includes(address));
22
- }
23
- return false;
24
- }
25
- }
26
- exports.IPWhitelist = IPWhitelist;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IPWhitelist = void 0;
4
+ const ip_list_file_1 = require("./utils/ip-list-file");
5
+ const is_ipv4_address_1 = require("./utils/is-ipv4-address");
6
+ const is_ipv6_address_1 = require("./utils/is-ipv6-address");
7
+ class IPWhitelist {
8
+ constructor(ipv4, ipv6) {
9
+ this.ipv4 = ipv4;
10
+ this.ipv6 = ipv6;
11
+ }
12
+ static async create(filename) {
13
+ const { ipv4, ipv6 } = await (0, ip_list_file_1.readIPListFile)(filename);
14
+ return new IPWhitelist(ipv4, ipv6);
15
+ }
16
+ includes(address) {
17
+ if ((0, is_ipv4_address_1.isIPv4Address)(address)) {
18
+ return this.ipv4.some(x => x.includes(address));
19
+ }
20
+ if ((0, is_ipv6_address_1.isIPv6Address)(address)) {
21
+ return this.ipv6.some(x => x.includes(address));
22
+ }
23
+ return false;
24
+ }
25
+ }
26
+ exports.IPWhitelist = IPWhitelist;
27
27
  //# sourceMappingURL=ip-whitelist.js.map
@@ -1,80 +1,80 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ResourceRecordType = void 0;
4
- var ResourceRecordType;
5
- (function (ResourceRecordType) {
6
- ResourceRecordType[ResourceRecordType["A"] = 1] = "A";
7
- ResourceRecordType[ResourceRecordType["NS"] = 2] = "NS";
8
- ResourceRecordType[ResourceRecordType["MD"] = 3] = "MD";
9
- ResourceRecordType[ResourceRecordType["MF"] = 4] = "MF";
10
- ResourceRecordType[ResourceRecordType["CNAME"] = 5] = "CNAME";
11
- ResourceRecordType[ResourceRecordType["SOA"] = 6] = "SOA";
12
- ResourceRecordType[ResourceRecordType["MB"] = 7] = "MB";
13
- ResourceRecordType[ResourceRecordType["MG"] = 8] = "MG";
14
- ResourceRecordType[ResourceRecordType["MR"] = 9] = "MR";
15
- ResourceRecordType[ResourceRecordType["NULL"] = 10] = "NULL";
16
- ResourceRecordType[ResourceRecordType["WKS"] = 11] = "WKS";
17
- ResourceRecordType[ResourceRecordType["PTR"] = 12] = "PTR";
18
- ResourceRecordType[ResourceRecordType["HINFO"] = 13] = "HINFO";
19
- ResourceRecordType[ResourceRecordType["MINFO"] = 14] = "MINFO";
20
- ResourceRecordType[ResourceRecordType["MX"] = 15] = "MX";
21
- ResourceRecordType[ResourceRecordType["TXT"] = 16] = "TXT";
22
- ResourceRecordType[ResourceRecordType["RP"] = 17] = "RP";
23
- ResourceRecordType[ResourceRecordType["AFSDB"] = 18] = "AFSDB";
24
- ResourceRecordType[ResourceRecordType["X25"] = 19] = "X25";
25
- ResourceRecordType[ResourceRecordType["ISDN"] = 20] = "ISDN";
26
- ResourceRecordType[ResourceRecordType["RT"] = 21] = "RT";
27
- ResourceRecordType[ResourceRecordType["NSAP"] = 22] = "NSAP";
28
- ResourceRecordType[ResourceRecordType["NSAP-PTR"] = 23] = "NSAP-PTR";
29
- ResourceRecordType[ResourceRecordType["SIG"] = 24] = "SIG";
30
- ResourceRecordType[ResourceRecordType["KEY"] = 25] = "KEY";
31
- ResourceRecordType[ResourceRecordType["PX"] = 26] = "PX";
32
- ResourceRecordType[ResourceRecordType["GPOS"] = 27] = "GPOS";
33
- ResourceRecordType[ResourceRecordType["AAAA"] = 28] = "AAAA";
34
- ResourceRecordType[ResourceRecordType["LOC"] = 29] = "LOC";
35
- ResourceRecordType[ResourceRecordType["NXT"] = 30] = "NXT";
36
- ResourceRecordType[ResourceRecordType["EID"] = 31] = "EID";
37
- ResourceRecordType[ResourceRecordType["NIMLOC"] = 32] = "NIMLOC";
38
- ResourceRecordType[ResourceRecordType["SRV"] = 33] = "SRV";
39
- ResourceRecordType[ResourceRecordType["ATMA"] = 34] = "ATMA";
40
- ResourceRecordType[ResourceRecordType["NAPTR"] = 35] = "NAPTR";
41
- ResourceRecordType[ResourceRecordType["KX"] = 36] = "KX";
42
- ResourceRecordType[ResourceRecordType["CERT"] = 37] = "CERT";
43
- ResourceRecordType[ResourceRecordType["A6"] = 38] = "A6";
44
- ResourceRecordType[ResourceRecordType["DNAME"] = 39] = "DNAME";
45
- ResourceRecordType[ResourceRecordType["SINK"] = 40] = "SINK";
46
- ResourceRecordType[ResourceRecordType["OPT"] = 41] = "OPT";
47
- ResourceRecordType[ResourceRecordType["APL"] = 42] = "APL";
48
- ResourceRecordType[ResourceRecordType["DS"] = 43] = "DS";
49
- ResourceRecordType[ResourceRecordType["SSHFP"] = 44] = "SSHFP";
50
- ResourceRecordType[ResourceRecordType["IPSECKEY"] = 45] = "IPSECKEY";
51
- ResourceRecordType[ResourceRecordType["RRSIG"] = 46] = "RRSIG";
52
- ResourceRecordType[ResourceRecordType["NSEC"] = 47] = "NSEC";
53
- ResourceRecordType[ResourceRecordType["DNSKEY"] = 48] = "DNSKEY";
54
- ResourceRecordType[ResourceRecordType["DHCID"] = 49] = "DHCID";
55
- ResourceRecordType[ResourceRecordType["NSEC3"] = 50] = "NSEC3";
56
- ResourceRecordType[ResourceRecordType["NSEC3PARAM"] = 51] = "NSEC3PARAM";
57
- ResourceRecordType[ResourceRecordType["TLSA"] = 52] = "TLSA";
58
- ResourceRecordType[ResourceRecordType["HIP"] = 55] = "HIP";
59
- ResourceRecordType[ResourceRecordType["NINFO"] = 56] = "NINFO";
60
- ResourceRecordType[ResourceRecordType["RKEY"] = 57] = "RKEY";
61
- ResourceRecordType[ResourceRecordType["TALINK"] = 58] = "TALINK";
62
- ResourceRecordType[ResourceRecordType["CDS"] = 59] = "CDS";
63
- ResourceRecordType[ResourceRecordType["SPF"] = 99] = "SPF";
64
- ResourceRecordType[ResourceRecordType["UINFO"] = 100] = "UINFO";
65
- ResourceRecordType[ResourceRecordType["UID"] = 101] = "UID";
66
- ResourceRecordType[ResourceRecordType["GID"] = 102] = "GID";
67
- ResourceRecordType[ResourceRecordType["UNSPEC"] = 103] = "UNSPEC";
68
- ResourceRecordType[ResourceRecordType["TKEY"] = 249] = "TKEY";
69
- ResourceRecordType[ResourceRecordType["TSIG"] = 250] = "TSIG";
70
- ResourceRecordType[ResourceRecordType["IXFR"] = 251] = "IXFR";
71
- ResourceRecordType[ResourceRecordType["AXFR"] = 252] = "AXFR";
72
- ResourceRecordType[ResourceRecordType["MAILB"] = 253] = "MAILB";
73
- ResourceRecordType[ResourceRecordType["MAILA"] = 254] = "MAILA";
74
- ResourceRecordType[ResourceRecordType["ANY"] = 255] = "ANY";
75
- ResourceRecordType[ResourceRecordType["URI"] = 256] = "URI";
76
- ResourceRecordType[ResourceRecordType["CAA"] = 257] = "CAA";
77
- ResourceRecordType[ResourceRecordType["TA"] = 32768] = "TA";
78
- ResourceRecordType[ResourceRecordType["DLV"] = 32769] = "DLV";
79
- })(ResourceRecordType = exports.ResourceRecordType || (exports.ResourceRecordType = {}));
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResourceRecordType = void 0;
4
+ var ResourceRecordType;
5
+ (function (ResourceRecordType) {
6
+ ResourceRecordType[ResourceRecordType["A"] = 1] = "A";
7
+ ResourceRecordType[ResourceRecordType["NS"] = 2] = "NS";
8
+ ResourceRecordType[ResourceRecordType["MD"] = 3] = "MD";
9
+ ResourceRecordType[ResourceRecordType["MF"] = 4] = "MF";
10
+ ResourceRecordType[ResourceRecordType["CNAME"] = 5] = "CNAME";
11
+ ResourceRecordType[ResourceRecordType["SOA"] = 6] = "SOA";
12
+ ResourceRecordType[ResourceRecordType["MB"] = 7] = "MB";
13
+ ResourceRecordType[ResourceRecordType["MG"] = 8] = "MG";
14
+ ResourceRecordType[ResourceRecordType["MR"] = 9] = "MR";
15
+ ResourceRecordType[ResourceRecordType["NULL"] = 10] = "NULL";
16
+ ResourceRecordType[ResourceRecordType["WKS"] = 11] = "WKS";
17
+ ResourceRecordType[ResourceRecordType["PTR"] = 12] = "PTR";
18
+ ResourceRecordType[ResourceRecordType["HINFO"] = 13] = "HINFO";
19
+ ResourceRecordType[ResourceRecordType["MINFO"] = 14] = "MINFO";
20
+ ResourceRecordType[ResourceRecordType["MX"] = 15] = "MX";
21
+ ResourceRecordType[ResourceRecordType["TXT"] = 16] = "TXT";
22
+ ResourceRecordType[ResourceRecordType["RP"] = 17] = "RP";
23
+ ResourceRecordType[ResourceRecordType["AFSDB"] = 18] = "AFSDB";
24
+ ResourceRecordType[ResourceRecordType["X25"] = 19] = "X25";
25
+ ResourceRecordType[ResourceRecordType["ISDN"] = 20] = "ISDN";
26
+ ResourceRecordType[ResourceRecordType["RT"] = 21] = "RT";
27
+ ResourceRecordType[ResourceRecordType["NSAP"] = 22] = "NSAP";
28
+ ResourceRecordType[ResourceRecordType["NSAP-PTR"] = 23] = "NSAP-PTR";
29
+ ResourceRecordType[ResourceRecordType["SIG"] = 24] = "SIG";
30
+ ResourceRecordType[ResourceRecordType["KEY"] = 25] = "KEY";
31
+ ResourceRecordType[ResourceRecordType["PX"] = 26] = "PX";
32
+ ResourceRecordType[ResourceRecordType["GPOS"] = 27] = "GPOS";
33
+ ResourceRecordType[ResourceRecordType["AAAA"] = 28] = "AAAA";
34
+ ResourceRecordType[ResourceRecordType["LOC"] = 29] = "LOC";
35
+ ResourceRecordType[ResourceRecordType["NXT"] = 30] = "NXT";
36
+ ResourceRecordType[ResourceRecordType["EID"] = 31] = "EID";
37
+ ResourceRecordType[ResourceRecordType["NIMLOC"] = 32] = "NIMLOC";
38
+ ResourceRecordType[ResourceRecordType["SRV"] = 33] = "SRV";
39
+ ResourceRecordType[ResourceRecordType["ATMA"] = 34] = "ATMA";
40
+ ResourceRecordType[ResourceRecordType["NAPTR"] = 35] = "NAPTR";
41
+ ResourceRecordType[ResourceRecordType["KX"] = 36] = "KX";
42
+ ResourceRecordType[ResourceRecordType["CERT"] = 37] = "CERT";
43
+ ResourceRecordType[ResourceRecordType["A6"] = 38] = "A6";
44
+ ResourceRecordType[ResourceRecordType["DNAME"] = 39] = "DNAME";
45
+ ResourceRecordType[ResourceRecordType["SINK"] = 40] = "SINK";
46
+ ResourceRecordType[ResourceRecordType["OPT"] = 41] = "OPT";
47
+ ResourceRecordType[ResourceRecordType["APL"] = 42] = "APL";
48
+ ResourceRecordType[ResourceRecordType["DS"] = 43] = "DS";
49
+ ResourceRecordType[ResourceRecordType["SSHFP"] = 44] = "SSHFP";
50
+ ResourceRecordType[ResourceRecordType["IPSECKEY"] = 45] = "IPSECKEY";
51
+ ResourceRecordType[ResourceRecordType["RRSIG"] = 46] = "RRSIG";
52
+ ResourceRecordType[ResourceRecordType["NSEC"] = 47] = "NSEC";
53
+ ResourceRecordType[ResourceRecordType["DNSKEY"] = 48] = "DNSKEY";
54
+ ResourceRecordType[ResourceRecordType["DHCID"] = 49] = "DHCID";
55
+ ResourceRecordType[ResourceRecordType["NSEC3"] = 50] = "NSEC3";
56
+ ResourceRecordType[ResourceRecordType["NSEC3PARAM"] = 51] = "NSEC3PARAM";
57
+ ResourceRecordType[ResourceRecordType["TLSA"] = 52] = "TLSA";
58
+ ResourceRecordType[ResourceRecordType["HIP"] = 55] = "HIP";
59
+ ResourceRecordType[ResourceRecordType["NINFO"] = 56] = "NINFO";
60
+ ResourceRecordType[ResourceRecordType["RKEY"] = 57] = "RKEY";
61
+ ResourceRecordType[ResourceRecordType["TALINK"] = 58] = "TALINK";
62
+ ResourceRecordType[ResourceRecordType["CDS"] = 59] = "CDS";
63
+ ResourceRecordType[ResourceRecordType["SPF"] = 99] = "SPF";
64
+ ResourceRecordType[ResourceRecordType["UINFO"] = 100] = "UINFO";
65
+ ResourceRecordType[ResourceRecordType["UID"] = 101] = "UID";
66
+ ResourceRecordType[ResourceRecordType["GID"] = 102] = "GID";
67
+ ResourceRecordType[ResourceRecordType["UNSPEC"] = 103] = "UNSPEC";
68
+ ResourceRecordType[ResourceRecordType["TKEY"] = 249] = "TKEY";
69
+ ResourceRecordType[ResourceRecordType["TSIG"] = 250] = "TSIG";
70
+ ResourceRecordType[ResourceRecordType["IXFR"] = 251] = "IXFR";
71
+ ResourceRecordType[ResourceRecordType["AXFR"] = 252] = "AXFR";
72
+ ResourceRecordType[ResourceRecordType["MAILB"] = 253] = "MAILB";
73
+ ResourceRecordType[ResourceRecordType["MAILA"] = 254] = "MAILA";
74
+ ResourceRecordType[ResourceRecordType["ANY"] = 255] = "ANY";
75
+ ResourceRecordType[ResourceRecordType["URI"] = 256] = "URI";
76
+ ResourceRecordType[ResourceRecordType["CAA"] = 257] = "CAA";
77
+ ResourceRecordType[ResourceRecordType["TA"] = 32768] = "TA";
78
+ ResourceRecordType[ResourceRecordType["DLV"] = 32769] = "DLV";
79
+ })(ResourceRecordType = exports.ResourceRecordType || (exports.ResourceRecordType = {}));
80
80
  //# sourceMappingURL=resource-record-type.js.map
package/lib/router.js CHANGED
@@ -1,82 +1,82 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Router = exports.Target = void 0;
4
- const map_file_1 = require("./utils/map-file");
5
- const resolve_a_1 = require("./utils/resolve-a");
6
- var Target;
7
- (function (Target) {
8
- Target[Target["Untrusted"] = 0] = "Untrusted";
9
- Target[Target["Trusted"] = 1] = "Trusted";
10
- })(Target = exports.Target || (exports.Target = {}));
11
- class Router {
12
- constructor(cacheFilename, cache, looseMode, tester, untrustedResolver, ipWhitelist, hostnameWhitelist) {
13
- this.cacheFilename = cacheFilename;
14
- this.cache = cache;
15
- this.looseMode = looseMode;
16
- this.tester = tester;
17
- this.untrustedResolver = untrustedResolver;
18
- this.ipWhitelist = ipWhitelist;
19
- this.hostnameWhitelist = hostnameWhitelist;
20
- }
21
- static async create(options) {
22
- const tester = options.tester;
23
- const untrustedResolver = options.untrustedResolver;
24
- const ipWhitelist = options.ipWhitelist;
25
- const hostnameWhitelist = options.hostnameWhitelist;
26
- const cacheFilename = options.cacheFilename;
27
- const looseMode = options.looseMode;
28
- const cache = await (0, map_file_1.readMapFile)(cacheFilename);
29
- await (0, map_file_1.writeMapFile)(cacheFilename, cache);
30
- return new Router(cacheFilename, cache, looseMode, tester, untrustedResolver, ipWhitelist, hostnameWhitelist);
31
- }
32
- async getTarget(hostname) {
33
- if (this.inHostnameWhitelist(hostname))
34
- return Target.Untrusted;
35
- if (this.cache.has(hostname)) {
36
- return this.cache.get(hostname);
37
- }
38
- else {
39
- if (this.looseMode) {
40
- queueMicrotask(() => this.getTargetWithoutCache(hostname));
41
- return Target.Untrusted;
42
- }
43
- else {
44
- return await this.getTargetWithoutCache(hostname);
45
- }
46
- }
47
- }
48
- async getTargetWithoutCache(hostname) {
49
- if (await this.tester.isPoisoned(hostname)) {
50
- this.setCache(hostname, Target.Trusted);
51
- return Target.Trusted;
52
- }
53
- else {
54
- const addresses = await (0, resolve_a_1.resolveA)(this.untrustedResolver, hostname);
55
- if (addresses.length > 0) {
56
- if (this.inIPWhitelist(addresses)) {
57
- this.setCache(hostname, Target.Untrusted);
58
- return Target.Untrusted;
59
- }
60
- else {
61
- this.setCache(hostname, Target.Trusted);
62
- return Target.Trusted;
63
- }
64
- }
65
- else {
66
- return Target.Trusted;
67
- }
68
- }
69
- }
70
- inIPWhitelist(addresses) {
71
- return addresses.some(x => this.ipWhitelist.includes(x));
72
- }
73
- inHostnameWhitelist(hostname) {
74
- return this.hostnameWhitelist.includes(hostname);
75
- }
76
- setCache(hostname, result) {
77
- this.cache.set(hostname, result);
78
- (0, map_file_1.appendMapFile)(this.cacheFilename, hostname, result);
79
- }
80
- }
81
- exports.Router = Router;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Router = exports.Target = void 0;
4
+ const map_file_1 = require("./utils/map-file");
5
+ const resolve_a_1 = require("./utils/resolve-a");
6
+ var Target;
7
+ (function (Target) {
8
+ Target[Target["Untrusted"] = 0] = "Untrusted";
9
+ Target[Target["Trusted"] = 1] = "Trusted";
10
+ })(Target = exports.Target || (exports.Target = {}));
11
+ class Router {
12
+ constructor(cacheFilename, cache, looseMode, tester, untrustedResolver, ipWhitelist, hostnameWhitelist) {
13
+ this.cacheFilename = cacheFilename;
14
+ this.cache = cache;
15
+ this.looseMode = looseMode;
16
+ this.tester = tester;
17
+ this.untrustedResolver = untrustedResolver;
18
+ this.ipWhitelist = ipWhitelist;
19
+ this.hostnameWhitelist = hostnameWhitelist;
20
+ }
21
+ static async create(options) {
22
+ const tester = options.tester;
23
+ const untrustedResolver = options.untrustedResolver;
24
+ const ipWhitelist = options.ipWhitelist;
25
+ const hostnameWhitelist = options.hostnameWhitelist;
26
+ const cacheFilename = options.cacheFilename;
27
+ const looseMode = options.looseMode;
28
+ const cache = await (0, map_file_1.readMapFile)(cacheFilename);
29
+ await (0, map_file_1.writeMapFile)(cacheFilename, cache);
30
+ return new Router(cacheFilename, cache, looseMode, tester, untrustedResolver, ipWhitelist, hostnameWhitelist);
31
+ }
32
+ async getTarget(hostname) {
33
+ if (this.inHostnameWhitelist(hostname))
34
+ return Target.Untrusted;
35
+ if (this.cache.has(hostname)) {
36
+ return this.cache.get(hostname);
37
+ }
38
+ else {
39
+ if (this.looseMode) {
40
+ queueMicrotask(() => this.getTargetWithoutCache(hostname));
41
+ return Target.Untrusted;
42
+ }
43
+ else {
44
+ return await this.getTargetWithoutCache(hostname);
45
+ }
46
+ }
47
+ }
48
+ async getTargetWithoutCache(hostname) {
49
+ if (await this.tester.isPoisoned(hostname)) {
50
+ this.setCache(hostname, Target.Trusted);
51
+ return Target.Trusted;
52
+ }
53
+ else {
54
+ const addresses = await (0, resolve_a_1.resolveA)(this.untrustedResolver, hostname);
55
+ if (addresses.length > 0) {
56
+ if (this.inIPWhitelist(addresses)) {
57
+ this.setCache(hostname, Target.Untrusted);
58
+ return Target.Untrusted;
59
+ }
60
+ else {
61
+ this.setCache(hostname, Target.Trusted);
62
+ return Target.Trusted;
63
+ }
64
+ }
65
+ else {
66
+ return Target.Trusted;
67
+ }
68
+ }
69
+ }
70
+ inIPWhitelist(addresses) {
71
+ return addresses.some(x => this.ipWhitelist.includes(x));
72
+ }
73
+ inHostnameWhitelist(hostname) {
74
+ return this.hostnameWhitelist.includes(hostname);
75
+ }
76
+ setCache(hostname, result) {
77
+ this.cache.set(hostname, result);
78
+ (0, map_file_1.appendMapFile)(this.cacheFilename, hostname, result);
79
+ }
80
+ }
81
+ exports.Router = Router;
82
82
  //# sourceMappingURL=router.js.map