kernel-libresolver/src/index.ts

58 lines
1.3 KiB
TypeScript
Raw Normal View History

2022-08-18 21:58:00 +00:00
import { addHandler, ActiveQuery, handleMessage } from "libkmodule";
import type { DNSResult } from "@lumeweb/libresolver";
import {
ResolverModule,
ResolverModuleConstructor,
ResolverRegistry,
} from "./resolverRegistry.js";
2022-08-31 03:53:16 +00:00
import { DNS_RECORD_TYPE } from "@lumeweb/libresolver";
import { dnsClient } from "./client.js";
2022-08-18 21:58:00 +00:00
let resolver: ResolverModule;
export function setup(rm: ResolverModuleConstructor) {
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;
resolver = new rm(new ResolverRegistry());
2022-08-18 21:58:00 +00:00
}
async function handleRegister(aq: ActiveQuery) {
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,
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());
}
2022-08-18 22:28:36 +00:00
export * from "./resolverRegistry.js";