diff --git a/.changeset/dry-trams-brush.md b/.changeset/dry-trams-brush.md new file mode 100644 index 000000000..ce443f122 --- /dev/null +++ b/.changeset/dry-trams-brush.md @@ -0,0 +1,5 @@ +--- +"ensapi": minor +--- + +Updated response data model for `/api/config` route to include `ensDbPublicConfig` field. diff --git a/.changeset/heavy-laws-sing.md b/.changeset/heavy-laws-sing.md new file mode 100644 index 000000000..ab0a9aab5 --- /dev/null +++ b/.changeset/heavy-laws-sing.md @@ -0,0 +1,5 @@ +--- +"@ensnode/ensnode-sdk": minor +--- + +Introduced the `EnsDbPublicConfig` data model. diff --git a/.changeset/social-dryers-find.md b/.changeset/social-dryers-find.md new file mode 100644 index 000000000..03b6ff634 --- /dev/null +++ b/.changeset/social-dryers-find.md @@ -0,0 +1,5 @@ +--- +"@ensnode/ensdb-sdk": minor +--- + +Added `getEnsDbPublicConfig` method to `EnsDbReader` class. diff --git a/apps/ensapi/src/config/config.schema.test.ts b/apps/ensapi/src/config/config.schema.test.ts index 7c4ef0cce..6e0f168a7 100644 --- a/apps/ensapi/src/config/config.schema.test.ts +++ b/apps/ensapi/src/config/config.schema.test.ts @@ -2,11 +2,16 @@ import packageJson from "@/../package.json" with { type: "json" }; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { type ENSIndexerPublicConfig, PluginName } from "@ensnode/ensnode-sdk"; +import { + type ENSIndexerPublicConfig, + type EnsDbPublicConfig, + PluginName, +} from "@ensnode/ensnode-sdk"; import type { RpcConfig } from "@ensnode/ensnode-sdk/internal"; vi.mock("@/lib/ensdb/singleton", () => ({ ensDbClient: { + getEnsDbPublicConfig: vi.fn(async () => ENSDB_PUBLIC_CONFIG), getEnsIndexerPublicConfig: vi.fn(async () => ENSINDEXER_PUBLIC_CONFIG), }, })); @@ -30,6 +35,11 @@ const BASE_ENV = { RPC_URL_1: VALID_RPC_URL, } satisfies EnsApiEnvironment; +const ENSDB_PUBLIC_CONFIG = { + postgresVersion: "17.4", + rootSchemaVersion: "1.0.0", +} satisfies EnsDbPublicConfig; + const ENSINDEXER_PUBLIC_CONFIG = { namespace: "mainnet", databaseSchemaName: "ensapi", @@ -58,6 +68,7 @@ describe("buildConfigFromEnvironment", () => { databaseUrl: BASE_ENV.DATABASE_URL, theGraphApiKey: undefined, + ensDbPublicConfig: ENSDB_PUBLIC_CONFIG, ensIndexerPublicConfig: ENSINDEXER_PUBLIC_CONFIG, namespace: ENSINDEXER_PUBLIC_CONFIG.namespace, ensIndexerSchemaName: ENSINDEXER_PUBLIC_CONFIG.databaseSchemaName, @@ -150,6 +161,7 @@ describe("buildEnsApiPublicConfig", () => { const mockConfig = { port: ENSApi_DEFAULT_PORT, databaseUrl: BASE_ENV.DATABASE_URL, + ensDbPublicConfig: ENSDB_PUBLIC_CONFIG, ensIndexerPublicConfig: ENSINDEXER_PUBLIC_CONFIG, namespace: ENSINDEXER_PUBLIC_CONFIG.namespace, ensIndexerSchemaName: ENSINDEXER_PUBLIC_CONFIG.databaseSchemaName, @@ -173,6 +185,7 @@ describe("buildEnsApiPublicConfig", () => { canFallback: false, reason: "not-subgraph-compatible", }, + ensDbPublicConfig: ENSDB_PUBLIC_CONFIG, ensIndexerPublicConfig: ENSINDEXER_PUBLIC_CONFIG, }); }); @@ -181,6 +194,7 @@ describe("buildEnsApiPublicConfig", () => { const mockConfig = { port: ENSApi_DEFAULT_PORT, databaseUrl: BASE_ENV.DATABASE_URL, + ensDbPublicConfig: ENSDB_PUBLIC_CONFIG, ensIndexerPublicConfig: ENSINDEXER_PUBLIC_CONFIG, namespace: ENSINDEXER_PUBLIC_CONFIG.namespace, ensIndexerSchemaName: ENSINDEXER_PUBLIC_CONFIG.databaseSchemaName, @@ -210,6 +224,7 @@ describe("buildEnsApiPublicConfig", () => { const mockConfig = { port: ENSApi_DEFAULT_PORT, databaseUrl: BASE_ENV.DATABASE_URL, + ensDbPublicConfig: ENSDB_PUBLIC_CONFIG, ensIndexerPublicConfig: { ...ENSINDEXER_PUBLIC_CONFIG, plugins: ["subgraph"], diff --git a/apps/ensapi/src/config/config.schema.ts b/apps/ensapi/src/config/config.schema.ts index e608b74c0..7f158c7b5 100644 --- a/apps/ensapi/src/config/config.schema.ts +++ b/apps/ensapi/src/config/config.schema.ts @@ -12,6 +12,7 @@ import { makeENSIndexerPublicConfigSchema, OptionalPortNumberSchema, RpcConfigsSchema, + schemaEnsDbPublicConfig, TheGraphApiKeySchema, } from "@ensnode/ensnode-sdk/internal"; @@ -47,6 +48,7 @@ const EnsApiConfigSchema = z namespace: ENSNamespaceSchema, rpcConfigs: RpcConfigsSchema, ensIndexerPublicConfig: makeENSIndexerPublicConfigSchema("ensIndexerPublicConfig"), + ensDbPublicConfig: schemaEnsDbPublicConfig, customReferralProgramEditionConfigSetUrl: CustomReferralProgramEditionConfigSetUrlSchema, }) .extend(EnsDbConfigSchema.shape) @@ -86,12 +88,18 @@ export async function buildConfigFromEnvironment(env: EnsApiEnvironment): Promis }, ); + // TODO: transfer the responsibility of fetching + // the ENSDb Public Config to a middleware layer as well, + // similar to the ENSIndexer Public Config, as per: + // https://github.com/namehash/ensnode/issues/1806 + const ensDbPublicConfig = await ensDbClient.getEnsDbPublicConfig(); const rpcConfigs = buildRpcConfigsFromEnv(env, ensIndexerPublicConfig.namespace); return EnsApiConfigSchema.parse({ port: env.PORT, databaseUrl: env.DATABASE_URL, theGraphApiKey: env.THEGRAPH_API_KEY, + ensDbPublicConfig, ensIndexerPublicConfig, namespace: ensIndexerPublicConfig.namespace, ensIndexerSchemaName: ensIndexerPublicConfig.databaseSchemaName, @@ -128,6 +136,7 @@ export function buildEnsApiPublicConfig(config: EnsApiConfig): EnsApiPublicConfi theGraphApiKey: config.theGraphApiKey ? "" : undefined, isSubgraphCompatible: config.ensIndexerPublicConfig.isSubgraphCompatible, }), + ensDbPublicConfig: config.ensDbPublicConfig, ensIndexerPublicConfig: config.ensIndexerPublicConfig, }; } diff --git a/docs/docs.ensnode.io/ensapi-openapi.json b/docs/docs.ensnode.io/ensapi-openapi.json index 75f86ad1a..b345d37df 100644 --- a/docs/docs.ensnode.io/ensapi-openapi.json +++ b/docs/docs.ensnode.io/ensapi-openapi.json @@ -69,6 +69,14 @@ } ] }, + "ensDbPublicConfig": { + "type": "object", + "properties": { + "postgresVersion": { "type": "string", "minLength": 1 }, + "rootSchemaVersion": { "type": "string", "minLength": 1 } + }, + "required": ["postgresVersion", "rootSchemaVersion"] + }, "ensIndexerPublicConfig": { "type": "object", "properties": { @@ -146,7 +154,12 @@ ] } }, - "required": ["version", "theGraphFallback", "ensIndexerPublicConfig"] + "required": [ + "version", + "theGraphFallback", + "ensDbPublicConfig", + "ensIndexerPublicConfig" + ] } } } diff --git a/packages/ensdb-sdk/src/client/ensdb-reader.test.ts b/packages/ensdb-sdk/src/client/ensdb-reader.test.ts index 3a488c4a8..e7e15a600 100644 --- a/packages/ensdb-sdk/src/client/ensdb-reader.test.ts +++ b/packages/ensdb-sdk/src/client/ensdb-reader.test.ts @@ -5,13 +5,17 @@ import { serializeEnsIndexerPublicConfig, } from "@ensnode/ensnode-sdk"; +import { ENSDB_ROOT_SCHEMA_VERSION } from "../config"; import * as ensDbClientMock from "./ensdb-client.mock"; import { EnsDbReader } from "./ensdb-reader"; const whereMock = vi.fn(async () => [] as Array<{ value: unknown }>); const fromMock = vi.fn(() => ({ where: whereMock })); const selectMock = vi.fn(() => ({ from: fromMock })); -const drizzleClientMock = { select: selectMock } as any; +const executeMock = vi.fn(async () => ({ + rows: [] as Array<{ setting_server_version: string | number }>, +})); +const drizzleClientMock = { select: selectMock, execute: executeMock } as any; vi.mock("drizzle-orm/node-postgres", () => ({ drizzle: vi.fn(() => drizzleClientMock), @@ -85,4 +89,66 @@ describe("EnsDbReader", () => { ); }); }); + + describe("getEnsDbPublicConfig", () => { + beforeEach(() => { + executeMock.mockClear(); + }); + + it("returns public config with postgres version and root schema version", async () => { + executeMock.mockImplementation(async () => ({ + rows: [{ setting_server_version: "17.4 (Debian 17.4-1.pgdg120+2)" }], + })); + + const result = await createEnsDbReader().getEnsDbPublicConfig(); + + expect(result).toStrictEqual({ + postgresVersion: "17.4", + rootSchemaVersion: ENSDB_ROOT_SCHEMA_VERSION, + }); + expect(executeMock).toHaveBeenCalledTimes(1); + }); + + it("throws when server version setting is not a string", async () => { + executeMock.mockImplementation(async () => ({ + rows: [{ setting_server_version: 17.4 }], + })); + + await expect(createEnsDbReader().getEnsDbPublicConfig()).rejects.toThrowError( + "Unexpected type for server_version setting: number", + ); + }); + + it("throws when postgres version is empty", async () => { + executeMock.mockImplementation(async () => ({ + rows: [{ setting_server_version: "" }], + })); + + await expect(createEnsDbReader().getEnsDbPublicConfig()).rejects.toThrowError( + "PostgreSQL version must be a non-empty string.", + ); + }); + }); + + describe("getters", () => { + it("returns the drizzle client", () => { + const reader = createEnsDbReader(); + expect(reader.ensDb).toBe(drizzleClientMock); + }); + + it("returns the ensIndexerSchema", () => { + const reader = createEnsDbReader(); + expect(reader.ensIndexerSchema).toBeDefined(); + }); + + it("returns the ensIndexerSchemaName", () => { + const reader = createEnsDbReader(); + expect(reader.ensIndexerSchemaName).toBe(ensDbClientMock.ensIndexerSchemaName); + }); + + it("returns the ensNodeSchema", () => { + const reader = createEnsDbReader(); + expect(reader.ensNodeSchema).toBeDefined(); + }); + }); }); diff --git a/packages/ensdb-sdk/src/client/ensdb-reader.ts b/packages/ensdb-sdk/src/client/ensdb-reader.ts index ac6b0b72e..155537526 100644 --- a/packages/ensdb-sdk/src/client/ensdb-reader.ts +++ b/packages/ensdb-sdk/src/client/ensdb-reader.ts @@ -1,12 +1,15 @@ -import { and, eq } from "drizzle-orm/sql"; +import { and, eq, sql } from "drizzle-orm/sql"; import { type CrossChainIndexingStatusSnapshot, deserializeCrossChainIndexingStatusSnapshot, deserializeEnsIndexerPublicConfig, + type EnsDbPublicConfig, type EnsIndexerPublicConfig, + validateEnsDbPublicConfig, } from "@ensnode/ensnode-sdk"; +import { ENSDB_ROOT_SCHEMA_VERSION } from "../config"; import { type AbstractEnsIndexerSchema, buildEnsDbDrizzleClient, @@ -126,6 +129,19 @@ export class EnsDbReader< return this._ensNodeSchema; } + /** + * Get ENSDb Public Config + */ + async getEnsDbPublicConfig(): Promise { + const postgresVersion = await this.getPgVersion(); + const rootSchemaVersion = ENSDB_ROOT_SCHEMA_VERSION; + + return validateEnsDbPublicConfig({ + postgresVersion, + rootSchemaVersion, + }); + } + /** * Get ENSDb Version * @@ -208,4 +224,29 @@ export class EnsDbReader< `There must be exactly one ENSNodeMetadata record for ('${this.ensIndexerSchemaName}', '${metadata.key}') composite key`, ); } + + /** + * Get PostgreSQL version for ENSDb instance. + */ + private async getPgVersion(): Promise { + const queryResult = await this.ensDb.execute( + sql`SELECT current_setting('server_version') as setting_server_version;`, + ); + const serverVersionSetting = queryResult.rows[0]?.setting_server_version; + + if (typeof serverVersionSetting !== "string") { + throw new Error(`Unexpected type for server_version setting: ${typeof serverVersionSetting}`); + } + + // Extract version number from full version string, + // which is typically in the format "17.4 (Debian 17.4-1.pgdg120+2)". + // We just want the "17.4" part for the PostgreSQL version. + const [pgVersion = ""] = serverVersionSetting.split(" "); + + if (pgVersion.length === 0) { + throw new Error(`PostgreSQL version must be a non-empty string.`); + } + + return pgVersion; + } } diff --git a/packages/ensdb-sdk/src/config/index.ts b/packages/ensdb-sdk/src/config/index.ts new file mode 100644 index 000000000..adfc896d1 --- /dev/null +++ b/packages/ensdb-sdk/src/config/index.ts @@ -0,0 +1,10 @@ +/** + * Version of the Root Schema definition for ENSDb. + * + * The Root Schema definition is a union of all + * the individual schema definitions in ENSDb: + * - The "abstract" ENSIndexer Schema definition + * - ENSNode Schema definition + * - (future) other schemas related to ENSDb + */ +export const ENSDB_ROOT_SCHEMA_VERSION = "1.0.0"; diff --git a/packages/ensdb-sdk/src/index.ts b/packages/ensdb-sdk/src/index.ts index 5ec76921e..5ad184044 100644 --- a/packages/ensdb-sdk/src/index.ts +++ b/packages/ensdb-sdk/src/index.ts @@ -1 +1,2 @@ export * from "./client"; +export * from "./config"; diff --git a/packages/ensdb-sdk/src/lib/drizzle.ts b/packages/ensdb-sdk/src/lib/drizzle.ts index 051955846..3a412ca11 100644 --- a/packages/ensdb-sdk/src/lib/drizzle.ts +++ b/packages/ensdb-sdk/src/lib/drizzle.ts @@ -119,16 +119,16 @@ type EnsDbSchema = ConcreteEnsIndexerSchema & EnsNodeSchema; /** - * Build ENSDb Schema for Drizzle client + * Build ENSDb Root Schema for Drizzle client * * Uses the provided "concrete" ENSIndexer Schema definition to build - * the ENSDb Schema. + * the ENSDb Root Schema. * * @param concreteEnsIndexerSchema - The "concrete" ENSIndexer Schema definition. - * @returns The ENSDb Schema definition for use in building + * @returns The ENSDb Root Schema definition for use in building * a Drizzle client for ENSDb. */ -function buildEnsDbSchema( +function buildEnsDbRootSchema( concreteEnsIndexerSchema: ConcreteEnsIndexerSchema, ): EnsDbSchema { return { @@ -160,11 +160,11 @@ export function buildEnsDbDrizzleClient { - const ensDbSchema = buildEnsDbSchema(concreteEnsIndexerSchema); + const ensDbRootSchema = buildEnsDbRootSchema(concreteEnsIndexerSchema); return drizzle({ connection: connectionString, - schema: ensDbSchema, + schema: ensDbRootSchema, casing: "snake_case", logger, }); diff --git a/packages/ensnode-sdk/src/ensapi/client.test.ts b/packages/ensnode-sdk/src/ensapi/client.test.ts index f53ea9ce0..9c767f801 100644 --- a/packages/ensnode-sdk/src/ensapi/client.test.ts +++ b/packages/ensnode-sdk/src/ensapi/client.test.ts @@ -63,6 +63,10 @@ const EXAMPLE_CONFIG_RESPONSE = { canFallback: false, reason: "no-api-key", }, + ensDbPublicConfig: { + postgresVersion: "17.4", + rootSchemaVersion: "1.0.0", + }, ensIndexerPublicConfig: { ensRainbowPublicConfig: { version: "0.31.0", diff --git a/packages/ensnode-sdk/src/ensapi/config/conversions.test.ts b/packages/ensnode-sdk/src/ensapi/config/conversions.test.ts index ae15afb0c..c39abe224 100644 --- a/packages/ensnode-sdk/src/ensapi/config/conversions.test.ts +++ b/packages/ensnode-sdk/src/ensapi/config/conversions.test.ts @@ -14,6 +14,10 @@ const MOCK_ENSAPI_PUBLIC_CONFIG = { canFallback: false, reason: "no-api-key", }, + ensDbPublicConfig: { + postgresVersion: "17.4", + rootSchemaVersion: "1.0.0", + }, ensIndexerPublicConfig: { namespace: ENSNamespaceIds.Mainnet, databaseSchemaName: "ensapi", @@ -49,6 +53,10 @@ describe("ENSApi Config Serialization/Deserialization", () => { canFallback: false, reason: "no-api-key", }, + ensDbPublicConfig: { + postgresVersion: "17.4", + rootSchemaVersion: "1.0.0", + }, ensIndexerPublicConfig: { namespace: ENSNamespaceIds.Mainnet, databaseSchemaName: "ensapi", diff --git a/packages/ensnode-sdk/src/ensapi/config/serialize.ts b/packages/ensnode-sdk/src/ensapi/config/serialize.ts index a641a8b1c..02e209270 100644 --- a/packages/ensnode-sdk/src/ensapi/config/serialize.ts +++ b/packages/ensnode-sdk/src/ensapi/config/serialize.ts @@ -8,11 +8,12 @@ import type { EnsApiPublicConfig } from "./types"; export function serializeEnsApiPublicConfig( config: EnsApiPublicConfig, ): SerializedEnsApiPublicConfig { - const { version, theGraphFallback, ensIndexerPublicConfig } = config; + const { version, theGraphFallback, ensDbPublicConfig, ensIndexerPublicConfig } = config; return { version, theGraphFallback, + ensDbPublicConfig, ensIndexerPublicConfig: serializeEnsIndexerPublicConfig(ensIndexerPublicConfig), } satisfies SerializedEnsApiPublicConfig; } diff --git a/packages/ensnode-sdk/src/ensapi/config/types.ts b/packages/ensnode-sdk/src/ensapi/config/types.ts index eed61b27a..b239da331 100644 --- a/packages/ensnode-sdk/src/ensapi/config/types.ts +++ b/packages/ensnode-sdk/src/ensapi/config/types.ts @@ -1,3 +1,4 @@ +import type { EnsDbPublicConfig } from "../../ensdb/ensdb-public-config"; import type { EnsIndexerPublicConfig } from "../../ensindexer/config/types"; import type { TheGraphCannotFallbackReason, TheGraphFallback } from "../../shared/config/thegraph"; @@ -29,6 +30,15 @@ export interface EnsApiPublicConfig { * namespace, plugins, version info, etc. */ ensIndexerPublicConfig: EnsIndexerPublicConfig; + + /** + * ENSDb public config + * + * Contains ENSDb-specific public configuration, including: + * - Postgres version, + * - ENSDb Root Schema version. + */ + ensDbPublicConfig: EnsDbPublicConfig; } /** diff --git a/packages/ensnode-sdk/src/ensapi/config/zod-schemas.ts b/packages/ensnode-sdk/src/ensapi/config/zod-schemas.ts index 7ed65cfcc..95f73bfa5 100644 --- a/packages/ensnode-sdk/src/ensapi/config/zod-schemas.ts +++ b/packages/ensnode-sdk/src/ensapi/config/zod-schemas.ts @@ -1,5 +1,6 @@ import { z } from "zod/v4"; +import { schemaEnsDbPublicConfig } from "../../ensdb/zod-schemas/ensdb-public-config"; import { makeEnsIndexerPublicConfigSchema, makeSerializedEnsIndexerPublicConfigSchema, @@ -22,6 +23,7 @@ export function makeEnsApiPublicConfigSchema(valueLabel?: string) { return z.object({ version: z.string().min(1, `${label}.version must be a non-empty string`), theGraphFallback: TheGraphFallbackSchema, + ensDbPublicConfig: schemaEnsDbPublicConfig, ensIndexerPublicConfig: makeEnsIndexerPublicConfigSchema(`${label}.ensIndexerPublicConfig`), }); } @@ -39,6 +41,7 @@ export function makeSerializedEnsApiPublicConfigSchema(valueLabel?: string) { return z.object({ version: z.string().min(1, `${label}.version must be a non-empty string`), theGraphFallback: TheGraphFallbackSchema, + ensDbPublicConfig: schemaEnsDbPublicConfig, ensIndexerPublicConfig: makeSerializedEnsIndexerPublicConfigSchema( `${label}.ensIndexerPublicConfig`, ), diff --git a/packages/ensnode-sdk/src/ensdb/ensdb-public-config.ts b/packages/ensnode-sdk/src/ensdb/ensdb-public-config.ts new file mode 100644 index 000000000..5e18ce6b4 --- /dev/null +++ b/packages/ensnode-sdk/src/ensdb/ensdb-public-config.ts @@ -0,0 +1,11 @@ +export interface EnsDbPublicConfig { + /** + * Version of Postgres in the ENSDb instance. + */ + postgresVersion: string; + + /** + * Root schema version for ENSNode tables in the ENSDb instance. + */ + rootSchemaVersion: string; +} diff --git a/packages/ensnode-sdk/src/ensdb/index.ts b/packages/ensnode-sdk/src/ensdb/index.ts new file mode 100644 index 000000000..250fc20b0 --- /dev/null +++ b/packages/ensnode-sdk/src/ensdb/index.ts @@ -0,0 +1,2 @@ +export * from "./ensdb-public-config"; +export * from "./validate/ensdb-public-config"; diff --git a/packages/ensnode-sdk/src/ensdb/validate/ensdb-public-config.ts b/packages/ensnode-sdk/src/ensdb/validate/ensdb-public-config.ts new file mode 100644 index 000000000..b1c5b799b --- /dev/null +++ b/packages/ensnode-sdk/src/ensdb/validate/ensdb-public-config.ts @@ -0,0 +1,24 @@ +import { prettifyError } from "zod/v4"; + +import type { Unvalidated } from "../../shared/types"; +import type { EnsDbPublicConfig } from "../ensdb-public-config"; +import { schemaEnsDbPublicConfig } from "../zod-schemas/ensdb-public-config"; + +/** + * Validate ENSDb Public Config. + * + * @param unvalidatedConfig The unvalidated ENSDb Public Config to validate. + * @returns The validated ENSDb Public Config. + * @throws Error if the provided config is invalid, with details on validation errors. + */ +export function validateEnsDbPublicConfig( + unvalidatedConfig: Unvalidated, +): EnsDbPublicConfig { + const validationResult = schemaEnsDbPublicConfig.safeParse(unvalidatedConfig); + + if (!validationResult.success) { + throw new Error(`Invalid ENSDb Public Config: \n${prettifyError(validationResult.error)}\n`); + } + + return validationResult.data; +} diff --git a/packages/ensnode-sdk/src/ensdb/zod-schemas/ensdb-public-config.ts b/packages/ensnode-sdk/src/ensdb/zod-schemas/ensdb-public-config.ts new file mode 100644 index 000000000..8f98d6365 --- /dev/null +++ b/packages/ensnode-sdk/src/ensdb/zod-schemas/ensdb-public-config.ts @@ -0,0 +1,6 @@ +import { z } from "zod/v4"; + +export const schemaEnsDbPublicConfig = z.object({ + postgresVersion: z.string().min(1, "PostgreSQL version must be a non-empty string."), + rootSchemaVersion: z.string().min(1, "Root Schema version must be a non-empty string."), +}); diff --git a/packages/ensnode-sdk/src/index.ts b/packages/ensnode-sdk/src/index.ts index 64551c589..83faed666 100644 --- a/packages/ensnode-sdk/src/index.ts +++ b/packages/ensnode-sdk/src/index.ts @@ -1,5 +1,6 @@ export * from "./ens"; export * from "./ensapi"; +export * from "./ensdb"; export * from "./ensindexer"; export * from "./ensrainbow"; export * from "./ensv2"; diff --git a/packages/ensnode-sdk/src/internal.ts b/packages/ensnode-sdk/src/internal.ts index ef3612745..fa4bed398 100644 --- a/packages/ensnode-sdk/src/internal.ts +++ b/packages/ensnode-sdk/src/internal.ts @@ -19,6 +19,7 @@ export * from "./ensapi/api/resolution/zod-schemas"; export * from "./ensapi/api/shared/errors/zod-schemas"; export * from "./ensapi/api/shared/pagination/zod-schemas"; export * from "./ensapi/config/zod-schemas"; +export * from "./ensdb/zod-schemas/ensdb-public-config"; export * from "./ensindexer/config/zod-schemas"; export * from "./graphql-api/example-queries"; export * from "./registrars/zod-schemas";