Simplify public config data models - #2347
Conversation
🦋 Changeset detectedLatest commit: dfb3837 The changes in this PR will be included in the next version bump. This PR includes changesets to release 23 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Warning Review limit reached
Next review available in: 35 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (6)
📝 WalkthroughWalkthroughThis PR removes ChangesPublic config decoupling
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant Singleton
participant PublicConfigBuilder
participant Validator
Singleton->>PublicConfigBuilder: new PublicConfigBuilder()
PublicConfigBuilder->>PublicConfigBuilder: getPublicConfig()
PublicConfigBuilder->>Validator: validateEnsIndexerPublicConfig(config)
Validator-->>PublicConfigBuilder: validated EnsIndexerPublicConfig
PublicConfigBuilder-->>Singleton: EnsIndexerPublicConfig
Possibly related PRs
Suggested labels: Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Greptile SummaryThis PR removes redundant nesting of service configs:
Confidence Score: 5/5Safe to merge; the change is a straightforward field removal with all cross-service validation preserved at the correct layer. The removed fields were redundant copies of data already available as siblings in No files require special attention; all changes are consistent across types, schemas, serializers, and tests. Important Files Changed
Entity Relationship Diagram%%{init: {'theme': 'neutral'}}%%
erDiagram
EnsIndexerStackInfo {
EnsDbPublicConfig ensDb
EnsIndexerPublicConfig ensIndexer
EnsRainbowPublicConfig ensRainbow
EnsApiPublicConfig ensApi
}
EnsIndexerPublicConfig {
string ensIndexerSchemaName
Set indexedChainIds
boolean isSubgraphCompatible
ClientLabelSet clientLabelSet
string namespace
string[] plugins
VersionInfo versionInfo
}
EnsApiPublicConfig {
TheGraphFallback theGraphFallback
VersionInfo versionInfo
}
EnsRainbowPublicConfig {
ServerLabelSet serverLabelSet
VersionInfo versionInfo
}
EnsIndexerStackInfo ||--|| EnsIndexerPublicConfig : "ensIndexer (was: ensIndexer + nested ensRainbow)"
EnsIndexerStackInfo ||--|| EnsRainbowPublicConfig : "ensRainbow (promoted from nested)"
EnsIndexerStackInfo ||--|| EnsApiPublicConfig : "ensApi (was: ensApi + nested ensIndexer)"
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
erDiagram
EnsIndexerStackInfo {
EnsDbPublicConfig ensDb
EnsIndexerPublicConfig ensIndexer
EnsRainbowPublicConfig ensRainbow
EnsApiPublicConfig ensApi
}
EnsIndexerPublicConfig {
string ensIndexerSchemaName
Set indexedChainIds
boolean isSubgraphCompatible
ClientLabelSet clientLabelSet
string namespace
string[] plugins
VersionInfo versionInfo
}
EnsApiPublicConfig {
TheGraphFallback theGraphFallback
VersionInfo versionInfo
}
EnsRainbowPublicConfig {
ServerLabelSet serverLabelSet
VersionInfo versionInfo
}
EnsIndexerStackInfo ||--|| EnsIndexerPublicConfig : "ensIndexer (was: ensIndexer + nested ensRainbow)"
EnsIndexerStackInfo ||--|| EnsRainbowPublicConfig : "ensRainbow (promoted from nested)"
EnsIndexerStackInfo ||--|| EnsApiPublicConfig : "ensApi (was: ensApi + nested ensIndexer)"
Reviews (4): Last reviewed commit: "Apply AI PR feedback" | Re-trigger Greptile |
There was a problem hiding this comment.
Pull request overview
This PR simplifies ENSNode “public config” data models in @ensnode/ensnode-sdk by removing nested cross-references (EnsApiPublicConfig.ensIndexerPublicConfig and EnsIndexerPublicConfig.ensRainbowPublicConfig) and updating the Indexing Status (stack info) response shape and related mocks/tests/docs to match.
Changes:
- Removed
ensIndexerPublicConfigfromEnsApiPublicConfig(types, zod schemas, (de)serialization, tests, and sample responses). - Removed
ensRainbowPublicConfigfromEnsIndexerPublicConfig(types, zod schemas, serialization, tests, and mocks). - Updated the OpenAPI artifact and multiple app mocks/tests (ENSIndexer/ENSApi/ENSAdmin) to reflect the new stack info/public config shapes.
Reviewed changes
Copilot reviewed 27 out of 27 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/ensnode-sdk/src/ensnode/metadata/indexing-metadata-context.test.ts | Updates minimal stackInfo fixture to remove nested ENSRainbow public config from ENSIndexer config. |
| packages/ensnode-sdk/src/ensnode/client.test.ts | Updates example public-config payloads to match new serialized shapes (removes nested configs). |
| packages/ensnode-sdk/src/ensindexer/config/zod-schemas.ts | Removes ensRainbowPublicConfig from schemas and drops related invariant check. |
| packages/ensnode-sdk/src/ensindexer/config/zod-schemas.test.ts | Removes tests/fixtures that relied on ensRainbowPublicConfig validation. |
| packages/ensnode-sdk/src/ensindexer/config/types.ts | Removes ensRainbowPublicConfig from EnsIndexerPublicConfig interface. |
| packages/ensnode-sdk/src/ensindexer/config/serialize.ts | Stops serializing ensRainbowPublicConfig as part of ENSIndexer public config. |
| packages/ensnode-sdk/src/ensindexer/config/conversions.test.ts | Updates serialization/deserialization tests to remove ensRainbowPublicConfig. |
| packages/ensnode-sdk/src/ensindexer/client.mock.ts | Updates mocked ENSIndexer config response to remove ensRainbowPublicConfig. |
| packages/ensnode-sdk/src/ensapi/config/zod-schemas.ts | Removes ensIndexerPublicConfig from ENSApi public config schemas. |
| packages/ensnode-sdk/src/ensapi/config/types.ts | Removes ensIndexerPublicConfig from EnsApiPublicConfig interface. |
| packages/ensnode-sdk/src/ensapi/config/serialized-types.ts | Simplifies serialized type to a direct alias of EnsApiPublicConfig. |
| packages/ensnode-sdk/src/ensapi/config/serialize.ts | Simplifies serializer to a pass-through copy (no nested serialization needed). |
| packages/ensnode-sdk/src/ensapi/config/deserialize.ts | Simplifies unvalidated builder to pass through (no nested build needed). |
| packages/ensnode-sdk/src/ensapi/config/conversions.test.ts | Updates ENSApi public config (de)serialization tests to remove nested ENSIndexer config. |
| packages/ensdb-sdk/src/client/ensdb-client.mock.ts | Updates ENSDb SDK mock public config to match new ENSIndexer public config shape. |
| docs/ensnode.io/ensapi-openapi.json | Updates committed OpenAPI artifact to remove dropped fields from response schemas. |
| apps/ensindexer/src/lib/stack-info-builder/stack-info-builder.test.ts | Updates stack info builder tests to remove ensRainbowPublicConfig from ENSIndexer public config fixture. |
| apps/ensindexer/src/lib/public-config-builder/singleton.ts | Removes ENSRainbow client dependency from public config builder singleton initialization. |
| apps/ensindexer/src/lib/public-config-builder/public-config-builder.ts | Removes ENSRainbow fetch from ENSIndexer public config builder and makes getPublicConfig() synchronous. |
| apps/ensindexer/src/lib/public-config-builder/public-config-builder.test.ts | Updates tests to reflect the builder no longer depends on ENSRainbow; some test async/await cleanup suggested. |
| apps/ensapi/src/config/config.schema.ts | Stops returning ensIndexerPublicConfig inside ENSApi public config output. |
| apps/ensapi/src/config/config.schema.test.ts | Removes test asserting preservation of nested ENSIndexer config in ENSApi public config. |
| apps/ensapi/src/config/config.schema.mock.ts | Updates ENSApi config mocks to remove ensRainbowPublicConfig from ENSIndexer public config. |
| apps/ensadmin/src/app/mock/stack-info/stack-info.mock.ts | Updates ENSAdmin stack info mocks to remove nested ensIndexer/ensRainbow references inside ENSApi/ENSIndexer public configs. |
| apps/ensadmin/src/app/mock/indexing-status-api.mock.ts | Updates indexing status API mock payloads; constructs ENSRainbow public config separately (no longer nested). |
| .changeset/ensnode-stack-info-data-model.md | Adds changeset for breaking stack-info/public-config shape change (suggested to reduce overlap with other changeset). |
| .changeset/ensnode-sdk-public-configs.md | Adds changeset for breaking SDK public-config model changes. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.changeset/ensnode-sdk-public-configs.md:
- Around line 2-5: This changeset describes a breaking API removal in the body,
so the release type in the frontmatter must be upgraded from minor to major.
Update the changeset header for `@ensnode/ensnode-sdk` to use major so the version
bump matches the documented breaking change in EnsIndexerPublicConfig and
EnsApiPublicConfig.
In @.changeset/ensnode-stack-info-data-model.md:
- Around line 2-5: This changeset describes a breaking API change in the
Indexing Status API data model, so update the frontmatter in this changeset from
a minor release to a major release. Keep the breaking-change wording in the
body, and make sure the version bump matches the removal of the
`ensRainbowPublicConfig` and `ensIndexerPublicConfig` fields.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 1fc7e344-c302-4d28-8cbb-7083636c1f48
📒 Files selected for processing (27)
.changeset/ensnode-sdk-public-configs.md.changeset/ensnode-stack-info-data-model.mdapps/ensadmin/src/app/mock/indexing-status-api.mock.tsapps/ensadmin/src/app/mock/stack-info/stack-info.mock.tsapps/ensapi/src/config/config.schema.mock.tsapps/ensapi/src/config/config.schema.test.tsapps/ensapi/src/config/config.schema.tsapps/ensindexer/src/lib/public-config-builder/public-config-builder.test.tsapps/ensindexer/src/lib/public-config-builder/public-config-builder.tsapps/ensindexer/src/lib/public-config-builder/singleton.tsapps/ensindexer/src/lib/stack-info-builder/stack-info-builder.test.tsdocs/ensnode.io/ensapi-openapi.jsonpackages/ensdb-sdk/src/client/ensdb-client.mock.tspackages/ensnode-sdk/src/ensapi/config/conversions.test.tspackages/ensnode-sdk/src/ensapi/config/deserialize.tspackages/ensnode-sdk/src/ensapi/config/serialize.tspackages/ensnode-sdk/src/ensapi/config/serialized-types.tspackages/ensnode-sdk/src/ensapi/config/types.tspackages/ensnode-sdk/src/ensapi/config/zod-schemas.tspackages/ensnode-sdk/src/ensindexer/client.mock.tspackages/ensnode-sdk/src/ensindexer/config/conversions.test.tspackages/ensnode-sdk/src/ensindexer/config/serialize.tspackages/ensnode-sdk/src/ensindexer/config/types.tspackages/ensnode-sdk/src/ensindexer/config/zod-schemas.test.tspackages/ensnode-sdk/src/ensindexer/config/zod-schemas.tspackages/ensnode-sdk/src/ensnode/client.test.tspackages/ensnode-sdk/src/ensnode/metadata/indexing-metadata-context.test.ts
💤 Files with no reviewable changes (15)
- packages/ensdb-sdk/src/client/ensdb-client.mock.ts
- packages/ensnode-sdk/src/ensindexer/config/serialize.ts
- packages/ensnode-sdk/src/ensindexer/client.mock.ts
- packages/ensnode-sdk/src/ensindexer/config/zod-schemas.test.ts
- packages/ensnode-sdk/src/ensindexer/config/conversions.test.ts
- apps/ensapi/src/config/config.schema.ts
- apps/ensapi/src/config/config.schema.mock.ts
- packages/ensnode-sdk/src/ensapi/config/zod-schemas.ts
- packages/ensnode-sdk/src/ensapi/config/types.ts
- apps/ensapi/src/config/config.schema.test.ts
- packages/ensnode-sdk/src/ensnode/metadata/indexing-metadata-context.test.ts
- apps/ensadmin/src/app/mock/stack-info/stack-info.mock.ts
- apps/ensindexer/src/lib/stack-info-builder/stack-info-builder.test.ts
- packages/ensnode-sdk/src/ensnode/client.test.ts
- packages/ensnode-sdk/src/ensapi/config/conversions.test.ts
|
@greptile review |
|
@greptile review |
Lite PR
Tip: Review docs on the ENSNode PR process
Summary
ensIndexerPublicConfigfield fromEnsApiPublicConfigdata model.ensRainbowPublicConfigfield fromEnsIndexerPublicConfigdata model.EnsNodeStackInfodata model does not include fields that were dropped from ENSNode SDK).Why
Testing
Notes for Reviewer (Optional)
Pre-Review Checklist (Blocking)