*Initial version
This commit is contained in:
parent
b0478eea5e
commit
c4498d812d
2
LICENSE
2
LICENSE
|
@ -1,6 +1,6 @@
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2022 Lume Web
|
Copyright (c) 2022 Hammmer Technologies LLC
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"name": "@lumeweb/resolver-common",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "Common code and interfaces for the DNS resolver modules",
|
||||||
|
"main": "dist/index.js"
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
export * from "./types.js";
|
||||||
|
export * from "./resolverModule.js";
|
|
@ -0,0 +1,34 @@
|
||||||
|
import type { DNSResult, ResolverOptions } from "./types.js";
|
||||||
|
import { getTld } from "./util.js";
|
||||||
|
|
||||||
|
export default interface ResolverModule {
|
||||||
|
constructor(resolver: any): void;
|
||||||
|
|
||||||
|
resolve(
|
||||||
|
domain: string,
|
||||||
|
options: ResolverOptions,
|
||||||
|
bypassCache: boolean
|
||||||
|
): Promise<DNSResult>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export abstract class AbstractResolverModule {
|
||||||
|
protected resolver: any;
|
||||||
|
|
||||||
|
constructor(resolver: any) {
|
||||||
|
this.resolver = resolver;
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract resolve(
|
||||||
|
input: string,
|
||||||
|
options: ResolverOptions,
|
||||||
|
force: boolean
|
||||||
|
): Promise<DNSResult>;
|
||||||
|
|
||||||
|
getSupportedTlds(): string[] {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
isTldSupported(domain: string): boolean {
|
||||||
|
return this.getSupportedTlds().includes(getTld(domain));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
export interface ResolverOptions {
|
||||||
|
type: any;
|
||||||
|
customType?: string;
|
||||||
|
records: any[];
|
||||||
|
options: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface DNSResult {
|
||||||
|
records: any[];
|
||||||
|
error?: Error;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface DNSRecord {
|
||||||
|
type: string;
|
||||||
|
customType?: string;
|
||||||
|
value: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const DNS_RECORD_TYPE = {
|
||||||
|
A: "A",
|
||||||
|
CNAME: "CNAME",
|
||||||
|
NS: "NS",
|
||||||
|
CONTENT: "CONTENT",
|
||||||
|
TEXT: "TEXT",
|
||||||
|
ALL: "ALL",
|
||||||
|
CUSTOM: "CUSTOM",
|
||||||
|
};
|
||||||
|
|
||||||
|
Object.freeze(DNS_RECORD_TYPE);
|
||||||
|
|
||||||
|
export { DNS_RECORD_TYPE };
|
|
@ -0,0 +1,30 @@
|
||||||
|
export function getTld(domain: string): string {
|
||||||
|
if (domain.includes(".")) {
|
||||||
|
domain = domain.split(".")[domain.split(".").length - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
return domain;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getSld(domain: string): string {
|
||||||
|
if (domain.includes(".")) {
|
||||||
|
domain = domain
|
||||||
|
.split(".")
|
||||||
|
.slice(0, domain.split(".").length - 1)
|
||||||
|
.join(".");
|
||||||
|
}
|
||||||
|
|
||||||
|
return domain;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function isIp(ip: string) {
|
||||||
|
return /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(
|
||||||
|
ip
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function isDomain(domain: string) {
|
||||||
|
return /(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]/.test(
|
||||||
|
domain
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"declaration": true,
|
||||||
|
"strict": true,
|
||||||
|
"module": "esnext",
|
||||||
|
"target": "esnext",
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"sourceMap": false,
|
||||||
|
"rootDir": "src",
|
||||||
|
"outDir": "dist",
|
||||||
|
"typeRoots": [
|
||||||
|
"node_modules/@types"
|
||||||
|
],
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"declarationMap": true,
|
||||||
|
"declarationDir": "dist",
|
||||||
|
"emitDeclarationOnly": false,
|
||||||
|
"allowJs": true
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"src"
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in New Issue