2022-08-18 21:58:00 +00:00
|
|
|
import { addHandler, ActiveQuery, handleMessage } from "libkmodule";
|
2023-02-19 22:16:24 +00:00
|
|
|
|
2023-02-20 01:29:44 +00:00
|
|
|
import type {
|
|
|
|
DNSResult,
|
|
|
|
ResolverModule as ResolverModuleBase,
|
|
|
|
} from "@lumeweb/libresolver";
|
2022-08-31 03:53:16 +00:00
|
|
|
import { DNS_RECORD_TYPE } from "@lumeweb/libresolver";
|
2023-02-19 22:16:24 +00:00
|
|
|
import { dnsClient } from "./client.js";
|
2023-02-20 01:29:44 +00:00
|
|
|
import { DnsClient } from "@lumeweb/kernel-dns-client";
|
2023-02-20 01:39:29 +00:00
|
|
|
import { ResolverOptions } from "@lumeweb/libresolver/src/types.js";
|
2022-08-18 21:58:00 +00:00
|
|
|
|
2023-02-20 02:12:57 +00:00
|
|
|
let resolver: ResolverModule | ResolverModuleBase;
|
2022-08-18 21:58:00 +00:00
|
|
|
|
2023-02-20 01:39:29 +00:00
|
|
|
export interface ResolverModule {
|
2023-02-20 01:29:44 +00:00
|
|
|
get resolver(): DnsClient;
|
|
|
|
set resolver(value: DnsClient);
|
2023-02-20 01:39:29 +00:00
|
|
|
resolve(
|
|
|
|
domain: string,
|
|
|
|
options: ResolverOptions,
|
|
|
|
bypassCache: boolean
|
|
|
|
): Promise<DNSResult>;
|
|
|
|
|
|
|
|
getSupportedTlds(): string[];
|
|
|
|
getSupportedTlds(): Promise<string[]>;
|
|
|
|
getSupportedTlds(): any;
|
2023-02-20 01:29:44 +00:00
|
|
|
}
|
|
|
|
|
2023-02-20 02:12:57 +00:00
|
|
|
export function setup(rm: ResolverModule | ResolverModuleBase) {
|
2022-08-18 21:58:00 +00:00
|
|
|
addHandler("resolve", handleResolve);
|
|
|
|
addHandler("register", handleRegister);
|
2022-08-19 15:20:33 +00:00
|
|
|
addHandler("getSupportedTlds", handleGetSupportedTlds);
|
2022-08-18 21:58:00 +00:00
|
|
|
onmessage = handleMessage;
|
2023-02-20 01:29:44 +00:00
|
|
|
resolver = rm;
|
2023-02-20 02:12:57 +00:00
|
|
|
// @ts-ignore
|
2023-02-20 01:29:44 +00:00
|
|
|
resolver.resolver = dnsClient;
|
2022-08-18 21:58:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
async function handleRegister(aq: ActiveQuery) {
|
2023-02-19 22:16:24 +00:00
|
|
|
await dnsClient.register();
|
2022-08-18 21:58:00 +00:00
|
|
|
aq.respond();
|
|
|
|
}
|
|
|
|
|
|
|
|
async function handleResolve(aq: ActiveQuery) {
|
|
|
|
if (!("domain" in aq.callerInput)) {
|
|
|
|
aq.reject("domain required");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
let ret: DNSResult;
|
|
|
|
try {
|
|
|
|
ret = await resolver.resolve(
|
|
|
|
aq.callerInput.domain,
|
2022-08-20 16:43:28 +00:00
|
|
|
aq.callerInput?.options ?? { type: DNS_RECORD_TYPE.CONTENT },
|
2022-08-18 21:58:00 +00:00
|
|
|
aq.callerInput?.bypassCache || false
|
|
|
|
);
|
|
|
|
} catch (e: any) {
|
|
|
|
aq.reject(e);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ret.error) {
|
|
|
|
aq.reject(ret.error as any);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
aq.respond(ret);
|
|
|
|
}
|
2022-08-18 22:28:36 +00:00
|
|
|
|
2022-08-19 15:20:33 +00:00
|
|
|
function handleGetSupportedTlds(aq: ActiveQuery) {
|
|
|
|
aq.respond(resolver.getSupportedTlds());
|
|
|
|
}
|
|
|
|
|
2023-02-19 22:35:54 +00:00
|
|
|
export * from "@lumeweb/libresolver/dist/util.js";
|
|
|
|
export * from "@lumeweb/libresolver/dist/types.js";
|
2023-02-19 22:39:26 +00:00
|
|
|
export { AbstractResolverModule } from "@lumeweb/libresolver/dist/resolverModule.js";
|