@agenticprimitives/agent-naming 0.1.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AUDIT.md +86 -0
- package/CLAUDE.md +180 -0
- package/LICENSE +21 -0
- package/README.md +158 -0
- package/dist/abis.d.ts +1532 -0
- package/dist/abis.d.ts.map +1 -0
- package/dist/abis.js +417 -0
- package/dist/abis.js.map +1 -0
- package/dist/client.d.ts +102 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +299 -0
- package/dist/client.js.map +1 -0
- package/dist/constants.d.ts +8 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +7 -0
- package/dist/constants.js.map +1 -0
- package/dist/custody.d.ts +133 -0
- package/dist/custody.d.ts.map +1 -0
- package/dist/custody.js +214 -0
- package/dist/custody.js.map +1 -0
- package/dist/errors.d.ts +15 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +30 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/namehash.d.ts +31 -0
- package/dist/namehash.d.ts.map +1 -0
- package/dist/namehash.js +46 -0
- package/dist/namehash.js.map +1 -0
- package/dist/normalize.d.ts +28 -0
- package/dist/normalize.d.ts.map +1 -0
- package/dist/normalize.js +68 -0
- package/dist/normalize.js.map +1 -0
- package/dist/records.d.ts +88 -0
- package/dist/records.d.ts.map +1 -0
- package/dist/records.js +193 -0
- package/dist/records.js.map +1 -0
- package/dist/types.d.ts +117 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/docs/api.md +110 -0
- package/docs/concepts.md +159 -0
- package/docs/migration.md +93 -0
- package/docs/security.md +127 -0
- package/docs/troubleshooting.md +116 -0
- package/examples/basic.ts +31 -0
- package/examples/custody-rotation.ts +44 -0
- package/examples/records.ts +41 -0
- package/package.json +71 -0
- package/spec.md +14 -0
package/dist/client.js
ADDED
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import { createPublicClient, http } from 'viem';
|
|
2
|
+
import { agentNameAttributeResolverAbi, agentNameRegistryAbi, agentNameUniversalResolverAbi, } from './abis';
|
|
3
|
+
import { PREDICATE_ID, decodeRecords, } from './records';
|
|
4
|
+
import { buildRegisterSubnameCall, buildRecordCalls, buildSetPrimaryNameCall, buildSetSubregistryCall, } from './custody';
|
|
5
|
+
import { namehash, ZERO_NODE } from './namehash';
|
|
6
|
+
/**
|
|
7
|
+
* Read + write client for the Agent Naming Service.
|
|
8
|
+
*
|
|
9
|
+
* Phase 2 lands the read paths (resolveName / reverseResolve /
|
|
10
|
+
* getRecords) against the live AgentNameUniversalResolver +
|
|
11
|
+
* AgentNameAttributeResolver. Write methods still throw `NS Phase 4`
|
|
12
|
+
* — they need ERC-1271 auth + the agent-naming/custody call builders.
|
|
13
|
+
*
|
|
14
|
+
* Round-trip discipline (security invariant from spec § 10):
|
|
15
|
+
* `reverseResolve(agent)` returns a name ONLY when the on-chain
|
|
16
|
+
* `resolveName(name) === agent`. The universal resolver enforces this
|
|
17
|
+
* on chain and returns the full dotted name in a single view call.
|
|
18
|
+
*
|
|
19
|
+
* NO-FALLBACK DOCTRINE (ADR-0012 + ADR-0013): every read here is one
|
|
20
|
+
* `readContract`. There is NO `eth_getLogs` walk, no "try fast path then
|
|
21
|
+
* fall back to log scan." If the resolver has no answer, the read returns
|
|
22
|
+
* null/empty — it does not reach for an alternative path.
|
|
23
|
+
*/
|
|
24
|
+
export class AgentNamingClient {
|
|
25
|
+
opts;
|
|
26
|
+
publicClient;
|
|
27
|
+
constructor(opts) {
|
|
28
|
+
this.opts = opts;
|
|
29
|
+
if (!opts.rpcUrl)
|
|
30
|
+
throw new Error('[agent-naming] rpcUrl required');
|
|
31
|
+
if (!opts.registry)
|
|
32
|
+
throw new Error('[agent-naming] registry address required');
|
|
33
|
+
if (!opts.universalResolver) {
|
|
34
|
+
throw new Error('[agent-naming] universalResolver address required');
|
|
35
|
+
}
|
|
36
|
+
this.publicClient = createPublicClient({ transport: http(opts.rpcUrl) });
|
|
37
|
+
}
|
|
38
|
+
// ─── Reads (Phase 2 — live) ─────────────────────────────────────
|
|
39
|
+
/**
|
|
40
|
+
* Resolve an agent name to its forward-record address. Returns
|
|
41
|
+
* `null` when the name is unregistered OR no `addr` record is set.
|
|
42
|
+
*
|
|
43
|
+
* Reads via `UniversalResolver.resolveName(node)` which:
|
|
44
|
+
* 1. Tries `resolver.getAddress(node, ATL_ADDR)`.
|
|
45
|
+
* 2. Falls back to `registry.owner(node)` if no resolver-addr set.
|
|
46
|
+
*/
|
|
47
|
+
async resolveName(name) {
|
|
48
|
+
const node = namehash(name);
|
|
49
|
+
if (node === ZERO_NODE)
|
|
50
|
+
return null;
|
|
51
|
+
const addr = await this.publicClient.readContract({
|
|
52
|
+
address: this.opts.universalResolver,
|
|
53
|
+
abi: agentNameUniversalResolverAbi,
|
|
54
|
+
functionName: 'resolveName',
|
|
55
|
+
args: [node],
|
|
56
|
+
});
|
|
57
|
+
if (addr === '0x0000000000000000000000000000000000000000')
|
|
58
|
+
return null;
|
|
59
|
+
return addr;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Reverse-resolve a Smart Agent address to its primary name string.
|
|
63
|
+
* Returns `null` when no primary name is set OR the round-trip
|
|
64
|
+
* check fails on chain (squat protection).
|
|
65
|
+
*
|
|
66
|
+
* Single on-chain read: `reverseResolveString` returns the full
|
|
67
|
+
* dotted name; the resolver concatenates ancestor labels via view
|
|
68
|
+
* calls. No SDK-side log walk, no fallback path (ADR-0013).
|
|
69
|
+
*/
|
|
70
|
+
async reverseResolve(agent) {
|
|
71
|
+
const fullName = (await this.publicClient.readContract({
|
|
72
|
+
address: this.opts.universalResolver,
|
|
73
|
+
abi: agentNameUniversalResolverAbi,
|
|
74
|
+
functionName: 'reverseResolveString',
|
|
75
|
+
args: [agent],
|
|
76
|
+
}));
|
|
77
|
+
return fullName && fullName.length > 0 ? fullName : null;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Read the full typed record bundle for a name. Returns an empty
|
|
81
|
+
* bundle when the name has no resolver / no records set.
|
|
82
|
+
*/
|
|
83
|
+
async getRecords(name) {
|
|
84
|
+
const node = namehash(name);
|
|
85
|
+
if (node === ZERO_NODE)
|
|
86
|
+
return {};
|
|
87
|
+
// Read the resolver address from the registry; if none, return empty.
|
|
88
|
+
const resolverAddr = await this.publicClient.readContract({
|
|
89
|
+
address: this.opts.registry,
|
|
90
|
+
abi: agentNameRegistryAbi,
|
|
91
|
+
functionName: 'resolver',
|
|
92
|
+
args: [node],
|
|
93
|
+
});
|
|
94
|
+
if (resolverAddr === '0x0000000000000000000000000000000000000000')
|
|
95
|
+
return {};
|
|
96
|
+
// String predicates batched through the universal resolver
|
|
97
|
+
// (single multi-call for everything that's stored as string).
|
|
98
|
+
const stringPreds = [
|
|
99
|
+
PREDICATE_ID.displayName,
|
|
100
|
+
PREDICATE_ID.a2aEndpoint,
|
|
101
|
+
PREDICATE_ID.mcpEndpoint,
|
|
102
|
+
PREDICATE_ID.metadataUri,
|
|
103
|
+
PREDICATE_ID.nativeId,
|
|
104
|
+
];
|
|
105
|
+
const stringValues = await this.publicClient.readContract({
|
|
106
|
+
address: this.opts.universalResolver,
|
|
107
|
+
abi: agentNameUniversalResolverAbi,
|
|
108
|
+
functionName: 'resolveStringBatch',
|
|
109
|
+
args: [node, stringPreds],
|
|
110
|
+
});
|
|
111
|
+
// Address + bytes32 predicates — direct getter calls against the
|
|
112
|
+
// resolver (no batch path on chain yet; per-call is cheap for the
|
|
113
|
+
// small constant set we have).
|
|
114
|
+
const [addr, custodyPolicy] = await Promise.all([
|
|
115
|
+
this.publicClient.readContract({
|
|
116
|
+
address: resolverAddr,
|
|
117
|
+
abi: agentNameAttributeResolverAbi,
|
|
118
|
+
functionName: 'getAddress',
|
|
119
|
+
args: [node, PREDICATE_ID.addr],
|
|
120
|
+
}),
|
|
121
|
+
this.publicClient.readContract({
|
|
122
|
+
address: resolverAddr,
|
|
123
|
+
abi: agentNameAttributeResolverAbi,
|
|
124
|
+
functionName: 'getAddress',
|
|
125
|
+
args: [node, PREDICATE_ID.custodyPolicy],
|
|
126
|
+
}),
|
|
127
|
+
]);
|
|
128
|
+
const [agentKind, metadataHash, passkeyDigest] = await Promise.all([
|
|
129
|
+
this.publicClient.readContract({
|
|
130
|
+
address: resolverAddr,
|
|
131
|
+
abi: agentNameAttributeResolverAbi,
|
|
132
|
+
functionName: 'getBytes32',
|
|
133
|
+
args: [node, PREDICATE_ID.agentKind],
|
|
134
|
+
}),
|
|
135
|
+
this.publicClient.readContract({
|
|
136
|
+
address: resolverAddr,
|
|
137
|
+
abi: agentNameAttributeResolverAbi,
|
|
138
|
+
functionName: 'getBytes32',
|
|
139
|
+
args: [node, PREDICATE_ID.metadataHash],
|
|
140
|
+
}),
|
|
141
|
+
this.publicClient.readContract({
|
|
142
|
+
address: resolverAddr,
|
|
143
|
+
abi: agentNameAttributeResolverAbi,
|
|
144
|
+
functionName: 'getBytes32',
|
|
145
|
+
args: [node, PREDICATE_ID.passkeyCredentialDigest],
|
|
146
|
+
}),
|
|
147
|
+
]);
|
|
148
|
+
const input = { strings: {}, addresses: {}, bytes32s: {} };
|
|
149
|
+
input.strings[PREDICATE_ID.displayName] = stringValues[0];
|
|
150
|
+
input.strings[PREDICATE_ID.a2aEndpoint] = stringValues[1];
|
|
151
|
+
input.strings[PREDICATE_ID.mcpEndpoint] = stringValues[2];
|
|
152
|
+
input.strings[PREDICATE_ID.metadataUri] = stringValues[3];
|
|
153
|
+
input.strings[PREDICATE_ID.nativeId] = stringValues[4];
|
|
154
|
+
if (addr !== '0x0000000000000000000000000000000000000000') {
|
|
155
|
+
input.addresses[PREDICATE_ID.addr] = addr;
|
|
156
|
+
}
|
|
157
|
+
if (custodyPolicy !== '0x0000000000000000000000000000000000000000') {
|
|
158
|
+
input.addresses[PREDICATE_ID.custodyPolicy] = custodyPolicy;
|
|
159
|
+
}
|
|
160
|
+
if (agentKind !== ZERO_NODE)
|
|
161
|
+
input.bytes32s[PREDICATE_ID.agentKind] = agentKind;
|
|
162
|
+
if (metadataHash !== ZERO_NODE)
|
|
163
|
+
input.bytes32s[PREDICATE_ID.metadataHash] = metadataHash;
|
|
164
|
+
if (passkeyDigest !== ZERO_NODE)
|
|
165
|
+
input.bytes32s[PREDICATE_ID.passkeyCredentialDigest] = passkeyDigest;
|
|
166
|
+
return decodeRecords(input);
|
|
167
|
+
}
|
|
168
|
+
// ─── Writes (Phase 4 — live) ─────────────────────────────────────
|
|
169
|
+
/**
|
|
170
|
+
* Register `<label>.<parent>` under the parent namespace. The
|
|
171
|
+
* provided `walletClient`'s account MUST be authorized to register
|
|
172
|
+
* children under `parent` (either direct owner OR subregistry
|
|
173
|
+
* delegate). Returns the registration tx hash; the new child node
|
|
174
|
+
* can be computed off-chain as
|
|
175
|
+
* `keccak256(parentNode || keccak256(label))` — equal to
|
|
176
|
+
* `namehash(label + '.' + parentName)`.
|
|
177
|
+
*
|
|
178
|
+
* For PSA-controlled registrations (where the parent's owner is a
|
|
179
|
+
* Smart Agent gated by CustodyPolicy), use the builders in
|
|
180
|
+
* `./custody` directly and compose them into the appropriate
|
|
181
|
+
* AgentAccount.execute / CustodyPolicy ceremony instead.
|
|
182
|
+
*/
|
|
183
|
+
async registerSubname(input, ctx) {
|
|
184
|
+
const parentNode = namehash(input.parent);
|
|
185
|
+
const call = buildRegisterSubnameCall({
|
|
186
|
+
registry: this.opts.registry,
|
|
187
|
+
parentNode,
|
|
188
|
+
label: input.label,
|
|
189
|
+
newOwner: input.owner,
|
|
190
|
+
resolver: input.resolver,
|
|
191
|
+
});
|
|
192
|
+
const hash = await this._submit(ctx, call);
|
|
193
|
+
if (input.initialRecords) {
|
|
194
|
+
// Compute the new child node off-chain so we don't have to
|
|
195
|
+
// re-read against a possibly-lagging RPC.
|
|
196
|
+
const childNode = namehash(`${input.label}.${input.parent}`);
|
|
197
|
+
const resolver = input.resolver ?? this.opts.universalResolver; // best-effort default
|
|
198
|
+
const calls = buildRecordCalls({ resolver, node: childNode, records: input.initialRecords });
|
|
199
|
+
for (const c of calls)
|
|
200
|
+
await this._submit(ctx, c);
|
|
201
|
+
}
|
|
202
|
+
return hash;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Set the caller's primary name (reverse record). The wallet
|
|
206
|
+
* client's account MUST equal `input.agent` — the contract enforces
|
|
207
|
+
* `msg.sender == agent` (i.e. an agent sets its OWN primary name;
|
|
208
|
+
* authority over reverse records is per-account by construction).
|
|
209
|
+
*/
|
|
210
|
+
async setPrimaryName(input, ctx) {
|
|
211
|
+
const node = namehash(input.name);
|
|
212
|
+
const call = buildSetPrimaryNameCall({ registry: this.opts.registry, node });
|
|
213
|
+
return await this._submit(ctx, call);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Write the typed record bundle for `input.name`. The
|
|
217
|
+
* `walletClient`'s account MUST be the current name owner
|
|
218
|
+
* (`REGISTRY.owner(node) == msg.sender`). Returns one tx hash per
|
|
219
|
+
* record set — the caller may parallelize submission via a multi-call
|
|
220
|
+
* upstream if/when one becomes available.
|
|
221
|
+
*/
|
|
222
|
+
async setAgentRecords(input, ctx) {
|
|
223
|
+
const node = namehash(input.name);
|
|
224
|
+
// Resolve the resolver address for this name via the registry.
|
|
225
|
+
const resolverAddr = await this.publicClient.readContract({
|
|
226
|
+
address: this.opts.registry,
|
|
227
|
+
abi: agentNameRegistryAbi,
|
|
228
|
+
functionName: 'resolver',
|
|
229
|
+
args: [node],
|
|
230
|
+
});
|
|
231
|
+
if (resolverAddr === '0x0000000000000000000000000000000000000000') {
|
|
232
|
+
throw new Error(`[agent-naming] no resolver set for "${input.name}"; install one via setResolver first`);
|
|
233
|
+
}
|
|
234
|
+
const calls = buildRecordCalls({
|
|
235
|
+
resolver: resolverAddr,
|
|
236
|
+
node,
|
|
237
|
+
records: input.records,
|
|
238
|
+
});
|
|
239
|
+
const hashes = [];
|
|
240
|
+
for (const c of calls)
|
|
241
|
+
hashes.push(await this._submit(ctx, c));
|
|
242
|
+
return hashes;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Delegate child-name issuance authority for the subtree at
|
|
246
|
+
* `input.name` to a subregistry contract. The wallet client's
|
|
247
|
+
* account MUST be the current name owner.
|
|
248
|
+
*/
|
|
249
|
+
async setSubregistry(input, ctx) {
|
|
250
|
+
const node = namehash(input.name);
|
|
251
|
+
const call = buildSetSubregistryCall({
|
|
252
|
+
registry: this.opts.registry,
|
|
253
|
+
node,
|
|
254
|
+
subregistry: input.subregistry,
|
|
255
|
+
});
|
|
256
|
+
return await this._submit(ctx, call);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Submit a single ContractCall via the bound walletClient. Uses
|
|
260
|
+
* explicit nonce fetch + retry on "replacement underpriced" to
|
|
261
|
+
* tolerate Base Sepolia's read-after-write lag.
|
|
262
|
+
*/
|
|
263
|
+
async _submit(ctx, call) {
|
|
264
|
+
const { walletClient } = ctx;
|
|
265
|
+
const account = walletClient.account;
|
|
266
|
+
if (!account)
|
|
267
|
+
throw new Error('[agent-naming] walletClient has no account; cannot sign tx');
|
|
268
|
+
let lastErr;
|
|
269
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
270
|
+
try {
|
|
271
|
+
const nonce = await this.publicClient.getTransactionCount({
|
|
272
|
+
address: account.address,
|
|
273
|
+
blockTag: 'pending',
|
|
274
|
+
});
|
|
275
|
+
const hash = await walletClient.sendTransaction({
|
|
276
|
+
to: call.to,
|
|
277
|
+
value: call.value,
|
|
278
|
+
data: call.data,
|
|
279
|
+
nonce,
|
|
280
|
+
account: walletClient.account,
|
|
281
|
+
chain: walletClient.chain ?? null,
|
|
282
|
+
});
|
|
283
|
+
await this.publicClient.waitForTransactionReceipt({ hash });
|
|
284
|
+
return hash;
|
|
285
|
+
}
|
|
286
|
+
catch (err) {
|
|
287
|
+
lastErr = err;
|
|
288
|
+
const msg = err.message ?? '';
|
|
289
|
+
if (msg.includes('replacement') || msg.includes('underpriced')) {
|
|
290
|
+
await new Promise((r) => setTimeout(r, 2000));
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
throw err;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
throw lastErr instanceof Error ? lastErr : new Error('[agent-naming] _submit: exceeded retries');
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The TLD for Smart Agent names. Phase 1 ships `.agent` only; the
|
|
3
|
+
* underlying registry contract is multi-root, but the package surface
|
|
4
|
+
* restricts to `.agent` until additional TLDs are spec'd.
|
|
5
|
+
*/
|
|
6
|
+
export declare const AGENT_TLD: "agent";
|
|
7
|
+
export type AgentTld = typeof AGENT_TLD;
|
|
8
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAG,OAAgB,CAAC;AAC1C,MAAM,MAAM,QAAQ,GAAG,OAAO,SAAS,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The TLD for Smart Agent names. Phase 1 ships `.agent` only; the
|
|
3
|
+
* underlying registry contract is multi-root, but the package surface
|
|
4
|
+
* restricts to `.agent` until additional TLDs are spec'd.
|
|
5
|
+
*/
|
|
6
|
+
export const AGENT_TLD = 'agent';
|
|
7
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,OAAgB,CAAC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subpath `@agenticprimitives/agent-naming/custody`.
|
|
3
|
+
*
|
|
4
|
+
* Pure encoded call builders for name-registry + resolver writes.
|
|
5
|
+
* Compose these into a custody ceremony, a direct EOA tx, an
|
|
6
|
+
* ERC-4337 UserOp, or anything else that submits a transaction.
|
|
7
|
+
* The package boundary (spec 215 § 3) prohibits importing
|
|
8
|
+
* `@agenticprimitives/account-custody` from here — these builders MUST stay
|
|
9
|
+
* pure encode-only.
|
|
10
|
+
*
|
|
11
|
+
* Each builder returns a `ContractCall` shape (`{ to, value, data }`)
|
|
12
|
+
* matching the standard "compose-then-submit" pattern used across
|
|
13
|
+
* other agenticprimitives packages.
|
|
14
|
+
*
|
|
15
|
+
* Phase 4 lands the encoders; the client (`AgentNamingClient`) layers
|
|
16
|
+
* walletClient submission on top.
|
|
17
|
+
*/
|
|
18
|
+
import type { Address, Hex } from '@agenticprimitives/types';
|
|
19
|
+
import { type EncodedRecord } from './records';
|
|
20
|
+
/** Minimal call-shape: the standard `{ to, value, data }` triple. */
|
|
21
|
+
export interface ContractCall {
|
|
22
|
+
to: Address;
|
|
23
|
+
value: bigint;
|
|
24
|
+
data: Hex;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build a call to register `<label>.<parent>` under the parent
|
|
28
|
+
* namespace. Caller MUST be the parent's owner OR subregistry
|
|
29
|
+
* delegate (msg.sender check on chain).
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildRegisterSubnameCall(args: {
|
|
32
|
+
registry: Address;
|
|
33
|
+
parentNode: Hex;
|
|
34
|
+
label: string;
|
|
35
|
+
newOwner: Address;
|
|
36
|
+
resolver?: Address;
|
|
37
|
+
expiry?: bigint;
|
|
38
|
+
}): ContractCall;
|
|
39
|
+
/**
|
|
40
|
+
* Build a call to rotate the owner Smart Agent for a name.
|
|
41
|
+
* Caller MUST be the current owner.
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildRotateNameOwnerCall(args: {
|
|
44
|
+
registry: Address;
|
|
45
|
+
node: Hex;
|
|
46
|
+
newOwner: Address;
|
|
47
|
+
}): ContractCall;
|
|
48
|
+
/**
|
|
49
|
+
* Build a call to swap the resolver contract for a name.
|
|
50
|
+
* Caller MUST be the current owner.
|
|
51
|
+
*/
|
|
52
|
+
export declare function buildRotateNameResolverCall(args: {
|
|
53
|
+
registry: Address;
|
|
54
|
+
node: Hex;
|
|
55
|
+
newResolver: Address;
|
|
56
|
+
}): ContractCall;
|
|
57
|
+
/**
|
|
58
|
+
* Build a call to delegate child-name issuance authority for a
|
|
59
|
+
* subtree to a subregistry contract. Setting `subregistry = address(0)`
|
|
60
|
+
* reverts to "owner-only" issuance.
|
|
61
|
+
*/
|
|
62
|
+
export declare function buildSetSubregistryCall(args: {
|
|
63
|
+
registry: Address;
|
|
64
|
+
node: Hex;
|
|
65
|
+
subregistry: Address;
|
|
66
|
+
}): ContractCall;
|
|
67
|
+
/**
|
|
68
|
+
* Build a call to set the caller's primary name (reverse record).
|
|
69
|
+
* Caller MUST be the agent for which the primary name is being set
|
|
70
|
+
* (msg.sender == agent on chain). Setting `node = bytes32(0)` clears
|
|
71
|
+
* the primary name.
|
|
72
|
+
*/
|
|
73
|
+
export declare function buildSetPrimaryNameCall(args: {
|
|
74
|
+
registry: Address;
|
|
75
|
+
node: Hex;
|
|
76
|
+
}): ContractCall;
|
|
77
|
+
/** Build a typed `setStringAttribute(node, predicate, value)` call. */
|
|
78
|
+
export declare function buildSetStringAttributeCall(args: {
|
|
79
|
+
resolver: Address;
|
|
80
|
+
node: Hex;
|
|
81
|
+
predicate: Hex;
|
|
82
|
+
value: string;
|
|
83
|
+
}): ContractCall;
|
|
84
|
+
/** Build a typed `setAddressAttribute(node, predicate, value)` call. */
|
|
85
|
+
export declare function buildSetAddressAttributeCall(args: {
|
|
86
|
+
resolver: Address;
|
|
87
|
+
node: Hex;
|
|
88
|
+
predicate: Hex;
|
|
89
|
+
value: Address;
|
|
90
|
+
}): ContractCall;
|
|
91
|
+
/** Build a typed `setBytes32Attribute(node, predicate, value)` call. */
|
|
92
|
+
export declare function buildSetBytes32AttributeCall(args: {
|
|
93
|
+
resolver: Address;
|
|
94
|
+
node: Hex;
|
|
95
|
+
predicate: Hex;
|
|
96
|
+
value: Hex;
|
|
97
|
+
}): ContractCall;
|
|
98
|
+
/**
|
|
99
|
+
* Translate an `AgentNameRecords` bundle into N typed-attribute
|
|
100
|
+
* calls. Caller submits them via walletClient OR composes them into
|
|
101
|
+
* a single AgentAccount.execute / CustodyPolicy ceremony.
|
|
102
|
+
*
|
|
103
|
+
* Mirrors `encodeRecords` from `agent-naming/records` but produces
|
|
104
|
+
* full `ContractCall` shapes instead of `EncodedRecord` shapes.
|
|
105
|
+
*/
|
|
106
|
+
export declare function buildRecordCalls(args: {
|
|
107
|
+
resolver: Address;
|
|
108
|
+
node: Hex;
|
|
109
|
+
records: import('./types').AgentNameRecords;
|
|
110
|
+
}): ContractCall[];
|
|
111
|
+
/**
|
|
112
|
+
* Build a call to claim `<label>.<parent>` through a deployed
|
|
113
|
+
* PermissionlessSubregistry instance. The caller pays gas; the
|
|
114
|
+
* registered child name is owned by `newOwner` (typically the
|
|
115
|
+
* caller's own PSA OR an account they control).
|
|
116
|
+
*
|
|
117
|
+
* Anti-spam: one claim per `msg.sender` is enforced on chain; the
|
|
118
|
+
* call reverts with `AlreadyClaimed(existingNode)` if the caller
|
|
119
|
+
* has previously claimed a name through this subregistry instance.
|
|
120
|
+
*/
|
|
121
|
+
export declare function buildSubregistryRegisterCall(args: {
|
|
122
|
+
subregistry: Address;
|
|
123
|
+
label: string;
|
|
124
|
+
newOwner: Address;
|
|
125
|
+
}): ContractCall;
|
|
126
|
+
/**
|
|
127
|
+
* Convenience: re-export the encoded-record shape from records.ts so
|
|
128
|
+
* downstream callers can pick whichever level of abstraction fits
|
|
129
|
+
* (EncodedRecord = pre-typed-setter args; ContractCall = full
|
|
130
|
+
* encoded call).
|
|
131
|
+
*/
|
|
132
|
+
export type { EncodedRecord };
|
|
133
|
+
//# sourceMappingURL=custody.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custody.d.ts","sourceRoot":"","sources":["../src/custody.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAM7D,OAAO,EAA+B,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAG5E,qEAAqE;AACrE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,GAAG,CAAC;CACX;AAID;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,GAAG,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,YAAY,CAgBf;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC;IACV,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,YAAY,CAUf;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC;IACV,WAAW,EAAE,OAAO,CAAC;CACtB,GAAG,YAAY,CAUf;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC;IACV,WAAW,EAAE,OAAO,CAAC;CACtB,GAAG,YAAY,CAUf;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC;CACX,GAAG,YAAY,CAUf;AAID,uEAAuE;AACvE,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,GAAG,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,YAAY,CAUf;AAED,wEAAwE;AACxE,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IACjD,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,GAAG,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,YAAY,CAUf;AAED,wEAAwE;AACxE,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IACjD,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,GAAG,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;CACZ,GAAG,YAAY,CAUf;AAID;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,OAAO,SAAS,EAAE,gBAAgB,CAAC;CAC7C,GAAG,YAAY,EAAE,CAsCjB;AAID;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IACjD,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,YAAY,CAUf;AAED;;;;;GAKG;AACH,YAAY,EAAE,aAAa,EAAE,CAAC"}
|