Compare commits

...

3 Commits

Author SHA1 Message Date
Derrick Hammer e8954d7fe9
*Update dist 2023-02-19 17:17:14 -05:00
Derrick Hammer 657131b6ff
*add typescript 2023-02-19 17:16:57 -05:00
Derrick Hammer 08f211d8fd
*refactor to new system
*remove rpc code for now
2023-02-19 17:16:24 -05:00
8 changed files with 94 additions and 103 deletions

2
dist/index.d.ts vendored
View File

@ -1,3 +1,3 @@
import type { ResolverModuleConstructor } from "@lumeweb/resolver-common"; import { ResolverModuleConstructor } from "./resolverRegistry.js";
export declare function setup(rm: ResolverModuleConstructor): void; export declare function setup(rm: ResolverModuleConstructor): void;
export * from "./resolverRegistry.js"; export * from "./resolverRegistry.js";

9
dist/index.js vendored
View File

@ -1,18 +1,17 @@
import { addHandler, handleMessage } from "libkmodule"; import { addHandler, handleMessage } from "libkmodule";
import { register } from "@lumeweb/kernel-dns-client"; import { ResolverRegistry, } from "./resolverRegistry.js";
import { RpcNetwork } from "@lumeweb/kernel-rpc-client";
import { ResolverRegistry } from "./resolverRegistry.js";
import { DNS_RECORD_TYPE } from "@lumeweb/libresolver"; import { DNS_RECORD_TYPE } from "@lumeweb/libresolver";
import { dnsClient } from "./client.js";
let resolver; let resolver;
export function setup(rm) { export function setup(rm) {
addHandler("resolve", handleResolve); addHandler("resolve", handleResolve);
addHandler("register", handleRegister); addHandler("register", handleRegister);
addHandler("getSupportedTlds", handleGetSupportedTlds); addHandler("getSupportedTlds", handleGetSupportedTlds);
onmessage = handleMessage; onmessage = handleMessage;
resolver = new rm(new ResolverRegistry(new RpcNetwork())); resolver = new rm(new ResolverRegistry());
} }
async function handleRegister(aq) { async function handleRegister(aq) {
await register(); await dnsClient.register();
aq.respond(); aq.respond();
} }
async function handleResolve(aq) { async function handleResolve(aq) {

View File

@ -1,17 +1,24 @@
import { DNSResult, ResolverOptions } from "@lumeweb/resolver-common"; import {
import { RpcNetwork } from "@lumeweb/kernel-rpc-client"; DNSResult,
ResolverOptions,
ResolverModuleConstructor as ResolverModuleConstructorBase,
} from "@lumeweb/libresolver";
import { Client } from "@lumeweb/libkernel-universal";
export interface ResolverModuleConstructor
extends ResolverModuleConstructorBase {
new (resolver: ResolverRegistry): ResolverModule;
}
export declare class ResolverRegistry { export declare class ResolverRegistry {
private _rpcNetwork;
constructor(network: RpcNetwork);
get rpcNetwork(): RpcNetwork;
get resolvers(): Promise<Set<ResolverModule>>; get resolvers(): Promise<Set<ResolverModule>>;
resolve( resolve(
domain: string, domain: string,
options?: ResolverOptions, options?: ResolverOptions,
bypassCache?: boolean bypassCache?: boolean
): Promise<DNSResult>; ): Promise<DNSResult>;
register(resolver: ResolverModule): void;
clear(): void;
} }
export declare class ResolverModule { export declare class ResolverModule extends Client {
private resolver; private resolver;
private domain; private domain;
constructor(resolver: ResolverRegistry, domain: string); constructor(resolver: ResolverRegistry, domain: string);
@ -22,4 +29,3 @@ export declare class ResolverModule {
): Promise<DNSResult>; ): Promise<DNSResult>;
getSupportedTlds(): Promise<string[]>; getSupportedTlds(): Promise<string[]>;
} }
export { RpcNetwork };

View File

@ -1,59 +1,49 @@
import { DNS_RECORD_TYPE, resolverError, } from "@lumeweb/resolver-common"; import { DNS_RECORD_TYPE, resolverError, } from "@lumeweb/libresolver";
import { getResolvers, resolve } from "@lumeweb/kernel-dns-client"; import { Client, factory } from "@lumeweb/libkernel-universal";
import { RpcNetwork } from "@lumeweb/kernel-rpc-client"; import { dnsClient } from "./client.js";
import { callModule } from "libkmodule";
export class ResolverRegistry { export class ResolverRegistry {
_rpcNetwork;
constructor(network) {
this._rpcNetwork = network;
}
get rpcNetwork() {
return this._rpcNetwork;
}
get resolvers() { get resolvers() {
return getResolvers() return dnsClient
.getResolvers()
.then((resolvers) => {
return new Set(resolvers.map((resolver) => factory(ResolverModule, resolver)(this, resolver)));
})
.catch(() => { .catch(() => {
return new Set(); return new Set();
})
.then((resolvers) => {
return new Set(resolvers.map((resolver) => new ResolverModule(this, resolver)));
}); });
} }
async resolve(domain, options = { type: DNS_RECORD_TYPE.CONTENT }, bypassCache = false) { async resolve(domain, options = { type: DNS_RECORD_TYPE.CONTENT }, bypassCache = false) {
let result;
try { try {
result = await resolve(domain, options, bypassCache); return dnsClient.resolve(domain, options, bypassCache);
} }
catch (e) { catch (e) {
return resolverError(e); return resolverError(e);
} }
return result;
} }
register(resolver) { }
clear() { }
} }
export class ResolverModule { export class ResolverModule extends Client {
resolver; resolver;
domain; domain;
constructor(resolver, domain) { constructor(resolver, domain) {
super();
this.resolver = resolver; this.resolver = resolver;
this.domain = domain; this.domain = domain;
} }
async resolve(domain, options, bypassCache) { async resolve(domain, options, bypassCache) {
const [ret, err] = await callModule(this.domain, "resolve", { try {
return this.callModuleReturn("resolve", {
domain, domain,
options, options,
bypassCache, bypassCache,
}); });
if (err) {
return resolverError(err);
} }
return ret; catch (e) {
return resolverError(e);
}
} }
async getSupportedTlds() { async getSupportedTlds() {
const [ret, err] = await callModule(this.domain, "getSupportedTlds"); return this.callModuleReturn("getSupportedTlds");
if (err) {
throw new Error(err);
}
return ret;
} }
} }
export { RpcNetwork };

View File

@ -3,13 +3,17 @@
"version": "0.1.0", "version": "0.1.0",
"main": "dist/index.js", "main": "dist/index.js",
"dependencies": { "dependencies": {
"@lumeweb/kernel-dns-client": "https://github.com/LumeWeb/kernel-dns-client.git", "@lumeweb/kernel-dns-client": "git+https://git.lumeweb.com/LumeWeb/kernel-dns-client.git",
"@lumeweb/kernel-rpc-client": "https://github.com/LumeWeb/kernel-rpc-client.git", "@lumeweb/kernel-libresolver": "git+https://git.lumeweb.com/LumeWeb/kernel-libresolver.git",
"@lumeweb/libresolver": "https://github.com/LumeWeb/libresolver.git", "@lumeweb/kernel-rpc-client": "git+https://git.lumeweb.com/LumeWeb/kernel-rpc-client.git",
"libkmodule": "^0.2.51" "@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": { "devDependencies": {
"@lumeweb/relay-types": "https://github.com/LumeWeb/relay-types.git", "@lumeweb/relay-types": "git+https://git.lumeweb.com/LumeWeb/relay-types.git",
"@types/node": "^18.7.14" "@types/node": "^18.14.0",
"prettier": "^2.8.4",
"typescript": "^4.9.5"
} }
} }

3
src/client.ts Normal file
View File

@ -0,0 +1,3 @@
import { createClient } from "@lumeweb/kernel-dns-client";
export const dnsClient = createClient();

View File

@ -1,13 +1,13 @@
import { addHandler, ActiveQuery, handleMessage } from "libkmodule"; import { addHandler, ActiveQuery, handleMessage } from "libkmodule";
import { register } from "@lumeweb/kernel-dns-client";
import type { import type { DNSResult } from "@lumeweb/libresolver";
DNSResult, import {
ResolverModuleConstructor,
ResolverModule, ResolverModule,
} from "@lumeweb/resolver-common"; ResolverModuleConstructor,
import { RpcNetwork } from "@lumeweb/kernel-rpc-client"; ResolverRegistry,
import { ResolverRegistry } from "./resolverRegistry.js"; } from "./resolverRegistry.js";
import { DNS_RECORD_TYPE } from "@lumeweb/libresolver"; import { DNS_RECORD_TYPE } from "@lumeweb/libresolver";
import { dnsClient } from "./client.js";
let resolver: ResolverModule; let resolver: ResolverModule;
@ -16,11 +16,11 @@ export function setup(rm: ResolverModuleConstructor) {
addHandler("register", handleRegister); addHandler("register", handleRegister);
addHandler("getSupportedTlds", handleGetSupportedTlds); addHandler("getSupportedTlds", handleGetSupportedTlds);
onmessage = handleMessage; onmessage = handleMessage;
resolver = new rm(new ResolverRegistry(new RpcNetwork()) as any); resolver = new rm(new ResolverRegistry());
} }
async function handleRegister(aq: ActiveQuery) { async function handleRegister(aq: ActiveQuery) {
await register(); await dnsClient.register();
aq.respond(); aq.respond();
} }

View File

@ -3,31 +3,29 @@ import {
ResolverOptions, ResolverOptions,
DNS_RECORD_TYPE, DNS_RECORD_TYPE,
resolverError, resolverError,
} from "@lumeweb/resolver-common"; ResolverModuleConstructor as ResolverModuleConstructorBase,
import { getResolvers, resolve } from "@lumeweb/kernel-dns-client"; } from "@lumeweb/libresolver";
import { RpcNetwork } from "@lumeweb/kernel-rpc-client"; import { Client, factory } from "@lumeweb/libkernel-universal";
import { callModule } from "libkmodule"; import { dnsClient } from "./client.js";
export interface ResolverModuleConstructor
extends ResolverModuleConstructorBase {
new (resolver: ResolverRegistry): ResolverModule;
}
export class ResolverRegistry { export class ResolverRegistry {
private _rpcNetwork: RpcNetwork;
constructor(network: RpcNetwork) {
this._rpcNetwork = network;
}
get rpcNetwork(): RpcNetwork {
return this._rpcNetwork;
}
get resolvers(): Promise<Set<ResolverModule>> { get resolvers(): Promise<Set<ResolverModule>> {
return getResolvers() return dnsClient
.catch(() => { .getResolvers()
return new Set();
})
.then((resolvers: string[]) => { .then((resolvers: string[]) => {
return new Set( 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 }, options: ResolverOptions = { type: DNS_RECORD_TYPE.CONTENT },
bypassCache: boolean = false bypassCache: boolean = false
): Promise<DNSResult> { ): Promise<DNSResult> {
let result: DNSResult;
try { try {
result = await resolve(domain, options, bypassCache); return dnsClient.resolve(domain, options, bypassCache);
} catch (e: any) { } catch (e: any) {
return resolverError(e); 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 resolver: ResolverRegistry;
private domain: string; private domain: string;
constructor(resolver: ResolverRegistry, domain: string) { constructor(resolver: ResolverRegistry, domain: string) {
super();
this.resolver = resolver; this.resolver = resolver;
this.domain = domain; this.domain = domain;
} }
@ -62,25 +59,17 @@ export class ResolverModule {
options: ResolverOptions, options: ResolverOptions,
bypassCache: boolean bypassCache: boolean
): Promise<DNSResult> { ): Promise<DNSResult> {
const [ret, err] = await callModule(this.domain, "resolve", { try {
return this.callModuleReturn("resolve", {
domain, domain,
options, options,
bypassCache, bypassCache,
}); });
if (err) { } catch (e) {
return resolverError(err); return resolverError(e as Error);
} }
return ret;
} }
async getSupportedTlds(): Promise<string[]> { async getSupportedTlds(): Promise<string[]> {
const [ret, err] = await callModule(this.domain, "getSupportedTlds"); return this.callModuleReturn("getSupportedTlds");
if (err) {
throw new Error(err);
}
return ret;
} }
} }
export { RpcNetwork };