@agenticprimitives/agent-naming 1.0.0-alpha.4 → 1.0.0-alpha.40
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 +15 -4
- package/CLAUDE.md +40 -53
- package/README.md +57 -54
- package/dist/abis.d.ts +641 -0
- package/dist/abis.d.ts.map +1 -1
- package/dist/abis.js +96 -0
- package/dist/abis.js.map +1 -1
- package/dist/claim.d.ts +71 -0
- package/dist/claim.d.ts.map +1 -0
- package/dist/claim.js +73 -0
- package/dist/claim.js.map +1 -0
- package/dist/client.d.ts +36 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +197 -10
- package/dist/client.js.map +1 -1
- package/dist/constants.d.ts +55 -5
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +128 -4
- package/dist/constants.js.map +1 -1
- package/dist/custody.d.ts +54 -2
- package/dist/custody.d.ts.map +1 -1
- package/dist/custody.js +140 -4
- package/dist/custody.js.map +1 -1
- package/dist/dns.d.ts +91 -0
- package/dist/dns.d.ts.map +1 -0
- package/dist/dns.js +196 -0
- package/dist/dns.js.map +1 -0
- package/dist/federated.d.ts +31 -0
- package/dist/federated.d.ts.map +1 -0
- package/dist/federated.js +54 -0
- package/dist/federated.js.map +1 -0
- package/dist/grammar.d.ts +62 -0
- package/dist/grammar.d.ts.map +1 -0
- package/dist/grammar.js +165 -0
- package/dist/grammar.js.map +1 -0
- package/dist/hash.d.ts +14 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +22 -0
- package/dist/hash.js.map +1 -0
- package/dist/index.d.ts +17 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -8
- package/dist/index.js.map +1 -1
- package/dist/issuance.d.ts +70 -0
- package/dist/issuance.d.ts.map +1 -0
- package/dist/issuance.js +65 -0
- package/dist/issuance.js.map +1 -0
- package/dist/label.d.ts +10 -0
- package/dist/label.d.ts.map +1 -0
- package/dist/label.js +39 -0
- package/dist/label.js.map +1 -0
- package/dist/namehash.d.ts +12 -24
- package/dist/namehash.d.ts.map +1 -1
- package/dist/namehash.js +13 -36
- package/dist/namehash.js.map +1 -1
- package/dist/normalize.d.ts +9 -17
- package/dist/normalize.d.ts.map +1 -1
- package/dist/normalize.js +11 -48
- package/dist/normalize.js.map +1 -1
- package/dist/price.d.ts +74 -0
- package/dist/price.d.ts.map +1 -0
- package/dist/price.js +58 -0
- package/dist/price.js.map +1 -0
- package/dist/records.d.ts +44 -3
- package/dist/records.d.ts.map +1 -1
- package/dist/records.js +203 -4
- package/dist/records.js.map +1 -1
- package/dist/types.d.ts +108 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/vertical.d.ts +43 -0
- package/dist/vertical.d.ts.map +1 -0
- package/dist/vertical.js +40 -0
- package/dist/vertical.js.map +1 -0
- package/docs/api.md +15 -3
- package/docs/concepts.md +1 -1
- package/docs/migration.md +1 -1
- package/package.json +24 -15
package/dist/namehash.d.ts
CHANGED
|
@@ -1,31 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Hex } from 'viem';
|
|
2
|
+
import { ZERO_NODE, labelhash } from './hash.js';
|
|
3
|
+
export { ZERO_NODE, labelhash };
|
|
2
4
|
/**
|
|
3
|
-
* Compute the namehash of an agent name
|
|
5
|
+
* Compute the recursive namehash of an agent name
|
|
6
|
+
* (`keccak256(parentNode || labelhash)` convention).
|
|
4
7
|
*
|
|
5
|
-
* namehash('')
|
|
6
|
-
* namehash('agent')
|
|
7
|
-
* namehash('alice.acme.agent')
|
|
8
|
-
*
|
|
8
|
+
* namehash('') = 0x00…00
|
|
9
|
+
* namehash('agent') = keccak256(namehash('') || labelhash('agent'))
|
|
10
|
+
* namehash('alice.acme.agent') = keccak256(namehash('acme.agent') || labelhash('alice'))
|
|
11
|
+
* namehash('vault.svc@richcanvas.org') = namehash('vault.svc.richcanvas.org') (spec 346 §3.3)
|
|
9
12
|
*
|
|
10
|
-
* The hash is computed
|
|
11
|
-
*
|
|
12
|
-
* produce identical namehashes.
|
|
13
|
+
* The hash is computed over the NORMALIZED dotted on-chain form (`onChainNameOf`), so every accepted
|
|
14
|
+
* rendering of the same name (`@`, path, dotted, `.ws` alias) hashes identically.
|
|
13
15
|
*
|
|
14
|
-
* Throws `InvalidNameError`
|
|
15
|
-
* input. Passing `''` returns `0x00…00` — the canonical "empty / root"
|
|
16
|
-
* sentinel matching the ENS convention.
|
|
16
|
+
* Throws `InvalidNameError` on malformed input. Passing `''` returns `0x00…00`.
|
|
17
17
|
*/
|
|
18
18
|
export declare function namehash(name: string): Hex;
|
|
19
|
-
/**
|
|
20
|
-
* Compute the labelhash of a single label.
|
|
21
|
-
*
|
|
22
|
-
* `labelhash(label)` = keccak256(utf8Bytes(label))
|
|
23
|
-
*
|
|
24
|
-
* No normalization is applied here — the caller is expected to pass a
|
|
25
|
-
* label produced by splitting a normalized name. Pass a non-normalized
|
|
26
|
-
* label at your own risk.
|
|
27
|
-
*/
|
|
28
|
-
export declare function labelhash(label: string): Hex;
|
|
29
|
-
/** The all-zeros 32-byte sentinel namehash (the root of the tree). */
|
|
30
|
-
export declare const ZERO_NODE: Hex;
|
|
31
19
|
//# sourceMappingURL=namehash.d.ts.map
|
package/dist/namehash.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namehash.d.ts","sourceRoot":"","sources":["../src/namehash.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"namehash.d.ts","sourceRoot":"","sources":["../src/namehash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAgB,MAAM,WAAW,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAEhC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAG1C"}
|
package/dist/namehash.js
CHANGED
|
@@ -1,46 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { onChainNameOf } from './grammar.js';
|
|
2
|
+
import { ZERO_NODE, labelhash, nodeOfLabels } from './hash.js';
|
|
3
|
+
export { ZERO_NODE, labelhash };
|
|
3
4
|
/**
|
|
4
|
-
* Compute the namehash of an agent name
|
|
5
|
+
* Compute the recursive namehash of an agent name
|
|
6
|
+
* (`keccak256(parentNode || labelhash)` convention).
|
|
5
7
|
*
|
|
6
|
-
* namehash('')
|
|
7
|
-
* namehash('agent')
|
|
8
|
-
* namehash('alice.acme.agent')
|
|
9
|
-
*
|
|
8
|
+
* namehash('') = 0x00…00
|
|
9
|
+
* namehash('agent') = keccak256(namehash('') || labelhash('agent'))
|
|
10
|
+
* namehash('alice.acme.agent') = keccak256(namehash('acme.agent') || labelhash('alice'))
|
|
11
|
+
* namehash('vault.svc@richcanvas.org') = namehash('vault.svc.richcanvas.org') (spec 346 §3.3)
|
|
10
12
|
*
|
|
11
|
-
* The hash is computed
|
|
12
|
-
*
|
|
13
|
-
* produce identical namehashes.
|
|
13
|
+
* The hash is computed over the NORMALIZED dotted on-chain form (`onChainNameOf`), so every accepted
|
|
14
|
+
* rendering of the same name (`@`, path, dotted, `.ws` alias) hashes identically.
|
|
14
15
|
*
|
|
15
|
-
* Throws `InvalidNameError`
|
|
16
|
-
* input. Passing `''` returns `0x00…00` — the canonical "empty / root"
|
|
17
|
-
* sentinel matching the ENS convention.
|
|
16
|
+
* Throws `InvalidNameError` on malformed input. Passing `''` returns `0x00…00`.
|
|
18
17
|
*/
|
|
19
18
|
export function namehash(name) {
|
|
20
19
|
if (name === '')
|
|
21
20
|
return ZERO_NODE;
|
|
22
|
-
|
|
23
|
-
let node = ZERO_NODE;
|
|
24
|
-
// Walk from rightmost (TLD-side) label inward so the root anchors
|
|
25
|
-
// the recursion — same as ENS reference impl.
|
|
26
|
-
for (let i = labels.length - 1; i >= 0; i--) {
|
|
27
|
-
const lh = labelhash(labels[i]);
|
|
28
|
-
node = keccak256(encodePacked(['bytes32', 'bytes32'], [node, lh]));
|
|
29
|
-
}
|
|
30
|
-
return node;
|
|
21
|
+
return nodeOfLabels(onChainNameOf(name).split('.'));
|
|
31
22
|
}
|
|
32
|
-
/**
|
|
33
|
-
* Compute the labelhash of a single label.
|
|
34
|
-
*
|
|
35
|
-
* `labelhash(label)` = keccak256(utf8Bytes(label))
|
|
36
|
-
*
|
|
37
|
-
* No normalization is applied here — the caller is expected to pass a
|
|
38
|
-
* label produced by splitting a normalized name. Pass a non-normalized
|
|
39
|
-
* label at your own risk.
|
|
40
|
-
*/
|
|
41
|
-
export function labelhash(label) {
|
|
42
|
-
return keccak256(toBytes(label));
|
|
43
|
-
}
|
|
44
|
-
/** The all-zeros 32-byte sentinel namehash (the root of the tree). */
|
|
45
|
-
export const ZERO_NODE = '0x0000000000000000000000000000000000000000000000000000000000000000';
|
|
46
23
|
//# sourceMappingURL=namehash.js.map
|
package/dist/namehash.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namehash.js","sourceRoot":"","sources":["../src/namehash.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"namehash.js","sourceRoot":"","sources":["../src/namehash.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAEhC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAClC,OAAO,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACtD,CAAC"}
|
package/dist/normalize.d.ts
CHANGED
|
@@ -1,23 +1,15 @@
|
|
|
1
|
+
export { normalizeLabel } from './label.js';
|
|
1
2
|
/**
|
|
2
|
-
* Normalize an agent name to canonical form.
|
|
3
|
+
* Normalize an agent name to canonical display form (spec 346 §3.1):
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* - NFC, trim, lowercase; every label validated (`[a-z0-9-]`, no edge hyphens, ≤ 63).
|
|
6
|
+
* - `.ws` rewritten to `.workspace`.
|
|
7
|
+
* - Scoped / contextual names return the `@` form (`vault.svc@richcanvas.org`), whichever accepted
|
|
8
|
+
* rendering was given (`@`, `c.u/x.t`, or dotted `x.t.c.u`).
|
|
9
|
+
* - Root, type-node and legacy (`.impact` / `.agent`) names return their dotted form.
|
|
7
10
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* 3. Lowercase (`String.prototype.toLowerCase` — note Turkish-i
|
|
11
|
-
* edge case; acceptable in Phase 1 since labels are ASCII-only).
|
|
12
|
-
* 4. Split on `.`. For each label:
|
|
13
|
-
* - Reject empty.
|
|
14
|
-
* - Reject leading or trailing `-`.
|
|
15
|
-
* - Reject characters outside `[a-z 0-9 -]`.
|
|
16
|
-
* - Reject length > 63.
|
|
17
|
-
* 5. Return joined.
|
|
18
|
-
*
|
|
19
|
-
* Throws `InvalidNameError` on any rule violation. Use this BEFORE
|
|
20
|
-
* `namehash` so the namehash is computed against the canonical form.
|
|
11
|
+
* Throws `InvalidNameError` on any rule violation. `namehash` hashes the on-chain form of the same
|
|
12
|
+
* parse, so two inputs that normalize identically hash identically.
|
|
21
13
|
*/
|
|
22
14
|
export declare function normalizeAgentName(name: string): string;
|
|
23
15
|
/**
|
package/dist/normalize.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOtD"}
|
package/dist/normalize.js
CHANGED
|
@@ -1,56 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { parseAgentName } from './grammar.js';
|
|
2
|
+
export { normalizeLabel } from './label.js';
|
|
2
3
|
/**
|
|
3
|
-
* Normalize an agent name to canonical form.
|
|
4
|
+
* Normalize an agent name to canonical display form (spec 346 §3.1):
|
|
4
5
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* - NFC, trim, lowercase; every label validated (`[a-z0-9-]`, no edge hyphens, ≤ 63).
|
|
7
|
+
* - `.ws` rewritten to `.workspace`.
|
|
8
|
+
* - Scoped / contextual names return the `@` form (`vault.svc@richcanvas.org`), whichever accepted
|
|
9
|
+
* rendering was given (`@`, `c.u/x.t`, or dotted `x.t.c.u`).
|
|
10
|
+
* - Root, type-node and legacy (`.impact` / `.agent`) names return their dotted form.
|
|
8
11
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* 3. Lowercase (`String.prototype.toLowerCase` — note Turkish-i
|
|
12
|
-
* edge case; acceptable in Phase 1 since labels are ASCII-only).
|
|
13
|
-
* 4. Split on `.`. For each label:
|
|
14
|
-
* - Reject empty.
|
|
15
|
-
* - Reject leading or trailing `-`.
|
|
16
|
-
* - Reject characters outside `[a-z 0-9 -]`.
|
|
17
|
-
* - Reject length > 63.
|
|
18
|
-
* 5. Return joined.
|
|
19
|
-
*
|
|
20
|
-
* Throws `InvalidNameError` on any rule violation. Use this BEFORE
|
|
21
|
-
* `namehash` so the namehash is computed against the canonical form.
|
|
12
|
+
* Throws `InvalidNameError` on any rule violation. `namehash` hashes the on-chain form of the same
|
|
13
|
+
* parse, so two inputs that normalize identically hash identically.
|
|
22
14
|
*/
|
|
23
15
|
export function normalizeAgentName(name) {
|
|
24
|
-
|
|
25
|
-
throw new InvalidNameError(String(name), 'must be a string');
|
|
26
|
-
}
|
|
27
|
-
const trimmed = name.normalize('NFC').trim().toLowerCase();
|
|
28
|
-
if (trimmed.length === 0) {
|
|
29
|
-
throw new InvalidNameError(name, 'empty');
|
|
30
|
-
}
|
|
31
|
-
const labels = trimmed.split('.');
|
|
32
|
-
for (const label of labels) {
|
|
33
|
-
validateLabel(name, label);
|
|
34
|
-
}
|
|
35
|
-
return labels.join('.');
|
|
36
|
-
}
|
|
37
|
-
const LABEL_RE = /^[a-z0-9-]+$/;
|
|
38
|
-
function validateLabel(fullName, label) {
|
|
39
|
-
if (label.length === 0) {
|
|
40
|
-
throw new InvalidNameError(fullName, 'empty label (consecutive dots or leading/trailing dot)');
|
|
41
|
-
}
|
|
42
|
-
if (label.length > 63) {
|
|
43
|
-
throw new InvalidNameError(fullName, `label "${label}" exceeds 63 chars`);
|
|
44
|
-
}
|
|
45
|
-
if (label.startsWith('-')) {
|
|
46
|
-
throw new InvalidNameError(fullName, `label "${label}" starts with hyphen`);
|
|
47
|
-
}
|
|
48
|
-
if (label.endsWith('-')) {
|
|
49
|
-
throw new InvalidNameError(fullName, `label "${label}" ends with hyphen`);
|
|
50
|
-
}
|
|
51
|
-
if (!LABEL_RE.test(label)) {
|
|
52
|
-
throw new InvalidNameError(fullName, `label "${label}" contains characters outside [a-z 0-9 -]`);
|
|
53
|
-
}
|
|
16
|
+
return parseAgentName(name).normalized;
|
|
54
17
|
}
|
|
55
18
|
/**
|
|
56
19
|
* Predicate variant — returns true / false instead of throwing.
|
package/dist/normalize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/dist/price.d.ts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { type Address, type Hex } from 'viem';
|
|
2
|
+
import type { ContractCall } from './custody.js';
|
|
3
|
+
/** Base price by ending, in whole coins. The ending names the type; a person's and an organization's cost the most. */
|
|
4
|
+
export declare const NAME_PRICE_BASE: Readonly<Record<string, number>>;
|
|
5
|
+
/** Multiplier by label length (×10, as the contract stores it): 3 → ×4, 4 → ×3, 5 → ×2, 6–7 → ×1.5, 8+ → ×1. */
|
|
6
|
+
export declare const NAME_PRICE_MULTIPLIERS_X10: readonly [number, number, number, number, number];
|
|
7
|
+
/** Nothing costs this much or more. */
|
|
8
|
+
export declare const NAME_PRICE_CAP = 49;
|
|
9
|
+
export declare const NAME_PRICE_MIN_LABEL = 3;
|
|
10
|
+
/** What `label.tld` costs, in whole coins, or `null` for an ending that is not priced (a legacy root, a scoped name). */
|
|
11
|
+
export declare function priceOf(label: string, tld: string): number | null;
|
|
12
|
+
/** Whole coins → the coin's base units (Sheqel has six decimals). */
|
|
13
|
+
export declare const toCoinUnits: (coins: number, decimals?: number) => bigint;
|
|
14
|
+
/**
|
|
15
|
+
* A claim ticket (spec 431 §4): what an estate's naming GATE signs so the priced subregistry will take a claim.
|
|
16
|
+
* `domain` is the keccak of the domain the gate vouched for (`ibm.com`), or the zero hash for an unprotected label.
|
|
17
|
+
* The gate never puts an email on the chain — only the domain, as a hash.
|
|
18
|
+
*/
|
|
19
|
+
export interface ClaimTicketV1 {
|
|
20
|
+
parentNode: Hex;
|
|
21
|
+
label: string;
|
|
22
|
+
owner: Address;
|
|
23
|
+
payer: Address;
|
|
24
|
+
/** In the coin's base units. */
|
|
25
|
+
price: bigint;
|
|
26
|
+
domain: Hex;
|
|
27
|
+
expiry: bigint;
|
|
28
|
+
nonce: Hex;
|
|
29
|
+
}
|
|
30
|
+
export declare const CLAIM_TICKET_TYPES: {
|
|
31
|
+
readonly ClaimTicket: readonly [{
|
|
32
|
+
readonly name: "parentNode";
|
|
33
|
+
readonly type: "bytes32";
|
|
34
|
+
}, {
|
|
35
|
+
readonly name: "label";
|
|
36
|
+
readonly type: "string";
|
|
37
|
+
}, {
|
|
38
|
+
readonly name: "owner";
|
|
39
|
+
readonly type: "address";
|
|
40
|
+
}, {
|
|
41
|
+
readonly name: "payer";
|
|
42
|
+
readonly type: "address";
|
|
43
|
+
}, {
|
|
44
|
+
readonly name: "price";
|
|
45
|
+
readonly type: "uint256";
|
|
46
|
+
}, {
|
|
47
|
+
readonly name: "domain";
|
|
48
|
+
readonly type: "bytes32";
|
|
49
|
+
}, {
|
|
50
|
+
readonly name: "expiry";
|
|
51
|
+
readonly type: "uint256";
|
|
52
|
+
}, {
|
|
53
|
+
readonly name: "nonce";
|
|
54
|
+
readonly type: "bytes32";
|
|
55
|
+
}];
|
|
56
|
+
};
|
|
57
|
+
/** The EIP-712 domain of a `PricedSubregistry` instance — what the gate signs the ticket under. */
|
|
58
|
+
export declare function claimTicketDomain(chainId: number, subregistry: Address): {
|
|
59
|
+
name: 'PricedSubregistry';
|
|
60
|
+
version: '1';
|
|
61
|
+
chainId: number;
|
|
62
|
+
verifyingContract: Address;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* The two calls the PAYER (the person's treasury agent) makes in one user operation: approve the fee, then claim.
|
|
66
|
+
* The treasury signs the operation through its own custody; the name is registered to `ticket.owner` (spec 431 §4 step 5).
|
|
67
|
+
*/
|
|
68
|
+
export declare function buildPricedClaimCalls(input: {
|
|
69
|
+
subregistry: Address;
|
|
70
|
+
coin: Address;
|
|
71
|
+
ticket: ClaimTicketV1;
|
|
72
|
+
gateSignature: Hex;
|
|
73
|
+
}): ContractCall[];
|
|
74
|
+
//# sourceMappingURL=price.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"price.d.ts","sourceRoot":"","sources":["../src/price.ts"],"names":[],"mappings":"AAKA,OAAO,EAAsB,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAElE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,uHAAuH;AACvH,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE5D,CAAC;AAEF,gHAAgH;AAChH,eAAO,MAAM,0BAA0B,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAwB,CAAC;AAElH,uCAAuC;AACvC,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,yHAAyH;AACzH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOjE;AAED,qEAAqE;AACrE,eAAO,MAAM,WAAW,UAAW,MAAM,wBAAiB,MAAiD,CAAC;AAE5G;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,GAAG,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;CAWrB,CAAC;AAEX,mGAAmG;AACnG,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,OAAO,CAAA;CAAE,CAEjK;AAID;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,aAAa,EAAE,GAAG,CAAA;CAAE,GAAG,YAAY,EAAE,CAM/I"}
|
package/dist/price.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// The price of a name (spec 431 §2) — one pure function, the same numbers as `PricedSubregistry.priceOf` on chain,
|
|
2
|
+
// so the Home, the naming service and the contract never disagree. Prices are whole coins; the chain holds them in
|
|
3
|
+
// the coin's base units (`toCoinUnits`).
|
|
4
|
+
//
|
|
5
|
+
// A price is a product mechanism on a test coin, not a market: no rent, no expiry, no resale (spec 431 D6).
|
|
6
|
+
import { encodeFunctionData } from 'viem';
|
|
7
|
+
import { pricedSubregistryAbi } from './abis.js';
|
|
8
|
+
/** Base price by ending, in whole coins. The ending names the type; a person's and an organization's cost the most. */
|
|
9
|
+
export const NAME_PRICE_BASE = {
|
|
10
|
+
me: 8, org: 12, church: 6, team: 6, svc: 10, registry: 20, workspace: 4, treasury: 4, circle: 4, household: 4,
|
|
11
|
+
};
|
|
12
|
+
/** Multiplier by label length (×10, as the contract stores it): 3 → ×4, 4 → ×3, 5 → ×2, 6–7 → ×1.5, 8+ → ×1. */
|
|
13
|
+
export const NAME_PRICE_MULTIPLIERS_X10 = [40, 30, 20, 15, 15];
|
|
14
|
+
/** Nothing costs this much or more. */
|
|
15
|
+
export const NAME_PRICE_CAP = 49;
|
|
16
|
+
export const NAME_PRICE_MIN_LABEL = 3;
|
|
17
|
+
/** What `label.tld` costs, in whole coins, or `null` for an ending that is not priced (a legacy root, a scoped name). */
|
|
18
|
+
export function priceOf(label, tld) {
|
|
19
|
+
const base = NAME_PRICE_BASE[tld];
|
|
20
|
+
if (base === undefined)
|
|
21
|
+
return null;
|
|
22
|
+
const len = label.length;
|
|
23
|
+
if (len < NAME_PRICE_MIN_LABEL)
|
|
24
|
+
throw new Error(`a label needs ${NAME_PRICE_MIN_LABEL} characters or more`);
|
|
25
|
+
const x10 = len >= 8 ? 10 : NAME_PRICE_MULTIPLIERS_X10[len - 3];
|
|
26
|
+
return Math.min(NAME_PRICE_CAP, Math.floor((base * x10) / 10));
|
|
27
|
+
}
|
|
28
|
+
/** Whole coins → the coin's base units (Sheqel has six decimals). */
|
|
29
|
+
export const toCoinUnits = (coins, decimals = 6) => BigInt(coins) * 10n ** BigInt(decimals);
|
|
30
|
+
export const CLAIM_TICKET_TYPES = {
|
|
31
|
+
ClaimTicket: [
|
|
32
|
+
{ name: 'parentNode', type: 'bytes32' },
|
|
33
|
+
{ name: 'label', type: 'string' },
|
|
34
|
+
{ name: 'owner', type: 'address' },
|
|
35
|
+
{ name: 'payer', type: 'address' },
|
|
36
|
+
{ name: 'price', type: 'uint256' },
|
|
37
|
+
{ name: 'domain', type: 'bytes32' },
|
|
38
|
+
{ name: 'expiry', type: 'uint256' },
|
|
39
|
+
{ name: 'nonce', type: 'bytes32' },
|
|
40
|
+
],
|
|
41
|
+
};
|
|
42
|
+
/** The EIP-712 domain of a `PricedSubregistry` instance — what the gate signs the ticket under. */
|
|
43
|
+
export function claimTicketDomain(chainId, subregistry) {
|
|
44
|
+
return { name: 'PricedSubregistry', version: '1', chainId, verifyingContract: subregistry };
|
|
45
|
+
}
|
|
46
|
+
const ERC20_APPROVE_ABI = [{ type: 'function', name: 'approve', stateMutability: 'nonpayable', inputs: [{ name: 'spender', type: 'address' }, { name: 'amount', type: 'uint256' }], outputs: [{ name: '', type: 'bool' }] }];
|
|
47
|
+
/**
|
|
48
|
+
* The two calls the PAYER (the person's treasury agent) makes in one user operation: approve the fee, then claim.
|
|
49
|
+
* The treasury signs the operation through its own custody; the name is registered to `ticket.owner` (spec 431 §4 step 5).
|
|
50
|
+
*/
|
|
51
|
+
export function buildPricedClaimCalls(input) {
|
|
52
|
+
const { subregistry, coin, ticket, gateSignature } = input;
|
|
53
|
+
return [
|
|
54
|
+
{ to: coin, value: 0n, data: encodeFunctionData({ abi: ERC20_APPROVE_ABI, functionName: 'approve', args: [subregistry, ticket.price] }) },
|
|
55
|
+
{ to: subregistry, value: 0n, data: encodeFunctionData({ abi: pricedSubregistryAbi, functionName: 'claim', args: [ticket, gateSignature] }) },
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=price.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"price.js","sourceRoot":"","sources":["../src/price.ts"],"names":[],"mappings":"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"}
|
package/dist/records.d.ts
CHANGED
|
@@ -16,8 +16,9 @@
|
|
|
16
16
|
* - `agentKind`, `metadataHash`,
|
|
17
17
|
* `passkeyCredentialDigest` → on-chain `bytes32`
|
|
18
18
|
* - `displayName`, `a2aEndpoint`,
|
|
19
|
-
* `mcpEndpoint`, `
|
|
20
|
-
* `
|
|
19
|
+
* `mcpEndpoint`, `appContext`, `orgRole`,
|
|
20
|
+
* `serviceUrl`, `siteUrl`, `description`,
|
|
21
|
+
* `metadataUri`, `nativeId` → on-chain `string`
|
|
21
22
|
*
|
|
22
23
|
* The encoder routes each predicate to its typed setter; the decoder
|
|
23
24
|
* routes each predicate to its typed getter. Unknown predicates are
|
|
@@ -25,25 +26,48 @@
|
|
|
25
26
|
* predicates (fail-loud on write).
|
|
26
27
|
*/
|
|
27
28
|
import { type Hex } from 'viem';
|
|
28
|
-
import type {
|
|
29
|
+
import type { DerivedAgentType } from '@agenticprimitives/types';
|
|
30
|
+
import type { AgentKind, AgentNameRecords, ConnectionKind } from './types.js';
|
|
29
31
|
export declare const PREDICATE_ID: {
|
|
30
32
|
readonly addr: `0x${string}`;
|
|
31
33
|
readonly agentKind: `0x${string}`;
|
|
32
34
|
readonly displayName: `0x${string}`;
|
|
33
35
|
readonly a2aEndpoint: `0x${string}`;
|
|
34
36
|
readonly mcpEndpoint: `0x${string}`;
|
|
37
|
+
readonly appContext: `0x${string}`;
|
|
38
|
+
readonly orgRole: `0x${string}`;
|
|
39
|
+
readonly serviceUrl: `0x${string}`;
|
|
40
|
+
readonly siteUrl: `0x${string}`;
|
|
41
|
+
readonly description: `0x${string}`;
|
|
35
42
|
readonly metadataUri: `0x${string}`;
|
|
36
43
|
readonly metadataHash: `0x${string}`;
|
|
37
44
|
readonly passkeyCredentialDigest: `0x${string}`;
|
|
38
45
|
readonly custodyPolicy: `0x${string}`;
|
|
39
46
|
readonly nativeId: `0x${string}`;
|
|
47
|
+
readonly connectionKind: `0x${string}`;
|
|
48
|
+
readonly connectionAddress: `0x${string}`;
|
|
49
|
+
readonly agentType: `0x${string}`;
|
|
50
|
+
readonly serviceRole: `0x${string}`;
|
|
51
|
+
readonly agentSubtype: `0x${string}`;
|
|
52
|
+
readonly cardDigest: `0x${string}`;
|
|
53
|
+
readonly cardUri: `0x${string}`;
|
|
54
|
+
readonly accounts: `0x${string}`;
|
|
55
|
+
readonly clientKeys: `0x${string}`;
|
|
40
56
|
};
|
|
41
57
|
export type PredicateName = keyof typeof PREDICATE_ID;
|
|
42
58
|
export declare const AGENT_KIND_ID: Record<AgentKind, Hex>;
|
|
59
|
+
export declare const AGENT_TYPE_ID: Record<DerivedAgentType, Hex>;
|
|
60
|
+
export declare function encodeAgentType(value: DerivedAgentType): Hex;
|
|
61
|
+
export declare function decodeAgentType(id: Hex): DerivedAgentType | undefined;
|
|
62
|
+
export declare const CONNECTION_KIND_ID: Record<ConnectionKind, Hex>;
|
|
43
63
|
/** `keccak256("atl:AgentName")` — the ShapeRegistry class id. */
|
|
44
64
|
export declare const CLASS_AGENT_NAME: Hex;
|
|
45
65
|
/** `keccak256("atl:AgentKindEnum")` — the enum-set id bound to `atl:agentKind`. */
|
|
46
66
|
export declare const AGENT_KIND_ENUM: Hex;
|
|
67
|
+
/** `keccak256("atl:ConnectionKindEnum")` — the enum-set id bound to `atl:connectionKind`. */
|
|
68
|
+
export declare const CONNECTION_KIND_ENUM: Hex;
|
|
69
|
+
/** `keccak256("atl:AgentTypeEnum")` — the enum-set id bound to `atl:agentType` (spec 346). */
|
|
70
|
+
export declare const AGENT_TYPE_ENUM: Hex;
|
|
47
71
|
/**
|
|
48
72
|
* Phase 1 CAIP-10 namespace allowlist for `nativeId`. Strict on
|
|
49
73
|
* encode (validate-at-write), permissive on decode (forward-compat).
|
|
@@ -58,6 +82,10 @@ export type EncodedRecord = {
|
|
|
58
82
|
predicate: Hex;
|
|
59
83
|
datatype: 'string';
|
|
60
84
|
value: string;
|
|
85
|
+
} | {
|
|
86
|
+
predicate: Hex;
|
|
87
|
+
datatype: 'string[]';
|
|
88
|
+
value: string[];
|
|
61
89
|
} | {
|
|
62
90
|
predicate: Hex;
|
|
63
91
|
datatype: 'address';
|
|
@@ -83,6 +111,19 @@ export interface DecodeInput {
|
|
|
83
111
|
strings: Partial<Record<Hex, string>>;
|
|
84
112
|
addresses: Partial<Record<Hex, `0x${string}`>>;
|
|
85
113
|
bytes32s: Partial<Record<Hex, Hex>>;
|
|
114
|
+
/** `string[]` predicates (`getStringArr`); optional so older readers decode unchanged. */
|
|
115
|
+
stringArrs?: Partial<Record<Hex, string[]>>;
|
|
86
116
|
}
|
|
87
117
|
export declare function decodeRecords(input: DecodeInput): AgentNameRecords;
|
|
118
|
+
export declare function decodeAgentKind(id: Hex): AgentKind | undefined;
|
|
119
|
+
/**
|
|
120
|
+
* Validate-at-write for `atl:accounts`: every entry a CAIP-10 id under the allowlist (ADR-0008), at most ONE
|
|
121
|
+
* per CAIP-2 chain (a name has one account per chain, as ENSIP-9 has one address per coin type), eip155
|
|
122
|
+
* addresses lower-cased, the list sorted by chain so two owners writing the same set write the same bytes.
|
|
123
|
+
*/
|
|
124
|
+
export declare function encodeAccounts(accounts: readonly string[]): string[];
|
|
125
|
+
/** Permissive on decode (forward-compat): keep well-formed entries, drop the rest. */
|
|
126
|
+
export declare function decodeAccounts(values: readonly string[]): string[];
|
|
127
|
+
/** The account a name resolves to on one chain (`eip155:8453`), or null when the name has none there. */
|
|
128
|
+
export declare function accountForChain(records: Pick<AgentNameRecords, 'accounts' | 'nativeId'>, chain: string): string | null;
|
|
88
129
|
//# sourceMappingURL=records.d.ts.map
|
package/dist/records.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../src/records.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../src/records.ts"],"names":[],"mappings":"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"}
|