diff --git a/LICENSE b/LICENSE index 13a5b6e..8995c8b 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 Lume Web +Copyright (c) 2022 Hammer Technologies LLC Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/package.json b/package.json new file mode 100644 index 0000000..06593b4 --- /dev/null +++ b/package.json @@ -0,0 +1,9 @@ +{ + "name": "@lumeweb/kernel-resolver-common", + "version": "0.1.0", + "dependencies": { + "@lumeweb/kernel-dns-client": "github:LumeWeb/kernel-dns-client", + "@lumeweb/resolver-common": "github:LumeWeb/resolver-common", + "libkmodule": "^0.2.51" + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..a7bb1fd --- /dev/null +++ b/src/index.ts @@ -0,0 +1,43 @@ +import { addHandler, ActiveQuery, handleMessage } from "libkmodule"; +import { register } from "@lumeweb/kernel-dns-client"; +import type { DNSResult, ResolverModule } from "@lumeweb/resolver-common"; + +let resolver: ResolverModule; + +export function setup(rm: ResolverModule) { + addHandler("resolve", handleResolve); + addHandler("register", handleRegister); + onmessage = handleMessage; + resolver = rm; +} + +async function handleRegister(aq: ActiveQuery) { + await register(); + 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 ?? {}, + aq.callerInput?.bypassCache || false + ); + } catch (e: any) { + aq.reject(e); + return; + } + + if (ret.error) { + aq.reject(ret.error as any); + return; + } + + aq.respond(ret); +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..f4699a1 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "esnext", + "declaration": true, + "moduleResolution": "node", + "outDir": "./dist", + "strict": true, + "allowSyntheticDefaultImports": true + }, + "include": ["src"], + "exclude": ["node_modules", "**/__tests__/*"] +}