parent
cf3f54f2ee
commit
08f211d8fd
15
package.json
15
package.json
|
@ -3,13 +3,16 @@
|
|||
"version": "0.1.0",
|
||||
"main": "dist/index.js",
|
||||
"dependencies": {
|
||||
"@lumeweb/kernel-dns-client": "https://github.com/LumeWeb/kernel-dns-client.git",
|
||||
"@lumeweb/kernel-rpc-client": "https://github.com/LumeWeb/kernel-rpc-client.git",
|
||||
"@lumeweb/libresolver": "https://github.com/LumeWeb/libresolver.git",
|
||||
"libkmodule": "^0.2.51"
|
||||
"@lumeweb/kernel-dns-client": "git+https://git.lumeweb.com/LumeWeb/kernel-dns-client.git",
|
||||
"@lumeweb/kernel-libresolver": "git+https://git.lumeweb.com/LumeWeb/kernel-libresolver.git",
|
||||
"@lumeweb/kernel-rpc-client": "git+https://git.lumeweb.com/LumeWeb/kernel-rpc-client.git",
|
||||
"@lumeweb/libkernel-universal": "git+https://git.lumeweb.com/LumeWeb/libkernel-universal.git",
|
||||
"@lumeweb/libresolver": "git+https://git.lumeweb.com/LumeWeb/libresolver.git",
|
||||
"libkmodule": "^0.2.53"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@lumeweb/relay-types": "https://github.com/LumeWeb/relay-types.git",
|
||||
"@types/node": "^18.7.14"
|
||||
"@lumeweb/relay-types": "git+https://git.lumeweb.com/LumeWeb/relay-types.git",
|
||||
"@types/node": "^18.14.0",
|
||||
"prettier": "^2.8.4"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
import { createClient } from "@lumeweb/kernel-dns-client";
|
||||
|
||||
export const dnsClient = createClient();
|
18
src/index.ts
18
src/index.ts
|
@ -1,13 +1,13 @@
|
|||
import { addHandler, ActiveQuery, handleMessage } from "libkmodule";
|
||||
import { register } from "@lumeweb/kernel-dns-client";
|
||||
import type {
|
||||
DNSResult,
|
||||
ResolverModuleConstructor,
|
||||
|
||||
import type { DNSResult } from "@lumeweb/libresolver";
|
||||
import {
|
||||
ResolverModule,
|
||||
} from "@lumeweb/resolver-common";
|
||||
import { RpcNetwork } from "@lumeweb/kernel-rpc-client";
|
||||
import { ResolverRegistry } from "./resolverRegistry.js";
|
||||
ResolverModuleConstructor,
|
||||
ResolverRegistry,
|
||||
} from "./resolverRegistry.js";
|
||||
import { DNS_RECORD_TYPE } from "@lumeweb/libresolver";
|
||||
import { dnsClient } from "./client.js";
|
||||
|
||||
let resolver: ResolverModule;
|
||||
|
||||
|
@ -16,11 +16,11 @@ export function setup(rm: ResolverModuleConstructor) {
|
|||
addHandler("register", handleRegister);
|
||||
addHandler("getSupportedTlds", handleGetSupportedTlds);
|
||||
onmessage = handleMessage;
|
||||
resolver = new rm(new ResolverRegistry(new RpcNetwork()) as any);
|
||||
resolver = new rm(new ResolverRegistry());
|
||||
}
|
||||
|
||||
async function handleRegister(aq: ActiveQuery) {
|
||||
await register();
|
||||
await dnsClient.register();
|
||||
aq.respond();
|
||||
}
|
||||
|
||||
|
|
|
@ -3,31 +3,29 @@ import {
|
|||
ResolverOptions,
|
||||
DNS_RECORD_TYPE,
|
||||
resolverError,
|
||||
} from "@lumeweb/resolver-common";
|
||||
import { getResolvers, resolve } from "@lumeweb/kernel-dns-client";
|
||||
import { RpcNetwork } from "@lumeweb/kernel-rpc-client";
|
||||
import { callModule } from "libkmodule";
|
||||
ResolverModuleConstructor as ResolverModuleConstructorBase,
|
||||
} from "@lumeweb/libresolver";
|
||||
import { Client, factory } from "@lumeweb/libkernel-universal";
|
||||
import { dnsClient } from "./client.js";
|
||||
|
||||
export interface ResolverModuleConstructor
|
||||
extends ResolverModuleConstructorBase {
|
||||
new (resolver: ResolverRegistry): ResolverModule;
|
||||
}
|
||||
|
||||
export class ResolverRegistry {
|
||||
private _rpcNetwork: RpcNetwork;
|
||||
|
||||
constructor(network: RpcNetwork) {
|
||||
this._rpcNetwork = network;
|
||||
}
|
||||
|
||||
get rpcNetwork(): RpcNetwork {
|
||||
return this._rpcNetwork;
|
||||
}
|
||||
|
||||
get resolvers(): Promise<Set<ResolverModule>> {
|
||||
return getResolvers()
|
||||
.catch(() => {
|
||||
return new Set();
|
||||
})
|
||||
return dnsClient
|
||||
.getResolvers()
|
||||
.then((resolvers: string[]) => {
|
||||
return new Set(
|
||||
resolvers.map((resolver) => new ResolverModule(this, resolver))
|
||||
resolvers.map((resolver) =>
|
||||
factory<ResolverModule>(ResolverModule, resolver)(this, resolver)
|
||||
)
|
||||
);
|
||||
})
|
||||
.catch(() => {
|
||||
return new Set();
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -36,23 +34,22 @@ export class ResolverRegistry {
|
|||
options: ResolverOptions = { type: DNS_RECORD_TYPE.CONTENT },
|
||||
bypassCache: boolean = false
|
||||
): Promise<DNSResult> {
|
||||
let result: DNSResult;
|
||||
|
||||
try {
|
||||
result = await resolve(domain, options, bypassCache);
|
||||
return dnsClient.resolve(domain, options, bypassCache);
|
||||
} catch (e: any) {
|
||||
return resolverError(e);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
public register(resolver: ResolverModule): void {}
|
||||
public clear(): void {}
|
||||
}
|
||||
|
||||
export class ResolverModule {
|
||||
export class ResolverModule extends Client {
|
||||
private resolver: ResolverRegistry;
|
||||
private domain: string;
|
||||
|
||||
constructor(resolver: ResolverRegistry, domain: string) {
|
||||
super();
|
||||
this.resolver = resolver;
|
||||
this.domain = domain;
|
||||
}
|
||||
|
@ -62,25 +59,17 @@ export class ResolverModule {
|
|||
options: ResolverOptions,
|
||||
bypassCache: boolean
|
||||
): Promise<DNSResult> {
|
||||
const [ret, err] = await callModule(this.domain, "resolve", {
|
||||
domain,
|
||||
options,
|
||||
bypassCache,
|
||||
});
|
||||
if (err) {
|
||||
return resolverError(err);
|
||||
try {
|
||||
return this.callModuleReturn("resolve", {
|
||||
domain,
|
||||
options,
|
||||
bypassCache,
|
||||
});
|
||||
} catch (e) {
|
||||
return resolverError(e as Error);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
async getSupportedTlds(): Promise<string[]> {
|
||||
const [ret, err] = await callModule(this.domain, "getSupportedTlds");
|
||||
if (err) {
|
||||
throw new Error(err);
|
||||
}
|
||||
|
||||
return ret;
|
||||
return this.callModuleReturn("getSupportedTlds");
|
||||
}
|
||||
}
|
||||
|
||||
export { RpcNetwork };
|
||||
|
|
Loading…
Reference in New Issue