diff --git a/README.md b/README.md index 5363548..bac8522 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,13 @@ ### 1- `/resolve/:query/:full?` -- `query` : a valid Arweave address or ANS domain -- `full` (optional): return response as the full ANS user object +- `query` : a valid Arweave address or ANS domain. +- `full` (optional): return response as the full ANS user object. + +### 2- `/resolve-subdomain/:parent_domain/:query` + +- `parent_domain` : a valid ANS domain that issued subdomains. +- `query` : a valid Arweave address or ANS subdomain (target). ## License diff --git a/package.json b/package.json index 6be5bf2..55f7ffa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ans-resolver", - "version": "0.0.2", + "version": "0.0.3", "description": "HTTP resolver for ANS domains", "main": "./src/api.js", "type": "module", diff --git a/src/api.js b/src/api.js index 08d4b71..7822cb9 100644 --- a/src/api.js +++ b/src/api.js @@ -54,6 +54,48 @@ app.get("/resolve/:query/:full?", async (req, res) => { } }); +app.get("/resolve-subdomain/:parent_domain/:query", async (req, res) => { + try { + res.setHeader("Content-Type", "application/json"); + const { query, parent_domain } = req.params; + const normalizedDomain = normalizeDomain(parent_domain); + const balances = await readContract(); + const domains = balances + .map((usr) => usr.ownedDomains) + .flat() + .filter((domain) => domain.subdomains.length); + const parent = domains.find((domain) => domain.domain === normalizedDomain); + + const subdomains = parent.subdomains.filter((subdomain) => subdomain.owner); + + if (isArweaveAddress(query)) { + const user = subdomains.find((sub) => sub.owner === query); + const subdomain = user?.subdomain + ? `${normalizedDomain}.${user.subdomain}.ar` + : undefined; + res.send({ + subdomain, + }); + return; + } + const normalizedSubdomain = normalizeDomain(query); + const user = subdomains.find( + (sub) => sub.subdomain === normalizedSubdomain + ); + const address = user?.owner ? user.owner : undefined; + + res.send({ address }); + return; + } catch (error) { + console.log(error); + res.send({ + error: + "invalid query paramater. Provide a valid ANS subdomain or Arweave address", + }); + return; + } +}); + app.listen(port, async () => { console.log(`listening at PORT: ${port}`); });