@ensnode/ensnode-react 1.9.0 → 1.10.1
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/README.md +19 -19
- package/dist/index.cjs +86 -114
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +37 -49
- package/dist/index.d.ts +37 -49
- package/dist/index.js +83 -111
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
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 {
|
|
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
|
|
13
|
-
/** The ENSNode
|
|
14
|
-
client:
|
|
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
|
|
26
|
-
|
|
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
|
|
61
|
+
* React context for ENSNodeProvider options
|
|
61
62
|
*/
|
|
62
|
-
declare const
|
|
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
|
|
66
|
+
* Hook to access the {@link EnsNodeProviderOptions} from context or parameters.
|
|
69
67
|
*
|
|
70
|
-
* @param
|
|
71
|
-
* @
|
|
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
|
|
71
|
+
declare function useEnsNodeProviderOptions<ProviderOptionsType extends EnsNodeProviderOptions = EnsNodeProviderOptions>(options?: ProviderOptionsType): ProviderOptionsType;
|
|
75
72
|
|
|
76
|
-
interface UseIndexingStatusParameters extends
|
|
73
|
+
interface UseIndexingStatusParameters extends EnsApiIndexingStatusRequest, QueryParameter<EnsApiIndexingStatusResponse> {
|
|
77
74
|
}
|
|
78
|
-
declare function useIndexingStatus(parameters?:
|
|
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:
|
|
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 &
|
|
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 &
|
|
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> &
|
|
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?:
|
|
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.
|
|
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
|
|
436
|
-
/** ENSNode
|
|
437
|
-
|
|
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,
|
|
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
|
|
446
|
+
declare function EnsNodeProvider(parameters: React.PropsWithChildren<EnsNodeProviderProps>): react.FunctionComponentElement<{
|
|
450
447
|
children?: React.ReactNode;
|
|
451
|
-
|
|
448
|
+
options: EnsNodeProviderOptions;
|
|
452
449
|
}> | react.FunctionComponentElement<_tanstack_react_query.QueryClientProviderProps>;
|
|
453
450
|
/**
|
|
454
|
-
* Helper function to create ENSNode
|
|
451
|
+
* Helper function to create ENSNode Provider Options
|
|
455
452
|
*/
|
|
456
|
-
declare function
|
|
453
|
+
declare function createEnsNodeProviderOptions(options?: {
|
|
457
454
|
url?: string | URL;
|
|
458
|
-
}):
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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,
|
|
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
|
|
4
|
-
|
|
3
|
+
var EnsNodeContext = createContext(void 0);
|
|
4
|
+
EnsNodeContext.displayName = "EnsNodeContext";
|
|
5
5
|
|
|
6
|
-
// src/hooks/
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 {
|
|
133
|
-
const
|
|
134
|
-
const queryOptions = createIndexingStatusQueryOptions(
|
|
135
|
-
|
|
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
|
|
119
|
+
import { useQuery as useQuery2 } from "@tanstack/react-query";
|
|
147
120
|
function useNameTokens(parameters) {
|
|
148
|
-
const {
|
|
149
|
-
const
|
|
150
|
-
const queryOptions = createNameTokensQueryOptions(
|
|
151
|
-
return
|
|
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
|
|
134
|
+
import { useQuery as useQuery3 } from "@tanstack/react-query";
|
|
162
135
|
function usePrimaryName(parameters) {
|
|
163
|
-
const {
|
|
164
|
-
const
|
|
136
|
+
const { options, query = {}, address, ...args } = parameters;
|
|
137
|
+
const providerOptions = useEnsNodeProviderOptions(options);
|
|
165
138
|
const canEnable = address !== null;
|
|
166
|
-
const queryOptions = canEnable ? createPrimaryNameQueryOptions(
|
|
167
|
-
|
|
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
|
|
148
|
+
import { useQuery as useQuery4 } from "@tanstack/react-query";
|
|
177
149
|
function usePrimaryNames(parameters) {
|
|
178
|
-
const {
|
|
179
|
-
const
|
|
150
|
+
const { options, query = {}, address, ...args } = parameters;
|
|
151
|
+
const providerOptions = useEnsNodeProviderOptions(options);
|
|
180
152
|
const canEnable = address !== null;
|
|
181
|
-
const queryOptions = canEnable ? createPrimaryNamesQueryOptions(
|
|
182
|
-
|
|
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
|
|
162
|
+
import { useQuery as useQuery5 } from "@tanstack/react-query";
|
|
192
163
|
function useRecords(parameters) {
|
|
193
|
-
const {
|
|
194
|
-
const _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
|
-
|
|
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
|
|
176
|
+
import { useQuery as useQuery6 } from "@tanstack/react-query";
|
|
207
177
|
function useRegistrarActions(parameters = {}) {
|
|
208
|
-
const {
|
|
209
|
-
const
|
|
210
|
-
const queryOptions = createRegistrarActionsQueryOptions(
|
|
211
|
-
|
|
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
|
|
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 =
|
|
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 {
|
|
322
|
-
function
|
|
296
|
+
import { EnsNodeClient as EnsNodeClient2 } from "@ensnode/ensnode-sdk";
|
|
297
|
+
function EnsNodeInternalProvider({
|
|
323
298
|
children,
|
|
324
|
-
|
|
299
|
+
options
|
|
325
300
|
}) {
|
|
326
|
-
|
|
327
|
-
return createElement(ENSNodeContext.Provider, { value: memoizedConfig }, children);
|
|
301
|
+
return createElement(EnsNodeContext.Provider, { value: options }, children);
|
|
328
302
|
}
|
|
329
|
-
function
|
|
330
|
-
const { children,
|
|
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(
|
|
317
|
+
return createElement(EnsNodeInternalProvider, { options, children });
|
|
344
318
|
}
|
|
345
319
|
if (hasExistingQueryClient) {
|
|
346
|
-
return createElement(
|
|
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(
|
|
342
|
+
createElement(EnsNodeInternalProvider, { options, children })
|
|
369
343
|
);
|
|
370
344
|
}
|
|
371
|
-
function
|
|
372
|
-
const url = options?.url ? new URL(options.url) :
|
|
345
|
+
function createEnsNodeProviderOptions(options) {
|
|
346
|
+
const url = options?.url ? new URL(options.url) : EnsNodeClient2.defaultOptions().url;
|
|
373
347
|
return {
|
|
374
348
|
client: {
|
|
375
|
-
...
|
|
349
|
+
...EnsNodeClient2.defaultOptions(),
|
|
376
350
|
url
|
|
377
351
|
}
|
|
378
352
|
};
|
|
379
353
|
}
|
|
380
354
|
export {
|
|
381
355
|
ASSUME_IMMUTABLE_QUERY,
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
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
|
-
|
|
394
|
-
useENSNodeSDKConfig,
|
|
366
|
+
useEnsNodeProviderOptions,
|
|
395
367
|
useIndexingStatus,
|
|
396
368
|
useNameTokens,
|
|
397
369
|
usePrimaryName,
|