2022-08-18 14:49:10 +00:00
|
|
|
import type { DNSResult, ResolverOptions } from "./types.js";
|
2023-02-19 23:03:32 +00:00
|
|
|
import { getTld, isPromise } from "./util.js";
|
2022-08-19 19:44:51 +00:00
|
|
|
|
|
|
|
declare class ResolverRegistry {
|
2023-02-19 22:47:33 +00:00
|
|
|
get resolvers(): Set<ResolverModule> | Promise<Set<ResolverModule>>;
|
2022-08-19 19:49:30 +00:00
|
|
|
resolve(
|
|
|
|
domain: string,
|
|
|
|
options?: ResolverOptions,
|
|
|
|
bypassCache?: boolean
|
|
|
|
): Promise<DNSResult>;
|
|
|
|
register(resolver: ResolverModule): void;
|
|
|
|
clear(): void;
|
2022-08-19 19:44:51 +00:00
|
|
|
}
|
|
|
|
|
2023-02-20 01:07:52 +00:00
|
|
|
export interface ResolverModule {
|
2023-02-20 01:26:50 +00:00
|
|
|
get resolver(): ResolverRegistry;
|
|
|
|
set resolver(value: ResolverRegistry);
|
2022-08-18 14:49:10 +00:00
|
|
|
resolve(
|
|
|
|
domain: string,
|
|
|
|
options: ResolverOptions,
|
|
|
|
bypassCache: boolean
|
|
|
|
): Promise<DNSResult>;
|
2022-08-19 00:01:23 +00:00
|
|
|
|
2023-02-20 01:00:43 +00:00
|
|
|
getSupportedTlds(): string[];
|
|
|
|
getSupportedTlds(): Promise<string[]>;
|
|
|
|
getSupportedTlds(): any;
|
2022-08-18 14:49:10 +00:00
|
|
|
}
|
|
|
|
|
2022-08-19 15:53:26 +00:00
|
|
|
// ts-ignore
|
2022-08-19 18:48:16 +00:00
|
|
|
export abstract class AbstractResolverModule {
|
2023-02-20 01:07:52 +00:00
|
|
|
constructor(resolver?: ResolverRegistry) {
|
|
|
|
this._resolver = resolver;
|
|
|
|
}
|
|
|
|
|
|
|
|
private _resolver?: ResolverRegistry;
|
|
|
|
|
|
|
|
get resolver(): ResolverRegistry {
|
|
|
|
return this._resolver as ResolverRegistry;
|
|
|
|
}
|
2022-08-18 14:49:10 +00:00
|
|
|
|
2023-02-20 01:07:52 +00:00
|
|
|
set resolver(value: ResolverRegistry) {
|
|
|
|
this._resolver = value;
|
2022-08-18 14:49:10 +00:00
|
|
|
}
|
|
|
|
|
2022-08-19 18:48:35 +00:00
|
|
|
abstract resolve(
|
2022-08-19 17:42:32 +00:00
|
|
|
domain: string,
|
2022-08-18 14:49:10 +00:00
|
|
|
options: ResolverOptions,
|
2022-08-18 18:08:53 +00:00
|
|
|
bypassCache: boolean
|
2022-08-18 14:49:10 +00:00
|
|
|
): Promise<DNSResult>;
|
|
|
|
|
2023-02-20 01:00:43 +00:00
|
|
|
getSupportedTlds(): string[];
|
|
|
|
getSupportedTlds(): Promise<string[]>;
|
|
|
|
getSupportedTlds(): any {
|
2022-08-18 14:49:10 +00:00
|
|
|
return [];
|
|
|
|
}
|
|
|
|
|
2023-02-19 23:18:00 +00:00
|
|
|
isTldSupported(domain: string): Promise<boolean>;
|
|
|
|
isTldSupported(domain: string): boolean;
|
|
|
|
isTldSupported(domain: string): any {
|
2023-02-20 01:02:24 +00:00
|
|
|
let supported = this.getSupportedTlds() as any;
|
|
|
|
if (isPromise(supported)) {
|
2023-02-19 23:03:32 +00:00
|
|
|
return (supported as Promise<string[]>).then((supported: string[]) => {
|
|
|
|
return supported.includes(getTld(domain));
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
return (supported as string[]).includes(getTld(domain));
|
2022-08-18 14:49:10 +00:00
|
|
|
}
|
|
|
|
}
|