@metamask-previews/core-backend 10.0.1-preview-0a8ce9948 → 10.0.1-preview-95a403d7b
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/CHANGELOG.md +4 -0
- package/dist/api/accounts/client.d.ts.map +1 -1
- package/dist/api/accounts/client.js +15 -15
- package/dist/api/accounts/client.js.map +1 -1
- package/dist/api/base-client.d.ts +5 -3
- package/dist/api/base-client.d.ts.map +1 -1
- package/dist/api/base-client.js +5 -2
- package/dist/api/base-client.js.map +1 -1
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/prices/client.d.ts.map +1 -1
- package/dist/api/prices/client.js +18 -18
- package/dist/api/prices/client.js.map +1 -1
- package/dist/api/shared-types.d.ts +10 -0
- package/dist/api/shared-types.d.ts.map +1 -1
- package/dist/api/shared-types.js.map +1 -1
- package/dist/api/token/client.d.ts.map +1 -1
- package/dist/api/token/client.js +11 -11
- package/dist/api/token/client.js.map +1 -1
- package/dist/api/tokens/client.d.ts.map +1 -1
- package/dist/api/tokens/client.js +4 -4
- package/dist/api/tokens/client.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Add optional `apiUrls` option to `ApiPlatformClientOptions`, allowing API base URLs (accounts, prices, token, tokens) to be overridden per client instance, e.g. from client env vars; unspecified services fall back to the production `API_URLS` ([#10196](https://github.com/MetaMask/core/pull/10196))
|
|
13
|
+
|
|
10
14
|
### Changed
|
|
11
15
|
|
|
12
16
|
- **BREAKING:** Accounts API `V2SupportedNetworksResponse` now uses CAIP-2 string arrays for both `fullSupport` and `partialSupport`, replacing decimal `fullSupport` and object-shaped `partialSupport.balances` ([#10144](https://github.com/MetaMask/core/pull/10144))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/api/accounts/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,yBAAyB,EACzB,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/api/accounts/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* - NFTs
|
|
11
11
|
* - Token discovery
|
|
12
12
|
*/
|
|
13
|
-
import { BaseApiClient,
|
|
13
|
+
import { BaseApiClient, STALE_TIMES, GC_TIMES } from '../base-client.js';
|
|
14
14
|
import { getQueryOptionsOverrides } from '../shared-types.js';
|
|
15
15
|
/**
|
|
16
16
|
* Generate a short random value for the `bypassServerCache` query param. The
|
|
@@ -58,7 +58,7 @@ export class AccountsApiClient extends BaseApiClient {
|
|
|
58
58
|
getV1SupportedNetworksQueryOptions(options) {
|
|
59
59
|
return {
|
|
60
60
|
queryKey: ['accounts', 'v1SupportedNetworks'],
|
|
61
|
-
queryFn: ({ signal }) => this.fetch(
|
|
61
|
+
queryFn: ({ signal }) => this.fetch(this.apiUrls.ACCOUNTS, '/v1/supportedNetworks', { signal }),
|
|
62
62
|
...getQueryOptionsOverrides(options),
|
|
63
63
|
staleTime: options?.staleTime ?? STALE_TIMES.SUPPORTED_NETWORKS,
|
|
64
64
|
gcTime: options?.gcTime ?? GC_TIMES.EXTENDED,
|
|
@@ -82,7 +82,7 @@ export class AccountsApiClient extends BaseApiClient {
|
|
|
82
82
|
getV2SupportedNetworksQueryOptions(options) {
|
|
83
83
|
return {
|
|
84
84
|
queryKey: ['accounts', 'v2SupportedNetworks'],
|
|
85
|
-
queryFn: ({ signal }) => this.fetch(
|
|
85
|
+
queryFn: ({ signal }) => this.fetch(this.apiUrls.ACCOUNTS, '/v2/supportedNetworks', { signal }),
|
|
86
86
|
...getQueryOptionsOverrides(options),
|
|
87
87
|
staleTime: options?.staleTime ?? STALE_TIMES.SUPPORTED_NETWORKS,
|
|
88
88
|
gcTime: options?.gcTime ?? GC_TIMES.EXTENDED,
|
|
@@ -128,7 +128,7 @@ export class AccountsApiClient extends BaseApiClient {
|
|
|
128
128
|
if (accountIds.length === 0) {
|
|
129
129
|
return { activeNetworks: [] };
|
|
130
130
|
}
|
|
131
|
-
return this.fetch(
|
|
131
|
+
return this.fetch(this.apiUrls.ACCOUNTS, '/v2/activeNetworks', {
|
|
132
132
|
signal,
|
|
133
133
|
params: {
|
|
134
134
|
accountIds,
|
|
@@ -193,7 +193,7 @@ export class AccountsApiClient extends BaseApiClient {
|
|
|
193
193
|
if (address === '') {
|
|
194
194
|
return { count: 0, balances: [], unprocessedNetworks: [] };
|
|
195
195
|
}
|
|
196
|
-
return this.fetch(
|
|
196
|
+
return this.fetch(this.apiUrls.ACCOUNTS, `/v2/accounts/${address}/balances`, {
|
|
197
197
|
signal,
|
|
198
198
|
params: {
|
|
199
199
|
networks: queryOptions?.networks,
|
|
@@ -253,7 +253,7 @@ export class AccountsApiClient extends BaseApiClient {
|
|
|
253
253
|
if (accountAddresses.length === 0) {
|
|
254
254
|
return { count: 0, balances: [], unprocessedNetworks: [] };
|
|
255
255
|
}
|
|
256
|
-
return this.fetch(
|
|
256
|
+
return this.fetch(this.apiUrls.ACCOUNTS, '/v4/multiaccount/balances', {
|
|
257
257
|
signal,
|
|
258
258
|
params: {
|
|
259
259
|
accountAddresses,
|
|
@@ -310,7 +310,7 @@ export class AccountsApiClient extends BaseApiClient {
|
|
|
310
310
|
if (accountIds.length === 0) {
|
|
311
311
|
return { count: 0, unprocessedNetworks: [], balances: [] };
|
|
312
312
|
}
|
|
313
|
-
return this.fetch(
|
|
313
|
+
return this.fetch(this.apiUrls.ACCOUNTS, '/v5/multiaccount/balances', {
|
|
314
314
|
signal,
|
|
315
315
|
params: {
|
|
316
316
|
accountIds,
|
|
@@ -394,7 +394,7 @@ export class AccountsApiClient extends BaseApiClient {
|
|
|
394
394
|
balances: [],
|
|
395
395
|
};
|
|
396
396
|
}
|
|
397
|
-
return this.fetch(
|
|
397
|
+
return this.fetch(this.apiUrls.ACCOUNTS, '/v6/multiaccount/balances', {
|
|
398
398
|
signal,
|
|
399
399
|
params: {
|
|
400
400
|
accountIds,
|
|
@@ -477,7 +477,7 @@ export class AccountsApiClient extends BaseApiClient {
|
|
|
477
477
|
'v1ByHash',
|
|
478
478
|
{ chainId, txHash, options: queryOptions },
|
|
479
479
|
],
|
|
480
|
-
queryFn: ({ signal }) => this.fetch(
|
|
480
|
+
queryFn: ({ signal }) => this.fetch(this.apiUrls.ACCOUNTS, `/v1/networks/${chainId}/transactions/${txHash}`, {
|
|
481
481
|
signal,
|
|
482
482
|
params: {
|
|
483
483
|
includeLogs: queryOptions?.includeLogs,
|
|
@@ -538,7 +538,7 @@ export class AccountsApiClient extends BaseApiClient {
|
|
|
538
538
|
if (address === '') {
|
|
539
539
|
return { data: [], pageInfo: { count: 0, hasNextPage: false } };
|
|
540
540
|
}
|
|
541
|
-
return this.fetch(
|
|
541
|
+
return this.fetch(this.apiUrls.ACCOUNTS, `/v1/accounts/${address}/transactions`, {
|
|
542
542
|
signal,
|
|
543
543
|
params: {
|
|
544
544
|
networks: queryOptions?.chainIds,
|
|
@@ -609,7 +609,7 @@ export class AccountsApiClient extends BaseApiClient {
|
|
|
609
609
|
},
|
|
610
610
|
},
|
|
611
611
|
],
|
|
612
|
-
queryFn: ({ signal }) => this.fetch(
|
|
612
|
+
queryFn: ({ signal }) => this.fetch(this.apiUrls.ACCOUNTS, '/v4/multiaccount/transactions', {
|
|
613
613
|
signal,
|
|
614
614
|
params: {
|
|
615
615
|
accountAddresses,
|
|
@@ -669,7 +669,7 @@ export class AccountsApiClient extends BaseApiClient {
|
|
|
669
669
|
lang: params.lang,
|
|
670
670
|
},
|
|
671
671
|
],
|
|
672
|
-
queryFn: ({ pageParam, signal, }) => this.fetch(
|
|
672
|
+
queryFn: ({ pageParam, signal, }) => this.fetch(this.apiUrls.ACCOUNTS, '/v4/multiaccount/transactions', {
|
|
673
673
|
signal,
|
|
674
674
|
params: {
|
|
675
675
|
accountAddresses: params.accountAddresses,
|
|
@@ -730,7 +730,7 @@ export class AccountsApiClient extends BaseApiClient {
|
|
|
730
730
|
getV1AccountRelationshipQueryOptions(chainId, from, to, options) {
|
|
731
731
|
return {
|
|
732
732
|
queryKey: ['accounts', 'v1Relationship', chainId, from, to],
|
|
733
|
-
queryFn: async ({ signal, }) => this.fetch(
|
|
733
|
+
queryFn: async ({ signal, }) => this.fetch(this.apiUrls.ACCOUNTS, `/v1/networks/${chainId}/accounts/${from}/relationships/${to}`, { signal }),
|
|
734
734
|
...getQueryOptionsOverrides(options),
|
|
735
735
|
staleTime: options?.staleTime ?? STALE_TIMES.DEFAULT,
|
|
736
736
|
gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,
|
|
@@ -778,7 +778,7 @@ export class AccountsApiClient extends BaseApiClient {
|
|
|
778
778
|
if (address === '') {
|
|
779
779
|
return { data: [], pageInfo: { count: 0, hasNextPage: false } };
|
|
780
780
|
}
|
|
781
|
-
return this.fetch(
|
|
781
|
+
return this.fetch(this.apiUrls.ACCOUNTS, `/v2/accounts/${address}/nfts`, {
|
|
782
782
|
signal,
|
|
783
783
|
params: {
|
|
784
784
|
networks: queryOptions?.networks,
|
|
@@ -836,7 +836,7 @@ export class AccountsApiClient extends BaseApiClient {
|
|
|
836
836
|
if (address === '') {
|
|
837
837
|
return { data: [] };
|
|
838
838
|
}
|
|
839
|
-
return this.fetch(
|
|
839
|
+
return this.fetch(this.apiUrls.ACCOUNTS, `/v2/accounts/${address}/tokens`, {
|
|
840
840
|
signal,
|
|
841
841
|
params: { networks: queryOptions?.networks },
|
|
842
842
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/api/accounts/client.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Accounts API Client - accounts.api.cx.metamask.io\n *\n * Handles all account-related API calls including:\n * - Supported networks\n * - Active networks\n * - Balances (v2, v4, v5)\n * - Transactions\n * - Relationships\n * - NFTs\n * - Token discovery\n */\n\nimport type {\n FetchInfiniteQueryOptions,\n FetchQueryOptions,\n QueryFunctionContext,\n} from '@tanstack/query-core';\n\nimport {\n BaseApiClient,\n API_URLS,\n STALE_TIMES,\n GC_TIMES,\n} from '../base-client.js';\nimport { getQueryOptionsOverrides } from '../shared-types.js';\nimport type { FetchOptions } from '../shared-types.js';\nimport type {\n V1SupportedNetworksResponse,\n V2SupportedNetworksResponse,\n V2ActiveNetworksResponse,\n V2BalancesResponse,\n V4BalancesResponse,\n V5BalancesResponse,\n V6BalancesResponse,\n V6VsCurrency,\n V1TransactionByHashResponse,\n V1AccountTransactionsResponse,\n V4MultiAccountTransactionsResponse,\n V1AccountRelationshipResult,\n V2NftsResponse,\n V2TokensResponse,\n} from './types.js';\n\n/**\n * Generate a short random value for the `bypassServerCache` query param. The\n * Accounts API's server-side cache keys on the full URL including query\n * params, so a unique value forces a cache miss (\"hard refresh\").\n *\n * @returns An 8-character alphanumeric string.\n */\nfunction generateBypassServerCache(): string {\n return Math.random().toString(36).slice(2, 10).padEnd(8, '0');\n}\n\n/**\n * Accounts API Client.\n * Provides methods for interacting with the Accounts API.\n */\nexport class AccountsApiClient extends BaseApiClient {\n // ==========================================================================\n // CACHE MANAGEMENT\n // ==========================================================================\n\n /**\n * Invalidate all balance queries.\n */\n async invalidateBalances(): Promise<void> {\n await this.queryClient.invalidateQueries({\n queryKey: ['accounts', 'balances'],\n });\n }\n\n /**\n * Invalidate all account queries.\n */\n async invalidateAccounts(): Promise<void> {\n await this.queryClient.invalidateQueries({\n queryKey: ['accounts'],\n });\n }\n\n // ==========================================================================\n // SUPPORTED NETWORKS\n // ==========================================================================\n\n /**\n * Returns the TanStack Query options object for v1 supported networks.\n *\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV1SupportedNetworksQueryOptions(\n options?: FetchOptions,\n ): FetchQueryOptions<V1SupportedNetworksResponse> {\n return {\n queryKey: ['accounts', 'v1SupportedNetworks'],\n queryFn: ({ signal }: QueryFunctionContext) =>\n this.fetch<V1SupportedNetworksResponse>(\n API_URLS.ACCOUNTS,\n '/v1/supportedNetworks',\n { signal },\n ),\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.SUPPORTED_NETWORKS,\n gcTime: options?.gcTime ?? GC_TIMES.EXTENDED,\n };\n }\n\n /**\n * Get list of supported networks (v1 endpoint).\n *\n * @param options - Fetch options including cache settings.\n * @returns The list of supported networks.\n */\n async fetchV1SupportedNetworks(\n options?: FetchOptions,\n ): Promise<V1SupportedNetworksResponse> {\n return this.queryClient.fetchQuery(\n this.getV1SupportedNetworksQueryOptions(options),\n );\n }\n\n /**\n * Returns the TanStack Query options object for v2 supported networks.\n *\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV2SupportedNetworksQueryOptions(\n options?: FetchOptions,\n ): FetchQueryOptions<V2SupportedNetworksResponse> {\n return {\n queryKey: ['accounts', 'v2SupportedNetworks'],\n queryFn: ({ signal }: QueryFunctionContext) =>\n this.fetch<V2SupportedNetworksResponse>(\n API_URLS.ACCOUNTS,\n '/v2/supportedNetworks',\n { signal },\n ),\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.SUPPORTED_NETWORKS,\n gcTime: options?.gcTime ?? GC_TIMES.EXTENDED,\n };\n }\n\n /**\n * Get list of supported networks (v2 endpoint).\n * Returns CAIP-2 chain IDs in both `fullSupport` and `partialSupport`.\n *\n * @param options - Fetch options including cache settings.\n * @returns The list of supported networks.\n */\n async fetchV2SupportedNetworks(\n options?: FetchOptions,\n ): Promise<V2SupportedNetworksResponse> {\n return this.queryClient.fetchQuery(\n this.getV2SupportedNetworksQueryOptions(options),\n );\n }\n\n // ==========================================================================\n // ACTIVE NETWORKS\n // ==========================================================================\n\n /**\n * Returns the TanStack Query options object for v2 active networks.\n *\n * @param accountIds - Array of CAIP-10 account IDs.\n * @param queryOptions - Query filter options.\n * @param queryOptions.filterMMListTokens - Whether to filter MM list tokens.\n * @param queryOptions.networks - Networks to filter by.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV2ActiveNetworksQueryOptions(\n accountIds: string[],\n queryOptions?: { filterMMListTokens?: boolean; networks?: string[] },\n options?: FetchOptions,\n ): FetchQueryOptions<V2ActiveNetworksResponse> {\n return {\n queryKey: [\n 'accounts',\n 'v2ActiveNetworks',\n {\n accountIds: [...accountIds].sort(),\n options: queryOptions && {\n ...queryOptions,\n networks:\n queryOptions.networks && [...queryOptions.networks].sort(),\n },\n },\n ],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V2ActiveNetworksResponse> => {\n if (accountIds.length === 0) {\n return { activeNetworks: [] };\n }\n return this.fetch<V2ActiveNetworksResponse>(\n API_URLS.ACCOUNTS,\n '/v2/activeNetworks',\n {\n signal,\n params: {\n accountIds,\n filterMMListTokens: queryOptions?.filterMMListTokens,\n networks: queryOptions?.networks,\n },\n },\n );\n },\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.NETWORKS,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get active networks by CAIP-10 account IDs (v2 endpoint).\n *\n * @param accountIds - Array of CAIP-10 account IDs.\n * @param queryOptions - Query filter options.\n * @param queryOptions.filterMMListTokens - Whether to filter MM list tokens.\n * @param queryOptions.networks - Networks to filter by.\n * @param options - Fetch options including cache settings.\n * @returns The active networks response.\n */\n async fetchV2ActiveNetworks(\n accountIds: string[],\n queryOptions?: { filterMMListTokens?: boolean; networks?: string[] },\n options?: FetchOptions,\n ): Promise<V2ActiveNetworksResponse> {\n if (accountIds.length === 0) {\n return { activeNetworks: [] };\n }\n return this.queryClient.fetchQuery(\n this.getV2ActiveNetworksQueryOptions(accountIds, queryOptions, options),\n );\n }\n\n // ==========================================================================\n // BALANCES\n // ==========================================================================\n\n /**\n * Returns the TanStack Query options object for v2 balances.\n *\n * @param address - The account address.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Networks to filter by.\n * @param queryOptions.filterSupportedTokens - Whether to filter supported tokens.\n * @param queryOptions.includeTokenAddresses - Token addresses to include.\n * @param queryOptions.includeStakedAssets - Whether to include staked assets.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV2BalancesQueryOptions(\n address: string,\n queryOptions?: {\n networks?: number[];\n filterSupportedTokens?: boolean;\n includeTokenAddresses?: string[];\n includeStakedAssets?: boolean;\n },\n options?: FetchOptions,\n ): FetchQueryOptions<V2BalancesResponse> {\n return {\n queryKey: [\n 'accounts',\n 'balances',\n 'v2',\n {\n address,\n options: queryOptions && {\n ...queryOptions,\n networks:\n queryOptions.networks && [...queryOptions.networks].sort(),\n includeTokenAddresses:\n queryOptions.includeTokenAddresses &&\n [...queryOptions.includeTokenAddresses].sort(),\n },\n },\n ],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V2BalancesResponse> => {\n if (address === '') {\n return { count: 0, balances: [], unprocessedNetworks: [] };\n }\n return this.fetch<V2BalancesResponse>(\n API_URLS.ACCOUNTS,\n `/v2/accounts/${address}/balances`,\n {\n signal,\n params: {\n networks: queryOptions?.networks,\n filterSupportedTokens: queryOptions?.filterSupportedTokens,\n includeTokenAddresses: queryOptions?.includeTokenAddresses,\n includeStakedAssets: queryOptions?.includeStakedAssets,\n },\n },\n );\n },\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.BALANCES,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get account balances for a single address (v2 endpoint).\n *\n * @param address - The account address.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Networks to filter by.\n * @param queryOptions.filterSupportedTokens - Whether to filter supported tokens.\n * @param queryOptions.includeTokenAddresses - Token addresses to include.\n * @param queryOptions.includeStakedAssets - Whether to include staked assets.\n * @param options - Fetch options including cache settings.\n * @returns The account balances response.\n */\n async fetchV2Balances(\n address: string,\n queryOptions?: {\n networks?: number[];\n filterSupportedTokens?: boolean;\n includeTokenAddresses?: string[];\n includeStakedAssets?: boolean;\n },\n options?: FetchOptions,\n ): Promise<V2BalancesResponse> {\n if (address === '') {\n return { count: 0, balances: [], unprocessedNetworks: [] };\n }\n return this.queryClient.fetchQuery(\n this.getV2BalancesQueryOptions(address, queryOptions, options),\n );\n }\n\n /**\n * Returns the TanStack Query options object for v4 multi-account balances.\n *\n * @param accountAddresses - Array of account addresses.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Networks to filter by.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV4MultiAccountBalancesQueryOptions(\n accountAddresses: string[],\n queryOptions?: { networks?: number[] },\n options?: FetchOptions,\n ): FetchQueryOptions<V4BalancesResponse> {\n return {\n queryKey: [\n 'accounts',\n 'balances',\n 'v4',\n {\n accountAddresses: [...accountAddresses].sort(),\n options: queryOptions && {\n ...queryOptions,\n networks:\n queryOptions.networks && [...queryOptions.networks].sort(),\n },\n },\n ],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V4BalancesResponse> => {\n if (accountAddresses.length === 0) {\n return { count: 0, balances: [], unprocessedNetworks: [] };\n }\n return this.fetch<V4BalancesResponse>(\n API_URLS.ACCOUNTS,\n '/v4/multiaccount/balances',\n {\n signal,\n params: {\n accountAddresses,\n networks: queryOptions?.networks,\n },\n },\n );\n },\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.BALANCES,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get balances for multiple accounts (v4 endpoint).\n *\n * @param accountAddresses - Array of account addresses.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Networks to filter by.\n * @param options - Fetch options including cache settings.\n * @returns The multi-account balances response.\n */\n async fetchV4MultiAccountBalances(\n accountAddresses: string[],\n queryOptions?: { networks?: number[] },\n options?: FetchOptions,\n ): Promise<V4BalancesResponse> {\n if (accountAddresses.length === 0) {\n return { count: 0, balances: [], unprocessedNetworks: [] };\n }\n return this.queryClient.fetchQuery(\n this.getV4MultiAccountBalancesQueryOptions(\n accountAddresses,\n queryOptions,\n options,\n ),\n );\n }\n\n /**\n * Returns the TanStack Query options object for v5 multi-account balances.\n *\n * @param accountIds - Array of CAIP-10 account IDs.\n * @param queryOptions - Query filter options.\n * @param queryOptions.filterMMListTokens - Whether to filter MM list tokens.\n * @param queryOptions.networks - Networks to filter by.\n * @param queryOptions.includeStakedAssets - Whether to include staked assets.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV5MultiAccountBalancesQueryOptions(\n accountIds: string[],\n queryOptions?: {\n filterMMListTokens?: boolean;\n networks?: string[];\n includeStakedAssets?: boolean;\n },\n options?: FetchOptions,\n ): FetchQueryOptions<V5BalancesResponse> {\n return {\n queryKey: [\n 'accounts',\n 'balances',\n 'v5',\n {\n accountIds: [...accountIds].sort(),\n options: queryOptions && {\n ...queryOptions,\n networks:\n queryOptions.networks && [...queryOptions.networks].sort(),\n },\n },\n ],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V5BalancesResponse> => {\n if (accountIds.length === 0) {\n return { count: 0, unprocessedNetworks: [], balances: [] };\n }\n return this.fetch<V5BalancesResponse>(\n API_URLS.ACCOUNTS,\n '/v5/multiaccount/balances',\n {\n signal,\n params: {\n accountIds,\n networks: queryOptions?.networks,\n filterMMListTokens: queryOptions?.filterMMListTokens,\n includeStakedAssets: queryOptions?.includeStakedAssets,\n bypassServerCache: options?.bypassServerCache\n ? generateBypassServerCache()\n : undefined,\n },\n },\n );\n },\n ...getQueryOptionsOverrides(options),\n staleTime:\n options?.staleTime ??\n (options?.bypassServerCache ? 0 : STALE_TIMES.BALANCES),\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get balances for multiple accounts using CAIP-10 IDs (v5 endpoint).\n *\n * @param accountIds - Array of CAIP-10 account IDs.\n * @param queryOptions - Query filter options.\n * @param queryOptions.filterMMListTokens - Whether to filter MM list tokens.\n * @param queryOptions.networks - Networks to filter by.\n * @param queryOptions.includeStakedAssets - Whether to include staked assets.\n * @param options - Fetch options including cache settings.\n * @returns The multi-account balances response.\n */\n async fetchV5MultiAccountBalances(\n accountIds: string[],\n queryOptions?: {\n filterMMListTokens?: boolean;\n networks?: string[];\n includeStakedAssets?: boolean;\n },\n options?: FetchOptions,\n ): Promise<V5BalancesResponse> {\n if (accountIds.length === 0) {\n return { count: 0, unprocessedNetworks: [], balances: [] };\n }\n return this.queryClient.fetchQuery(\n this.getV5MultiAccountBalancesQueryOptions(\n accountIds,\n queryOptions,\n options,\n ),\n );\n }\n\n /**\n * Returns the TanStack Query options object for v6 multi-account balances.\n * The v6 endpoint returns token balances and, optionally, DeFi positions and\n * spot prices.\n *\n * @param accountIds - Array of CAIP-10 account IDs.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Comma-separated CAIP-2 chain IDs to filter by.\n * @param queryOptions.filterSupportedTokens - Whether to filter the assets to only tokens existing in the Token API.\n * @param queryOptions.startTimestamp - Start timestamp (epoch) from which to return results.\n * @param queryOptions.endTimestamp - End timestamp (epoch) for which to return results.\n * @param queryOptions.includeLabels - Whether to include asset metadata labels in the response.\n * @param queryOptions.includeCanonicalHead - Whether to include the canonical head asset ID in the response.\n * @param queryOptions.includeDeFiBalances - Whether to include DeFi positions (token balances are always returned).\n * @param queryOptions.forceFetchDeFiPositions - Whether to fetch DeFi positions for all accounts, skipping the cached non-DeFi-user check.\n * @param queryOptions.includePrices - Whether to include spot prices for each token and DeFi position asset.\n * @param queryOptions.vsCurrency - Quote currency for spot prices when `includePrices` is true (default `usd`).\n * @param queryOptions.includeAssetIds - ERC-20 CAIP-19 asset IDs to confirm detection for; undetected IDs are returned in `unprocessedIncludeAssetIds`.\n * @param queryOptions.excludeAssetIds - ERC-20 CAIP-19 asset IDs to exclude from balance results.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV6MultiAccountBalancesQueryOptions(\n accountIds: string[],\n queryOptions?: {\n networks?: string[];\n filterSupportedTokens?: boolean;\n startTimestamp?: number;\n endTimestamp?: number;\n includeLabels?: boolean;\n includeCanonicalHead?: boolean;\n includeDeFiBalances?: boolean;\n forceFetchDeFiPositions?: boolean;\n includePrices?: boolean;\n vsCurrency?: V6VsCurrency;\n includeAssetIds?: string[];\n excludeAssetIds?: string[];\n },\n options?: FetchOptions,\n ): FetchQueryOptions<V6BalancesResponse> {\n return {\n queryKey: [\n 'accounts',\n 'balances',\n 'v6',\n {\n accountIds: [...accountIds].sort(),\n options: queryOptions && {\n ...queryOptions,\n networks:\n queryOptions.networks && [...queryOptions.networks].sort(),\n includeAssetIds:\n queryOptions.includeAssetIds &&\n [...queryOptions.includeAssetIds].sort(),\n excludeAssetIds:\n queryOptions.excludeAssetIds &&\n [...queryOptions.excludeAssetIds].sort(),\n },\n },\n ],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V6BalancesResponse> => {\n if (accountIds.length === 0) {\n return {\n unprocessedNetworks: [],\n unprocessedIncludeAssetIds: [],\n balances: [],\n };\n }\n return this.fetch<V6BalancesResponse>(\n API_URLS.ACCOUNTS,\n '/v6/multiaccount/balances',\n {\n signal,\n params: {\n accountIds,\n networks: queryOptions?.networks,\n filterSupportedTokens: queryOptions?.filterSupportedTokens,\n startTimestamp: queryOptions?.startTimestamp,\n endTimestamp: queryOptions?.endTimestamp,\n includeLabels: queryOptions?.includeLabels,\n includeCanonicalHead: queryOptions?.includeCanonicalHead,\n includeDeFiBalances: queryOptions?.includeDeFiBalances,\n forceFetchDeFiPositions: queryOptions?.forceFetchDeFiPositions,\n includePrices: queryOptions?.includePrices,\n vsCurrency: queryOptions?.vsCurrency,\n includeAssetIds: queryOptions?.includeAssetIds,\n excludeAssetIds: queryOptions?.excludeAssetIds,\n bypassServerCache: options?.bypassServerCache\n ? generateBypassServerCache()\n : undefined,\n },\n },\n );\n },\n ...getQueryOptionsOverrides(options),\n staleTime:\n options?.staleTime ??\n (options?.bypassServerCache ? 0 : STALE_TIMES.BALANCES),\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get balances and DeFi positions for multiple accounts using CAIP-10 IDs\n * (v6 endpoint).\n *\n * @param accountIds - Array of CAIP-10 account IDs.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Comma-separated CAIP-2 chain IDs to filter by.\n * @param queryOptions.filterSupportedTokens - Whether to filter the assets to only tokens existing in the Token API.\n * @param queryOptions.startTimestamp - Start timestamp (epoch) from which to return results.\n * @param queryOptions.endTimestamp - End timestamp (epoch) for which to return results.\n * @param queryOptions.includeLabels - Whether to include asset metadata labels in the response.\n * @param queryOptions.includeCanonicalHead - Whether to include the canonical head asset ID in the response.\n * @param queryOptions.includeDeFiBalances - Whether to include DeFi positions (token balances are always returned).\n * @param queryOptions.forceFetchDeFiPositions - Whether to fetch DeFi positions for all accounts, skipping the cached non-DeFi-user check.\n * @param queryOptions.includePrices - Whether to include spot prices for each token and DeFi position asset.\n * @param queryOptions.vsCurrency - Quote currency for spot prices when `includePrices` is true (default `usd`).\n * @param queryOptions.includeAssetIds - ERC-20 CAIP-19 asset IDs to confirm detection for; undetected IDs are returned in `unprocessedIncludeAssetIds`.\n * @param queryOptions.excludeAssetIds - ERC-20 CAIP-19 asset IDs to exclude from balance results.\n * @param options - Fetch options including cache settings.\n * @returns The multi-account balances and DeFi positions response.\n */\n async fetchV6MultiAccountBalances(\n accountIds: string[],\n queryOptions?: {\n networks?: string[];\n filterSupportedTokens?: boolean;\n startTimestamp?: number;\n endTimestamp?: number;\n includeLabels?: boolean;\n includeCanonicalHead?: boolean;\n includeDeFiBalances?: boolean;\n forceFetchDeFiPositions?: boolean;\n includePrices?: boolean;\n vsCurrency?: V6VsCurrency;\n includeAssetIds?: string[];\n excludeAssetIds?: string[];\n },\n options?: FetchOptions,\n ): Promise<V6BalancesResponse> {\n if (accountIds.length === 0) {\n return {\n unprocessedNetworks: [],\n unprocessedIncludeAssetIds: [],\n balances: [],\n };\n }\n return this.queryClient.fetchQuery(\n this.getV6MultiAccountBalancesQueryOptions(\n accountIds,\n queryOptions,\n options,\n ),\n );\n }\n\n // ==========================================================================\n // TRANSACTIONS\n // ==========================================================================\n\n /**\n * Returns the TanStack Query options object for v1 transaction by hash.\n *\n * @param chainId - The chain ID.\n * @param txHash - The transaction hash.\n * @param queryOptions - Query filter options.\n * @param queryOptions.includeLogs - Whether to include logs.\n * @param queryOptions.includeValueTransfers - Whether to include value transfers.\n * @param queryOptions.includeTxMetadata - Whether to include transaction metadata.\n * @param queryOptions.lang - Language for metadata.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV1TransactionByHashQueryOptions(\n chainId: number,\n txHash: string,\n queryOptions?: {\n includeLogs?: boolean;\n includeValueTransfers?: boolean;\n includeTxMetadata?: boolean;\n lang?: string;\n },\n options?: FetchOptions,\n ): FetchQueryOptions<V1TransactionByHashResponse> {\n return {\n queryKey: [\n 'accounts',\n 'transactions',\n 'v1ByHash',\n { chainId, txHash, options: queryOptions },\n ],\n queryFn: ({ signal }: QueryFunctionContext) =>\n this.fetch<V1TransactionByHashResponse>(\n API_URLS.ACCOUNTS,\n `/v1/networks/${chainId}/transactions/${txHash}`,\n {\n signal,\n params: {\n includeLogs: queryOptions?.includeLogs,\n includeValueTransfers: queryOptions?.includeValueTransfers,\n includeTxMetadata: queryOptions?.includeTxMetadata,\n lang: queryOptions?.lang,\n },\n },\n ),\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.TRANSACTIONS,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get a specific transaction by hash (v1 endpoint).\n *\n * @param chainId - The chain ID.\n * @param txHash - The transaction hash.\n * @param queryOptions - Query filter options.\n * @param queryOptions.includeLogs - Whether to include logs.\n * @param queryOptions.includeValueTransfers - Whether to include value transfers.\n * @param queryOptions.includeTxMetadata - Whether to include transaction metadata.\n * @param queryOptions.lang - Language for metadata.\n * @param options - Fetch options including cache settings.\n * @returns The transaction details.\n */\n async fetchV1TransactionByHash(\n chainId: number,\n txHash: string,\n queryOptions?: {\n includeLogs?: boolean;\n includeValueTransfers?: boolean;\n includeTxMetadata?: boolean;\n lang?: string;\n },\n options?: FetchOptions,\n ): Promise<V1TransactionByHashResponse> {\n return this.queryClient.fetchQuery(\n this.getV1TransactionByHashQueryOptions(\n chainId,\n txHash,\n queryOptions,\n options,\n ),\n );\n }\n\n /**\n * Returns the TanStack Query options object for v1 account transactions.\n *\n * @param address - The account address.\n * @param queryOptions - Query filter options.\n * @param queryOptions.chainIds - Chain IDs to filter by.\n * @param queryOptions.cursor - Pagination cursor.\n * @param queryOptions.startTimestamp - Start timestamp filter.\n * @param queryOptions.endTimestamp - End timestamp filter.\n * @param queryOptions.sortDirection - Sort direction (ASC/DESC).\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useInfiniteQuery, useSuspenseQuery, etc.\n */\n getV1AccountTransactionsQueryOptions(\n address: string,\n queryOptions?: {\n chainIds?: string[];\n cursor?: string;\n startTimestamp?: number;\n endTimestamp?: number;\n sortDirection?: 'ASC' | 'DESC';\n },\n options?: FetchOptions,\n ): FetchQueryOptions<V1AccountTransactionsResponse> {\n return {\n queryKey: [\n 'accounts',\n 'transactions',\n 'v1Account',\n {\n address,\n options: queryOptions && {\n ...queryOptions,\n chainIds:\n queryOptions.chainIds && [...queryOptions.chainIds].sort(),\n },\n },\n ],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V1AccountTransactionsResponse> => {\n if (address === '') {\n return { data: [], pageInfo: { count: 0, hasNextPage: false } };\n }\n return this.fetch<V1AccountTransactionsResponse>(\n API_URLS.ACCOUNTS,\n `/v1/accounts/${address}/transactions`,\n {\n signal,\n params: {\n networks: queryOptions?.chainIds,\n cursor: queryOptions?.cursor,\n startTimestamp: queryOptions?.startTimestamp,\n endTimestamp: queryOptions?.endTimestamp,\n sortDirection: queryOptions?.sortDirection,\n },\n },\n );\n },\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.TRANSACTIONS,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get account transactions (v1 endpoint).\n *\n * @param address - The account address.\n * @param queryOptions - Query filter options.\n * @param queryOptions.chainIds - Chain IDs to filter by.\n * @param queryOptions.cursor - Pagination cursor.\n * @param queryOptions.startTimestamp - Start timestamp filter.\n * @param queryOptions.endTimestamp - End timestamp filter.\n * @param queryOptions.sortDirection - Sort direction (ASC/DESC).\n * @param options - Fetch options including cache settings.\n * @returns The account transactions response.\n */\n async fetchV1AccountTransactions(\n address: string,\n queryOptions?: {\n chainIds?: string[];\n cursor?: string;\n startTimestamp?: number;\n endTimestamp?: number;\n sortDirection?: 'ASC' | 'DESC';\n },\n options?: FetchOptions,\n ): Promise<V1AccountTransactionsResponse> {\n if (address === '') {\n return { data: [], pageInfo: { count: 0, hasNextPage: false } };\n }\n return this.queryClient.fetchQuery(\n this.getV1AccountTransactionsQueryOptions(address, queryOptions, options),\n );\n }\n\n /**\n * Returns the TanStack Query options object for v4 multi-account transactions.\n * Use this with `queryClient.fetchQuery()`, `useQuery()`, `useInfiniteQuery()`,\n * `useSuspenseQuery()`, etc. for flexibility across query permutations.\n *\n * @param accountAddresses - Array of CAIP-10 account addresses.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Comma-separated CAIP-2 network IDs.\n * @param queryOptions.startTimestamp - Start timestamp (epoch) from which to return results.\n * @param queryOptions.endTimestamp - End timestamp (epoch) for which to return results.\n * @param queryOptions.cursor - Pagination cursor (deprecated, use after).\n * @param queryOptions.limit - Maximum number of transactions to request (default 50).\n * @param queryOptions.after - JWT containing the endCursor for the query.\n * @param queryOptions.before - JWT containing the startCursor for the query.\n * @param queryOptions.sortDirection - Sort direction (ASC/DESC).\n * @param queryOptions.includeLogs - Whether to include logs.\n * @param queryOptions.includeTxMetadata - Whether to include transaction metadata.\n * @param queryOptions.maxLogsPerTx - Maximum number of logs per transaction.\n * @param queryOptions.lang - Language for transaction category (default \"en\").\n * @param options - Fetch options including cache settings.\n * @returns Query options object compatible with fetchQuery/useQuery/useInfiniteQuery.\n */\n getV4MultiAccountTransactionsQueryOptions(\n accountAddresses: string[],\n queryOptions?: {\n networks?: string[];\n startTimestamp?: number;\n endTimestamp?: number;\n cursor?: string;\n limit?: number;\n after?: string;\n before?: string;\n sortDirection?: 'ASC' | 'DESC';\n includeLogs?: boolean;\n includeTxMetadata?: boolean;\n maxLogsPerTx?: number;\n lang?: string;\n },\n options?: FetchOptions,\n ): FetchQueryOptions<V4MultiAccountTransactionsResponse> {\n return {\n queryKey: [\n 'accounts',\n 'transactions',\n 'v4MultiAccount',\n {\n accountAddresses: [...accountAddresses].sort(),\n options: queryOptions && {\n ...queryOptions,\n networks:\n queryOptions.networks && [...queryOptions.networks].sort(),\n },\n },\n ],\n queryFn: ({ signal }: QueryFunctionContext) =>\n this.fetch<V4MultiAccountTransactionsResponse>(\n API_URLS.ACCOUNTS,\n '/v4/multiaccount/transactions',\n {\n signal,\n params: {\n accountAddresses,\n networks: queryOptions?.networks,\n startTimestamp: queryOptions?.startTimestamp,\n endTimestamp: queryOptions?.endTimestamp,\n cursor: queryOptions?.cursor,\n limit: queryOptions?.limit,\n after: queryOptions?.after,\n before: queryOptions?.before,\n sortDirection: queryOptions?.sortDirection,\n includeLogs: queryOptions?.includeLogs,\n includeTxMetadata: queryOptions?.includeTxMetadata,\n maxLogsPerTx: queryOptions?.maxLogsPerTx,\n lang: queryOptions?.lang,\n },\n },\n ),\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.TRANSACTIONS,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Returns TanStack Query options for v4 multi-account transactions,\n * designed for use with `useInfiniteQuery`.\n *\n * @param params - API endpoint parameters (excluding pagination cursors).\n * @param params.accountAddresses - Array of CAIP-10 account addresses.\n * @param params.networks - CAIP-2 network IDs to filter by.\n * @param params.startTimestamp - Start timestamp (epoch).\n * @param params.endTimestamp - End timestamp (epoch).\n * @param params.limit - Max transactions per page (default 50).\n * @param params.sortDirection - Sort direction (ASC/DESC).\n * @param params.includeLogs - Whether to include logs.\n * @param params.includeTxMetadata - Whether to include transaction metadata.\n * @param params.maxLogsPerTx - Max logs per transaction.\n * @param params.lang - Language for transaction category (default \"en\").\n * @param options - Fetch options including cache settings.\n * @returns Options object compatible with `useInfiniteQuery`.\n */\n getV4MultiAccountTransactionsInfiniteQueryOptions(\n params: {\n accountAddresses: string[];\n networks?: string[];\n startTimestamp?: number;\n endTimestamp?: number;\n limit?: number;\n sortDirection?: 'ASC' | 'DESC';\n includeLogs?: boolean;\n includeTxMetadata?: boolean;\n maxLogsPerTx?: number;\n lang?: string;\n },\n options?: FetchOptions,\n ): FetchInfiniteQueryOptions<\n V4MultiAccountTransactionsResponse,\n Error,\n V4MultiAccountTransactionsResponse,\n readonly unknown[],\n string | undefined\n > {\n return {\n queryKey: [\n 'accounts',\n 'transactions',\n 'v4MultiAccount',\n {\n accountAddresses: [...params.accountAddresses].sort(),\n networks: params.networks && [...params.networks].sort(),\n startTimestamp: params.startTimestamp,\n endTimestamp: params.endTimestamp,\n limit: params.limit,\n sortDirection: params.sortDirection,\n includeLogs: params.includeLogs,\n includeTxMetadata: params.includeTxMetadata,\n maxLogsPerTx: params.maxLogsPerTx,\n lang: params.lang,\n },\n ] as const,\n queryFn: ({\n pageParam,\n signal,\n }: {\n pageParam?: string;\n signal?: AbortSignal;\n }) =>\n this.fetch<V4MultiAccountTransactionsResponse>(\n API_URLS.ACCOUNTS,\n '/v4/multiaccount/transactions',\n {\n signal,\n params: {\n accountAddresses: params.accountAddresses,\n networks: params.networks,\n startTimestamp: params.startTimestamp,\n endTimestamp: params.endTimestamp,\n cursor: pageParam,\n limit: params.limit,\n sortDirection: params.sortDirection,\n includeLogs: params.includeLogs,\n includeTxMetadata: params.includeTxMetadata,\n maxLogsPerTx: params.maxLogsPerTx,\n lang: params.lang,\n },\n },\n ),\n getNextPageParam: ({ pageInfo }: V4MultiAccountTransactionsResponse) =>\n pageInfo.hasNextPage ? pageInfo.endCursor : undefined,\n initialPageParam: options?.initialPageParam,\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.TRANSACTIONS,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get multi-account transactions (v4 endpoint).\n *\n * @param accountAddresses - Array of CAIP-10 account addresses.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Comma-separated CAIP-2 network IDs.\n * @param queryOptions.startTimestamp - Start timestamp (epoch) from which to return results.\n * @param queryOptions.endTimestamp - End timestamp (epoch) for which to return results.\n * @param queryOptions.cursor - Pagination cursor (deprecated, use after).\n * @param queryOptions.limit - Maximum number of transactions to request (default 50).\n * @param queryOptions.after - JWT containing the endCursor for the query.\n * @param queryOptions.before - JWT containing the startCursor for the query.\n * @param queryOptions.sortDirection - Sort direction (ASC/DESC).\n * @param queryOptions.includeLogs - Whether to include logs.\n * @param queryOptions.includeTxMetadata - Whether to include transaction metadata.\n * @param queryOptions.maxLogsPerTx - Maximum number of logs per transaction.\n * @param queryOptions.lang - Language for transaction category (default \"en\").\n * @param options - Fetch options including cache settings.\n * @returns The multi-account transactions response.\n */\n async fetchV4MultiAccountTransactions(\n accountAddresses: string[],\n queryOptions?: {\n networks?: string[];\n startTimestamp?: number;\n endTimestamp?: number;\n cursor?: string;\n limit?: number;\n after?: string;\n before?: string;\n sortDirection?: 'ASC' | 'DESC';\n includeLogs?: boolean;\n includeTxMetadata?: boolean;\n maxLogsPerTx?: number;\n lang?: string;\n },\n options?: FetchOptions,\n ): Promise<V4MultiAccountTransactionsResponse> {\n return this.queryClient.fetchQuery(\n this.getV4MultiAccountTransactionsQueryOptions(\n accountAddresses,\n queryOptions,\n options,\n ),\n );\n }\n\n // ==========================================================================\n // RELATIONSHIPS\n // ==========================================================================\n\n /**\n * Returns the TanStack Query options object for v1 account relationship.\n *\n * @param chainId - The chain ID.\n * @param from - The from address.\n * @param to - The to address.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV1AccountRelationshipQueryOptions(\n chainId: number,\n from: string,\n to: string,\n options?: FetchOptions,\n ): FetchQueryOptions<V1AccountRelationshipResult> {\n return {\n queryKey: ['accounts', 'v1Relationship', chainId, from, to],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V1AccountRelationshipResult> =>\n this.fetch<V1AccountRelationshipResult>(\n API_URLS.ACCOUNTS,\n `/v1/networks/${chainId}/accounts/${from}/relationships/${to}`,\n { signal },\n ),\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.DEFAULT,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get account address relationship (v1 endpoint).\n *\n * @param chainId - The chain ID.\n * @param from - The from address.\n * @param to - The to address.\n * @param options - Fetch options including cache settings.\n * @returns The account relationship result.\n */\n async fetchV1AccountRelationship(\n chainId: number,\n from: string,\n to: string,\n options?: FetchOptions,\n ): Promise<V1AccountRelationshipResult> {\n return this.queryClient.fetchQuery(\n this.getV1AccountRelationshipQueryOptions(chainId, from, to, options),\n );\n }\n\n // ==========================================================================\n // NFTs\n // ==========================================================================\n\n /**\n * Returns the TanStack Query options object for v2 account NFTs.\n *\n * @param address - The account address.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Networks to filter by.\n * @param queryOptions.cursor - Pagination cursor.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV2AccountNftsQueryOptions(\n address: string,\n queryOptions?: { networks?: number[]; cursor?: string },\n options?: FetchOptions,\n ): FetchQueryOptions<V2NftsResponse> {\n return {\n queryKey: [\n 'accounts',\n 'v2Nfts',\n {\n address,\n options: queryOptions && {\n ...queryOptions,\n networks:\n queryOptions.networks && [...queryOptions.networks].sort(),\n },\n },\n ],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V2NftsResponse> => {\n if (address === '') {\n return { data: [], pageInfo: { count: 0, hasNextPage: false } };\n }\n return this.fetch<V2NftsResponse>(\n API_URLS.ACCOUNTS,\n `/v2/accounts/${address}/nfts`,\n {\n signal,\n params: {\n networks: queryOptions?.networks,\n cursor: queryOptions?.cursor,\n },\n },\n );\n },\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.DEFAULT,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get NFTs owned by an account (v2 endpoint).\n *\n * @param address - The account address.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Networks to filter by.\n * @param queryOptions.cursor - Pagination cursor.\n * @param options - Fetch options including cache settings.\n * @returns The NFTs response.\n */\n async fetchV2AccountNfts(\n address: string,\n queryOptions?: { networks?: number[]; cursor?: string },\n options?: FetchOptions,\n ): Promise<V2NftsResponse> {\n if (address === '') {\n return { data: [], pageInfo: { count: 0, hasNextPage: false } };\n }\n return this.queryClient.fetchQuery(\n this.getV2AccountNftsQueryOptions(address, queryOptions, options),\n );\n }\n\n // ==========================================================================\n // TOKEN DISCOVERY\n // ==========================================================================\n\n /**\n * Returns the TanStack Query options object for v2 account tokens.\n *\n * @param address - The account address.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Networks to filter by.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV2AccountTokensQueryOptions(\n address: string,\n queryOptions?: { networks?: number[] },\n options?: FetchOptions,\n ): FetchQueryOptions<V2TokensResponse> {\n return {\n queryKey: [\n 'accounts',\n 'v2Tokens',\n {\n address,\n options: queryOptions && {\n ...queryOptions,\n networks:\n queryOptions.networks && [...queryOptions.networks].sort(),\n },\n },\n ],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V2TokensResponse> => {\n if (address === '') {\n return { data: [] };\n }\n return this.fetch<V2TokensResponse>(\n API_URLS.ACCOUNTS,\n `/v2/accounts/${address}/tokens`,\n {\n signal,\n params: { networks: queryOptions?.networks },\n },\n );\n },\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.DEFAULT,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get ERC20 tokens detected for an account (v2 endpoint).\n *\n * @param address - The account address.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Networks to filter by.\n * @param options - Fetch options including cache settings.\n * @returns The tokens response.\n */\n async fetchV2AccountTokens(\n address: string,\n queryOptions?: { networks?: number[] },\n options?: FetchOptions,\n ): Promise<V2TokensResponse> {\n if (address === '') {\n return { data: [] };\n }\n return this.queryClient.fetchQuery(\n this.getV2AccountTokensQueryOptions(address, queryOptions, options),\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/api/accounts/client.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Accounts API Client - accounts.api.cx.metamask.io\n *\n * Handles all account-related API calls including:\n * - Supported networks\n * - Active networks\n * - Balances (v2, v4, v5)\n * - Transactions\n * - Relationships\n * - NFTs\n * - Token discovery\n */\n\nimport type {\n FetchInfiniteQueryOptions,\n FetchQueryOptions,\n QueryFunctionContext,\n} from '@tanstack/query-core';\n\nimport { BaseApiClient, STALE_TIMES, GC_TIMES } from '../base-client.js';\nimport { getQueryOptionsOverrides } from '../shared-types.js';\nimport type { FetchOptions } from '../shared-types.js';\nimport type {\n V1SupportedNetworksResponse,\n V2SupportedNetworksResponse,\n V2ActiveNetworksResponse,\n V2BalancesResponse,\n V4BalancesResponse,\n V5BalancesResponse,\n V6BalancesResponse,\n V6VsCurrency,\n V1TransactionByHashResponse,\n V1AccountTransactionsResponse,\n V4MultiAccountTransactionsResponse,\n V1AccountRelationshipResult,\n V2NftsResponse,\n V2TokensResponse,\n} from './types.js';\n\n/**\n * Generate a short random value for the `bypassServerCache` query param. The\n * Accounts API's server-side cache keys on the full URL including query\n * params, so a unique value forces a cache miss (\"hard refresh\").\n *\n * @returns An 8-character alphanumeric string.\n */\nfunction generateBypassServerCache(): string {\n return Math.random().toString(36).slice(2, 10).padEnd(8, '0');\n}\n\n/**\n * Accounts API Client.\n * Provides methods for interacting with the Accounts API.\n */\nexport class AccountsApiClient extends BaseApiClient {\n // ==========================================================================\n // CACHE MANAGEMENT\n // ==========================================================================\n\n /**\n * Invalidate all balance queries.\n */\n async invalidateBalances(): Promise<void> {\n await this.queryClient.invalidateQueries({\n queryKey: ['accounts', 'balances'],\n });\n }\n\n /**\n * Invalidate all account queries.\n */\n async invalidateAccounts(): Promise<void> {\n await this.queryClient.invalidateQueries({\n queryKey: ['accounts'],\n });\n }\n\n // ==========================================================================\n // SUPPORTED NETWORKS\n // ==========================================================================\n\n /**\n * Returns the TanStack Query options object for v1 supported networks.\n *\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV1SupportedNetworksQueryOptions(\n options?: FetchOptions,\n ): FetchQueryOptions<V1SupportedNetworksResponse> {\n return {\n queryKey: ['accounts', 'v1SupportedNetworks'],\n queryFn: ({ signal }: QueryFunctionContext) =>\n this.fetch<V1SupportedNetworksResponse>(\n this.apiUrls.ACCOUNTS,\n '/v1/supportedNetworks',\n { signal },\n ),\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.SUPPORTED_NETWORKS,\n gcTime: options?.gcTime ?? GC_TIMES.EXTENDED,\n };\n }\n\n /**\n * Get list of supported networks (v1 endpoint).\n *\n * @param options - Fetch options including cache settings.\n * @returns The list of supported networks.\n */\n async fetchV1SupportedNetworks(\n options?: FetchOptions,\n ): Promise<V1SupportedNetworksResponse> {\n return this.queryClient.fetchQuery(\n this.getV1SupportedNetworksQueryOptions(options),\n );\n }\n\n /**\n * Returns the TanStack Query options object for v2 supported networks.\n *\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV2SupportedNetworksQueryOptions(\n options?: FetchOptions,\n ): FetchQueryOptions<V2SupportedNetworksResponse> {\n return {\n queryKey: ['accounts', 'v2SupportedNetworks'],\n queryFn: ({ signal }: QueryFunctionContext) =>\n this.fetch<V2SupportedNetworksResponse>(\n this.apiUrls.ACCOUNTS,\n '/v2/supportedNetworks',\n { signal },\n ),\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.SUPPORTED_NETWORKS,\n gcTime: options?.gcTime ?? GC_TIMES.EXTENDED,\n };\n }\n\n /**\n * Get list of supported networks (v2 endpoint).\n * Returns CAIP-2 chain IDs in both `fullSupport` and `partialSupport`.\n *\n * @param options - Fetch options including cache settings.\n * @returns The list of supported networks.\n */\n async fetchV2SupportedNetworks(\n options?: FetchOptions,\n ): Promise<V2SupportedNetworksResponse> {\n return this.queryClient.fetchQuery(\n this.getV2SupportedNetworksQueryOptions(options),\n );\n }\n\n // ==========================================================================\n // ACTIVE NETWORKS\n // ==========================================================================\n\n /**\n * Returns the TanStack Query options object for v2 active networks.\n *\n * @param accountIds - Array of CAIP-10 account IDs.\n * @param queryOptions - Query filter options.\n * @param queryOptions.filterMMListTokens - Whether to filter MM list tokens.\n * @param queryOptions.networks - Networks to filter by.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV2ActiveNetworksQueryOptions(\n accountIds: string[],\n queryOptions?: { filterMMListTokens?: boolean; networks?: string[] },\n options?: FetchOptions,\n ): FetchQueryOptions<V2ActiveNetworksResponse> {\n return {\n queryKey: [\n 'accounts',\n 'v2ActiveNetworks',\n {\n accountIds: [...accountIds].sort(),\n options: queryOptions && {\n ...queryOptions,\n networks:\n queryOptions.networks && [...queryOptions.networks].sort(),\n },\n },\n ],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V2ActiveNetworksResponse> => {\n if (accountIds.length === 0) {\n return { activeNetworks: [] };\n }\n return this.fetch<V2ActiveNetworksResponse>(\n this.apiUrls.ACCOUNTS,\n '/v2/activeNetworks',\n {\n signal,\n params: {\n accountIds,\n filterMMListTokens: queryOptions?.filterMMListTokens,\n networks: queryOptions?.networks,\n },\n },\n );\n },\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.NETWORKS,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get active networks by CAIP-10 account IDs (v2 endpoint).\n *\n * @param accountIds - Array of CAIP-10 account IDs.\n * @param queryOptions - Query filter options.\n * @param queryOptions.filterMMListTokens - Whether to filter MM list tokens.\n * @param queryOptions.networks - Networks to filter by.\n * @param options - Fetch options including cache settings.\n * @returns The active networks response.\n */\n async fetchV2ActiveNetworks(\n accountIds: string[],\n queryOptions?: { filterMMListTokens?: boolean; networks?: string[] },\n options?: FetchOptions,\n ): Promise<V2ActiveNetworksResponse> {\n if (accountIds.length === 0) {\n return { activeNetworks: [] };\n }\n return this.queryClient.fetchQuery(\n this.getV2ActiveNetworksQueryOptions(accountIds, queryOptions, options),\n );\n }\n\n // ==========================================================================\n // BALANCES\n // ==========================================================================\n\n /**\n * Returns the TanStack Query options object for v2 balances.\n *\n * @param address - The account address.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Networks to filter by.\n * @param queryOptions.filterSupportedTokens - Whether to filter supported tokens.\n * @param queryOptions.includeTokenAddresses - Token addresses to include.\n * @param queryOptions.includeStakedAssets - Whether to include staked assets.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV2BalancesQueryOptions(\n address: string,\n queryOptions?: {\n networks?: number[];\n filterSupportedTokens?: boolean;\n includeTokenAddresses?: string[];\n includeStakedAssets?: boolean;\n },\n options?: FetchOptions,\n ): FetchQueryOptions<V2BalancesResponse> {\n return {\n queryKey: [\n 'accounts',\n 'balances',\n 'v2',\n {\n address,\n options: queryOptions && {\n ...queryOptions,\n networks:\n queryOptions.networks && [...queryOptions.networks].sort(),\n includeTokenAddresses:\n queryOptions.includeTokenAddresses &&\n [...queryOptions.includeTokenAddresses].sort(),\n },\n },\n ],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V2BalancesResponse> => {\n if (address === '') {\n return { count: 0, balances: [], unprocessedNetworks: [] };\n }\n return this.fetch<V2BalancesResponse>(\n this.apiUrls.ACCOUNTS,\n `/v2/accounts/${address}/balances`,\n {\n signal,\n params: {\n networks: queryOptions?.networks,\n filterSupportedTokens: queryOptions?.filterSupportedTokens,\n includeTokenAddresses: queryOptions?.includeTokenAddresses,\n includeStakedAssets: queryOptions?.includeStakedAssets,\n },\n },\n );\n },\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.BALANCES,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get account balances for a single address (v2 endpoint).\n *\n * @param address - The account address.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Networks to filter by.\n * @param queryOptions.filterSupportedTokens - Whether to filter supported tokens.\n * @param queryOptions.includeTokenAddresses - Token addresses to include.\n * @param queryOptions.includeStakedAssets - Whether to include staked assets.\n * @param options - Fetch options including cache settings.\n * @returns The account balances response.\n */\n async fetchV2Balances(\n address: string,\n queryOptions?: {\n networks?: number[];\n filterSupportedTokens?: boolean;\n includeTokenAddresses?: string[];\n includeStakedAssets?: boolean;\n },\n options?: FetchOptions,\n ): Promise<V2BalancesResponse> {\n if (address === '') {\n return { count: 0, balances: [], unprocessedNetworks: [] };\n }\n return this.queryClient.fetchQuery(\n this.getV2BalancesQueryOptions(address, queryOptions, options),\n );\n }\n\n /**\n * Returns the TanStack Query options object for v4 multi-account balances.\n *\n * @param accountAddresses - Array of account addresses.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Networks to filter by.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV4MultiAccountBalancesQueryOptions(\n accountAddresses: string[],\n queryOptions?: { networks?: number[] },\n options?: FetchOptions,\n ): FetchQueryOptions<V4BalancesResponse> {\n return {\n queryKey: [\n 'accounts',\n 'balances',\n 'v4',\n {\n accountAddresses: [...accountAddresses].sort(),\n options: queryOptions && {\n ...queryOptions,\n networks:\n queryOptions.networks && [...queryOptions.networks].sort(),\n },\n },\n ],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V4BalancesResponse> => {\n if (accountAddresses.length === 0) {\n return { count: 0, balances: [], unprocessedNetworks: [] };\n }\n return this.fetch<V4BalancesResponse>(\n this.apiUrls.ACCOUNTS,\n '/v4/multiaccount/balances',\n {\n signal,\n params: {\n accountAddresses,\n networks: queryOptions?.networks,\n },\n },\n );\n },\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.BALANCES,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get balances for multiple accounts (v4 endpoint).\n *\n * @param accountAddresses - Array of account addresses.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Networks to filter by.\n * @param options - Fetch options including cache settings.\n * @returns The multi-account balances response.\n */\n async fetchV4MultiAccountBalances(\n accountAddresses: string[],\n queryOptions?: { networks?: number[] },\n options?: FetchOptions,\n ): Promise<V4BalancesResponse> {\n if (accountAddresses.length === 0) {\n return { count: 0, balances: [], unprocessedNetworks: [] };\n }\n return this.queryClient.fetchQuery(\n this.getV4MultiAccountBalancesQueryOptions(\n accountAddresses,\n queryOptions,\n options,\n ),\n );\n }\n\n /**\n * Returns the TanStack Query options object for v5 multi-account balances.\n *\n * @param accountIds - Array of CAIP-10 account IDs.\n * @param queryOptions - Query filter options.\n * @param queryOptions.filterMMListTokens - Whether to filter MM list tokens.\n * @param queryOptions.networks - Networks to filter by.\n * @param queryOptions.includeStakedAssets - Whether to include staked assets.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV5MultiAccountBalancesQueryOptions(\n accountIds: string[],\n queryOptions?: {\n filterMMListTokens?: boolean;\n networks?: string[];\n includeStakedAssets?: boolean;\n },\n options?: FetchOptions,\n ): FetchQueryOptions<V5BalancesResponse> {\n return {\n queryKey: [\n 'accounts',\n 'balances',\n 'v5',\n {\n accountIds: [...accountIds].sort(),\n options: queryOptions && {\n ...queryOptions,\n networks:\n queryOptions.networks && [...queryOptions.networks].sort(),\n },\n },\n ],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V5BalancesResponse> => {\n if (accountIds.length === 0) {\n return { count: 0, unprocessedNetworks: [], balances: [] };\n }\n return this.fetch<V5BalancesResponse>(\n this.apiUrls.ACCOUNTS,\n '/v5/multiaccount/balances',\n {\n signal,\n params: {\n accountIds,\n networks: queryOptions?.networks,\n filterMMListTokens: queryOptions?.filterMMListTokens,\n includeStakedAssets: queryOptions?.includeStakedAssets,\n bypassServerCache: options?.bypassServerCache\n ? generateBypassServerCache()\n : undefined,\n },\n },\n );\n },\n ...getQueryOptionsOverrides(options),\n staleTime:\n options?.staleTime ??\n (options?.bypassServerCache ? 0 : STALE_TIMES.BALANCES),\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get balances for multiple accounts using CAIP-10 IDs (v5 endpoint).\n *\n * @param accountIds - Array of CAIP-10 account IDs.\n * @param queryOptions - Query filter options.\n * @param queryOptions.filterMMListTokens - Whether to filter MM list tokens.\n * @param queryOptions.networks - Networks to filter by.\n * @param queryOptions.includeStakedAssets - Whether to include staked assets.\n * @param options - Fetch options including cache settings.\n * @returns The multi-account balances response.\n */\n async fetchV5MultiAccountBalances(\n accountIds: string[],\n queryOptions?: {\n filterMMListTokens?: boolean;\n networks?: string[];\n includeStakedAssets?: boolean;\n },\n options?: FetchOptions,\n ): Promise<V5BalancesResponse> {\n if (accountIds.length === 0) {\n return { count: 0, unprocessedNetworks: [], balances: [] };\n }\n return this.queryClient.fetchQuery(\n this.getV5MultiAccountBalancesQueryOptions(\n accountIds,\n queryOptions,\n options,\n ),\n );\n }\n\n /**\n * Returns the TanStack Query options object for v6 multi-account balances.\n * The v6 endpoint returns token balances and, optionally, DeFi positions and\n * spot prices.\n *\n * @param accountIds - Array of CAIP-10 account IDs.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Comma-separated CAIP-2 chain IDs to filter by.\n * @param queryOptions.filterSupportedTokens - Whether to filter the assets to only tokens existing in the Token API.\n * @param queryOptions.startTimestamp - Start timestamp (epoch) from which to return results.\n * @param queryOptions.endTimestamp - End timestamp (epoch) for which to return results.\n * @param queryOptions.includeLabels - Whether to include asset metadata labels in the response.\n * @param queryOptions.includeCanonicalHead - Whether to include the canonical head asset ID in the response.\n * @param queryOptions.includeDeFiBalances - Whether to include DeFi positions (token balances are always returned).\n * @param queryOptions.forceFetchDeFiPositions - Whether to fetch DeFi positions for all accounts, skipping the cached non-DeFi-user check.\n * @param queryOptions.includePrices - Whether to include spot prices for each token and DeFi position asset.\n * @param queryOptions.vsCurrency - Quote currency for spot prices when `includePrices` is true (default `usd`).\n * @param queryOptions.includeAssetIds - ERC-20 CAIP-19 asset IDs to confirm detection for; undetected IDs are returned in `unprocessedIncludeAssetIds`.\n * @param queryOptions.excludeAssetIds - ERC-20 CAIP-19 asset IDs to exclude from balance results.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV6MultiAccountBalancesQueryOptions(\n accountIds: string[],\n queryOptions?: {\n networks?: string[];\n filterSupportedTokens?: boolean;\n startTimestamp?: number;\n endTimestamp?: number;\n includeLabels?: boolean;\n includeCanonicalHead?: boolean;\n includeDeFiBalances?: boolean;\n forceFetchDeFiPositions?: boolean;\n includePrices?: boolean;\n vsCurrency?: V6VsCurrency;\n includeAssetIds?: string[];\n excludeAssetIds?: string[];\n },\n options?: FetchOptions,\n ): FetchQueryOptions<V6BalancesResponse> {\n return {\n queryKey: [\n 'accounts',\n 'balances',\n 'v6',\n {\n accountIds: [...accountIds].sort(),\n options: queryOptions && {\n ...queryOptions,\n networks:\n queryOptions.networks && [...queryOptions.networks].sort(),\n includeAssetIds:\n queryOptions.includeAssetIds &&\n [...queryOptions.includeAssetIds].sort(),\n excludeAssetIds:\n queryOptions.excludeAssetIds &&\n [...queryOptions.excludeAssetIds].sort(),\n },\n },\n ],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V6BalancesResponse> => {\n if (accountIds.length === 0) {\n return {\n unprocessedNetworks: [],\n unprocessedIncludeAssetIds: [],\n balances: [],\n };\n }\n return this.fetch<V6BalancesResponse>(\n this.apiUrls.ACCOUNTS,\n '/v6/multiaccount/balances',\n {\n signal,\n params: {\n accountIds,\n networks: queryOptions?.networks,\n filterSupportedTokens: queryOptions?.filterSupportedTokens,\n startTimestamp: queryOptions?.startTimestamp,\n endTimestamp: queryOptions?.endTimestamp,\n includeLabels: queryOptions?.includeLabels,\n includeCanonicalHead: queryOptions?.includeCanonicalHead,\n includeDeFiBalances: queryOptions?.includeDeFiBalances,\n forceFetchDeFiPositions: queryOptions?.forceFetchDeFiPositions,\n includePrices: queryOptions?.includePrices,\n vsCurrency: queryOptions?.vsCurrency,\n includeAssetIds: queryOptions?.includeAssetIds,\n excludeAssetIds: queryOptions?.excludeAssetIds,\n bypassServerCache: options?.bypassServerCache\n ? generateBypassServerCache()\n : undefined,\n },\n },\n );\n },\n ...getQueryOptionsOverrides(options),\n staleTime:\n options?.staleTime ??\n (options?.bypassServerCache ? 0 : STALE_TIMES.BALANCES),\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get balances and DeFi positions for multiple accounts using CAIP-10 IDs\n * (v6 endpoint).\n *\n * @param accountIds - Array of CAIP-10 account IDs.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Comma-separated CAIP-2 chain IDs to filter by.\n * @param queryOptions.filterSupportedTokens - Whether to filter the assets to only tokens existing in the Token API.\n * @param queryOptions.startTimestamp - Start timestamp (epoch) from which to return results.\n * @param queryOptions.endTimestamp - End timestamp (epoch) for which to return results.\n * @param queryOptions.includeLabels - Whether to include asset metadata labels in the response.\n * @param queryOptions.includeCanonicalHead - Whether to include the canonical head asset ID in the response.\n * @param queryOptions.includeDeFiBalances - Whether to include DeFi positions (token balances are always returned).\n * @param queryOptions.forceFetchDeFiPositions - Whether to fetch DeFi positions for all accounts, skipping the cached non-DeFi-user check.\n * @param queryOptions.includePrices - Whether to include spot prices for each token and DeFi position asset.\n * @param queryOptions.vsCurrency - Quote currency for spot prices when `includePrices` is true (default `usd`).\n * @param queryOptions.includeAssetIds - ERC-20 CAIP-19 asset IDs to confirm detection for; undetected IDs are returned in `unprocessedIncludeAssetIds`.\n * @param queryOptions.excludeAssetIds - ERC-20 CAIP-19 asset IDs to exclude from balance results.\n * @param options - Fetch options including cache settings.\n * @returns The multi-account balances and DeFi positions response.\n */\n async fetchV6MultiAccountBalances(\n accountIds: string[],\n queryOptions?: {\n networks?: string[];\n filterSupportedTokens?: boolean;\n startTimestamp?: number;\n endTimestamp?: number;\n includeLabels?: boolean;\n includeCanonicalHead?: boolean;\n includeDeFiBalances?: boolean;\n forceFetchDeFiPositions?: boolean;\n includePrices?: boolean;\n vsCurrency?: V6VsCurrency;\n includeAssetIds?: string[];\n excludeAssetIds?: string[];\n },\n options?: FetchOptions,\n ): Promise<V6BalancesResponse> {\n if (accountIds.length === 0) {\n return {\n unprocessedNetworks: [],\n unprocessedIncludeAssetIds: [],\n balances: [],\n };\n }\n return this.queryClient.fetchQuery(\n this.getV6MultiAccountBalancesQueryOptions(\n accountIds,\n queryOptions,\n options,\n ),\n );\n }\n\n // ==========================================================================\n // TRANSACTIONS\n // ==========================================================================\n\n /**\n * Returns the TanStack Query options object for v1 transaction by hash.\n *\n * @param chainId - The chain ID.\n * @param txHash - The transaction hash.\n * @param queryOptions - Query filter options.\n * @param queryOptions.includeLogs - Whether to include logs.\n * @param queryOptions.includeValueTransfers - Whether to include value transfers.\n * @param queryOptions.includeTxMetadata - Whether to include transaction metadata.\n * @param queryOptions.lang - Language for metadata.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV1TransactionByHashQueryOptions(\n chainId: number,\n txHash: string,\n queryOptions?: {\n includeLogs?: boolean;\n includeValueTransfers?: boolean;\n includeTxMetadata?: boolean;\n lang?: string;\n },\n options?: FetchOptions,\n ): FetchQueryOptions<V1TransactionByHashResponse> {\n return {\n queryKey: [\n 'accounts',\n 'transactions',\n 'v1ByHash',\n { chainId, txHash, options: queryOptions },\n ],\n queryFn: ({ signal }: QueryFunctionContext) =>\n this.fetch<V1TransactionByHashResponse>(\n this.apiUrls.ACCOUNTS,\n `/v1/networks/${chainId}/transactions/${txHash}`,\n {\n signal,\n params: {\n includeLogs: queryOptions?.includeLogs,\n includeValueTransfers: queryOptions?.includeValueTransfers,\n includeTxMetadata: queryOptions?.includeTxMetadata,\n lang: queryOptions?.lang,\n },\n },\n ),\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.TRANSACTIONS,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get a specific transaction by hash (v1 endpoint).\n *\n * @param chainId - The chain ID.\n * @param txHash - The transaction hash.\n * @param queryOptions - Query filter options.\n * @param queryOptions.includeLogs - Whether to include logs.\n * @param queryOptions.includeValueTransfers - Whether to include value transfers.\n * @param queryOptions.includeTxMetadata - Whether to include transaction metadata.\n * @param queryOptions.lang - Language for metadata.\n * @param options - Fetch options including cache settings.\n * @returns The transaction details.\n */\n async fetchV1TransactionByHash(\n chainId: number,\n txHash: string,\n queryOptions?: {\n includeLogs?: boolean;\n includeValueTransfers?: boolean;\n includeTxMetadata?: boolean;\n lang?: string;\n },\n options?: FetchOptions,\n ): Promise<V1TransactionByHashResponse> {\n return this.queryClient.fetchQuery(\n this.getV1TransactionByHashQueryOptions(\n chainId,\n txHash,\n queryOptions,\n options,\n ),\n );\n }\n\n /**\n * Returns the TanStack Query options object for v1 account transactions.\n *\n * @param address - The account address.\n * @param queryOptions - Query filter options.\n * @param queryOptions.chainIds - Chain IDs to filter by.\n * @param queryOptions.cursor - Pagination cursor.\n * @param queryOptions.startTimestamp - Start timestamp filter.\n * @param queryOptions.endTimestamp - End timestamp filter.\n * @param queryOptions.sortDirection - Sort direction (ASC/DESC).\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useInfiniteQuery, useSuspenseQuery, etc.\n */\n getV1AccountTransactionsQueryOptions(\n address: string,\n queryOptions?: {\n chainIds?: string[];\n cursor?: string;\n startTimestamp?: number;\n endTimestamp?: number;\n sortDirection?: 'ASC' | 'DESC';\n },\n options?: FetchOptions,\n ): FetchQueryOptions<V1AccountTransactionsResponse> {\n return {\n queryKey: [\n 'accounts',\n 'transactions',\n 'v1Account',\n {\n address,\n options: queryOptions && {\n ...queryOptions,\n chainIds:\n queryOptions.chainIds && [...queryOptions.chainIds].sort(),\n },\n },\n ],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V1AccountTransactionsResponse> => {\n if (address === '') {\n return { data: [], pageInfo: { count: 0, hasNextPage: false } };\n }\n return this.fetch<V1AccountTransactionsResponse>(\n this.apiUrls.ACCOUNTS,\n `/v1/accounts/${address}/transactions`,\n {\n signal,\n params: {\n networks: queryOptions?.chainIds,\n cursor: queryOptions?.cursor,\n startTimestamp: queryOptions?.startTimestamp,\n endTimestamp: queryOptions?.endTimestamp,\n sortDirection: queryOptions?.sortDirection,\n },\n },\n );\n },\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.TRANSACTIONS,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get account transactions (v1 endpoint).\n *\n * @param address - The account address.\n * @param queryOptions - Query filter options.\n * @param queryOptions.chainIds - Chain IDs to filter by.\n * @param queryOptions.cursor - Pagination cursor.\n * @param queryOptions.startTimestamp - Start timestamp filter.\n * @param queryOptions.endTimestamp - End timestamp filter.\n * @param queryOptions.sortDirection - Sort direction (ASC/DESC).\n * @param options - Fetch options including cache settings.\n * @returns The account transactions response.\n */\n async fetchV1AccountTransactions(\n address: string,\n queryOptions?: {\n chainIds?: string[];\n cursor?: string;\n startTimestamp?: number;\n endTimestamp?: number;\n sortDirection?: 'ASC' | 'DESC';\n },\n options?: FetchOptions,\n ): Promise<V1AccountTransactionsResponse> {\n if (address === '') {\n return { data: [], pageInfo: { count: 0, hasNextPage: false } };\n }\n return this.queryClient.fetchQuery(\n this.getV1AccountTransactionsQueryOptions(address, queryOptions, options),\n );\n }\n\n /**\n * Returns the TanStack Query options object for v4 multi-account transactions.\n * Use this with `queryClient.fetchQuery()`, `useQuery()`, `useInfiniteQuery()`,\n * `useSuspenseQuery()`, etc. for flexibility across query permutations.\n *\n * @param accountAddresses - Array of CAIP-10 account addresses.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Comma-separated CAIP-2 network IDs.\n * @param queryOptions.startTimestamp - Start timestamp (epoch) from which to return results.\n * @param queryOptions.endTimestamp - End timestamp (epoch) for which to return results.\n * @param queryOptions.cursor - Pagination cursor (deprecated, use after).\n * @param queryOptions.limit - Maximum number of transactions to request (default 50).\n * @param queryOptions.after - JWT containing the endCursor for the query.\n * @param queryOptions.before - JWT containing the startCursor for the query.\n * @param queryOptions.sortDirection - Sort direction (ASC/DESC).\n * @param queryOptions.includeLogs - Whether to include logs.\n * @param queryOptions.includeTxMetadata - Whether to include transaction metadata.\n * @param queryOptions.maxLogsPerTx - Maximum number of logs per transaction.\n * @param queryOptions.lang - Language for transaction category (default \"en\").\n * @param options - Fetch options including cache settings.\n * @returns Query options object compatible with fetchQuery/useQuery/useInfiniteQuery.\n */\n getV4MultiAccountTransactionsQueryOptions(\n accountAddresses: string[],\n queryOptions?: {\n networks?: string[];\n startTimestamp?: number;\n endTimestamp?: number;\n cursor?: string;\n limit?: number;\n after?: string;\n before?: string;\n sortDirection?: 'ASC' | 'DESC';\n includeLogs?: boolean;\n includeTxMetadata?: boolean;\n maxLogsPerTx?: number;\n lang?: string;\n },\n options?: FetchOptions,\n ): FetchQueryOptions<V4MultiAccountTransactionsResponse> {\n return {\n queryKey: [\n 'accounts',\n 'transactions',\n 'v4MultiAccount',\n {\n accountAddresses: [...accountAddresses].sort(),\n options: queryOptions && {\n ...queryOptions,\n networks:\n queryOptions.networks && [...queryOptions.networks].sort(),\n },\n },\n ],\n queryFn: ({ signal }: QueryFunctionContext) =>\n this.fetch<V4MultiAccountTransactionsResponse>(\n this.apiUrls.ACCOUNTS,\n '/v4/multiaccount/transactions',\n {\n signal,\n params: {\n accountAddresses,\n networks: queryOptions?.networks,\n startTimestamp: queryOptions?.startTimestamp,\n endTimestamp: queryOptions?.endTimestamp,\n cursor: queryOptions?.cursor,\n limit: queryOptions?.limit,\n after: queryOptions?.after,\n before: queryOptions?.before,\n sortDirection: queryOptions?.sortDirection,\n includeLogs: queryOptions?.includeLogs,\n includeTxMetadata: queryOptions?.includeTxMetadata,\n maxLogsPerTx: queryOptions?.maxLogsPerTx,\n lang: queryOptions?.lang,\n },\n },\n ),\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.TRANSACTIONS,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Returns TanStack Query options for v4 multi-account transactions,\n * designed for use with `useInfiniteQuery`.\n *\n * @param params - API endpoint parameters (excluding pagination cursors).\n * @param params.accountAddresses - Array of CAIP-10 account addresses.\n * @param params.networks - CAIP-2 network IDs to filter by.\n * @param params.startTimestamp - Start timestamp (epoch).\n * @param params.endTimestamp - End timestamp (epoch).\n * @param params.limit - Max transactions per page (default 50).\n * @param params.sortDirection - Sort direction (ASC/DESC).\n * @param params.includeLogs - Whether to include logs.\n * @param params.includeTxMetadata - Whether to include transaction metadata.\n * @param params.maxLogsPerTx - Max logs per transaction.\n * @param params.lang - Language for transaction category (default \"en\").\n * @param options - Fetch options including cache settings.\n * @returns Options object compatible with `useInfiniteQuery`.\n */\n getV4MultiAccountTransactionsInfiniteQueryOptions(\n params: {\n accountAddresses: string[];\n networks?: string[];\n startTimestamp?: number;\n endTimestamp?: number;\n limit?: number;\n sortDirection?: 'ASC' | 'DESC';\n includeLogs?: boolean;\n includeTxMetadata?: boolean;\n maxLogsPerTx?: number;\n lang?: string;\n },\n options?: FetchOptions,\n ): FetchInfiniteQueryOptions<\n V4MultiAccountTransactionsResponse,\n Error,\n V4MultiAccountTransactionsResponse,\n readonly unknown[],\n string | undefined\n > {\n return {\n queryKey: [\n 'accounts',\n 'transactions',\n 'v4MultiAccount',\n {\n accountAddresses: [...params.accountAddresses].sort(),\n networks: params.networks && [...params.networks].sort(),\n startTimestamp: params.startTimestamp,\n endTimestamp: params.endTimestamp,\n limit: params.limit,\n sortDirection: params.sortDirection,\n includeLogs: params.includeLogs,\n includeTxMetadata: params.includeTxMetadata,\n maxLogsPerTx: params.maxLogsPerTx,\n lang: params.lang,\n },\n ] as const,\n queryFn: ({\n pageParam,\n signal,\n }: {\n pageParam?: string;\n signal?: AbortSignal;\n }) =>\n this.fetch<V4MultiAccountTransactionsResponse>(\n this.apiUrls.ACCOUNTS,\n '/v4/multiaccount/transactions',\n {\n signal,\n params: {\n accountAddresses: params.accountAddresses,\n networks: params.networks,\n startTimestamp: params.startTimestamp,\n endTimestamp: params.endTimestamp,\n cursor: pageParam,\n limit: params.limit,\n sortDirection: params.sortDirection,\n includeLogs: params.includeLogs,\n includeTxMetadata: params.includeTxMetadata,\n maxLogsPerTx: params.maxLogsPerTx,\n lang: params.lang,\n },\n },\n ),\n getNextPageParam: ({ pageInfo }: V4MultiAccountTransactionsResponse) =>\n pageInfo.hasNextPage ? pageInfo.endCursor : undefined,\n initialPageParam: options?.initialPageParam,\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.TRANSACTIONS,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get multi-account transactions (v4 endpoint).\n *\n * @param accountAddresses - Array of CAIP-10 account addresses.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Comma-separated CAIP-2 network IDs.\n * @param queryOptions.startTimestamp - Start timestamp (epoch) from which to return results.\n * @param queryOptions.endTimestamp - End timestamp (epoch) for which to return results.\n * @param queryOptions.cursor - Pagination cursor (deprecated, use after).\n * @param queryOptions.limit - Maximum number of transactions to request (default 50).\n * @param queryOptions.after - JWT containing the endCursor for the query.\n * @param queryOptions.before - JWT containing the startCursor for the query.\n * @param queryOptions.sortDirection - Sort direction (ASC/DESC).\n * @param queryOptions.includeLogs - Whether to include logs.\n * @param queryOptions.includeTxMetadata - Whether to include transaction metadata.\n * @param queryOptions.maxLogsPerTx - Maximum number of logs per transaction.\n * @param queryOptions.lang - Language for transaction category (default \"en\").\n * @param options - Fetch options including cache settings.\n * @returns The multi-account transactions response.\n */\n async fetchV4MultiAccountTransactions(\n accountAddresses: string[],\n queryOptions?: {\n networks?: string[];\n startTimestamp?: number;\n endTimestamp?: number;\n cursor?: string;\n limit?: number;\n after?: string;\n before?: string;\n sortDirection?: 'ASC' | 'DESC';\n includeLogs?: boolean;\n includeTxMetadata?: boolean;\n maxLogsPerTx?: number;\n lang?: string;\n },\n options?: FetchOptions,\n ): Promise<V4MultiAccountTransactionsResponse> {\n return this.queryClient.fetchQuery(\n this.getV4MultiAccountTransactionsQueryOptions(\n accountAddresses,\n queryOptions,\n options,\n ),\n );\n }\n\n // ==========================================================================\n // RELATIONSHIPS\n // ==========================================================================\n\n /**\n * Returns the TanStack Query options object for v1 account relationship.\n *\n * @param chainId - The chain ID.\n * @param from - The from address.\n * @param to - The to address.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV1AccountRelationshipQueryOptions(\n chainId: number,\n from: string,\n to: string,\n options?: FetchOptions,\n ): FetchQueryOptions<V1AccountRelationshipResult> {\n return {\n queryKey: ['accounts', 'v1Relationship', chainId, from, to],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V1AccountRelationshipResult> =>\n this.fetch<V1AccountRelationshipResult>(\n this.apiUrls.ACCOUNTS,\n `/v1/networks/${chainId}/accounts/${from}/relationships/${to}`,\n { signal },\n ),\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.DEFAULT,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get account address relationship (v1 endpoint).\n *\n * @param chainId - The chain ID.\n * @param from - The from address.\n * @param to - The to address.\n * @param options - Fetch options including cache settings.\n * @returns The account relationship result.\n */\n async fetchV1AccountRelationship(\n chainId: number,\n from: string,\n to: string,\n options?: FetchOptions,\n ): Promise<V1AccountRelationshipResult> {\n return this.queryClient.fetchQuery(\n this.getV1AccountRelationshipQueryOptions(chainId, from, to, options),\n );\n }\n\n // ==========================================================================\n // NFTs\n // ==========================================================================\n\n /**\n * Returns the TanStack Query options object for v2 account NFTs.\n *\n * @param address - The account address.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Networks to filter by.\n * @param queryOptions.cursor - Pagination cursor.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV2AccountNftsQueryOptions(\n address: string,\n queryOptions?: { networks?: number[]; cursor?: string },\n options?: FetchOptions,\n ): FetchQueryOptions<V2NftsResponse> {\n return {\n queryKey: [\n 'accounts',\n 'v2Nfts',\n {\n address,\n options: queryOptions && {\n ...queryOptions,\n networks:\n queryOptions.networks && [...queryOptions.networks].sort(),\n },\n },\n ],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V2NftsResponse> => {\n if (address === '') {\n return { data: [], pageInfo: { count: 0, hasNextPage: false } };\n }\n return this.fetch<V2NftsResponse>(\n this.apiUrls.ACCOUNTS,\n `/v2/accounts/${address}/nfts`,\n {\n signal,\n params: {\n networks: queryOptions?.networks,\n cursor: queryOptions?.cursor,\n },\n },\n );\n },\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.DEFAULT,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get NFTs owned by an account (v2 endpoint).\n *\n * @param address - The account address.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Networks to filter by.\n * @param queryOptions.cursor - Pagination cursor.\n * @param options - Fetch options including cache settings.\n * @returns The NFTs response.\n */\n async fetchV2AccountNfts(\n address: string,\n queryOptions?: { networks?: number[]; cursor?: string },\n options?: FetchOptions,\n ): Promise<V2NftsResponse> {\n if (address === '') {\n return { data: [], pageInfo: { count: 0, hasNextPage: false } };\n }\n return this.queryClient.fetchQuery(\n this.getV2AccountNftsQueryOptions(address, queryOptions, options),\n );\n }\n\n // ==========================================================================\n // TOKEN DISCOVERY\n // ==========================================================================\n\n /**\n * Returns the TanStack Query options object for v2 account tokens.\n *\n * @param address - The account address.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Networks to filter by.\n * @param options - Fetch options including cache settings.\n * @returns TanStack Query options for use with useQuery, useSuspenseQuery, etc.\n */\n getV2AccountTokensQueryOptions(\n address: string,\n queryOptions?: { networks?: number[] },\n options?: FetchOptions,\n ): FetchQueryOptions<V2TokensResponse> {\n return {\n queryKey: [\n 'accounts',\n 'v2Tokens',\n {\n address,\n options: queryOptions && {\n ...queryOptions,\n networks:\n queryOptions.networks && [...queryOptions.networks].sort(),\n },\n },\n ],\n queryFn: async ({\n signal,\n }: QueryFunctionContext): Promise<V2TokensResponse> => {\n if (address === '') {\n return { data: [] };\n }\n return this.fetch<V2TokensResponse>(\n this.apiUrls.ACCOUNTS,\n `/v2/accounts/${address}/tokens`,\n {\n signal,\n params: { networks: queryOptions?.networks },\n },\n );\n },\n ...getQueryOptionsOverrides(options),\n staleTime: options?.staleTime ?? STALE_TIMES.DEFAULT,\n gcTime: options?.gcTime ?? GC_TIMES.DEFAULT,\n };\n }\n\n /**\n * Get ERC20 tokens detected for an account (v2 endpoint).\n *\n * @param address - The account address.\n * @param queryOptions - Query filter options.\n * @param queryOptions.networks - Networks to filter by.\n * @param options - Fetch options including cache settings.\n * @returns The tokens response.\n */\n async fetchV2AccountTokens(\n address: string,\n queryOptions?: { networks?: number[] },\n options?: FetchOptions,\n ): Promise<V2TokensResponse> {\n if (address === '') {\n return { data: [] };\n }\n return this.queryClient.fetchQuery(\n this.getV2AccountTokensQueryOptions(address, queryOptions, options),\n );\n }\n}\n"]}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { QueryClient } from '@tanstack/query-core';
|
|
5
5
|
import type { QueryKey } from '@tanstack/query-core';
|
|
6
|
-
import {
|
|
7
|
-
import type { ApiPlatformClientOptions } from './shared-types.js';
|
|
6
|
+
import { STALE_TIMES, GC_TIMES } from './shared-types.js';
|
|
7
|
+
import type { ApiPlatformClientOptions, ApiUrls } from './shared-types.js';
|
|
8
8
|
export declare const authQueryKeys: {
|
|
9
9
|
readonly bearerToken: () => QueryKey;
|
|
10
10
|
};
|
|
@@ -26,6 +26,8 @@ export declare class BaseApiClient {
|
|
|
26
26
|
protected readonly clientVersion?: string;
|
|
27
27
|
protected readonly getBearerToken?: () => Promise<string | undefined>;
|
|
28
28
|
protected readonly authTokenTimeout: number;
|
|
29
|
+
/** Resolved API base URLs (production defaults merged with any overrides). */
|
|
30
|
+
readonly apiUrls: ApiUrls;
|
|
29
31
|
/**
|
|
30
32
|
* Get the underlying QueryClient instance.
|
|
31
33
|
* Exposed for cache management operations.
|
|
@@ -52,5 +54,5 @@ export declare class BaseApiClient {
|
|
|
52
54
|
*/
|
|
53
55
|
protected fetch<ResponseType>(baseUrl: string, path: string, options?: InternalFetchOptions): Promise<ResponseType>;
|
|
54
56
|
}
|
|
55
|
-
export {
|
|
57
|
+
export { STALE_TIMES, GC_TIMES };
|
|
56
58
|
//# sourceMappingURL=base-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-client.d.ts","sourceRoot":"","sources":["../../src/api/base-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,
|
|
1
|
+
{"version":3,"file":"base-client.d.ts","sourceRoot":"","sources":["../../src/api/base-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAEL,WAAW,EACX,QAAQ,EAKT,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG3E,eAAO,MAAM,aAAa;aACxB,WAAW,QAAM,QAAQ;CACjB,CAAC;AAEX,YAAY,EAAE,wBAAwB,EAAE,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CACb,MAAM,EACN,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,GAAG,SAAS,CAC5D,CAAC;CACH,CAAC;AAEF;;;GAGG;AACH,qBAAa,aAAa;;IACxB,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAEzC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAE1C,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAEtE,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAE5C,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAI1B;;;;;OAKG;IACH,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED;;;;;;OAMG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAIzC;IAED,YAAY,OAAO,EAAE,wBAAwB,EAsB5C;IAmDD;;;;;;;OAOG;IACH,UAAgB,KAAK,CAAC,YAAY,EAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,YAAY,CAAC,CAsDvB;CACF;AAGD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/api/base-client.js
CHANGED
|
@@ -16,6 +16,8 @@ export class BaseApiClient {
|
|
|
16
16
|
clientVersion;
|
|
17
17
|
getBearerToken;
|
|
18
18
|
authTokenTimeout;
|
|
19
|
+
/** Resolved API base URLs (production defaults merged with any overrides). */
|
|
20
|
+
apiUrls;
|
|
19
21
|
#queryClientInstance;
|
|
20
22
|
/**
|
|
21
23
|
* Get the underlying QueryClient instance.
|
|
@@ -44,6 +46,7 @@ export class BaseApiClient {
|
|
|
44
46
|
this.getBearerToken = options.getBearerToken;
|
|
45
47
|
this.authTokenTimeout =
|
|
46
48
|
options.authTokenTimeout ?? DEFAULT_AUTH_TOKEN_TIMEOUT;
|
|
49
|
+
this.apiUrls = { ...API_URLS, ...options.apiUrls };
|
|
47
50
|
this.#queryClientInstance =
|
|
48
51
|
options.queryClient ??
|
|
49
52
|
new QueryClient({
|
|
@@ -157,6 +160,6 @@ export class BaseApiClient {
|
|
|
157
160
|
return response.json();
|
|
158
161
|
}
|
|
159
162
|
}
|
|
160
|
-
// Re-export
|
|
161
|
-
export {
|
|
163
|
+
// Re-export cache timings for use by API clients
|
|
164
|
+
export { STALE_TIMES, GC_TIMES };
|
|
162
165
|
//# sourceMappingURL=base-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-client.js","sourceRoot":"","sources":["../../src/api/base-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGnD,OAAO,EACL,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,0BAA0B,EAC1B,mBAAmB,EACnB,WAAW,EACX,SAAS,GACV,MAAM,mBAAmB,CAAC;AAG3B,+DAA+D;AAC/D,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,WAAW,EAAE,GAAa,EAAE,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC;CAC5C,CAAC;AAeX;;;GAGG;AACH,MAAM,OAAO,aAAa;IACL,aAAa,CAAS;IAEtB,aAAa,CAAU;IAEvB,cAAc,CAAqC;IAEnD,gBAAgB,CAAS;IAEnC,oBAAoB,CAAc;IAE3C;;;;;OAKG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,mBAAmB;QACvB,MAAM,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC;YAC3C,QAAQ,EAAE,aAAa,CAAC,WAAW,EAAE;SACtC,CAAC,CAAC;IACL,CAAC;IAED,YAAY,OAAiC;QAC3C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,gBAAgB;YACnB,OAAO,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;QAEzD,IAAI,CAAC,oBAAoB;YACvB,OAAO,CAAC,WAAW;gBACnB,IAAI,WAAW,CAAC;oBACd,cAAc,EAAE;wBACd,OAAO,EAAE;4BACP,SAAS,EAAE,WAAW,CAAC,OAAO;4BAC9B,MAAM,EAAE,QAAQ,CAAC,OAAO;4BACxB,KAAK,EAAE,WAAW;4BAClB,UAAU,EAAE,mBAAmB;4BAC/B,oBAAoB,EAAE,KAAK;4BAC3B,WAAW,EAAE,QAAQ;yBACtB;qBACF;iBACF,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,iBAAiB;QACrB,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,2EAA2E;QAC3E,6EAA6E;QAC7E,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB;aAC3C,UAAU,CAAC;YACV,QAAQ,EAAE,aAAa,CAAC,WAAW,EAAE;YACrC,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClB,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;gBACtC,sDAAsD;gBACtD,8DAA8D;gBAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBAC/C,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,SAAS,EAAE,CAAC;YACZ,KAAK,EAAE,KAAK,EAAE,4BAA4B;SAC3C,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,MAAM,YAAY,CAAC;QAC5B,CAAC;QAED,IAAI,SAAoD,CAAC;QACzD,MAAM,cAAc,GAAG,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,EAAE;YACxD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;QAC5D,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACO,KAAK,CAAC,KAAK,CACnB,OAAe,EACf,IAAY,EACZ,OAA8B;QAE9B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEnC,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,SAAS;gBACX,CAAC;gBACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,sEAAsE;oBACtE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzD,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,0BAA0B,EAAE,IAAI,CAAC,aAAa;SAC/C,CAAC;QAEF,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,CAAC,0BAA0B,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;QAC3D,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,aAAa,GAAG,UAAU,KAAK,EAAE,CAAC;QAC5C,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YAC3C,MAAM,EAAE,KAAK;YACb,OAAO;YACP,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,IAAa,CAAC;YAClB,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACP,iEAAiE;YACnE,CAAC;YACD,MAAM,IAAI,SAAS,CACjB,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,EACjD,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,UAAU,EACnB,GAAG,CAAC,QAAQ,EAAE,EACd,IAAI,CACL,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAA2B,CAAC;IAClD,CAAC;CACF;AAED,6CAA6C;AAC7C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC","sourcesContent":["/**\n * Base API Client - Shared HTTP functionality for all API clients.\n */\n\nimport { QueryClient } from '@tanstack/query-core';\nimport type { QueryKey } from '@tanstack/query-core';\n\nimport {\n API_URLS,\n STALE_TIMES,\n GC_TIMES,\n DEFAULT_AUTH_TOKEN_TIMEOUT,\n calculateRetryDelay,\n shouldRetry,\n HttpError,\n} from './shared-types.js';\nimport type { ApiPlatformClientOptions } from './shared-types.js';\n\n// Auth query keys - shared for token management across clients\nexport const authQueryKeys = {\n bearerToken: (): QueryKey => ['auth', 'bearerToken'],\n} as const;\n\nexport type { ApiPlatformClientOptions };\n\n/**\n * Internal fetch options for HTTP requests.\n */\nexport type InternalFetchOptions = {\n signal?: AbortSignal;\n params?: Record<\n string,\n string | string[] | number | number[] | boolean | undefined\n >;\n};\n\n/**\n * Base API Client with shared HTTP and caching functionality.\n * Extended by all specific API clients.\n */\nexport class BaseApiClient {\n protected readonly clientProduct: string;\n\n protected readonly clientVersion?: string;\n\n protected readonly getBearerToken?: () => Promise<string | undefined>;\n\n protected readonly authTokenTimeout: number;\n\n readonly #queryClientInstance: QueryClient;\n\n /**\n * Get the underlying QueryClient instance.\n * Exposed for cache management operations.\n *\n * @returns The QueryClient instance.\n */\n get queryClient(): QueryClient {\n return this.#queryClientInstance;\n }\n\n /**\n * Invalidate the cached auth token.\n * Call this when the user logs out or the token expires.\n *\n * Uses resetQueries() instead of invalidateQueries() to completely remove\n * the cached value, ensuring the next request fetches a fresh token immediately.\n */\n async invalidateAuthToken(): Promise<void> {\n await this.#queryClientInstance.resetQueries({\n queryKey: authQueryKeys.bearerToken(),\n });\n }\n\n constructor(options: ApiPlatformClientOptions) {\n this.clientProduct = options.clientProduct;\n this.clientVersion = options.clientVersion;\n this.getBearerToken = options.getBearerToken;\n this.authTokenTimeout =\n options.authTokenTimeout ?? DEFAULT_AUTH_TOKEN_TIMEOUT;\n\n this.#queryClientInstance =\n options.queryClient ??\n new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: STALE_TIMES.DEFAULT,\n gcTime: GC_TIMES.DEFAULT,\n retry: shouldRetry,\n retryDelay: calculateRetryDelay,\n refetchOnWindowFocus: false,\n networkMode: 'always',\n },\n },\n });\n }\n\n /**\n * Resolve the bearer token, giving up after `authTokenTimeout` so that a slow\n * token provider does not delay the request. When the wait times out the\n * request goes out unauthenticated (lower rate limit) while the in-flight\n * `fetchQuery` keeps resolving `getBearerToken` for later requests.\n *\n * @returns The bearer token, or undefined if unavailable in time.\n */\n async #fetchBearerToken(): Promise<string | undefined> {\n const { getBearerToken } = this;\n if (!getBearerToken) {\n return undefined;\n }\n\n // fetchQuery de-duplicates concurrent callers. staleTime is 0 so we do not\n // cache the JWT here — AuthenticationController already owns token lifetime.\n const tokenPromise = this.#queryClientInstance\n .fetchQuery({\n queryKey: authQueryKeys.bearerToken(),\n queryFn: async () => {\n const result = await getBearerToken();\n // Throw if no token - prevents caching null/undefined\n // so subsequent requests can retry (e.g., after user logs in)\n if (!result) {\n throw new Error('No bearer token available');\n }\n return result;\n },\n staleTime: 0,\n retry: false, // Don't retry auth failures\n })\n .catch(() => undefined);\n\n if (this.authTokenTimeout <= 0) {\n return await tokenPromise;\n }\n\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n const timeoutPromise = new Promise<undefined>((resolve) => {\n timeoutId = setTimeout(() => resolve(undefined), this.authTokenTimeout);\n });\n\n try {\n return await Promise.race([tokenPromise, timeoutPromise]);\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n /**\n * Internal HTTP fetch method with authentication and error handling.\n *\n * @param baseUrl - The base URL for the API.\n * @param path - The API endpoint path.\n * @param options - Optional fetch configuration.\n * @returns The parsed JSON response.\n */\n protected async fetch<ResponseType>(\n baseUrl: string,\n path: string,\n options?: InternalFetchOptions,\n ): Promise<ResponseType> {\n const url = new URL(path, baseUrl);\n\n if (options?.params) {\n for (const [key, value] of Object.entries(options.params)) {\n if (value === undefined) {\n continue;\n }\n if (Array.isArray(value)) {\n // Convert array values (including number[]) to comma-separated string\n url.searchParams.set(key, value.map(String).join(','));\n } else {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-metamask-clientproduct': this.clientProduct,\n };\n\n if (this.clientVersion) {\n headers['x-metamask-clientversion'] = this.clientVersion;\n }\n\n const token = await this.#fetchBearerToken();\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n\n const response = await fetch(url.toString(), {\n method: 'GET',\n headers,\n signal: options?.signal,\n });\n\n if (!response.ok) {\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n // Response body is not JSON or is empty, leave body as undefined\n }\n throw new HttpError(\n `HTTP ${response.status}: ${response.statusText}`,\n response.status,\n response.statusText,\n url.toString(),\n body,\n );\n }\n\n return response.json() as Promise<ResponseType>;\n }\n}\n\n// Re-export constants for use by API clients\nexport { API_URLS, STALE_TIMES, GC_TIMES, HttpError };\n"]}
|
|
1
|
+
{"version":3,"file":"base-client.js","sourceRoot":"","sources":["../../src/api/base-client.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Base API Client - Shared HTTP functionality for all API clients.\n */\n\nimport { QueryClient } from '@tanstack/query-core';\nimport type { QueryKey } from '@tanstack/query-core';\n\nimport {\n API_URLS,\n STALE_TIMES,\n GC_TIMES,\n DEFAULT_AUTH_TOKEN_TIMEOUT,\n calculateRetryDelay,\n shouldRetry,\n HttpError,\n} from './shared-types.js';\nimport type { ApiPlatformClientOptions, ApiUrls } from './shared-types.js';\n\n// Auth query keys - shared for token management across clients\nexport const authQueryKeys = {\n bearerToken: (): QueryKey => ['auth', 'bearerToken'],\n} as const;\n\nexport type { ApiPlatformClientOptions };\n\n/**\n * Internal fetch options for HTTP requests.\n */\nexport type InternalFetchOptions = {\n signal?: AbortSignal;\n params?: Record<\n string,\n string | string[] | number | number[] | boolean | undefined\n >;\n};\n\n/**\n * Base API Client with shared HTTP and caching functionality.\n * Extended by all specific API clients.\n */\nexport class BaseApiClient {\n protected readonly clientProduct: string;\n\n protected readonly clientVersion?: string;\n\n protected readonly getBearerToken?: () => Promise<string | undefined>;\n\n protected readonly authTokenTimeout: number;\n\n /** Resolved API base URLs (production defaults merged with any overrides). */\n readonly apiUrls: ApiUrls;\n\n readonly #queryClientInstance: QueryClient;\n\n /**\n * Get the underlying QueryClient instance.\n * Exposed for cache management operations.\n *\n * @returns The QueryClient instance.\n */\n get queryClient(): QueryClient {\n return this.#queryClientInstance;\n }\n\n /**\n * Invalidate the cached auth token.\n * Call this when the user logs out or the token expires.\n *\n * Uses resetQueries() instead of invalidateQueries() to completely remove\n * the cached value, ensuring the next request fetches a fresh token immediately.\n */\n async invalidateAuthToken(): Promise<void> {\n await this.#queryClientInstance.resetQueries({\n queryKey: authQueryKeys.bearerToken(),\n });\n }\n\n constructor(options: ApiPlatformClientOptions) {\n this.clientProduct = options.clientProduct;\n this.clientVersion = options.clientVersion;\n this.getBearerToken = options.getBearerToken;\n this.authTokenTimeout =\n options.authTokenTimeout ?? DEFAULT_AUTH_TOKEN_TIMEOUT;\n this.apiUrls = { ...API_URLS, ...options.apiUrls };\n\n this.#queryClientInstance =\n options.queryClient ??\n new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: STALE_TIMES.DEFAULT,\n gcTime: GC_TIMES.DEFAULT,\n retry: shouldRetry,\n retryDelay: calculateRetryDelay,\n refetchOnWindowFocus: false,\n networkMode: 'always',\n },\n },\n });\n }\n\n /**\n * Resolve the bearer token, giving up after `authTokenTimeout` so that a slow\n * token provider does not delay the request. When the wait times out the\n * request goes out unauthenticated (lower rate limit) while the in-flight\n * `fetchQuery` keeps resolving `getBearerToken` for later requests.\n *\n * @returns The bearer token, or undefined if unavailable in time.\n */\n async #fetchBearerToken(): Promise<string | undefined> {\n const { getBearerToken } = this;\n if (!getBearerToken) {\n return undefined;\n }\n\n // fetchQuery de-duplicates concurrent callers. staleTime is 0 so we do not\n // cache the JWT here — AuthenticationController already owns token lifetime.\n const tokenPromise = this.#queryClientInstance\n .fetchQuery({\n queryKey: authQueryKeys.bearerToken(),\n queryFn: async () => {\n const result = await getBearerToken();\n // Throw if no token - prevents caching null/undefined\n // so subsequent requests can retry (e.g., after user logs in)\n if (!result) {\n throw new Error('No bearer token available');\n }\n return result;\n },\n staleTime: 0,\n retry: false, // Don't retry auth failures\n })\n .catch(() => undefined);\n\n if (this.authTokenTimeout <= 0) {\n return await tokenPromise;\n }\n\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n const timeoutPromise = new Promise<undefined>((resolve) => {\n timeoutId = setTimeout(() => resolve(undefined), this.authTokenTimeout);\n });\n\n try {\n return await Promise.race([tokenPromise, timeoutPromise]);\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n /**\n * Internal HTTP fetch method with authentication and error handling.\n *\n * @param baseUrl - The base URL for the API.\n * @param path - The API endpoint path.\n * @param options - Optional fetch configuration.\n * @returns The parsed JSON response.\n */\n protected async fetch<ResponseType>(\n baseUrl: string,\n path: string,\n options?: InternalFetchOptions,\n ): Promise<ResponseType> {\n const url = new URL(path, baseUrl);\n\n if (options?.params) {\n for (const [key, value] of Object.entries(options.params)) {\n if (value === undefined) {\n continue;\n }\n if (Array.isArray(value)) {\n // Convert array values (including number[]) to comma-separated string\n url.searchParams.set(key, value.map(String).join(','));\n } else {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-metamask-clientproduct': this.clientProduct,\n };\n\n if (this.clientVersion) {\n headers['x-metamask-clientversion'] = this.clientVersion;\n }\n\n const token = await this.#fetchBearerToken();\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n\n const response = await fetch(url.toString(), {\n method: 'GET',\n headers,\n signal: options?.signal,\n });\n\n if (!response.ok) {\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n // Response body is not JSON or is empty, leave body as undefined\n }\n throw new HttpError(\n `HTTP ${response.status}: ${response.statusText}`,\n response.status,\n response.statusText,\n url.toString(),\n body,\n );\n }\n\n return response.json() as Promise<ResponseType>;\n }\n}\n\n// Re-export cache timings for use by API clients\nexport { STALE_TIMES, GC_TIMES };\n"]}
|