@agentek/tools
Version:
Blockchain tools for AI agents
330 lines • 13.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.intentRegisterSubdomainWNSTool = exports.intentSetWNSContenthashTool = exports.intentSetWNSAddrTool = exports.intentSetWNSTextTool = exports.intentSetPrimaryWNSTool = exports.intentRenewWNSTool = exports.intentRegisterWNSTool = exports.getWNSTokenURITool = exports.getWNSFeeTool = exports.getWNSContenthashTool = exports.getWNSTextTool = exports.getWNSBalanceTool = exports.getWNSOwnerTool = exports.getWNSExpirationTool = exports.isExpiredWNSTool = exports.isAvailableWNSTool = exports.resolveAnyWNSTool = exports.reverseResolveWNSTool = exports.resolveWNSTool = void 0;
const zod_1 = require("zod");
const client_js_1 = require("../client.js");
const wns_utils_1 = require("wns-utils");
const wns = (0, wns_utils_1.createWnsClient)();
exports.resolveWNSTool = (0, client_js_1.createTool)({
name: "resolveWNS",
description: "Resolves a .wei name to an Ethereum address. Accepts 'name' or 'name.wei'.",
parameters: zod_1.z.object({
name: zod_1.z.string().describe("The .wei name to resolve (e.g. 'alice' or 'alice.wei')"),
}),
execute: async (_client, args) => {
const address = await wns.resolve(args.name);
if (!address) {
throw new Error(`No address found for WNS name: ${args.name}`);
}
return address;
},
});
exports.reverseResolveWNSTool = (0, client_js_1.createTool)({
name: "reverseResolveWNS",
description: "Reverse resolves an Ethereum address to its primary .wei name.",
parameters: zod_1.z.object({
address: zod_1.z
.string()
.regex(/^0x[a-fA-F0-9]{40}$/)
.describe("The Ethereum address to reverse resolve"),
}),
execute: async (_client, args) => {
const name = await wns.reverseResolve(args.address);
if (!name) {
throw new Error(`No .wei name found for ${args.address}`);
}
return name;
},
});
exports.resolveAnyWNSTool = (0, client_js_1.createTool)({
name: "resolveAnyWNS",
description: "Smart resolve: if input is an Ethereum address, returns it directly. If it's a .wei name or bare label, resolves it to an address.",
parameters: zod_1.z.object({
input: zod_1.z
.string()
.describe("An Ethereum address or .wei name to resolve"),
}),
execute: async (_client, args) => {
const address = await wns.resolveAny(args.input);
if (!address) {
throw new Error(`Could not resolve: ${args.input}`);
}
return address;
},
});
exports.isAvailableWNSTool = (0, client_js_1.createTool)({
name: "isAvailableWNS",
description: "Check if a .wei label is available for registration.",
parameters: zod_1.z.object({
label: zod_1.z.string().describe("The label to check availability for (e.g. 'alice')"),
parentId: zod_1.z
.string()
.optional()
.describe("Optional parent token ID as a decimal string for subdomain checks (defaults to 0 for top-level)"),
}),
execute: async (_client, args) => {
const parentId = args.parentId ? BigInt(args.parentId) : 0n;
return wns.isAvailable(args.label, parentId);
},
});
exports.isExpiredWNSTool = (0, client_js_1.createTool)({
name: "isExpiredWNS",
description: "Check if a .wei name is expired.",
parameters: zod_1.z.object({
name: zod_1.z.string().describe("The .wei name to check (e.g. 'alice' or 'alice.wei')"),
}),
execute: async (_client, args) => {
return wns.isExpired(args.name);
},
});
exports.getWNSExpirationTool = (0, client_js_1.createTool)({
name: "getWNSExpiration",
description: "Get the expiration timestamp (unix seconds) for a .wei name.",
parameters: zod_1.z.object({
name: zod_1.z.string().describe("The .wei name to check (e.g. 'alice' or 'alice.wei')"),
}),
execute: async (_client, args) => {
const expiresAt = await wns.expiresAt(args.name);
return {
expiresAt: expiresAt.toString(),
expiresAtDate: expiresAt > 0n ? new Date(Number(expiresAt) * 1000).toISOString() : null,
};
},
});
exports.getWNSOwnerTool = (0, client_js_1.createTool)({
name: "getWNSOwner",
description: "Get the owner address of a .wei name.",
parameters: zod_1.z.object({
name: zod_1.z.string().describe("The .wei name to check (e.g. 'alice' or 'alice.wei')"),
}),
execute: async (_client, args) => {
const owner = await wns.ownerOf(args.name);
if (!owner) {
throw new Error(`No owner found for: ${args.name}`);
}
return owner;
},
});
exports.getWNSBalanceTool = (0, client_js_1.createTool)({
name: "getWNSBalance",
description: "Get the number of .wei names owned by an address.",
parameters: zod_1.z.object({
address: zod_1.z
.string()
.regex(/^0x[a-fA-F0-9]{40}$/)
.describe("The Ethereum address to check"),
}),
execute: async (_client, args) => {
const balance = await wns.balanceOf(args.address);
return balance.toString();
},
});
exports.getWNSTextTool = (0, client_js_1.createTool)({
name: "getWNSText",
description: "Get a text record for a .wei name (e.g. 'url', 'description', 'avatar', 'com.twitter', 'com.github').",
parameters: zod_1.z.object({
name: zod_1.z.string().describe("The .wei name (e.g. 'alice' or 'alice.wei')"),
key: zod_1.z.string().describe("The text record key (e.g. 'url', 'avatar', 'com.twitter')"),
}),
execute: async (_client, args) => {
const value = await wns.getText(args.name, args.key);
if (value === null) {
throw new Error(`No text record '${args.key}' found for: ${args.name}`);
}
return value;
},
});
exports.getWNSContenthashTool = (0, client_js_1.createTool)({
name: "getWNSContenthash",
description: "Get the contenthash for a .wei name.",
parameters: zod_1.z.object({
name: zod_1.z.string().describe("The .wei name (e.g. 'alice' or 'alice.wei')"),
}),
execute: async (_client, args) => {
const hash = await wns.getContenthash(args.name);
if (!hash) {
throw new Error(`No contenthash found for: ${args.name}`);
}
return hash;
},
});
exports.getWNSFeeTool = (0, client_js_1.createTool)({
name: "getWNSFee",
description: "Get the registration fee for a .wei name based on label length.",
parameters: zod_1.z.object({
length: zod_1.z
.number()
.int()
.positive()
.describe("The character length of the label to check the fee for"),
}),
execute: async (_client, args) => {
const fee = await wns.getFee(BigInt(args.length));
return {
feeWei: fee.toString(),
feeEth: (Number(fee) / 1e18).toFixed(6),
};
},
});
exports.getWNSTokenURITool = (0, client_js_1.createTool)({
name: "getWNSTokenURI",
description: "Get the token URI (metadata) for a .wei name.",
parameters: zod_1.z.object({
name: zod_1.z.string().describe("The .wei name (e.g. 'alice' or 'alice.wei')"),
}),
execute: async (_client, args) => {
const uri = await wns.tokenURI(args.name);
if (!uri) {
throw new Error(`No token URI found for: ${args.name}`);
}
return uri;
},
});
exports.intentRegisterWNSTool = (0, client_js_1.createTool)({
name: "intentRegisterWNS",
description: "Generate transaction intents for registering a .wei name. Returns the commit and reveal transactions needed for the two-step registration process.",
parameters: zod_1.z.object({
label: zod_1.z.string().describe("The label to register (e.g. 'alice')"),
secret: zod_1.z
.string()
.describe("A bytes32 secret for the commit-reveal scheme (e.g. '0x...')"),
value: zod_1.z
.string()
.describe("The registration fee in wei as a decimal string"),
}),
execute: async (client, args) => {
const owner = await client.getAddress();
const commitment = await wns.makeCommitment(args.label, owner, args.secret);
const commitTx = wns.encodeCommit(commitment);
const revealTx = wns.encodeReveal(args.label, args.secret, BigInt(args.value));
return {
intent: `Register ${args.label}.wei`,
steps: [
{
step: "commit",
description: "Submit commitment hash (wait ~60s before reveal)",
tx: { to: commitTx.to, data: commitTx.data, value: "0" },
},
{
step: "reveal",
description: "Reveal and complete registration",
tx: {
to: revealTx.to,
data: revealTx.data,
value: revealTx.value?.toString() ?? args.value,
},
},
],
};
},
});
exports.intentRenewWNSTool = (0, client_js_1.createTool)({
name: "intentRenewWNS",
description: "Generate a transaction intent for renewing a .wei name.",
parameters: zod_1.z.object({
name: zod_1.z.string().describe("The .wei name to renew (e.g. 'alice' or 'alice.wei')"),
value: zod_1.z
.string()
.describe("The renewal fee in wei as a decimal string"),
}),
execute: async (_client, args) => {
const tx = await wns.encodeRenew(args.name, BigInt(args.value));
return {
intent: `Renew ${args.name}`,
ops: [
{
target: tx.to,
data: tx.data,
value: tx.value?.toString() ?? args.value,
},
],
chain: 1,
};
},
});
exports.intentSetPrimaryWNSTool = (0, client_js_1.createTool)({
name: "intentSetPrimaryWNS",
description: "Generate a transaction intent for setting a .wei name as the primary name.",
parameters: zod_1.z.object({
name: zod_1.z.string().describe("The .wei name to set as primary (e.g. 'alice' or 'alice.wei')"),
}),
execute: async (_client, args) => {
const tx = await wns.encodeSetPrimaryName(args.name);
return {
intent: `Set primary name to ${args.name}`,
ops: [{ target: tx.to, data: tx.data, value: "0" }],
chain: 1,
};
},
});
exports.intentSetWNSTextTool = (0, client_js_1.createTool)({
name: "intentSetWNSText",
description: "Generate a transaction intent for setting a text record on a .wei name.",
parameters: zod_1.z.object({
name: zod_1.z.string().describe("The .wei name (e.g. 'alice' or 'alice.wei')"),
key: zod_1.z.string().describe("The text record key (e.g. 'url', 'avatar', 'com.twitter')"),
value: zod_1.z.string().describe("The text record value to set"),
}),
execute: async (_client, args) => {
const tx = await wns.encodeSetText(args.name, args.key, args.value);
return {
intent: `Set text record '${args.key}' on ${args.name}`,
ops: [{ target: tx.to, data: tx.data, value: "0" }],
chain: 1,
};
},
});
exports.intentSetWNSAddrTool = (0, client_js_1.createTool)({
name: "intentSetWNSAddr",
description: "Generate a transaction intent for setting the address record on a .wei name.",
parameters: zod_1.z.object({
name: zod_1.z.string().describe("The .wei name (e.g. 'alice' or 'alice.wei')"),
addr: zod_1.z
.string()
.regex(/^0x[a-fA-F0-9]{40}$/)
.describe("The Ethereum address to set"),
}),
execute: async (_client, args) => {
const tx = await wns.encodeSetAddr(args.name, args.addr);
return {
intent: `Set address for ${args.name}`,
ops: [{ target: tx.to, data: tx.data, value: "0" }],
chain: 1,
};
},
});
exports.intentSetWNSContenthashTool = (0, client_js_1.createTool)({
name: "intentSetWNSContenthash",
description: "Generate a transaction intent for setting the contenthash on a .wei name.",
parameters: zod_1.z.object({
name: zod_1.z.string().describe("The .wei name (e.g. 'alice' or 'alice.wei')"),
hash: zod_1.z.string().describe("The contenthash to set (hex-encoded)"),
}),
execute: async (_client, args) => {
const tx = await wns.encodeSetContenthash(args.name, args.hash);
return {
intent: `Set contenthash for ${args.name}`,
ops: [{ target: tx.to, data: tx.data, value: "0" }],
chain: 1,
};
},
});
exports.intentRegisterSubdomainWNSTool = (0, client_js_1.createTool)({
name: "intentRegisterSubdomainWNS",
description: "Generate a transaction intent for registering a subdomain under a .wei name.",
parameters: zod_1.z.object({
label: zod_1.z.string().describe("The subdomain label to register (e.g. 'sub')"),
parentName: zod_1.z
.string()
.describe("The parent .wei name (e.g. 'alice' or 'alice.wei')"),
}),
execute: async (_client, args) => {
const tx = await wns.encodeRegisterSubdomain(args.label, args.parentName);
return {
intent: `Register subdomain ${args.label}.${args.parentName}`,
ops: [{ target: tx.to, data: tx.data, value: "0" }],
chain: 1,
};
},
});
//# sourceMappingURL=tools.js.map