@ensnode/ensnode-react 1.9.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -2,16 +2,16 @@ import * as _tanstack_react_query from '@tanstack/react-query';
2
2
  import { QueryObserverOptions, DefaultError, QueryKey, DefinedInitialDataOptions, QueryClient, DefinedUseQueryResult, UndefinedInitialDataOptions, UseQueryResult, UseQueryOptions } from '@tanstack/react-query';
3
3
  export { QueryClient } from '@tanstack/react-query';
4
4
  import * as _ensnode_ensnode_sdk from '@ensnode/ensnode-sdk';
5
- import { ClientOptions, ResolvePrimaryNameRequest, ResolvePrimaryNameResponse, ResolvePrimaryNamesRequest, ResolvePrimaryNamesResponse, ResolverRecordsSelection, ResolveRecordsRequest, ResolveRecordsResponse, AcceleratableRequest, UnresolvedIdentity, ConfigResponse, IndexingStatusRequest, IndexingStatusResponse, NameTokensRequest, NameTokensResponse, RegistrarActionsRequest, RegistrarActionsResponse, Identity } from '@ensnode/ensnode-sdk';
5
+ import { EnsNodeClientOptions, ResolvePrimaryNameRequest, ResolvePrimaryNameResponse, ResolvePrimaryNamesRequest, ResolvePrimaryNamesResponse, ResolverRecordsSelection, ResolveRecordsRequest, ResolveRecordsResponse, AcceleratableRequest, UnresolvedIdentity, ENSNamespaceId, EnsApiIndexingStatusRequest, EnsApiIndexingStatusResponse, NameTokensRequest, NameTokensResponse, RegistrarActionsRequest, RegistrarActionsResponse, Identity } from '@ensnode/ensnode-sdk';
6
6
  export { ResolverRecordsSelection } from '@ensnode/ensnode-sdk';
7
7
  import * as react from 'react';
8
8
 
9
9
  /**
10
10
  * Configuration options for the ENSNode provider
11
11
  */
12
- interface ENSNodeSDKConfig {
13
- /** The ENSNode API client configuration */
14
- client: ClientOptions;
12
+ interface EnsNodeProviderOptions {
13
+ /** The ENSNode client configuration */
14
+ client: EnsNodeClientOptions;
15
15
  }
16
16
  /**
17
17
  * Base query parameters that can be passed to hooks
@@ -22,8 +22,8 @@ interface QueryParameter<TData = unknown, TError = Error> {
22
22
  /**
23
23
  * Configuration parameter for hooks that need access to config
24
24
  */
25
- interface WithSDKConfigParameter<TConfig extends ENSNodeSDKConfig = ENSNodeSDKConfig> {
26
- config?: TConfig | undefined;
25
+ interface WithEnsNodeProviderOptions<TOptions extends EnsNodeProviderOptions = EnsNodeProviderOptions> {
26
+ options?: TOptions | undefined;
27
27
  }
28
28
  /**
29
29
  * Parameters for the useRecords hook.
@@ -54,28 +54,25 @@ interface UsePrimaryNamesParameters extends Omit<ResolvePrimaryNamesRequest, "ad
54
54
  */
55
55
  interface UseResolvedIdentityParameters extends QueryParameter<ResolvePrimaryNameResponse>, AcceleratableRequest {
56
56
  identity: UnresolvedIdentity;
57
+ namespace: ENSNamespaceId;
57
58
  }
58
59
 
59
60
  /**
60
- * React context for ENSNode configuration
61
+ * React context for ENSNodeProvider options
61
62
  */
62
- declare const ENSNodeContext: react.Context<ENSNodeSDKConfig | undefined>;
63
-
64
- type UseENSNodeConfigParameters = QueryParameter<ConfigResponse>;
65
- declare function useENSNodeConfig(parameters?: WithSDKConfigParameter & UseENSNodeConfigParameters): _tanstack_react_query.UseQueryResult<_ensnode_ensnode_sdk.EnsApiPublicConfig, Error>;
63
+ declare const EnsNodeContext: react.Context<EnsNodeProviderOptions | undefined>;
66
64
 
67
65
  /**
68
- * Hook to access the ENSNodeSDKConfig from context or parameters.
66
+ * Hook to access the {@link EnsNodeProviderOptions} from context or parameters.
69
67
  *
70
- * @param parameters - Optional config parameter that overrides context
71
- * @returns The ENSNode configuration
72
- * @throws Error if no config is available in context or parameters
68
+ * @param options - Options parameter that overrides context
69
+ * @throws Error if no options are available in context or parameters
73
70
  */
74
- declare function useENSNodeSDKConfig<TConfig extends ENSNodeSDKConfig = ENSNodeSDKConfig>(config: TConfig | undefined): TConfig;
71
+ declare function useEnsNodeProviderOptions<ProviderOptionsType extends EnsNodeProviderOptions = EnsNodeProviderOptions>(options?: ProviderOptionsType): ProviderOptionsType;
75
72
 
76
- interface UseIndexingStatusParameters extends IndexingStatusRequest, QueryParameter<IndexingStatusResponse> {
73
+ interface UseIndexingStatusParameters extends EnsApiIndexingStatusRequest, QueryParameter<EnsApiIndexingStatusResponse> {
77
74
  }
78
- declare function useIndexingStatus(parameters?: WithSDKConfigParameter & UseIndexingStatusParameters): _tanstack_react_query.UseQueryResult<_ensnode_ensnode_sdk.EnsApiIndexingStatusResponse, Error>;
75
+ declare function useIndexingStatus(parameters?: WithEnsNodeProviderOptions & UseIndexingStatusParameters): _tanstack_react_query.UseQueryResult<EnsApiIndexingStatusResponse, Error>;
79
76
 
80
77
  type UseNameTokensParameters = NameTokensRequest & QueryParameter<NameTokensResponse>;
81
78
  /**
@@ -83,7 +80,7 @@ type UseNameTokensParameters = NameTokensRequest & QueryParameter<NameTokensResp
83
80
  *
84
81
  * Query ENSNode Name Tokens API.
85
82
  */
86
- declare function useNameTokens(parameters: WithSDKConfigParameter & UseNameTokensParameters): _tanstack_react_query.UseQueryResult<NameTokensResponse, Error>;
83
+ declare function useNameTokens(parameters: WithEnsNodeProviderOptions & UseNameTokensParameters): _tanstack_react_query.UseQueryResult<NameTokensResponse, Error>;
87
84
 
88
85
  /**
89
86
  * Resolves the primary name of a specified address (Reverse Resolution).
@@ -117,7 +114,7 @@ declare function useNameTokens(parameters: WithSDKConfigParameter & UseNameToken
117
114
  * }
118
115
  * ```
119
116
  */
120
- declare function usePrimaryName(parameters: UsePrimaryNameParameters & WithSDKConfigParameter): _tanstack_react_query.UseQueryResult<_ensnode_ensnode_sdk.ResolvePrimaryNameResponse, Error>;
117
+ declare function usePrimaryName(parameters: UsePrimaryNameParameters & WithEnsNodeProviderOptions): _tanstack_react_query.UseQueryResult<_ensnode_ensnode_sdk.ResolvePrimaryNameResponse, Error>;
121
118
 
122
119
  /**
123
120
  * Resolves the primary names of a specified address across multiple chains.
@@ -153,7 +150,7 @@ declare function usePrimaryName(parameters: UsePrimaryNameParameters & WithSDKCo
153
150
  * }
154
151
  * ```
155
152
  */
156
- declare function usePrimaryNames(parameters: UsePrimaryNamesParameters & WithSDKConfigParameter): _tanstack_react_query.UseQueryResult<_ensnode_ensnode_sdk.ResolvePrimaryNamesResponse, Error>;
153
+ declare function usePrimaryNames(parameters: UsePrimaryNamesParameters & WithEnsNodeProviderOptions): _tanstack_react_query.UseQueryResult<_ensnode_ensnode_sdk.ResolvePrimaryNamesResponse, Error>;
157
154
 
158
155
  /**
159
156
  * Resolves records for an ENS name (Forward Resolution).
@@ -197,7 +194,7 @@ declare function usePrimaryNames(parameters: UsePrimaryNamesParameters & WithSDK
197
194
  * }
198
195
  * ```
199
196
  */
200
- declare function useRecords<SELECTION extends ResolverRecordsSelection>(parameters: UseRecordsParameters<SELECTION> & WithSDKConfigParameter): _tanstack_react_query.UseQueryResult<_ensnode_ensnode_sdk.ResolveRecordsResponse<SELECTION>, Error>;
197
+ declare function useRecords<SELECTION extends ResolverRecordsSelection>(parameters: UseRecordsParameters<SELECTION> & WithEnsNodeProviderOptions): _tanstack_react_query.UseQueryResult<_ensnode_ensnode_sdk.ResolveRecordsResponse<SELECTION>, Error>;
201
198
 
202
199
  interface UseRegistrarActionsParameters extends RegistrarActionsRequest, QueryParameter<RegistrarActionsResponse> {
203
200
  }
@@ -206,7 +203,7 @@ interface UseRegistrarActionsParameters extends RegistrarActionsRequest, QueryPa
206
203
  *
207
204
  * Query ENSNode Registrar Actions API.
208
205
  */
209
- declare function useRegistrarActions(parameters?: WithSDKConfigParameter & UseRegistrarActionsParameters): _tanstack_react_query.UseQueryResult<RegistrarActionsResponse, Error>;
206
+ declare function useRegistrarActions(parameters?: WithEnsNodeProviderOptions & UseRegistrarActionsParameters): _tanstack_react_query.UseQueryResult<RegistrarActionsResponse, Error>;
210
207
 
211
208
  /**
212
209
  * Hook to perform ENSIP-19 primary name resolution to resolve an
@@ -215,7 +212,7 @@ declare function useRegistrarActions(parameters?: WithSDKConfigParameter & UseRe
215
212
  * @param parameters - Configuration object for the hook
216
213
  * @param parameters.identity - An {@link UnresolvedIdentity} containing the {@link DefaultableChainId}
217
214
  * and {@link Address} to resolve.
218
- * @param parameters.namespaceId - The {@link ENSNamespaceId} that `identity.chainId` should be interpreted
215
+ * @param parameters.namespace - The {@link ENSNamespaceId} that `identity.chainId` should be interpreted
219
216
  * through (via {@link getResolvePrimaryNameChainIdParam}) to determine the literal
220
217
  * chainId that should be used for ENSIP-19 primary name resolution.
221
218
  * @param parameters.accelerate - Whether to attempt Protocol Acceleration (default: false)
@@ -432,12 +429,12 @@ declare function useSwrQuery<TQueryFnData = unknown, TError = DefaultError, TDat
432
429
  declare function useSwrQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>, queryClient?: QueryClient): UseQueryResult<NoInfer<TData>, TError>;
433
430
  declare function useSwrQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, queryClient?: QueryClient): UseQueryResult<NoInfer<TData>, TError>;
434
431
 
435
- interface ENSNodeProviderProps {
436
- /** ENSNode configuration */
437
- config: ENSNodeSDKConfig;
432
+ interface EnsNodeProviderProps {
433
+ /** ENSNode Provider Options */
434
+ options: EnsNodeProviderOptions;
438
435
  /**
439
436
  * Optional QueryClient instance. If provided, you must wrap your app with QueryClientProvider yourself.
440
- * If not provided, ENSNodeProvider will create and manage its own QueryClient internally.
437
+ * If not provided, EnsNodeProvider will create and manage its own QueryClient internally.
441
438
  */
442
439
  queryClient?: QueryClient;
443
440
  /**
@@ -446,16 +443,16 @@ interface ENSNodeProviderProps {
446
443
  */
447
444
  queryClientOptions?: ConstructorParameters<typeof QueryClient>[0];
448
445
  }
449
- declare function ENSNodeProvider(parameters: React.PropsWithChildren<ENSNodeProviderProps>): react.FunctionComponentElement<{
446
+ declare function EnsNodeProvider(parameters: React.PropsWithChildren<EnsNodeProviderProps>): react.FunctionComponentElement<{
450
447
  children?: React.ReactNode;
451
- config: ENSNodeSDKConfig;
448
+ options: EnsNodeProviderOptions;
452
449
  }> | react.FunctionComponentElement<_tanstack_react_query.QueryClientProviderProps>;
453
450
  /**
454
- * Helper function to create ENSNode configuration
451
+ * Helper function to create ENSNode Provider Options
455
452
  */
456
- declare function createConfig(options?: {
453
+ declare function createEnsNodeProviderOptions(options?: {
457
454
  url?: string | URL;
458
- }): ENSNodeSDKConfig;
455
+ }): EnsNodeProviderOptions;
459
456
 
460
457
  /**
461
458
  * Immutable query options for data that is assumed to be immutable and should only be fetched once per full page refresh per unique key.
@@ -488,7 +485,6 @@ declare const queryKeys: {
488
485
  records: (url: string, args: ResolveRecordsRequest<any>) => readonly ["ensnode", string, "resolve", "records", ResolveRecordsRequest<any>];
489
486
  primaryName: (url: string, args: ResolvePrimaryNameRequest) => readonly ["ensnode", string, "resolve", "primary-name", ResolvePrimaryNameRequest];
490
487
  primaryNames: (url: string, args: ResolvePrimaryNamesRequest) => readonly ["ensnode", string, "resolve", "primary-names", ResolvePrimaryNamesRequest];
491
- config: (url: string) => readonly ["ensnode", string, "config"];
492
488
  indexingStatus: (url: string) => readonly ["ensnode", string, "indexing-status"];
493
489
  registrarActions: (url: string, args: RegistrarActionsRequest) => readonly ["ensnode", string, "registrar-actions", RegistrarActionsRequest];
494
490
  nameTokens: (url: string, args: NameTokensRequest) => readonly ["ensnode", string, "name-tokens", NameTokensRequest];
@@ -496,7 +492,7 @@ declare const queryKeys: {
496
492
  /**
497
493
  * Creates query options for Records Resolution
498
494
  */
499
- declare function createRecordsQueryOptions<SELECTION extends ResolverRecordsSelection>(config: ENSNodeSDKConfig, args: ResolveRecordsRequest<SELECTION>): {
495
+ declare function createRecordsQueryOptions<SELECTION extends ResolverRecordsSelection>(config: EnsNodeProviderOptions, args: ResolveRecordsRequest<SELECTION>): {
500
496
  enabled: boolean;
501
497
  queryKey: readonly ["ensnode", string, "resolve", "records", ResolveRecordsRequest<any>];
502
498
  queryFn: () => Promise<_ensnode_ensnode_sdk.ResolveRecordsResponse<SELECTION>>;
@@ -504,7 +500,7 @@ declare function createRecordsQueryOptions<SELECTION extends ResolverRecordsSele
504
500
  /**
505
501
  * Creates query options for Primary Name Resolution
506
502
  */
507
- declare function createPrimaryNameQueryOptions(config: ENSNodeSDKConfig, args: ResolvePrimaryNameRequest): {
503
+ declare function createPrimaryNameQueryOptions(config: EnsNodeProviderOptions, args: ResolvePrimaryNameRequest): {
508
504
  enabled: boolean;
509
505
  queryKey: readonly ["ensnode", string, "resolve", "primary-name", ResolvePrimaryNameRequest];
510
506
  queryFn: () => Promise<_ensnode_ensnode_sdk.ResolvePrimaryNameResponse>;
@@ -512,23 +508,15 @@ declare function createPrimaryNameQueryOptions(config: ENSNodeSDKConfig, args: R
512
508
  /**
513
509
  * Creates query options for Primary Name Resolution
514
510
  */
515
- declare function createPrimaryNamesQueryOptions(config: ENSNodeSDKConfig, args: ResolvePrimaryNamesRequest): {
511
+ declare function createPrimaryNamesQueryOptions(config: EnsNodeProviderOptions, args: ResolvePrimaryNamesRequest): {
516
512
  enabled: boolean;
517
513
  queryKey: readonly ["ensnode", string, "resolve", "primary-names", ResolvePrimaryNamesRequest];
518
514
  queryFn: () => Promise<_ensnode_ensnode_sdk.ResolvePrimaryNamesResponse>;
519
515
  };
520
- /**
521
- * Creates query options for ENSNode Config API
522
- */
523
- declare function createConfigQueryOptions(config: ENSNodeSDKConfig): {
524
- enabled: boolean;
525
- queryKey: readonly ["ensnode", string, "config"];
526
- queryFn: () => Promise<_ensnode_ensnode_sdk.EnsApiPublicConfig>;
527
- };
528
516
  /**
529
517
  * Creates query options for ENSNode Indexing Status API
530
518
  */
531
- declare function createIndexingStatusQueryOptions(config: ENSNodeSDKConfig): {
519
+ declare function createIndexingStatusQueryOptions(config: EnsNodeProviderOptions): {
532
520
  enabled: boolean;
533
521
  queryKey: readonly ["ensnode", string, "indexing-status"];
534
522
  queryFn: () => Promise<_ensnode_ensnode_sdk.EnsApiIndexingStatusResponse>;
@@ -536,7 +524,7 @@ declare function createIndexingStatusQueryOptions(config: ENSNodeSDKConfig): {
536
524
  /**
537
525
  * Creates query options for ENSNode Registrar Actions API
538
526
  */
539
- declare function createRegistrarActionsQueryOptions(config: ENSNodeSDKConfig, args: RegistrarActionsRequest): {
527
+ declare function createRegistrarActionsQueryOptions(config: EnsNodeProviderOptions, args: RegistrarActionsRequest): {
540
528
  enabled: boolean;
541
529
  queryKey: readonly ["ensnode", string, "registrar-actions", RegistrarActionsRequest];
542
530
  queryFn: () => Promise<_ensnode_ensnode_sdk.RegistrarActionsResponse>;
@@ -544,10 +532,10 @@ declare function createRegistrarActionsQueryOptions(config: ENSNodeSDKConfig, ar
544
532
  /**
545
533
  * Creates query options for Name Tokens API
546
534
  */
547
- declare function createNameTokensQueryOptions(config: ENSNodeSDKConfig, args: NameTokensRequest): {
535
+ declare function createNameTokensQueryOptions(config: EnsNodeProviderOptions, args: NameTokensRequest): {
548
536
  enabled: boolean;
549
537
  queryKey: readonly ["ensnode", string, "name-tokens", NameTokensRequest];
550
538
  queryFn: () => Promise<_ensnode_ensnode_sdk.NameTokensResponse>;
551
539
  };
552
540
 
553
- export { ASSUME_IMMUTABLE_QUERY, ENSNodeContext, ENSNodeProvider, type ENSNodeProviderProps, type ENSNodeSDKConfig, type QueryParameter, type UsePrimaryNameParameters, type UsePrimaryNamesParameters, type UseRecordsParameters, type UseResolvedIdentityParameters, type WithSDKConfigParameter, createConfig, createConfigQueryOptions, createIndexingStatusQueryOptions, createNameTokensQueryOptions, createPrimaryNameQueryOptions, createPrimaryNamesQueryOptions, createRecordsQueryOptions, createRegistrarActionsQueryOptions, queryKeys, useENSNodeConfig, useENSNodeSDKConfig, useIndexingStatus, useNameTokens, usePrimaryName, usePrimaryNames, useRecords, useRegistrarActions, useResolvedIdentity, useSwrQuery };
541
+ export { ASSUME_IMMUTABLE_QUERY, EnsNodeContext, EnsNodeProvider, type EnsNodeProviderOptions, type EnsNodeProviderProps, type QueryParameter, type UsePrimaryNameParameters, type UsePrimaryNamesParameters, type UseRecordsParameters, type UseResolvedIdentityParameters, type WithEnsNodeProviderOptions, createEnsNodeProviderOptions, createIndexingStatusQueryOptions, createNameTokensQueryOptions, createPrimaryNameQueryOptions, createPrimaryNamesQueryOptions, createRecordsQueryOptions, createRegistrarActionsQueryOptions, queryKeys, useEnsNodeProviderOptions, useIndexingStatus, useNameTokens, usePrimaryName, usePrimaryNames, useRecords, useRegistrarActions, useResolvedIdentity, useSwrQuery };
package/dist/index.js CHANGED
@@ -1,14 +1,27 @@
1
1
  // src/context.ts
2
2
  import { createContext } from "react";
3
- var ENSNodeContext = createContext(void 0);
4
- ENSNodeContext.displayName = "ENSNodeContext";
3
+ var EnsNodeContext = createContext(void 0);
4
+ EnsNodeContext.displayName = "EnsNodeContext";
5
5
 
6
- // src/hooks/useENSNodeConfig.ts
6
+ // src/hooks/useEnsNodeProviderOptions.ts
7
+ import { useContext } from "react";
8
+ function useEnsNodeProviderOptions(options) {
9
+ const contextOptions = useContext(EnsNodeContext);
10
+ const resolvedOptions = options ?? contextOptions;
11
+ if (!resolvedOptions) {
12
+ throw new Error(
13
+ "useEnsNodeProviderOptions must be used within an EnsNodeProvider or you must pass the options parameter"
14
+ );
15
+ }
16
+ return resolvedOptions;
17
+ }
18
+
19
+ // src/hooks/useIndexingStatus.ts
7
20
  import { useQuery } from "@tanstack/react-query";
8
21
 
9
22
  // src/utils/query.ts
10
23
  import {
11
- ENSNodeClient
24
+ EnsNodeClient
12
25
  } from "@ensnode/ensnode-sdk";
13
26
  var ASSUME_IMMUTABLE_QUERY = {
14
27
  staleTime: Infinity,
@@ -23,7 +36,6 @@ var queryKeys = {
23
36
  records: (url, args) => [...queryKeys.resolve(url), "records", args],
24
37
  primaryName: (url, args) => [...queryKeys.resolve(url), "primary-name", args],
25
38
  primaryNames: (url, args) => [...queryKeys.resolve(url), "primary-names", args],
26
- config: (url) => [...queryKeys.base(url), "config"],
27
39
  indexingStatus: (url) => [...queryKeys.base(url), "indexing-status"],
28
40
  registrarActions: (url, args) => [...queryKeys.base(url), "registrar-actions", args],
29
41
  nameTokens: (url, args) => [...queryKeys.base(url), "name-tokens", args]
@@ -33,7 +45,7 @@ function createRecordsQueryOptions(config, args) {
33
45
  enabled: true,
34
46
  queryKey: queryKeys.records(config.client.url.href, args),
35
47
  queryFn: async () => {
36
- const client = new ENSNodeClient(config.client);
48
+ const client = new EnsNodeClient(config.client);
37
49
  return client.resolveRecords(args.name, args.selection, args);
38
50
  }
39
51
  };
@@ -43,7 +55,7 @@ function createPrimaryNameQueryOptions(config, args) {
43
55
  enabled: true,
44
56
  queryKey: queryKeys.primaryName(config.client.url.href, args),
45
57
  queryFn: async () => {
46
- const client = new ENSNodeClient(config.client);
58
+ const client = new EnsNodeClient(config.client);
47
59
  return client.resolvePrimaryName(args.address, args.chainId, args);
48
60
  }
49
61
  };
@@ -53,27 +65,17 @@ function createPrimaryNamesQueryOptions(config, args) {
53
65
  enabled: true,
54
66
  queryKey: queryKeys.primaryNames(config.client.url.href, args),
55
67
  queryFn: async () => {
56
- const client = new ENSNodeClient(config.client);
68
+ const client = new EnsNodeClient(config.client);
57
69
  return client.resolvePrimaryNames(args.address, args);
58
70
  }
59
71
  };
60
72
  }
61
- function createConfigQueryOptions(config) {
62
- return {
63
- enabled: true,
64
- queryKey: queryKeys.config(config.client.url.href),
65
- queryFn: async () => {
66
- const client = new ENSNodeClient(config.client);
67
- return client.config();
68
- }
69
- };
70
- }
71
73
  function createIndexingStatusQueryOptions(config) {
72
74
  return {
73
75
  enabled: true,
74
76
  queryKey: queryKeys.indexingStatus(config.client.url.href),
75
77
  queryFn: async () => {
76
- const client = new ENSNodeClient(config.client);
78
+ const client = new EnsNodeClient(config.client);
77
79
  return client.indexingStatus();
78
80
  }
79
81
  };
@@ -83,7 +85,7 @@ function createRegistrarActionsQueryOptions(config, args) {
83
85
  enabled: true,
84
86
  queryKey: queryKeys.registrarActions(config.client.url.href, args),
85
87
  queryFn: async () => {
86
- const client = new ENSNodeClient(config.client);
88
+ const client = new EnsNodeClient(config.client);
87
89
  return client.registrarActions(args);
88
90
  }
89
91
  };
@@ -93,62 +95,33 @@ function createNameTokensQueryOptions(config, args) {
93
95
  enabled: true,
94
96
  queryKey: queryKeys.nameTokens(config.client.url.href, args),
95
97
  queryFn: async () => {
96
- const client = new ENSNodeClient(config.client);
98
+ const client = new EnsNodeClient(config.client);
97
99
  return client.nameTokens(args);
98
100
  }
99
101
  };
100
102
  }
101
103
 
102
- // src/hooks/useENSNodeSDKConfig.ts
103
- import { useContext } from "react";
104
- function useENSNodeSDKConfig(config) {
105
- const contextConfig = useContext(ENSNodeContext);
106
- const resolvedConfig = config ?? contextConfig;
107
- if (!resolvedConfig) {
108
- throw new Error(
109
- "useENSNodeSDKConfig must be used within an ENSNodeProvider or you must pass a config parameter"
110
- );
111
- }
112
- return resolvedConfig;
113
- }
114
-
115
- // src/hooks/useENSNodeConfig.ts
116
- function useENSNodeConfig(parameters = {}) {
117
- const { config, query = {} } = parameters;
118
- const _config = useENSNodeSDKConfig(config);
119
- const queryOptions = createConfigQueryOptions(_config);
120
- const options = {
121
- ...queryOptions,
122
- ...ASSUME_IMMUTABLE_QUERY,
123
- ...query,
124
- enabled: query.enabled ?? queryOptions.enabled
125
- };
126
- return useQuery(options);
127
- }
128
-
129
104
  // src/hooks/useIndexingStatus.ts
130
- import { useQuery as useQuery2 } from "@tanstack/react-query";
131
105
  function useIndexingStatus(parameters = {}) {
132
- const { config, query = {} } = parameters;
133
- const _config = useENSNodeSDKConfig(config);
134
- const queryOptions = createIndexingStatusQueryOptions(_config);
135
- const options = {
106
+ const { options, query = {} } = parameters;
107
+ const providerOptions = useEnsNodeProviderOptions(options);
108
+ const queryOptions = createIndexingStatusQueryOptions(providerOptions);
109
+ return useQuery({
136
110
  ...queryOptions,
137
111
  refetchInterval: 10 * 1e3,
138
112
  // 10 seconds - indexing status changes frequently
139
113
  ...query,
140
114
  enabled: query.enabled ?? queryOptions.enabled
141
- };
142
- return useQuery2(options);
115
+ });
143
116
  }
144
117
 
145
118
  // src/hooks/useNameTokens.ts
146
- import { useQuery as useQuery3 } from "@tanstack/react-query";
119
+ import { useQuery as useQuery2 } from "@tanstack/react-query";
147
120
  function useNameTokens(parameters) {
148
- const { config, query = {} } = parameters;
149
- const _config = useENSNodeSDKConfig(config);
150
- const queryOptions = createNameTokensQueryOptions(_config, parameters);
151
- return useQuery3({
121
+ const { options, query = {}, ...request } = parameters;
122
+ const providerOptions = useEnsNodeProviderOptions(options);
123
+ const queryOptions = createNameTokensQueryOptions(providerOptions, request);
124
+ return useQuery2({
152
125
  ...queryOptions,
153
126
  refetchInterval: false,
154
127
  // no refetching - assume data is immutable until a full page refresh
@@ -158,64 +131,60 @@ function useNameTokens(parameters) {
158
131
  }
159
132
 
160
133
  // src/hooks/usePrimaryName.ts
161
- import { useQuery as useQuery4 } from "@tanstack/react-query";
134
+ import { useQuery as useQuery3 } from "@tanstack/react-query";
162
135
  function usePrimaryName(parameters) {
163
- const { config, query = {}, address, ...args } = parameters;
164
- const _config = useENSNodeSDKConfig(config);
136
+ const { options, query = {}, address, ...args } = parameters;
137
+ const providerOptions = useEnsNodeProviderOptions(options);
165
138
  const canEnable = address !== null;
166
- const queryOptions = canEnable ? createPrimaryNameQueryOptions(_config, { ...args, address }) : { enabled: false, queryKey: ["disabled"] };
167
- const options = {
139
+ const queryOptions = canEnable ? createPrimaryNameQueryOptions(providerOptions, { ...args, address }) : { enabled: false, queryKey: ["disabled"] };
140
+ return useQuery3({
168
141
  ...queryOptions,
169
142
  ...query,
170
143
  enabled: canEnable && (query.enabled ?? queryOptions.enabled)
171
- };
172
- return useQuery4(options);
144
+ });
173
145
  }
174
146
 
175
147
  // src/hooks/usePrimaryNames.ts
176
- import { useQuery as useQuery5 } from "@tanstack/react-query";
148
+ import { useQuery as useQuery4 } from "@tanstack/react-query";
177
149
  function usePrimaryNames(parameters) {
178
- const { config, query = {}, address, ...args } = parameters;
179
- const _config = useENSNodeSDKConfig(config);
150
+ const { options, query = {}, address, ...args } = parameters;
151
+ const providerOptions = useEnsNodeProviderOptions(options);
180
152
  const canEnable = address !== null;
181
- const queryOptions = canEnable ? createPrimaryNamesQueryOptions(_config, { ...args, address }) : { enabled: false, queryKey: ["disabled"] };
182
- const options = {
153
+ const queryOptions = canEnable ? createPrimaryNamesQueryOptions(providerOptions, { ...args, address }) : { enabled: false, queryKey: ["disabled"] };
154
+ return useQuery4({
183
155
  ...queryOptions,
184
156
  ...query,
185
157
  enabled: canEnable && (query.enabled ?? queryOptions.enabled)
186
- };
187
- return useQuery5(options);
158
+ });
188
159
  }
189
160
 
190
161
  // src/hooks/useRecords.ts
191
- import { useQuery as useQuery6 } from "@tanstack/react-query";
162
+ import { useQuery as useQuery5 } from "@tanstack/react-query";
192
163
  function useRecords(parameters) {
193
- const { config, query = {}, name, ...args } = parameters;
194
- const _config = useENSNodeSDKConfig(config);
164
+ const { options, query = {}, name, ...args } = parameters;
165
+ const _config = useEnsNodeProviderOptions(options);
195
166
  const canEnable = name !== null;
196
167
  const queryOptions = canEnable ? createRecordsQueryOptions(_config, { ...args, name }) : { enabled: false, queryKey: ["disabled"] };
197
- const options = {
168
+ return useQuery5({
198
169
  ...queryOptions,
199
170
  ...query,
200
171
  enabled: canEnable && (query.enabled ?? queryOptions.enabled)
201
- };
202
- return useQuery6(options);
172
+ });
203
173
  }
204
174
 
205
175
  // src/hooks/useRegistrarActions.ts
206
- import { useQuery as useQuery7 } from "@tanstack/react-query";
176
+ import { useQuery as useQuery6 } from "@tanstack/react-query";
207
177
  function useRegistrarActions(parameters = {}) {
208
- const { config, query = {} } = parameters;
209
- const _config = useENSNodeSDKConfig(config);
210
- const queryOptions = createRegistrarActionsQueryOptions(_config, parameters);
211
- const options = {
178
+ const { options, query = {}, ...request } = parameters;
179
+ const providerOptions = useEnsNodeProviderOptions(options);
180
+ const queryOptions = createRegistrarActionsQueryOptions(providerOptions, request);
181
+ return useQuery6({
212
182
  ...queryOptions,
213
183
  refetchInterval: 10 * 1e3,
214
184
  // 10 seconds - latest registrar actions change frequently
215
185
  ...query,
216
186
  enabled: query.enabled ?? queryOptions.enabled
217
- };
218
- return useQuery7(options);
187
+ });
219
188
  }
220
189
 
221
190
  // src/hooks/useResolvedIdentity.ts
@@ -225,9 +194,7 @@ import {
225
194
  ResolutionStatusIds
226
195
  } from "@ensnode/ensnode-sdk";
227
196
  function useResolvedIdentity(parameters) {
228
- const { identity, accelerate, query: _query = {} } = parameters;
229
- const { data } = useENSNodeConfig();
230
- const namespace = data?.ensIndexerPublicConfig.namespace;
197
+ const { identity, namespace, accelerate, query: _query = {} } = parameters;
231
198
  const {
232
199
  data: primaryNameData,
233
200
  status,
@@ -240,7 +207,15 @@ function useResolvedIdentity(parameters) {
240
207
  namespace ?? ENSNamespaceIds.Mainnet
241
208
  ),
242
209
  accelerate,
210
+ // NOTE: Overriding `gcTime` to prevent unbounded memory growth
211
+ // in long-running sessions with many identities.
243
212
  query: {
213
+ ...ASSUME_IMMUTABLE_QUERY,
214
+ // identity changes very rarely
215
+ gcTime: 60 * 60 * 1e3,
216
+ // 1 hour
217
+ refetchInterval: false,
218
+ // not covered by ASSUME_IMMUTABLE_QUERY
244
219
  ..._query,
245
220
  enabled: (_query.enabled ?? true) && namespace !== void 0
246
221
  }
@@ -277,7 +252,7 @@ function useResolvedIdentity(parameters) {
277
252
 
278
253
  // src/hooks/useSwrQuery.ts
279
254
  import {
280
- useQuery as useQuery8,
255
+ useQuery as useQuery7,
281
256
  useQueryClient
282
257
  } from "@tanstack/react-query";
283
258
  import { useMemo } from "react";
@@ -285,7 +260,7 @@ function useSwrQuery(options, queryClient) {
285
260
  const queryClientFromContext = useQueryClient();
286
261
  const derivedQueryClient = queryClient ?? queryClientFromContext;
287
262
  const cachedSuccessfulResult = derivedQueryClient.getQueryData(options.queryKey);
288
- const queryResult = useQuery8(
263
+ const queryResult = useQuery7(
289
264
  {
290
265
  ...options,
291
266
  // cached result can never be stale
@@ -318,16 +293,15 @@ function useSwrQuery(options, queryClient) {
318
293
  // src/provider.tsx
319
294
  import { QueryClient, QueryClientProvider, useQueryClient as useQueryClient2 } from "@tanstack/react-query";
320
295
  import { createElement, useMemo as useMemo2 } from "react";
321
- import { ENSNodeClient as ENSNodeClient2 } from "@ensnode/ensnode-sdk";
322
- function ENSNodeInternalProvider({
296
+ import { EnsNodeClient as EnsNodeClient2 } from "@ensnode/ensnode-sdk";
297
+ function EnsNodeInternalProvider({
323
298
  children,
324
- config
299
+ options
325
300
  }) {
326
- const memoizedConfig = useMemo2(() => config, [config]);
327
- return createElement(ENSNodeContext.Provider, { value: memoizedConfig }, children);
301
+ return createElement(EnsNodeContext.Provider, { value: options }, children);
328
302
  }
329
- function ENSNodeProvider(parameters) {
330
- const { children, config, queryClient, queryClientOptions } = parameters;
303
+ function EnsNodeProvider(parameters) {
304
+ const { children, options, queryClient, queryClientOptions } = parameters;
331
305
  let hasExistingQueryClient = false;
332
306
  try {
333
307
  hasExistingQueryClient = Boolean(useQueryClient2());
@@ -340,10 +314,10 @@ function ENSNodeProvider(parameters) {
340
314
  "When providing a custom queryClient, you must wrap your app with QueryClientProvider. Either remove the queryClient prop to use auto-managed setup, or wrap with QueryClientProvider."
341
315
  );
342
316
  }
343
- return createElement(ENSNodeInternalProvider, { config, children });
317
+ return createElement(EnsNodeInternalProvider, { options, children });
344
318
  }
345
319
  if (hasExistingQueryClient) {
346
- return createElement(ENSNodeInternalProvider, { config, children });
320
+ return createElement(EnsNodeInternalProvider, { options, children });
347
321
  }
348
322
  const defaultQueryClient = useMemo2(
349
323
  () => new QueryClient({
@@ -365,24 +339,23 @@ function ENSNodeProvider(parameters) {
365
339
  return createElement(
366
340
  QueryClientProvider,
367
341
  { client: defaultQueryClient },
368
- createElement(ENSNodeInternalProvider, { config, children })
342
+ createElement(EnsNodeInternalProvider, { options, children })
369
343
  );
370
344
  }
371
- function createConfig(options) {
372
- const url = options?.url ? new URL(options.url) : ENSNodeClient2.defaultOptions().url;
345
+ function createEnsNodeProviderOptions(options) {
346
+ const url = options?.url ? new URL(options.url) : EnsNodeClient2.defaultOptions().url;
373
347
  return {
374
348
  client: {
375
- ...ENSNodeClient2.defaultOptions(),
349
+ ...EnsNodeClient2.defaultOptions(),
376
350
  url
377
351
  }
378
352
  };
379
353
  }
380
354
  export {
381
355
  ASSUME_IMMUTABLE_QUERY,
382
- ENSNodeContext,
383
- ENSNodeProvider,
384
- createConfig,
385
- createConfigQueryOptions,
356
+ EnsNodeContext,
357
+ EnsNodeProvider,
358
+ createEnsNodeProviderOptions,
386
359
  createIndexingStatusQueryOptions,
387
360
  createNameTokensQueryOptions,
388
361
  createPrimaryNameQueryOptions,
@@ -390,8 +363,7 @@ export {
390
363
  createRecordsQueryOptions,
391
364
  createRegistrarActionsQueryOptions,
392
365
  queryKeys,
393
- useENSNodeConfig,
394
- useENSNodeSDKConfig,
366
+ useEnsNodeProviderOptions,
395
367
  useIndexingStatus,
396
368
  useNameTokens,
397
369
  usePrimaryName,