Skip to content

Commit ba5fe5d

Browse files
committed
checkpoint: update to 1.15.2
1 parent a83c910 commit ba5fe5d

10 files changed

Lines changed: 699 additions & 483 deletions

File tree

docs/ensnode.io/src/data/omnigraph-examples/config.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,15 @@ export const OMNIGRAPH_EXAMPLES_CONFIG: OmnigraphExampleConfig[] = [
4545
namespace: ENSNamespaceIds.Mainnet,
4646
hostSeparatePage: true,
4747
},
48+
{
49+
id: "offchain-name",
50+
title: "Offchain Name",
51+
description:
52+
"Resolve an offchain (CCIP-Read) name. Resolvable-but-unindexed names surface as an `UnindexedDomain` instead of returning `null`.",
53+
category: "Resolution",
54+
namespace: ENSNamespaceIds.Mainnet,
55+
hostSeparatePage: true,
56+
},
4857
{
4958
id: "find-domains",
5059
title: "Find Domains",

docs/ensnode.io/src/data/omnigraph-examples/examples.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@
2727
"name": "vitalik.eth"
2828
}
2929
},
30+
{
31+
"id": "offchain-name",
32+
"query": "query OffchainName($name: InterpretedName!) {\n domain(by: { name: $name }) {\n # Resolvable-but-unindexed names (offchain / CCIP-Read) surface as UnindexedDomain\n __typename\n id\n canonical { name { interpreted } }\n resolver {\n # the wildcard Resolver that ENS Forward Resolution (ENSIP-10) lands on\n effective {\n extended\n contract { chainId address }\n }\n }\n resolve {\n records {\n addresses(coinTypes: [60]) { coinType address }\n texts(keys: [\"avatar\", \"com.twitter\", \"description\"]) { key value }\n }\n }\n }\n}",
33+
"variables": {
34+
"name": "patricio.onpoap.eth"
35+
}
36+
},
3037
{
3138
"id": "find-domains",
3239
"query": "query FindDomains(\n $name: DomainsNameFilter!\n $order: DomainsOrderInput\n) {\n domains(\n where: { name: $name }\n order: $order\n first: 20\n ) {\n edges {\n node {\n __typename\n id\n label { interpreted hash }\n canonical { name { interpreted beautified } }\n\n registration { expiry event { timestamp } }\n }\n }\n }\n}",

docs/ensnode.io/src/data/omnigraph-examples/responses.json

Lines changed: 475 additions & 454 deletions
Large diffs are not rendered by default.

docs/ensnode.io/src/data/omnigraph-examples/schema.graphql

Lines changed: 105 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ interface Domain {
420420
owner: Account
421421

422422
"""
423-
The Domain that this Domain's parent Registry declares as its Canonical Domain, if any. Follows a single unidirectional pointer (`Registry.canonicalDomainId`) and does NOT enforce bidirectional canonical-edge agreement: a non-canonical Domain may have a non-null `parent`, and a canonical Domain's `parent` may itself be non-canonical. Null when the parent Registry does not declare a Canonical Domain.
423+
The Domain that this Domain's parent Registry declares as its Canonical Domain, if any. Follows a single unidirectional pointer (`Registry.canonicalDomainId`) and does NOT enforce bidirectional canonical-edge agreement: a non-canonical Domain may have a non-null `parent`, and a canonical Domain's `parent` may itself be non-canonical. Null when the parent Registry does not declare a Canonical Domain. For an UnindexedDomain (which has no Registry of its own), this reflects the wildcard-bearing ancestor's Registry — see `Domain.registry`.
424424
"""
425425
parent: Domain
426426

@@ -435,7 +435,7 @@ interface Domain {
435435
registrations(after: String, before: String, first: Int, last: Int): DomainRegistrationsConnection
436436

437437
"""
438-
The Registry under which this Domain exists.
438+
The Registry under which this Domain exists. For an UnindexedDomain — a resolvable-but-unindexed Domain that has no Registry of its own — this is instead the Registry that manages the ancestor Domain bearing the wildcard Resolver (the same Registry encoded in its `id`).
439439
"""
440440
registry: Registry!
441441

@@ -606,6 +606,11 @@ type DomainResolver {
606606
The Resolver that this Domain has assigned, if any. NOTE that this is the Domain's _assigned_ Resolver, _not_ its _effective_ Resolver, which can only be determined by following ENS Forward Resolution and ENSIP-10. Do NOT use this Domain-Resolver relationship in isolation to resolve records, that operation is NOT ENS Forward Resolution.
607607
"""
608608
assigned: Resolver
609+
610+
"""
611+
The Resolver that ENS Forward Resolution (ENSIP-10) lands on for this Domain — i.e. its _effective_ Resolver. Null when no active Resolver exists or the Domain is not in the Canonical Nametree.
612+
"""
613+
effective: Resolver
609614
}
610615

611616
type DomainSubdomainsConnection {
@@ -736,7 +741,7 @@ type ENSv1Domain implements Domain {
736741
owner: Account
737742

738743
"""
739-
The Domain that this Domain's parent Registry declares as its Canonical Domain, if any. Follows a single unidirectional pointer (`Registry.canonicalDomainId`) and does NOT enforce bidirectional canonical-edge agreement: a non-canonical Domain may have a non-null `parent`, and a canonical Domain's `parent` may itself be non-canonical. Null when the parent Registry does not declare a Canonical Domain.
744+
The Domain that this Domain's parent Registry declares as its Canonical Domain, if any. Follows a single unidirectional pointer (`Registry.canonicalDomainId`) and does NOT enforce bidirectional canonical-edge agreement: a non-canonical Domain may have a non-null `parent`, and a canonical Domain's `parent` may itself be non-canonical. Null when the parent Registry does not declare a Canonical Domain. For an UnindexedDomain (which has no Registry of its own), this reflects the wildcard-bearing ancestor's Registry — see `Domain.registry`.
740745
"""
741746
parent: Domain
742747

@@ -751,7 +756,7 @@ type ENSv1Domain implements Domain {
751756
registrations(after: String, before: String, first: Int, last: Int): DomainRegistrationsConnection
752757

753758
"""
754-
The Registry under which this Domain exists.
759+
The Registry under which this Domain exists. For an UnindexedDomain — a resolvable-but-unindexed Domain that has no Registry of its own — this is instead the Registry that manages the ancestor Domain bearing the wildcard Resolver (the same Registry encoded in its `id`).
755760
"""
756761
registry: Registry!
757762

@@ -919,7 +924,7 @@ type ENSv2Domain implements Domain {
919924
owner: Account
920925

921926
"""
922-
The Domain that this Domain's parent Registry declares as its Canonical Domain, if any. Follows a single unidirectional pointer (`Registry.canonicalDomainId`) and does NOT enforce bidirectional canonical-edge agreement: a non-canonical Domain may have a non-null `parent`, and a canonical Domain's `parent` may itself be non-canonical. Null when the parent Registry does not declare a Canonical Domain.
927+
The Domain that this Domain's parent Registry declares as its Canonical Domain, if any. Follows a single unidirectional pointer (`Registry.canonicalDomainId`) and does NOT enforce bidirectional canonical-edge agreement: a non-canonical Domain may have a non-null `parent`, and a canonical Domain's `parent` may itself be non-canonical. Null when the parent Registry does not declare a Canonical Domain. For an UnindexedDomain (which has no Registry of its own), this reflects the wildcard-bearing ancestor's Registry — see `Domain.registry`.
923928
"""
924929
parent: Domain
925930

@@ -945,7 +950,7 @@ type ENSv2Domain implements Domain {
945950
registrations(after: String, before: String, first: Int, last: Int): DomainRegistrationsConnection
946951

947952
"""
948-
The Registry under which this Domain exists.
953+
The Registry under which this Domain exists. For an UnindexedDomain — a resolvable-but-unindexed Domain that has no Registry of its own — this is instead the Registry that manages the ancestor Domain bearing the wildcard Resolver (the same Registry encoded in its `id`).
949954
"""
950955
registry: Registry!
951956

@@ -2310,6 +2315,11 @@ type Resolver {
23102315
where: EventsWhereInput
23112316
): ResolverEventsConnection
23122317

2318+
"""
2319+
Whether this Resolver implements ENSIP-10 wildcard resolution (`IExtendedResolver`, interfaceId `0x9061b923`), determined via a single cached `supportsInterface` RPC the first time the Resolver is observed.
2320+
"""
2321+
extended: Boolean!
2322+
23132323
"""
23142324
A unique reference to this Resolver.
23152325
"""
@@ -2548,6 +2558,95 @@ type ThreeDNSRegistration implements Registration {
25482558
unregistrant: Account
25492559
}
25502560

2561+
"""
2562+
A resolvable-but-unindexed Domain: not present in the index, but resolvable because an ancestor in its namegraph path has an ENSIP-10 wildcard Resolver (e.g. off-chain / CCIP-Read names, unindexed 3DNS names, wildcard subnames).
2563+
"""
2564+
type UnindexedDomain implements Domain {
2565+
"""
2566+
Metadata (name, path, and node) related to the Domain's canonicality, if known. Null when the Domain is not in the canonical nametree.
2567+
"""
2568+
canonical: DomainCanonical
2569+
2570+
"""
2571+
All Events associated with this Domain.
2572+
"""
2573+
events(
2574+
after: String
2575+
before: String
2576+
first: Int
2577+
last: Int
2578+
where: EventsWhereInput
2579+
): DomainEventsConnection
2580+
2581+
"""
2582+
A unique and stable reference to this Domain.
2583+
"""
2584+
id: DomainId!
2585+
2586+
"""
2587+
The Label associated with this Domain in the ENS Namegraph.
2588+
"""
2589+
label: Label!
2590+
2591+
"""
2592+
If this is an ENSv1Domain, this is the effective owner of the Domain (derived from the Registry, the Registrar, or the NameWrapper, in that order). If this is an ENSv2Domain, this is the on-chain owner address (the HCA account address if used).
2593+
"""
2594+
owner: Account
2595+
2596+
"""
2597+
The Domain that this Domain's parent Registry declares as its Canonical Domain, if any. Follows a single unidirectional pointer (`Registry.canonicalDomainId`) and does NOT enforce bidirectional canonical-edge agreement: a non-canonical Domain may have a non-null `parent`, and a canonical Domain's `parent` may itself be non-canonical. Null when the parent Registry does not declare a Canonical Domain. For an UnindexedDomain (which has no Registry of its own), this reflects the wildcard-bearing ancestor's Registry — see `Domain.registry`.
2598+
"""
2599+
parent: Domain
2600+
2601+
"""
2602+
The latest Registration for this Domain, if exists.
2603+
"""
2604+
registration: Registration
2605+
2606+
"""
2607+
All Registrations for a Domain, including the latest Registration.
2608+
"""
2609+
registrations(after: String, before: String, first: Int, last: Int): DomainRegistrationsConnection
2610+
2611+
"""
2612+
The Registry under which this Domain exists. For an UnindexedDomain — a resolvable-but-unindexed Domain that has no Registry of its own — this is instead the Registry that manages the ancestor Domain bearing the wildcard Resolver (the same Registry encoded in its `id`).
2613+
"""
2614+
registry: Registry!
2615+
2616+
"""
2617+
Resolve protocol-level data for this Domain.
2618+
"""
2619+
resolve(
2620+
"""
2621+
When true (default), Protocol Acceleration will be conditionally used by the server to perform resolution when it is relevant. If false, Protocol Acceleration will be disabled.
2622+
@see https://ensnode.io/docs/integrate/omnigraph/protocol-acceleration
2623+
"""
2624+
accelerate: Boolean = true
2625+
): ForwardResolve!
2626+
2627+
"""
2628+
Resolver relationship metadata for this Domain.
2629+
"""
2630+
resolver: DomainResolver!
2631+
2632+
"""
2633+
All Domains that are direct descendants of this Domain in the namegraph. Ordered by the `order` argument (default: NAME, ASC). When ordering by REGISTRATION_TIMESTAMP or REGISTRATION_EXPIRY, Domains lacking that value — no Registration for REGISTRATION_TIMESTAMP; no Registration or a never-expiring one (treated as +∞) for REGISTRATION_EXPIRY — sort last when `dir: ASC` and first when `dir: DESC`.
2634+
"""
2635+
subdomains(
2636+
after: String
2637+
before: String
2638+
first: Int
2639+
last: Int
2640+
order: DomainsOrderInput
2641+
where: SubdomainsWhereInput
2642+
): DomainSubdomainsConnection
2643+
2644+
"""
2645+
The Registry this Domain declares as its Subregistry, if exists.
2646+
"""
2647+
subregistry: Registry
2648+
}
2649+
25512650
"""
25522651
Additional metadata for BaseRegistrar Registrations wrapped by the NameWrapper (i.e. in the case of a wrapped .eth name)
25532652
"""
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
2-
"version": "v1.15.1",
3-
"commit": "01fbd263",
4-
"sdkVersion": "1.15.1",
5-
"schemaTag": "v1.15.1",
6-
"snapshottedAt": "2026-06-05"
2+
"version": "v1.15.2",
3+
"commit": "a83c910e6",
4+
"sdkVersion": "1.15.2",
5+
"schemaTag": "v1.15.2",
6+
"snapshottedAt": "2026-06-09"
77
}

examples/enskit-react-example/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
"generate:gqlschema": "gql.tada generate-output"
1313
},
1414
"dependencies": {
15-
"enskit": "1.15.1",
16-
"enssdk": "1.15.1",
15+
"enskit": "1.15.2",
16+
"enssdk": "1.15.2",
1717
"react": "catalog:",
1818
"react-dom": "catalog:",
1919
"react-router": "^7.17.0"

examples/enssdk-example/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"generate:gqlschema": "gql.tada generate-output"
1111
},
1212
"dependencies": {
13-
"enssdk": "1.15.1"
13+
"enssdk": "1.15.2"
1414
},
1515
"devDependencies": {
1616
"@types/node": "catalog:",

packages/ensnode-sdk/src/omnigraph-api/example-queries.ts

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ const VITALIK_NAME = asInterpretedName("vitalik.eth");
4444

4545
const GREG_NAME = asInterpretedName("gregskril.eth");
4646

47+
// an offchain (CCIP-Read) name: resolvable but unindexed, so it surfaces as an UnindexedDomain
48+
const OFFCHAIN_NAME = asInterpretedName("patricio.onpoap.eth");
49+
4750
const MAINNET_PUBLIC_RESOLVER = getDatasourceContract(
4851
ENSNamespaceIds.Mainnet,
4952
DatasourceNames.ReverseResolverRoot,
@@ -83,8 +86,8 @@ export const GRAPHQL_API_EXAMPLE_QUERIES: GraphqlApiExampleQuery[] = [
8386
# Reverse resolve the ENS primary name of the account
8487
# using a convenient ETHEREUM alias for mainnet.
8588
primaryName(by: { chainName: ETHEREUM }) {
86-
# Get the regular interpreted variant of the primary name
87-
# and also the special beautified variant that optimizes names
89+
# Get the regular interpreted variant of the primary name
90+
# and also the special beautified variant that optimizes names
8891
# containing special characters such as emojis for proper display in interfaces.
8992
name { interpreted beautified }
9093
resolve {
@@ -332,6 +335,36 @@ query DomainProfile($name: InterpretedName!) {
332335
variables: { default: { name: GREG_NAME } },
333336
},
334337

338+
////////////////////////////////////
339+
// Offchain Name (UnindexedDomain)
340+
////////////////////////////////////
341+
{
342+
id: "offchain-name",
343+
query: `
344+
query OffchainName($name: InterpretedName!) {
345+
domain(by: { name: $name }) {
346+
# Resolvable-but-unindexed names (offchain / CCIP-Read) surface as UnindexedDomain
347+
__typename
348+
id
349+
canonical { name { interpreted } }
350+
resolver {
351+
# the wildcard Resolver that ENS Forward Resolution (ENSIP-10) uses
352+
effective {
353+
extended
354+
contract { chainId address }
355+
}
356+
}
357+
resolve {
358+
records {
359+
addresses(coinTypes: [60]) { coinType address }
360+
texts(keys: ["avatar", "com.twitter", "description"]) { key value }
361+
}
362+
}
363+
}
364+
}`,
365+
variables: { default: { name: OFFCHAIN_NAME } },
366+
},
367+
335368
//////////////////////
336369
// Domain Subdomains
337370
//////////////////////

packages/ensskills/skills/omnigraph/SKILL.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,53 @@ Variables:
493493
}
494494
```
495495

496+
### offchain-name
497+
498+
```graphql
499+
query OffchainName($name: InterpretedName!) {
500+
domain(by: { name: $name }) {
501+
# Resolvable-but-unindexed names (offchain / CCIP-Read) surface as UnindexedDomain
502+
__typename
503+
id
504+
canonical {
505+
name {
506+
interpreted
507+
}
508+
}
509+
resolver {
510+
# the wildcard Resolver that ENS Forward Resolution (ENSIP-10) uses
511+
effective {
512+
extended
513+
contract {
514+
chainId
515+
address
516+
}
517+
}
518+
}
519+
resolve {
520+
records {
521+
addresses(coinTypes: [60]) {
522+
coinType
523+
address
524+
}
525+
texts(keys: ["avatar", "com.twitter", "description"]) {
526+
key
527+
value
528+
}
529+
}
530+
}
531+
}
532+
}
533+
```
534+
535+
Variables:
536+
537+
```json
538+
{
539+
"name": "patricio.onpoap.eth"
540+
}
541+
```
542+
496543
### domain-subdomains
497544

498545
```graphql

0 commit comments

Comments
 (0)