Skip to content

Omnigraph Refactor (cont)#1857

Open
shrugs wants to merge 6 commits intomainfrom
feat/omnigraph-client-continued
Open

Omnigraph Refactor (cont)#1857
shrugs wants to merge 6 commits intomainfrom
feat/omnigraph-client-continued

Conversation

@shrugs
Copy link
Copy Markdown
Collaborator

@shrugs shrugs commented Mar 31, 2026

closes #1803
closes #1848

  1. Refactors CanonicalId to StorageId to match the new terminology in the ENSv2 contracts
  2. Refactors the "ENSNode GraphQL API" to "Omnigraph API" inc. folders and function names etc
  3. Moves our semantic types from ensnode-sdk to enssdk and hooks them up to the omnigraph client, updating all relevant imports (so now projects like ensnode-sdk and ensapi depend on enssdk)

shrugs and others added 2 commits March 31, 2026 16:39
Rename getCanonicalId to getStorageId and CanonicalId type to StorageId
across ensindexer, ensapi, and ensnode-sdk. Remove the canonicalId field
from the ENSv2Domain GraphQL type.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings March 31, 2026 21:52
@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Mar 31, 2026

🦋 Changeset detected

Latest commit: d9637fc

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 23 packages
Name Type
ensapi Major
ensindexer Major
ensadmin Major
ensrainbow Major
fallback-ensapi Major
enssdk Major
enscli Major
enskit Major
ensskills Major
@ensnode/datasources Major
@ensnode/ensrainbow-sdk Major
@ensnode/ensdb-sdk Major
@ensnode/ensnode-react Major
@ensnode/ensnode-sdk Major
@ensnode/ponder-sdk Major
@ensnode/ponder-subgraph Major
@ensnode/shared-configs Major
@docs/ensnode Major
@docs/ensrainbow Major
@docs/mintlify Major
@namehash/ens-referrals Major
@namehash/namehash-ui Major
@ensnode/integration-test-env Patch

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

@vercel
Copy link
Copy Markdown
Contributor

vercel bot commented Mar 31, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
admin.ensnode.io Ready Ready Preview, Comment Mar 31, 2026 10:44pm
ensnode.io Ready Ready Preview, Comment Mar 31, 2026 10:44pm
ensrainbow.io Ready Ready Preview, Comment Mar 31, 2026 10:44pm

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 31, 2026

Warning

Rate limit exceeded

@shrugs has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 6 minutes and 49 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 6 minutes and 49 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 1d45a02f-1507-4bec-b7f0-5b8baddcdb5b

📥 Commits

Reviewing files that changed from the base of the PR and between d58999f and d9637fc.

📒 Files selected for processing (3)
  • .changeset/dirty-snakes-knock.md
  • apps/ensapi/src/omnigraph-api/lib/find-domains/find-domains-resolver-helpers.test.ts
  • packages/enssdk/src/omnigraph/graphql.ts
📝 Walkthrough

Walkthrough

Consolidates public ENS types into a new enssdk package, updates many modules to import types from enssdk, replaces ENSv2 "canonicalId" usage with "storageId" across indexer/ID libraries and API, removes the GraphQL canonicalId field, and repoints GraphQL wiring to an Omnigraph API endpoint.

Changes

Cohort / File(s) Summary
enssdk package (new public surface)
packages/enssdk/package.json, packages/enssdk/tsup.config.ts, packages/enssdk/src/index.ts
Add top-level package entrypoint/exports and build entry; expose lib types from package root.
enssdk types
packages/enssdk/src/lib/types/*, packages/enssdk/src/lib/types/index.ts
Introduce centralized type modules (evm.ts, ensv2.ts, coin-type.ts, etc.); add StorageId/CanonicalPath and other semantic types.
Type consumers updated to enssdk
packages/ensnode-sdk/src/**, apps/ensapi/src/**, apps/ensadmin/src/**, apps/ensindexer/** (many files; see raw summary)
Replace numerous local/legacy type imports with import type ... from "enssdk"; update barrel exports to re-export enssdk items.
ENSv2 ID migration (logic usage sites)
apps/ensindexer/src/plugins/ensv2/.../ENSv2Registry.ts, apps/ensindexer/src/plugins/ensv2/.../ETHRegistrar.ts, apps/ensindexer/src/plugins/protocol-acceleration/handlers/ENSv2Registry.ts
Switch event handlers and lookups to derive domainId using getStorageId(...)/storageId instead of getCanonicalId(...)/canonicalId; update invariants/messages accordingly.
ENSv2 ID library changes
packages/ensnode-sdk/src/ensv2/ids-lib.ts, packages/ensnode-sdk/src/ensv2/index.ts
Rename/replace getCanonicalIdgetStorageId; change makeENSv2DomainId to accept StorageId; remove old ids re-export.
GraphQL → Omnigraph API migration
apps/ensapi/src/omnigraph-api/**, apps/ensapi/src/handlers/api/**, apps/ensapi/src/index.ts, apps/ensapi/package.json
Rewire API mounting and internal imports from /api/graphql/api/omnigraph, switch graphql schema writer and schema imports to omnigraph paths.
GraphQL schema change (ENSv2 domain)
apps/ensapi/src/omnigraph-api/schema/domain.ts, apps/ensapi/src/omnigraph-api/yoga.ts
Remove canonicalId field from ENSv2DomainRef and associated resolver; update tests to use storageId.
Tests and integration clients updated
apps/ensapi/src/test/integration/**, packages/ensnode-sdk/src/**/test.ts
Switch test gql clients, integration helpers, and type imports to omnigraph client and enssdk types.
Shared types removed/relocated
packages/ensnode-sdk/src/shared/types.ts and many callers
Remove local ChainId/AccountId/AssetId and move their canonical definitions into enssdk; update all references to use enssdk types.
Workspace dependency updates
apps/ensapi/package.json, packages/ensnode-sdk/package.json
Add enssdk as a workspace dependency where needed.
Omnigraph GraphQL scalar typings
packages/enssdk/src/omnigraph/graphql.ts
Add/align GraphQL scalar mappings to semantic types from enssdk (CoinType, DomainId, ChainId, Node, InterpretedName, etc.).

Sequence Diagram(s)

sequenceDiagram
  participant Contract as ERC1155/EventSource
  participant Indexer as ENS Indexer Handler
  participant DB as Database
  participant API as Omnigraph API Server

  Contract->>Indexer: emit LabelRegistered/Transfer/TokenRegenerated (tokenId, registry, labelHash)
  Note right of Indexer: compute storageId = getStorageId(tokenId|labelHash)
  Indexer->>DB: lookup domain by makeENSv2DomainId(registry, storageId)
  DB-->>Indexer: return domain (or null)
  alt domain exists
    Indexer->>DB: update registration/expiry/resolver using domainId(storageId)
  else new domain
    Indexer->>DB: insert ENSv2 domain record with domainId(storageId)
  end
  Indexer->>API: (optional) emit materialized domain event / update subscription
  API->>DB: read domain by domainId(storageId) for queries/resolvers
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~65 minutes

Possibly related issues

Possibly related PRs

Suggested labels

ensnode-sdk

Poem

🐇 I hopped through types, from tree to tree,

Brought all the bits home to enssdk for tea,
Canonical bowed out, StorageId took the lead,
Handlers, schema, tests—now all agreed,
A tidy warren of types, neat as can be.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The PR comprehensively addresses both linked issues: #1803 (canonical ID to storage ID refactoring across indexer handlers and domain types) and #1848 (integration of GraphQL scalars and semantic types into enssdk).
Out of Scope Changes check ✅ Passed All changes are in-scope: the migration from graphql-api to omnigraph-api, replacement of canonicalId with storageId, and integration of types/scalars into enssdk align with the stated objectives in issues #1803 and #1848.
Title check ✅ Passed The title 'Omnigraph Refactor (cont)' is clearly related to the main changes in the changeset, which involve a comprehensive refactor of the GraphQL API infrastructure to the Omnigraph API, including ID terminology changes from CanonicalId to StorageId.
Description check ✅ Passed The PR description provides a clear, concise summary of three main changes: CanonicalId→StorageId refactoring, GraphQL API→Omnigraph API renaming, and moving semantic types from ensnode-sdk to enssdk.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/omnigraph-client-continued

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

…icalId` in favor of accessing `ENSv2Domain.tokenId` directly.
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR continues the “Omnigraph Client” work by centralizing shared ENS/ENSv2/CAIP type definitions into the new enssdk package, updating downstream packages to consume those types, and aligning ENSv2 identifiers around “StorageId” (masking lower 32 bits) while removing the canonicalId field from the GraphQL surface.

Changes:

  • Introduces/exports a public enssdk root entrypoint (types-focused) and wires it into build + package exports.
  • Replaces prior canonicalId usage with getStorageId/StorageId and removes ENSv2Domain.canonicalId from the GraphQL schema and queries.
  • Refactors @ensnode/ensnode-sdk internals and apps to import shared types from enssdk instead of duplicating local type definitions.

Reviewed changes

Copilot reviewed 88 out of 91 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
pnpm-lock.yaml Adds workspace linking for enssdk and new deps (viem, @ensdomains/address-encoder) where needed.
packages/enssdk/tsup.config.ts Adds root index entry to the build.
packages/enssdk/src/omnigraph/graphql.ts Updates GraphQL scalar typings to use enssdk types and viem Address/Hex; stringifies BigInt for client typing.
packages/enssdk/src/omnigraph/generated/schema.graphql Removes ENSv2Domain.canonicalId from generated schema.
packages/enssdk/src/omnigraph/generated/graphql-env.d.ts Regenerates env typings to reflect schema change (no canonicalId).
packages/enssdk/src/lib/types/shared.ts Cleans up shared serialized types module (removes unused import).
packages/enssdk/src/lib/types/index.ts New barrel export for enssdk type modules.
packages/enssdk/src/lib/types/evm.ts Adds EVM/CAIP types (ChainId, AccountId, AssetId, etc.).
packages/enssdk/src/lib/types/ensv2.ts Renames ENSv2 “canonical id” concept to StorageId; defines CanonicalPath here.
packages/enssdk/src/lib/types/ens.ts Removes ENSNamespace re-exports and moves CanonicalPath out (now in ensv2).
packages/enssdk/src/lib/types/coin-type.ts Re-exports CoinType/EvmCoinType from @ensdomains/address-encoder.
packages/enssdk/src/index.ts New root export (export * from ./lib/types).
packages/enssdk/package.json Adds root export mapping and publishConfig for .; adds deps on viem and @ensdomains/address-encoder.
packages/ensnode-sdk/src/tokenscope/zod-schemas.ts Switches AssetId/AssetNamespaces imports to enssdk.
packages/ensnode-sdk/src/tokenscope/zod-schemas.test.ts Updates tests to import AssetId* types from enssdk.
packages/ensnode-sdk/src/tokenscope/name-token.ts Switches AccountId/AssetId/InterpretedName types to enssdk.
packages/ensnode-sdk/src/tokenscope/name-token.test.ts Updates tests to import AccountId/InterpretedName from enssdk.
packages/ensnode-sdk/src/tokenscope/assets.ts Moves asset-related type imports (AccountId, AssetId*, Node, etc.) to enssdk.
packages/ensnode-sdk/src/shared/zod-schemas.ts Switches core shared type imports (AccountId, ChainId, Node, etc.) to enssdk.
packages/ensnode-sdk/src/shared/types.ts Removes duplicated EVM/asset type definitions (now sourced from enssdk).
packages/ensnode-sdk/src/shared/serialize.ts Switches serialized type imports (*String, UrlString, etc.) to enssdk.
packages/ensnode-sdk/src/shared/root-registry.ts Switches AccountId type to enssdk.
packages/ensnode-sdk/src/shared/labelhash.ts Switches LabelHash/LiteralLabel type imports to enssdk.
packages/ensnode-sdk/src/shared/interpretation/reinterpretation.ts Switches Interpreted* types to enssdk.
packages/ensnode-sdk/src/shared/interpretation/interpreted-names-and-labels.ts Switches name/label-related type imports to enssdk.
packages/ensnode-sdk/src/shared/interpretation/interpret-tokenid.ts Switches LabelHash/Node type imports to enssdk.
packages/ensnode-sdk/src/shared/interpretation/interpret-record-values.ts Switches NormalizedName type import to enssdk.
packages/ensnode-sdk/src/shared/deserialize.ts Switches AccountId/ChainId*/UrlString imports to enssdk.
packages/ensnode-sdk/src/shared/datasource-contract.ts Switches AccountId type import to enssdk.
packages/ensnode-sdk/src/shared/config/zod-schemas.ts Switches ChainId type import to enssdk.
packages/ensnode-sdk/src/shared/config/types.ts Switches ChainId/UrlString type imports to enssdk.
packages/ensnode-sdk/src/shared/config/rpc-configs-from-env.ts Switches ChainIdString type import to enssdk.
packages/ensnode-sdk/src/shared/config/indexed-blockranges.ts Switches ChainId type import to enssdk.
packages/ensnode-sdk/src/shared/config/indexed-blockranges.test.ts Updates test to import ChainId from enssdk.
packages/ensnode-sdk/src/shared/config/build-rpc-urls.test.ts Updates test to import ChainId from enssdk.
packages/ensnode-sdk/src/shared/account-id.ts Switches AccountId type import to enssdk.
packages/ensnode-sdk/src/shared/account-id.test.ts Updates test to import AccountId from enssdk.
packages/ensnode-sdk/src/resolution/types.ts Switches ChainId/Name types to enssdk.
packages/ensnode-sdk/src/resolution/resolver-records-selection.ts Switches CoinType type import to enssdk.
packages/ensnode-sdk/src/resolution/resolver-records-response.ts Switches CoinType/Name types to enssdk.
packages/ensnode-sdk/src/resolution/ensip19-chainid.ts Switches ChainId/DefaultableChainId types to enssdk.
packages/ensnode-sdk/src/registrars/subregistry.ts Switches AccountId/Node types to enssdk.
packages/ensnode-sdk/src/registrars/registration-lifecycle.ts Switches Node type import to enssdk.
packages/ensnode-sdk/src/registrars/lineanames-subregistry.ts Switches AccountId/Name types to enssdk.
packages/ensnode-sdk/src/registrars/ethnames-subregistry.ts Switches AccountId/Name types to enssdk.
packages/ensnode-sdk/src/registrars/basenames-subregistry.ts Switches AccountId/Name types to enssdk.
packages/ensnode-sdk/src/indexing-status/serialize/omnichain-indexing-status-snapshot.ts Switches ChainIdString type import to enssdk.
packages/ensnode-sdk/src/indexing-status/serialize/chain-indexing-status-snapshot.ts Switches ChainId/ChainIdString types to enssdk.
packages/ensnode-sdk/src/indexing-status/omnichain-indexing-status-snapshot.ts Switches ChainId type import to enssdk.
packages/ensnode-sdk/src/indexing-status/deserialize/omnichain-indexing-status-snapshot.ts Switches ChainId type import to enssdk.
packages/ensnode-sdk/src/indexing-status/cross-chain-indexing-status-snapshot.ts Switches ChainId type import to enssdk.
packages/ensnode-sdk/src/indexing-status/chain-indexing-status-snapshot.ts Switches ChainId type import to enssdk.
packages/ensnode-sdk/src/index.ts Re-exports ENSNamespaceId(s) from @ensnode/datasources; removes shared/serialized-types re-export.
packages/ensnode-sdk/src/identity/types.ts Switches DefaultableChainId/Name types to enssdk.
packages/ensnode-sdk/src/identity/identity.ts Switches DefaultableChainId type import to enssdk.
packages/ensnode-sdk/src/ensv2/index.ts Stops exporting ./ids; keeps ./ids-lib.
packages/ensnode-sdk/src/ensv2/ids-lib.ts Renames canonical-id concepts to StorageId and updates makeENSv2DomainId/getStorageId.
packages/ensnode-sdk/src/ensindexer/config/types.ts Switches ChainId type import to enssdk.
packages/ensnode-sdk/src/ensindexer/config/serialized-types.ts Switches ChainId type import to enssdk.
packages/ensnode-sdk/src/ensindexer/config/serialize.ts Switches ChainId type import to enssdk.
packages/ensnode-sdk/src/ensindexer/config/label-utils.ts Switches LabelHash type import to enssdk.
packages/ensnode-sdk/src/ensapi/api/registrar-actions/zod-schemas.test.ts Switches InterpretedName type import to enssdk.
packages/ensnode-sdk/src/ensapi/api/registrar-actions/response.ts Switches InterpretedName type import to enssdk.
packages/ensnode-sdk/src/ensapi/api/registrar-actions/request.ts Switches Node type import to enssdk.
packages/ensnode-sdk/src/ensapi/api/registrar-actions/filters.ts Switches Node type import to enssdk.
packages/ensnode-sdk/src/ensapi/api/name-tokens/zod-schemas.test.ts Switches AssetNamespaces and InterpretedName to enssdk.
packages/ensnode-sdk/src/ensapi/api/name-tokens/response.ts Switches InterpretedName/Node types to enssdk.
packages/ensnode-sdk/src/ensapi/api/name-tokens/request.ts Switches Name/Node types to enssdk.
packages/ensnode-sdk/src/ens/subname-helpers.ts Switches LabelHash/Node types to enssdk.
packages/ensnode-sdk/src/ens/reverse-name.ts Switches CoinType/Label/Name types to enssdk; keeps local coin-type constants.
packages/ensnode-sdk/src/ens/parse-reverse-name.ts Switches CoinType/Label/Name types to enssdk.
packages/ensnode-sdk/src/ens/parse-labelhash.ts Switches LabelHash type import to enssdk.
packages/ensnode-sdk/src/ens/names.ts Switches Label/Name/NormalizedName types to enssdk.
packages/ensnode-sdk/src/ens/names.test.ts Switches Name/NormalizedName type imports to enssdk.
packages/ensnode-sdk/src/ens/labelhash.ts Switches LabelHash type import to enssdk.
packages/ensnode-sdk/src/ens/is-normalized.ts Switches Label/Name/NormalizedName types to enssdk.
packages/ensnode-sdk/src/ens/index.ts Re-exports all of enssdk from the ens module and re-exports datasources identifiers; removes local ./types export.
packages/ensnode-sdk/src/ens/encode-labelhash.ts Switches EncodedLabelHash/LabelHash type imports to enssdk.
packages/ensnode-sdk/src/ens/dns-encoded-name.ts Switches DNS-encoded name types to enssdk.
packages/ensnode-sdk/src/ens/dns-encoded-name.test.ts Switches DNS-encoded name types to enssdk.
packages/ensnode-sdk/src/ens/constants.ts Switches Node type import to enssdk.
packages/ensnode-sdk/src/ens/coin-type.ts Uses enssdk types for ChainId/CoinType/EvmCoinType (removes previous local re-export pattern).
packages/ensnode-sdk/package.json Adds enssdk dependency.
apps/ensindexer/src/plugins/protocol-acceleration/handlers/ENSv2Registry.ts Switches from getCanonicalId to getStorageId.
apps/ensindexer/src/plugins/ensv2/handlers/ensv2/ETHRegistrar.ts Switches from getCanonicalId to getStorageId.
apps/ensindexer/src/plugins/ensv2/handlers/ensv2/ENSv2Registry.ts Switches to getStorageId and updates invariants/error text accordingly.
apps/ensapi/src/graphql-api/yoga.ts Removes canonicalId selection from internal query.
apps/ensapi/src/graphql-api/schema/query.integration.test.ts Updates to getStorageId for ENSv2 domain id construction.
apps/ensapi/src/graphql-api/schema/domain.ts Removes ENSv2Domain.canonicalId field from the GraphQL schema implementation.
apps/ensapi/src/graphql-api/builder.ts Switches scalar type imports to enssdk (still using viem for Address/Hex).
apps/ensapi/package.json Adds enssdk dependency.
Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/ensapi/src/graphql-api/schema/query.integration.test.ts`:
- Around line 40-41: Rename the misleading V2_ETH_CANONICAL_ID to a
storage-focused name (e.g., V2_ETH_STORAGE_ID) wherever it is declared and
referenced (the declaration using getStorageId(labelhash("eth")) and its use in
makeENSv2DomainId to build V2_ETH_DOMAIN_ID); update all test variables and any
imports/uses in this file so references match the new identifier and run tests
to ensure no leftover references remain.

In `@apps/ensindexer/src/plugins/ensv2/handlers/ensv2/ENSv2Registry.ts`:
- Around line 60-61: This change alters how domainId is derived (now using
getStorageId and makeENSv2DomainId) and will break lookups and upserts; add a
migration or compatibility layer: implement a DB migration that converts
existing records from the old domainId derivation to the new one (or recomputes
and reindexes all domains), and/or update the handlers and upsert logic
(references: domainId variable, makeENSv2DomainId, getStorageId, v2Domain
upsert, LabelUnregistered and ExpiryUpdated handlers) to first attempt
legacy-key lookups and then the new key, and ensure the v2Domain upsert
merges/updates any existing legacy row instead of creating duplicates so no
orphaned records remain.

In `@packages/ensnode-sdk/src/index.ts`:
- Around line 1-2: Remove the lone explanatory comment at the top of the barrel
file; keep the existing re-exports (ENSNamespaceIds and ENSNamespaceId) intact
but delete the two-line comment so the file is purely an export list (locate the
top of packages/ensnode-sdk/src/index.ts where ENSNamespaceIds and
ENSNamespaceId are re-exported and remove the comment lines).

In `@packages/enssdk/src/omnigraph/graphql.ts`:
- Around line 20-43: The scalar mappings in the exported graphql (created via
initGraphQLTada) are out of sync with the ENS API builder scalars: update the
scalars block so it matches the builder.ts definitions — remove or reconcile the
extraneous ID: string mapping if builder.ts does not define ID, change BigInt
from a stringified template literal to the builder shape ({ Input: bigint;
Output: bigint } or the equivalent used in builder.ts), and update ChainId from
a plain number to the builder's ChainId shape ({ Input: ChainId; Output: ChainId
} or the actual ChainId type); adjust any other scalar entries in the scalars
object to exactly mirror the types in apps/ensapi/src/graphql-api/builder.ts so
the NOTE about keeping them in sync is satisfied.
🪄 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: b5e257c1-3941-409a-931e-98934729f0ec

📥 Commits

Reviewing files that changed from the base of the PR and between 677db8b and 991eb47.

⛔ Files ignored due to path filters (3)
  • packages/enssdk/src/omnigraph/generated/graphql-env.d.ts is excluded by !**/generated/**
  • packages/enssdk/src/omnigraph/generated/schema.graphql is excluded by !**/generated/**
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (88)
  • apps/ensapi/package.json
  • apps/ensapi/src/graphql-api/builder.ts
  • apps/ensapi/src/graphql-api/schema/domain.ts
  • apps/ensapi/src/graphql-api/schema/query.integration.test.ts
  • apps/ensapi/src/graphql-api/yoga.ts
  • apps/ensindexer/src/plugins/ensv2/handlers/ensv2/ENSv2Registry.ts
  • apps/ensindexer/src/plugins/ensv2/handlers/ensv2/ETHRegistrar.ts
  • apps/ensindexer/src/plugins/protocol-acceleration/handlers/ENSv2Registry.ts
  • packages/ensnode-sdk/package.json
  • packages/ensnode-sdk/src/ens/coin-type.ts
  • packages/ensnode-sdk/src/ens/constants.ts
  • packages/ensnode-sdk/src/ens/dns-encoded-name.test.ts
  • packages/ensnode-sdk/src/ens/dns-encoded-name.ts
  • packages/ensnode-sdk/src/ens/encode-labelhash.ts
  • packages/ensnode-sdk/src/ens/index.ts
  • packages/ensnode-sdk/src/ens/is-normalized.ts
  • packages/ensnode-sdk/src/ens/labelhash.ts
  • packages/ensnode-sdk/src/ens/names.test.ts
  • packages/ensnode-sdk/src/ens/names.ts
  • packages/ensnode-sdk/src/ens/parse-labelhash.ts
  • packages/ensnode-sdk/src/ens/parse-reverse-name.ts
  • packages/ensnode-sdk/src/ens/reverse-name.ts
  • packages/ensnode-sdk/src/ens/subname-helpers.ts
  • packages/ensnode-sdk/src/ensapi/api/name-tokens/request.ts
  • packages/ensnode-sdk/src/ensapi/api/name-tokens/response.ts
  • packages/ensnode-sdk/src/ensapi/api/name-tokens/zod-schemas.test.ts
  • packages/ensnode-sdk/src/ensapi/api/registrar-actions/filters.ts
  • packages/ensnode-sdk/src/ensapi/api/registrar-actions/request.ts
  • packages/ensnode-sdk/src/ensapi/api/registrar-actions/response.ts
  • packages/ensnode-sdk/src/ensapi/api/registrar-actions/zod-schemas.test.ts
  • packages/ensnode-sdk/src/ensindexer/config/label-utils.ts
  • packages/ensnode-sdk/src/ensindexer/config/serialize.ts
  • packages/ensnode-sdk/src/ensindexer/config/serialized-types.ts
  • packages/ensnode-sdk/src/ensindexer/config/types.ts
  • packages/ensnode-sdk/src/ensv2/ids-lib.ts
  • packages/ensnode-sdk/src/ensv2/index.ts
  • packages/ensnode-sdk/src/identity/identity.ts
  • packages/ensnode-sdk/src/identity/types.ts
  • packages/ensnode-sdk/src/index.ts
  • packages/ensnode-sdk/src/indexing-status/chain-indexing-status-snapshot.ts
  • packages/ensnode-sdk/src/indexing-status/cross-chain-indexing-status-snapshot.ts
  • packages/ensnode-sdk/src/indexing-status/deserialize/omnichain-indexing-status-snapshot.ts
  • packages/ensnode-sdk/src/indexing-status/omnichain-indexing-status-snapshot.ts
  • packages/ensnode-sdk/src/indexing-status/serialize/chain-indexing-status-snapshot.ts
  • packages/ensnode-sdk/src/indexing-status/serialize/omnichain-indexing-status-snapshot.ts
  • packages/ensnode-sdk/src/registrars/basenames-subregistry.ts
  • packages/ensnode-sdk/src/registrars/ethnames-subregistry.ts
  • packages/ensnode-sdk/src/registrars/lineanames-subregistry.ts
  • packages/ensnode-sdk/src/registrars/registration-lifecycle.ts
  • packages/ensnode-sdk/src/registrars/subregistry.ts
  • packages/ensnode-sdk/src/resolution/ensip19-chainid.ts
  • packages/ensnode-sdk/src/resolution/resolver-records-response.ts
  • packages/ensnode-sdk/src/resolution/resolver-records-selection.ts
  • packages/ensnode-sdk/src/resolution/types.ts
  • packages/ensnode-sdk/src/shared/account-id.test.ts
  • packages/ensnode-sdk/src/shared/account-id.ts
  • packages/ensnode-sdk/src/shared/config/build-rpc-urls.test.ts
  • packages/ensnode-sdk/src/shared/config/indexed-blockranges.test.ts
  • packages/ensnode-sdk/src/shared/config/indexed-blockranges.ts
  • packages/ensnode-sdk/src/shared/config/rpc-configs-from-env.ts
  • packages/ensnode-sdk/src/shared/config/types.ts
  • packages/ensnode-sdk/src/shared/config/zod-schemas.ts
  • packages/ensnode-sdk/src/shared/datasource-contract.ts
  • packages/ensnode-sdk/src/shared/deserialize.ts
  • packages/ensnode-sdk/src/shared/interpretation/interpret-record-values.ts
  • packages/ensnode-sdk/src/shared/interpretation/interpret-tokenid.ts
  • packages/ensnode-sdk/src/shared/interpretation/interpreted-names-and-labels.ts
  • packages/ensnode-sdk/src/shared/interpretation/reinterpretation.ts
  • packages/ensnode-sdk/src/shared/labelhash.ts
  • packages/ensnode-sdk/src/shared/root-registry.ts
  • packages/ensnode-sdk/src/shared/serialize.ts
  • packages/ensnode-sdk/src/shared/types.ts
  • packages/ensnode-sdk/src/shared/zod-schemas.ts
  • packages/ensnode-sdk/src/tokenscope/assets.ts
  • packages/ensnode-sdk/src/tokenscope/name-token.test.ts
  • packages/ensnode-sdk/src/tokenscope/name-token.ts
  • packages/ensnode-sdk/src/tokenscope/zod-schemas.test.ts
  • packages/ensnode-sdk/src/tokenscope/zod-schemas.ts
  • packages/enssdk/package.json
  • packages/enssdk/src/index.ts
  • packages/enssdk/src/lib/types/coin-type.ts
  • packages/enssdk/src/lib/types/ens.ts
  • packages/enssdk/src/lib/types/ensv2.ts
  • packages/enssdk/src/lib/types/evm.ts
  • packages/enssdk/src/lib/types/index.ts
  • packages/enssdk/src/lib/types/shared.ts
  • packages/enssdk/src/omnigraph/graphql.ts
  • packages/enssdk/tsup.config.ts
💤 Files with no reviewable changes (6)
  • packages/enssdk/src/lib/types/shared.ts
  • packages/ensnode-sdk/src/ensv2/index.ts
  • apps/ensapi/src/graphql-api/schema/domain.ts
  • packages/enssdk/src/lib/types/ens.ts
  • apps/ensapi/src/graphql-api/yoga.ts
  • packages/ensnode-sdk/src/shared/types.ts

Copilot AI review requested due to automatic review settings March 31, 2026 22:32
@shrugs shrugs changed the title Omnigraph Client (cont) Omnigraph Refactor (cont) Mar 31, 2026
@shrugs shrugs marked this pull request as ready for review March 31, 2026 22:37
@shrugs shrugs requested a review from a team as a code owner March 31, 2026 22:37
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 137 out of 164 changed files in this pull request and generated 1 comment.

Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported
Comments suppressed due to low confidence (2)

apps/ensapi/src/omnigraph-api/lib/find-domains/find-domains-resolver-helpers.test.ts:6

  • This test mocks @/omnigraph-api/lib/find-domains/find-domains-by-labelhash-path, but that module/file does not exist under apps/ensapi/src/omnigraph-api/lib/find-domains/. Vitest will fail module resolution here. Remove this mock, or update it to the actual module that needs mocking (if any) for find-domains-resolver-helpers tests.
    apps/ensapi/src/omnigraph-api/yoga.ts:12
  • Logger name is still ensnode-graphql even though this module now implements the Omnigraph API. Consider renaming the logger scope to something Omnigraph-specific (e.g. ensnode-omnigraph) to avoid confusion when both legacy GraphQL and Omnigraph are present.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/ensadmin/src/app/api/omnigraph/page.tsx (1)

7-7: 🧹 Nitpick | 🔵 Trivial

Consider renaming GRAPHQL_API_EXAMPLE_QUERIES for consistency across the SDK and consuming code.

The constant exported from the omnigraph SDK module retains the "GraphQL" prefix while this page is branded as "Omnigraph". Aligning the naming would require renaming the export in packages/ensnode-sdk/src/omnigraph-api/example-queries.ts and updating usages in apps/ensapi/src/omnigraph-api/schema/example-queries.test.ts and apps/ensapi/src/omnigraph-api/schema/example-queries.integration.test.ts.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/ensadmin/src/app/api/omnigraph/page.tsx` at line 7, Rename the exported
constant GRAPHQL_API_EXAMPLE_QUERIES to OMNIGRAPH_API_EXAMPLE_QUERIES in the
omnigraph-api example-queries module, update its export statement accordingly,
and then update all imports/usages (including tests and consuming pages) to
import the new OMNIGRAPH_API_EXAMPLE_QUERIES identifier; also update any
re-exports or documentation references to the old name to keep the SDK and
consumers consistent.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/ensapi/src/handlers/api/omnigraph/omnigraph-api.ts`:
- Around line 10-14: The middleware currently returns a raw 503 via c.text when
hasOmnigraphApiConfigSupport(config.ensIndexerPublicConfig) fails; replace that
path to call the shared errorResponse helper so the API returns the standardized
ENSApi error payload. Locate the app.use middleware where
hasOmnigraphApiConfigSupport is called and swap the c.text(...) return with a
call to errorResponse(c, 503, `Service Unavailable: ${prerequisite.reason}`) (or
the project’s errorResponse signature), preserving the status code and reason
text.

In
`@apps/ensapi/src/omnigraph-api/lib/find-domains/find-domains-resolver-helpers.test.ts`:
- Line 4: Remove the unused mock for
"@/omnigraph-api/lib/find-domains/find-domains-by-labelhash-path" from the test
file (the vi.mock(...) call in find-domains-resolver-helpers.test.ts) because
the module under test (find-domains-resolver-helpers) does not import it at
runtime; simply delete that vi.mock line and run tests to confirm nothing else
references that symbol.

In `@packages/enssdk/src/omnigraph/graphql.ts`:
- Around line 25-28: Update the comment that instructs keeping scalars in sync
so it explicitly excludes the BigInt scalar and explains why: mention that the
BigInt type in omnigraph/graphql.ts (symbol BigInt) is intentionally represented
as a stringified bigint (```${bigint}```) because GraphQL clients don't
deserialize bigint scalars, whereas the other scalar types should match the
canonical definitions in omnigraph-api/builder.ts; make the comment state "keep
in sync except BigInt which is intentionally stringified here" and briefly note
the reason to avoid confusion during reviews.

---

Outside diff comments:
In `@apps/ensadmin/src/app/api/omnigraph/page.tsx`:
- Line 7: Rename the exported constant GRAPHQL_API_EXAMPLE_QUERIES to
OMNIGRAPH_API_EXAMPLE_QUERIES in the omnigraph-api example-queries module,
update its export statement accordingly, and then update all imports/usages
(including tests and consuming pages) to import the new
OMNIGRAPH_API_EXAMPLE_QUERIES identifier; also update any re-exports or
documentation references to the old name to keep the SDK and consumers
consistent.
🪄 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: 6d1a40e4-818f-4065-ba48-d5813bfe2788

📥 Commits

Reviewing files that changed from the base of the PR and between bb3c157 and d58999f.

📒 Files selected for processing (55)
  • apps/ensadmin/src/app/@actions/api/omnigraph/page.tsx
  • apps/ensadmin/src/app/api/omnigraph/page.tsx
  • apps/ensadmin/src/components/app-sidebar.tsx
  • apps/ensadmin/src/hooks/active/use-ensadmin-features.tsx
  • apps/ensapi/biome.jsonc
  • apps/ensapi/package.json
  • apps/ensapi/src/handlers/api/omnigraph/omnigraph-api.ts
  • apps/ensapi/src/handlers/api/router.ts
  • apps/ensapi/src/index.ts
  • apps/ensapi/src/omnigraph-api/builder.ts
  • apps/ensapi/src/omnigraph-api/lib/connection-helpers.ts
  • apps/ensapi/src/omnigraph-api/lib/find-domains/domain-cursor.ts
  • apps/ensapi/src/omnigraph-api/lib/find-domains/find-domains-resolver-helpers.test.ts
  • apps/ensapi/src/omnigraph-api/lib/find-domains/find-domains-resolver-helpers.ts
  • apps/ensapi/src/omnigraph-api/lib/find-domains/find-domains-resolver.ts
  • apps/ensapi/src/omnigraph-api/lib/find-events/find-events-resolver.ts
  • apps/ensapi/src/omnigraph-api/lib/write-graphql-schema.ts
  • apps/ensapi/src/omnigraph-api/schema.ts
  • apps/ensapi/src/omnigraph-api/schema/account-id.ts
  • apps/ensapi/src/omnigraph-api/schema/account.integration.test.ts
  • apps/ensapi/src/omnigraph-api/schema/account.ts
  • apps/ensapi/src/omnigraph-api/schema/connection.ts
  • apps/ensapi/src/omnigraph-api/schema/constants.ts
  • apps/ensapi/src/omnigraph-api/schema/domain.integration.test.ts
  • apps/ensapi/src/omnigraph-api/schema/domain.ts
  • apps/ensapi/src/omnigraph-api/schema/event.ts
  • apps/ensapi/src/omnigraph-api/schema/label.ts
  • apps/ensapi/src/omnigraph-api/schema/name-or-node.ts
  • apps/ensapi/src/omnigraph-api/schema/order-direction.ts
  • apps/ensapi/src/omnigraph-api/schema/permissions.integration.test.ts
  • apps/ensapi/src/omnigraph-api/schema/permissions.ts
  • apps/ensapi/src/omnigraph-api/schema/query.integration.test.ts
  • apps/ensapi/src/omnigraph-api/schema/query.ts
  • apps/ensapi/src/omnigraph-api/schema/registration.ts
  • apps/ensapi/src/omnigraph-api/schema/registry-permissions-user.ts
  • apps/ensapi/src/omnigraph-api/schema/registry.integration.test.ts
  • apps/ensapi/src/omnigraph-api/schema/registry.ts
  • apps/ensapi/src/omnigraph-api/schema/renewal.ts
  • apps/ensapi/src/omnigraph-api/schema/resolver-permissions-user.ts
  • apps/ensapi/src/omnigraph-api/schema/resolver-records.ts
  • apps/ensapi/src/omnigraph-api/schema/resolver.integration.test.ts
  • apps/ensapi/src/omnigraph-api/schema/resolver.ts
  • apps/ensapi/src/omnigraph-api/schema/scalars.ts
  • apps/ensapi/src/omnigraph-api/yoga.ts
  • apps/ensapi/src/test/integration/find-domains/domain-pagination-queries.ts
  • apps/ensapi/src/test/integration/find-domains/test-domain-pagination.ts
  • apps/ensapi/src/test/integration/find-events/event-pagination-queries.ts
  • apps/ensapi/src/test/integration/global-setup.ts
  • apps/ensapi/src/test/integration/graphql-utils.ts
  • apps/ensapi/src/test/integration/omnigraph-api-client.ts
  • apps/ensindexer/ponder/ponder.config.ts
  • packages/ensnode-sdk/src/index.ts
  • packages/ensnode-sdk/src/internal.ts
  • packages/ensnode-sdk/src/omnigraph-api/prerequisites.ts
  • packages/enssdk/src/omnigraph/graphql.ts

@lightwalker-eth
Copy link
Copy Markdown
Member

@greptile

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Apr 1, 2026

Greptile Summary

This PR is a large-scale refactoring across 164 files with three main goals: (1) renaming CanonicalIdStorageId to align with ENSv2 contract terminology, (2) renaming the "ENSNode GraphQL API" to "Omnigraph API" including folder restructuring and route changes, and (3) migrating semantic type definitions from ensnode-sdk into the enssdk package so that ensnode-sdk and ensapi can depend on enssdk as a shared type source.

Key changes include:

  • CanonicalIdStorageId: getCanonicalId is renamed to getStorageId and the CanonicalId branded type moves to StorageId in enssdk/src/lib/types/ensv2.ts. All call sites in ensindexer are updated correctly.
  • API route rename: The GraphQL endpoint moves from /graphql to /omnigraph in apps/ensapi. This is a breaking change for all HTTP-level API consumers that is not documented in the changeset.
  • GraphQL schema change: ENSv2Domain.canonicalId is removed and replaced with ENSv2Domain.tokenId. The changeset correctly marks this as a minor breaking change.
  • enssdk type consolidation: EVM types (ChainId, AccountId, AssetId, etc.), ENS types (Node, Name, LabelHash, etc.) and ENSv2 types are extracted into enssdk/src/lib/types/ and re-exported. The BigInt scalar on the client is now typed as `${bigint}` (a string), which is correct for JSON transport.
  • DefaultableChainId simplification: The type moved from typeof DEFAULT_EVM_CHAIN_ID | ChainId to the literal 0 | ChainId in enssdk/src/lib/types/evm.ts — this is accurate since DEFAULT_EVM_CHAIN_ID === 0.

Confidence Score: 4/5

Safe to merge after the changeset is updated to document the /graphql → /omnigraph route path breaking change.

The refactoring is mechanically consistent and well-executed. One P1 finding remains: the API route change from /graphql to /omnigraph is a breaking change for HTTP consumers but is absent from the changeset, which only documents the canonicalId removal. This needs to be recorded before release. One P2 finding exists for the Hex scalar's isHex(value) vs isHex(ctx.value) inconsistency, which has no practical impact for string inputs but is technically incorrect.

.changeset/dirty-snakes-knock.md (missing route-change breaking-change entry) and apps/ensapi/src/omnigraph-api/schema/scalars.ts (Hex parseValue uses outer closure variable).

Important Files Changed

Filename Overview
.changeset/dirty-snakes-knock.md Changeset documents ENSv2Domain.canonicalId removal but is missing the breaking API route path change from /graphql to /omnigraph.
apps/ensapi/src/omnigraph-api/schema/scalars.ts New scalars file; Hex scalar uses outer-closure value instead of ctx.value in the .check() callback, inconsistent with Node scalar and technically incorrect for non-string inputs.
packages/enssdk/src/lib/types/evm.ts New file containing EVM types (ChainId, DefaultableChainId, AccountId, AssetId etc.) migrated from ensnode-sdk/shared/types. DefaultableChainId correctly hardcodes 0 (matching DEFAULT_EVM_CHAIN_ID).
packages/enssdk/src/lib/types/ensv2.ts New ENSv2 semantic types; renames CanonicalId to StorageId, adds DomainId, CanonicalPath and all entity ID types. Clean implementation.
packages/enssdk/src/omnigraph/graphql.ts Hooks GraphQL scalars to semantic types from enssdk/lib/types. BigInt typed as template-literal string intentionally; well-commented.
packages/ensnode-sdk/src/ensv2/ids-lib.ts Renames getCanonicalId → getStorageId and CanonicalId → StorageId throughout; correctly updates all call sites and error messages.
apps/ensapi/src/handlers/api/router.ts Route changed from /graphql to /omnigraph — this is a breaking URL path change not documented in the changeset.
apps/ensapi/src/omnigraph-api/schema/domain.ts Replaces canonicalId with tokenId on ENSv2Domain; adds tokenId, registry, subregistry, and permissions fields. Breaking schema change documented in changeset.
apps/ensapi/src/omnigraph-api/builder.ts New Pothos builder with full semantic scalar type mapping from enssdk; clean migration from graphql-api/builder.
apps/ensindexer/src/plugins/ensv2/handlers/ensv2/ENSv2Registry.ts Mechanical rename of getCanonicalId→getStorageId and canonicalId→storageId across all event handlers; logic unchanged.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[HTTP Client] -->|POST /api/omnigraph| B[ensapi router]
    B --> C[omnigraphApi handler]
    C --> D[Yoga GraphQL Server]
    D --> E[Pothos Schema Builder]
    E --> F[domain.ts / account.ts / registry.ts etc.]
    F --> G[Drizzle ORM]
    G --> H[(ensDb)]

    I[enssdk] -->|semantic types| E
    I -->|StorageId / DomainId etc.| J[ensnode-sdk]
    J -->|getStorageId / makeENSv2DomainId| K[ensindexer handlers]
    K --> G
Loading

Comments Outside Diff (1)

  1. apps/ensapi/src/omnigraph-api/schema/scalars.ts, line 37-49 (link)

    P2 isHex(value) checks outer closure variable instead of ctx.value

    Inside the .check() callback the validated value is ctx.value (the string produced by .coerce.string()), but the hex check references value — the raw argument passed to parseValue. For string inputs the two are equivalent since String(s) === s, but for non-string inputs (e.g. a plain number) z.coerce.string() would convert the input while isHex(value) would still evaluate the unconverted value, producing an inconsistent validation result.

    Compare with the Node scalar defined just below, which correctly uses ctx.value:

Reviews (1): Last reviewed commit: "fix: bot notes" | Re-trigger Greptile

Comment on lines +1 to +5
---
"ensapi": minor
---

Omnigraph API (BREAKING): Removed `ENSv2Domain.canonicalId`.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Incomplete breaking change documentation

The changeset only records the removal of ENSv2Domain.canonicalId, but this PR introduces at least one additional breaking change that affects API consumers:

  • The GraphQL API route changed from /graphql to /omnigraph (in apps/ensapi/src/handlers/api/router.ts). Any client that was hitting /api/graphql will break silently at runtime after this change. This is a breaking change for all HTTP-level API consumers and warrants a separate bullet in the changeset (or a major bump rather than minor, depending on your semver policy).

Consider adding a line such as:

Omnigraph API (BREAKING): API route path changed from `/graphql` to `/omnigraph`.

Copy link
Copy Markdown
Member

@lightwalker-eth lightwalker-eth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@shrugs Looks awesome! Please take the lead to merge when ready 👍

"gql.tada": "^1.8.10",
"graphql": "^16.11.0"
"graphql": "^16.11.0",
"viem": "catalog:"
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

peerDependencies?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ENSSDK Omnigraph: Scalars and Semantic Types Omnigraph: Refactor Canonical ID Usage

3 participants