Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
1f1e3df
Update ENSApi Indexing Status API data model
tk-o Feb 24, 2026
e518a43
Update HTTP handlers for ENSApi
tk-o Feb 24, 2026
ac26750
Update Indexing Status cache for ENSApi
tk-o Feb 24, 2026
55414e5
Rename `ENSNodeProvider*` types
tk-o Feb 24, 2026
2557708
Rename `useENSNodeSDKConfig` to `useEnsApiProviderOptions`
tk-o Feb 24, 2026
da220f3
Remove `useENSNodeConfig` hook
tk-o Feb 24, 2026
098ff6e
Update `useResolvedIdentity` to require `namespace` param
tk-o Feb 24, 2026
f7603b8
Update ENSNode hooks to apply renamed functions and types
tk-o Feb 24, 2026
1d45940
Update `useIndexingStatusWithSwr` hook to also cache `config: EnsApiP…
tk-o Feb 24, 2026
ba81822
Create `useEnsApiConfig` for conveniet use of `EnsApiPublicConfig` value
tk-o Feb 24, 2026
72d7ae7
Replace applications of removed `useENSNodeConfig` hook with `useEnsA…
tk-o Feb 24, 2026
c3a1579
Reduce use of `useENSNodeConfig` (removed) and `useIndexingStatusWit…
tk-o Feb 24, 2026
352be15
Replace applications of removed `SelectedENSNodeProvider` with `Selec…
tk-o Feb 24, 2026
f88cc15
Merge remote-tracking branch 'origin/main' into ensapi-merge-config-w…
tk-o Mar 2, 2026
709443d
Fix references to updated ENSApi response data model
tk-o Mar 2, 2026
b768b3d
Fix references to updated ENSIndexer response data model
tk-o Mar 2, 2026
2a2b40f
Fix references to updated Indexing Status data model in ENSAdmin
tk-o Mar 2, 2026
5edb862
Remove config route definition from ENSApi routes
tk-o Mar 2, 2026
073f642
Apply AI PR feedback
tk-o Mar 2, 2026
078f7ef
Merge remote-tracking branch 'origin/main' into ensapi-merge-config-w…
tk-o Apr 13, 2026
e652446
Update OpenAPI Spec
tk-o Apr 13, 2026
02daa2e
Merge remote-tracking branch 'origin/main' into ensapi-merge-config-w…
tk-o Apr 17, 2026
c532285
Apply AI PR feedback
tk-o Apr 17, 2026
4d0703b
Fix conditional logic in react hooks usage
tk-o Apr 17, 2026
acf4e6b
Apply AI PR feedback
tk-o Apr 17, 2026
fa06ece
Rename `EnsApiContext` to `EnsNodeContext` and `*EnsApiProvider*` to …
tk-o Apr 17, 2026
f4e4d56
docs(changeset): Fixed ENS Namespace option for calling `useResolvedI…
tk-o Apr 17, 2026
15f314c
Rename `config` field to `ensApiPublicConfig`
tk-o Apr 17, 2026
a814284
Remove the `ConfigResponse` data model
tk-o Apr 17, 2026
839bb4c
Fix mocked data
tk-o Apr 17, 2026
26a2ff0
Update OpenAPI Spec
tk-o Apr 17, 2026
cdc1736
docs(changeset): Replaced the `EnsApiConfigResponse` data model by ad…
tk-o Apr 17, 2026
6f1d363
docs(changeset): **Breaking**: Replaced the `config()` method in the …
tk-o Apr 17, 2026
288af77
docs(changeset): **Breaking**: Replaced `useENSNodeSDKConfig` hook wi…
tk-o Apr 17, 2026
1ac516c
docs(changeset): **Breaking**: Removed `useENSNodeConfig` hook.
tk-o Apr 17, 2026
dc147d0
docs(changeset): **Breaking**: Removed Config API endpoint at `GET /a…
tk-o Apr 17, 2026
2ce61f8
docs(changeset): Replaced the `useENSNodeConfig` with `useEnsApiPubli…
tk-o Apr 17, 2026
0e7bd2a
Introduce `EnsNodeStackInfo` data model to ENSNode SDK
tk-o Apr 17, 2026
ccc497e
docs(changeset): Introduced `EnsNodeStackInfo` data model.
tk-o Apr 17, 2026
cc131f4
Extend `EnsDbReader` class with `buildEnsDbPublicConfig()` method
tk-o Apr 17, 2026
4658d53
Rename symbols exported from ENSNode React package
tk-o Apr 17, 2026
2eb9070
Return `stackInfo` field from Indexing Status API endpoint
tk-o Apr 17, 2026
774a105
Replace `useEnsApiPublicConfig` hook with `useEnsNodeStackInfo` hook
tk-o Apr 17, 2026
ac94d42
Rename `ensApiPublicConfig` field integrations with `stackInfo` field
tk-o Apr 17, 2026
8086ad9
Update mocks
tk-o Apr 17, 2026
3ca4b1a
Update changesets
tk-o Apr 17, 2026
94cde85
Merge remote-tracking branch 'origin/main' into ensapi-merge-config-w…
tk-o Apr 17, 2026
3aad5fd
Move `useEnsNodeStackInfo` hook into the hooks dir
tk-o Apr 17, 2026
8911aac
Rename `EnsApiClient*` symbols to `EnsNodeClient*`
tk-o Apr 17, 2026
2e8a476
Apply AI PR feedback
tk-o Apr 17, 2026
7132611
Update `SerializedEnsNodeStackInfo` data model
tk-o Apr 21, 2026
446be2e
Add `versionInfo` field to `EnsDbPublicConfig` data model
tk-o Apr 21, 2026
940b401
Apply JSDoc updates
tk-o Apr 21, 2026
74685bd
Fix OpenAPI Spec output for `highestLabelSetVersion` field
tk-o Apr 21, 2026
d15efea
Merge remote-tracking branch 'origin/main' into ensapi-merge-config-w…
tk-o Apr 21, 2026
ec4d4a5
Cleanup teminology around "ENSNode Client"
tk-o Apr 21, 2026
ac957d5
Add tests for parsing pg version info string
tk-o Apr 21, 2026
87523e1
Rename `useActiveENSNodeConfig` hook to `useActiveEnsNodeStackInfo`
tk-o Apr 21, 2026
1cde26a
Merge remote-tracking branch 'origin/main' into ensapi-merge-config-w…
tk-o Apr 21, 2026
23495d0
Apply AI PR feedback
tk-o Apr 21, 2026
b2f37cf
Apply PR feedback
tk-o Apr 21, 2026
5913d2d
Refine examples for `EnsNodeClient`
tk-o Apr 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/common-lines-smell.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@ensnode/ensnode-sdk": minor
---

**Breaking**: Replaced the `config()` method in the `EnsNodeClient` class with the extended data model returned from the `indexingStatus()` method.
2 changes: 1 addition & 1 deletion .changeset/cool-hotels-dress.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
"@ensnode/ensnode-sdk": minor
---

Fully removed the deprecated `ENSNodeClient` (use `EnsApiClient` instead).
**Breaking**: Renamed `ENSNodeClient` to `EnsNodeClient`.
5 changes: 5 additions & 0 deletions .changeset/cute-news-begin.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@ensnode/ensnode-sdk": minor
---

Introduced `EnsNodeStackInfo` data model.
5 changes: 5 additions & 0 deletions .changeset/fancy-mails-fall.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@ensnode/ensnode-sdk": minor
---

Replaced the `EnsApiConfigResponse` data model by adding `stackInfo` field to the `EnsApiIndexingStatusResponseOk` data model.
5 changes: 5 additions & 0 deletions .changeset/fiery-turtles-enter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@ensnode/ensnode-react": minor
---

**Breaking**: Removed `useENSNodeConfig` hook.
7 changes: 7 additions & 0 deletions .changeset/rare-dogs-sin.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@ensnode/ensnode-react": minor
---

**Breaking**:
- Replaced `useENSNodeSDKConfig` hook with `useEnsNodeProviderOptions` hook.
- Renamed `createConfig` function to `createEnsNodeProviderOptions`.
5 changes: 5 additions & 0 deletions .changeset/silent-adults-rest.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"ensadmin": minor
---

Replaced the `useENSNodeConfig` hook with `useEnsNodeStackInfo` hook. The `useEnsNodeStackInfo` hook leverages the updated data model returned from the `useIndexingStatusWithSwr` hook.
5 changes: 5 additions & 0 deletions .changeset/thick-horses-prove.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"ensapi": minor
---

**Breaking**: Removed Config API endpoint at `GET /api/config`. To get the ENSApi Public Config, call the `GET /api/indexing-status` endpoint and reference the `stackInfo.ensApi` field in the OK response.
2 changes: 1 addition & 1 deletion .changeset/two-rice-flash.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
"@ensnode/ensnode-react": minor
---

Replaced references to the deprecated and removed `ENSNodeClient` with `EnsApiClient`.
Replaced references to the deprecated and removed `ENSNodeClient` with `EnsNodeClient`.
5 changes: 5 additions & 0 deletions .changeset/young-phones-look.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@namehash/namehash-ui": patch
---

Fixed ENS Namespace option for calling `useResolvedIdentity` hook from `ResolveAndDisplayIdentity` component.
Comment thread
lightwalker-eth marked this conversation as resolved.
4 changes: 2 additions & 2 deletions apps/ensadmin/src/app/api/omnigraph/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ import { GRAPHQL_API_EXAMPLE_QUERIES } from "@ensnode/ensnode-sdk/internal";

import { GraphiQLEditor } from "@/components/graphiql-editor";
import { RequireENSAdminFeature } from "@/components/require-ensadmin-feature";
import { useActiveNamespace } from "@/hooks/active/use-active-namespace";
import { useActiveEnsNodeStackInfo } from "@/hooks/active/use-active-ensnode-stack-info";
import { useValidatedSelectedConnection } from "@/hooks/active/use-selected-connection";

function GraphQLPage() {
const searchParams = useSearchParams();
const initialQuery = searchParams.get("query");
const initialVariables = searchParams.get("variables");

const namespace = useActiveNamespace();
const { namespace } = useActiveEnsNodeStackInfo().ensIndexer;
const selectedConnection = useValidatedSelectedConnection();
const url = useMemo(
() => new URL(`/api/omnigraph`, selectedConnection).toString(),
Expand Down
4 changes: 2 additions & 2 deletions apps/ensadmin/src/app/inspect/primary-name/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import {
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
import { useActiveNamespace } from "@/hooks/active/use-active-namespace";
import { useActiveEnsNodeStackInfo } from "@/hooks/active/use-active-ensnode-stack-info";
import { useRawConnectionUrlParam } from "@/hooks/use-connection-url-param";
import { getENSIP19SupportedChainIds } from "@/lib/get-ensip19-supported-chain-ids";

Expand All @@ -42,7 +42,7 @@ export default function ResolvePrimaryNameInspector() {
const searchParams = useSearchParams();
const { retainCurrentRawConnectionUrlParam } = useRawConnectionUrlParam();

const namespace = useActiveNamespace();
const { namespace } = useActiveEnsNodeStackInfo().ensIndexer;
const exampleAddresses = useMemo(
() => getNamespaceSpecificValue(namespace, EXAMPLE_ADDRESSES),
[namespace],
Expand Down
4 changes: 2 additions & 2 deletions apps/ensadmin/src/app/inspect/primary-names/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { Pill } from "@/components/pill";
import { Card, CardContent, CardFooter, CardHeader, CardTitle } from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { useActiveNamespace } from "@/hooks/active/use-active-namespace";
import { useActiveEnsNodeStackInfo } from "@/hooks/active/use-active-ensnode-stack-info";
import { useRawConnectionUrlParam } from "@/hooks/use-connection-url-param";

import { EXAMPLE_ADDRESSES } from "../_lib/example-addresses";
Expand All @@ -29,7 +29,7 @@ export default function ResolvePrimaryNameInspector() {
const searchParams = useSearchParams();
const { retainCurrentRawConnectionUrlParam } = useRawConnectionUrlParam();

const namespace = useActiveNamespace();
const { namespace } = useActiveEnsNodeStackInfo().ensIndexer;
const exampleAddresses = useMemo(
() => getNamespaceSpecificValue(namespace, EXAMPLE_ADDRESSES),
[namespace],
Expand Down
4 changes: 2 additions & 2 deletions apps/ensadmin/src/app/inspect/records/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import { Button } from "@/components/ui/button";
import { Card, CardContent, CardFooter, CardHeader, CardTitle } from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { useActiveNamespace } from "@/hooks/active/use-active-namespace";
import { useActiveEnsNodeStackInfo } from "@/hooks/active/use-active-ensnode-stack-info";
import { useRawConnectionUrlParam } from "@/hooks/use-connection-url-param";
import { DefaultRecordsSelection } from "@/lib/default-records-selection";

Expand All @@ -33,7 +33,7 @@ export default function ResolveRecordsInspector() {
const searchParams = useSearchParams();
const nameFromQuery = (searchParams.get("name")?.trim() || null) as Name | null;

const namespace = useActiveNamespace();
const { namespace } = useActiveEnsNodeStackInfo().ensIndexer;
const exampleNames = useMemo(
() => getNamespaceSpecificValue(namespace, EXAMPLE_NAMES),
[namespace],
Expand Down
35 changes: 0 additions & 35 deletions apps/ensadmin/src/app/mock/config-api.mock.ts

This file was deleted.

25 changes: 20 additions & 5 deletions apps/ensadmin/src/app/mock/config-info/data.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
{
"Alpha Mainnet": {
"version": "0.35.0",
"versionInfo": {
"ensApi": "0.35.0",
"ensNormalize": "1.11.1"
},
"theGraphFallback": {
"canFallback": false,
"reason": "no-api-key"
Expand Down Expand Up @@ -41,7 +44,10 @@
}
},
"Alpha Sepolia": {
"version": "0.35.0",
"versionInfo": {
"ensApi": "0.35.0",
"ensNormalize": "1.11.1"
},
"theGraphFallback": {
"canFallback": true,
"url": ""
Expand Down Expand Up @@ -81,7 +87,10 @@
}
},
"Subgraph Mainnet": {
"version": "0.35.0",
"versionInfo": {
"ensApi": "0.35.0",
"ensNormalize": "1.11.1"
},
"theGraphFallback": {
"canFallback": false,
"reason": "no-api-key"
Expand Down Expand Up @@ -114,7 +123,10 @@
}
},
"Subgraph Sepolia": {
"version": "0.35.0",
"versionInfo": {
"ensApi": "0.35.0",
"ensNormalize": "1.11.1"
},
"theGraphFallback": {
"canFallback": false,
"reason": "no-api-key"
Expand Down Expand Up @@ -147,7 +159,10 @@
}
},
"Serialization Error": {
"version": "0.35.0",
"versionInfo": {
"ensApi": "0.35.0",
"ensNormalize": "1.11.1"
},
"theGraphFallback": {
"canFallback": false,
"reason": "no-api-key"
Expand Down
18 changes: 15 additions & 3 deletions apps/ensadmin/src/app/mock/config-info/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@

import { useMemo, useState } from "react";

import { deserializeENSApiPublicConfig, SerializedENSApiPublicConfig } from "@ensnode/ensnode-sdk";
import {
buildEnsNodeStackInfo,
deserializeENSApiPublicConfig,
type EnsDbPublicConfig,
SerializedENSApiPublicConfig,
} from "@ensnode/ensnode-sdk";

import {
ENSNodeConfigInfoView,
Expand Down Expand Up @@ -36,8 +41,15 @@ export default function MockConfigPage() {

default:
try {
const config = deserializeENSApiPublicConfig(mockConfigData[selectedConfig]);
return { ensApiPublicConfig: config };
const ensApiPublicConfig = deserializeENSApiPublicConfig(mockConfigData[selectedConfig]);
const ensDbPublicConfig = {
versionInfo: {
postgresql: "18.1",
},
} satisfies EnsDbPublicConfig;
return {
ensNodeStackInfo: buildEnsNodeStackInfo(ensApiPublicConfig, ensDbPublicConfig),
} satisfies ENSNodeConfigInfoViewProps;
} catch (error) {
const errorMessage =
error instanceof Error
Expand Down
21 changes: 12 additions & 9 deletions apps/ensadmin/src/app/mock/indexing-stats/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { useEffect, useState } from "react";
import {
CrossChainIndexingStatusSnapshot,
createRealtimeIndexingStatusProjection,
EnsApiIndexingStatusResponseOk,
IndexingStatusResponseCodes,
IndexingStatusResponseOk,
OmnichainIndexingStatusIds,
Expand Down Expand Up @@ -37,7 +38,7 @@ let loadingTimeoutId: number;

async function fetchMockedIndexingStatus(
selectedVariant: Variant,
): Promise<CrossChainIndexingStatusSnapshot> {
): Promise<EnsApiIndexingStatusResponseOk> {
// always try clearing loading timeout when performing a mocked fetch
// this way we get a fresh and very long request to observe the loading state
if (loadingTimeoutId) {
Expand All @@ -49,18 +50,16 @@ async function fetchMockedIndexingStatus(
case OmnichainIndexingStatusIds.Backfill:
case OmnichainIndexingStatusIds.Following:
case OmnichainIndexingStatusIds.Completed: {
const response = indexingStatusResponseOkOmnichain[
selectedVariant
] as IndexingStatusResponseOk;
const response = indexingStatusResponseOkOmnichain[selectedVariant];

return response.realtimeProjection.snapshot;
return response;
}
case "Error ResponseCode":
throw new Error(
"Received Indexing Status response with responseCode other than 'ok' which will not be cached.",
);
case "Loading":
return new Promise<CrossChainIndexingStatusSnapshot>((_resolve, reject) => {
return new Promise<EnsApiIndexingStatusResponseOk>((_resolve, reject) => {
loadingTimeoutId = +setTimeout(reject, 5 * 60 * 1_000);
});
case "Loading Error":
Expand All @@ -77,10 +76,14 @@ export default function MockIndexingStatusPage() {
const mockedIndexingStatus = useQuery({
queryKey: ["mock", "useIndexingStatus", selectedVariant],
queryFn: () => fetchMockedIndexingStatus(selectedVariant),
select: (cachedSnapshot) => {
select: ({ responseCode, realtimeProjection, stackInfo }) => {
return {
responseCode: IndexingStatusResponseCodes.Ok,
realtimeProjection: createRealtimeIndexingStatusProjection(cachedSnapshot, now),
responseCode,
realtimeProjection: createRealtimeIndexingStatusProjection(
realtimeProjection.snapshot,
now,
),
stackInfo,
} satisfies IndexingStatusResponseOk;
},
retry: false, // allows loading error to be observed immediately
Expand Down
Loading
Loading