@midnames/sdk 0.1.7 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,114 +1,46 @@
1
1
  ># @midnames/sdk
2
2
 
3
- SDK to resolve Midnames domains and render profile widgets with a clean, provider-optional API.
3
+ SDK to resolve Midnames domains, and render a profile widget.
4
4
 
5
- ## Quick Start
5
+ ## Build
6
6
 
7
- ```ts
8
- import { getDomainProfile, setupDefaultProvider } from '@midnames/sdk';
7
+ Run the `build` script with `npm`, `bun`, etc.
9
8
 
10
- // One-liner setup with testnet defaults
11
- setupDefaultProvider();
9
+ ## Usage
12
10
 
13
- // Now use functions without provider
14
- const result = await getDomainProfile('alice.night');
15
- if (result.success) {
16
- console.log(result.data.fields);
17
- }
18
- ```
11
+ Resolve a domain:
19
12
 
20
- ## Installation
13
+ ```ts
14
+ import { resolveDomain, getDomainProfile } from '@midnames/sdk';
15
+ import type { PublicDataProvider } from '@midnight-ntwrk/midnight-js-types';
21
16
 
22
- ```bash
23
- npm install @midnames/sdk
17
+ async function demo(provider: PublicDataProvider) {
18
+ const target = await resolveDomain(provider, 'alice.night');
19
+ const profile = await getDomainProfile(provider, 'id.alice.night');
20
+ console.log(target, profile.fields);
21
+ }
24
22
  ```
25
23
 
26
- ## Usage Examples
27
-
28
- ### Basic Usage
29
-
30
- ```ts
31
- import { resolveDomain, getDomainProfile, setupDefaultProvider } from '@midnames/sdk';
32
-
33
- // Setup once
34
- setupDefaultProvider();
24
+ React widget:
35
25
 
36
- // Use without provider
37
- const target = await resolveDomain('alice.night');
38
- const profile = await getDomainProfile('alice.night');
26
+ ```tsx
27
+ import '@midnames/sdk/styles.css';
28
+ import { DomainProfileWidget } from '@midnames/sdk/react';
39
29
 
40
- if (profile.success) {
41
- console.log('Domain:', profile.data.fullDomain);
42
- console.log('Owner:', profile.data.info?.owner);
43
- console.log('Fields:', profile.data.fields);
44
- }
30
+ <DomainProfileWidget fullDomain="id.alice.night" publicDataProvider={provider} />
45
31
  ```
46
32
 
47
- ### Custom Provider
33
+ Fields recognized for display: `name`, `bio`, `avatar`, `banner`, `website`, `twitter`, `github`, `location`, and `epk`.
48
34
 
49
- ```ts
50
- import { getDomainProfile, setupDefaultProvider, setDefaultProvider } from '@midnames/sdk';
35
+ ## API
51
36
 
52
- // Manually create and set your own provider
53
- setupDefaultProvider({
54
- indexerUrl: 'https://custom-indexer.com',
55
- indexerWsUrl: 'wss://custom-indexer.com'
56
- });
37
+ - `resolveDomain(provider, domain): Promise<string|null>`
38
+ - `getDomainProfile(provider, fullDomain): Promise<{ fullDomain, resolvedTarget, info, fields, settings }>`
57
39
 
58
- // Or pass per-call
59
- const profile = await getDomainProfile('alice.night', { provider });
40
+ ```ts
41
+ export interface DomainInfo { owner: string; resolver: string; contractAddress?: string; }
42
+ export interface DomainSettings { coinColor: Uint8Array; domainCost: bigint; }
60
43
  ```
61
44
 
62
- ### React Widget
63
-
64
- ```tsx
65
- import '@midnames/sdk/styles.css';
66
- import { DomainProfileWidget, HolographicCard } from '@midnames/sdk/react';
67
- import { setupDefaultProvider } from '@midnames/sdk';
68
-
69
- // Setup provider once globally
70
- setupDefaultProvider();
71
-
72
- // Now widgets work without provider prop
73
- <DomainProfileWidget
74
- fullDomain="alice.night"
75
- variant="compact"
76
- showStatus={true}
77
- />
78
-
79
- <HolographicCard
80
- domain="alice.night"
81
- enableTilt={true}
82
- />
83
-
84
- // Or pass custom provider
85
- <DomainProfileWidget
86
- fullDomain="alice.night"
87
- publicDataProvider={customProvider}
88
- />
89
- ```
45
+ Notes: Uses TestNet TLD contract by default. Provide a custom TLD address in `resolveDomain` if needed.
90
46
 
91
- ## Widget Configuration
92
-
93
- The React widget recognizes these profile fields:
94
- - `name`, `bio`, `avatar`, `banner`
95
- - `website`, `twitter`, `github`, `location`
96
- - `epk` (Electronic Press Kit)
97
-
98
- ### Widget Props
99
-
100
- #### DomainProfileWidget
101
- - `fullDomain`: Domain to display (required)
102
- - `publicDataProvider?`: Provider (optional if default is set)
103
- - `variant?`: `'full' | 'compact' | 'inline' | 'minimal'`
104
- - `showStatus?`: Show loading/error states
105
- - `showBanner?`: Display banner image
106
- - `onError?`: Error callback
107
-
108
- #### HolographicCard
109
- - `domain`: Domain to display (required)
110
- - `publicDataProvider?`: Provider (optional if default is set)
111
- - `enableTilt?`: Enable 3D tilt effect
112
- - `behindGradient?`: Background gradient
113
- - `innerGradient?`: Card gradient
114
- - `onError?`: Error callback
package/dist/core.d.ts CHANGED
@@ -1,5 +1,22 @@
1
- export { resolveDomain, TESTNET_TLD_ADDRESS } from './modules/core.js';
2
- export { setDefaultProvider, getDefaultProvider, setupDefaultProvider } from './provider.js';
3
- export type { Result } from './types.js';
4
- export { success, failure, isSuccess, isError, unwrap, unwrapOr } from './types.js';
5
- export { MidNamesError, NetworkError, ContractNotFoundError, DomainNotFoundError, InvalidDomainError, ProviderError } from './types.js';
1
+ import type { PublicDataProvider } from '@midnight-ntwrk/midnight-js-types';
2
+ import type { DomainInfo, DomainSettings, DomainProfileData, Result } from './types.js';
3
+ export declare const TESTNET_TLD_ADDRESS = "0200c46ddd9a7fe134e7126132bf48d573e3e70a06fc2b82edb2c9f31584536efa01";
4
+ export declare function resolveDomain(domain: string, options?: {
5
+ provider?: PublicDataProvider;
6
+ tldAddress?: string;
7
+ }): Promise<Result<string>>;
8
+ export declare function getDomainInfo(contractAddress: string, domainName: string, options?: {
9
+ provider?: PublicDataProvider;
10
+ }): Promise<Result<DomainInfo>>;
11
+ export declare function getDomainInfoByResolving(fullDomain: string, options?: {
12
+ provider?: PublicDataProvider;
13
+ }): Promise<Result<DomainInfo>>;
14
+ export declare function getDomainFields(contractAddress: string, options?: {
15
+ provider?: PublicDataProvider;
16
+ }): Promise<Result<Array<[string, string]>>>;
17
+ export declare function getDomainSettings(contractAddress: string, options?: {
18
+ provider?: PublicDataProvider;
19
+ }): Promise<Result<DomainSettings>>;
20
+ export declare function getDomainProfile(fullDomain: string, options?: {
21
+ provider?: PublicDataProvider;
22
+ }): Promise<Result<DomainProfileData>>;
package/dist/core.js CHANGED
@@ -1,4 +1,191 @@
1
- export { resolveDomain, TESTNET_TLD_ADDRESS } from './modules/core.js';
2
- export { setDefaultProvider, getDefaultProvider, setupDefaultProvider } from './provider.js';
3
- export { success, failure, isSuccess, isError, unwrap, unwrapOr } from './types.js';
4
- export { MidNamesError, NetworkError, ContractNotFoundError, DomainNotFoundError, InvalidDomainError, ProviderError } from './types.js';
1
+ import { getNetworkId, getZswapNetworkId, NetworkId } from '@midnight-ntwrk/midnight-js-network-id';
2
+ import { ShieldedCoinPublicKey } from '@midnight-ntwrk/wallet-sdk-address-format';
3
+ import { ledger } from './managed/index.js';
4
+ import { formatContractAddress } from './utils/address.js';
5
+ import { normalizeDomain, parseFullDomain } from './utils/domain.js';
6
+ import { success, failure, NetworkError, ContractNotFoundError, DomainNotFoundError, InvalidDomainError, ProviderError } from './types.js';
7
+ import { getDefaultProvider } from './provider.js';
8
+ const TLD = 'night';
9
+ export const TESTNET_TLD_ADDRESS = '0200c46ddd9a7fe134e7126132bf48d573e3e70a06fc2b82edb2c9f31584536efa01';
10
+ function getDefaultTldAddress() {
11
+ const currentNetwork = getNetworkId();
12
+ switch (currentNetwork) {
13
+ case NetworkId.TestNet:
14
+ return TESTNET_TLD_ADDRESS;
15
+ default:
16
+ throw new Error('Provide an address to use the resolver on a Standalone Network.');
17
+ }
18
+ }
19
+ function getTargetFromLedger(contractLedger) {
20
+ const target = contractLedger.DOMAIN_TARGET;
21
+ if (target.is_left) {
22
+ const coinPublicKey = new ShieldedCoinPublicKey(Buffer.from(target.left.bytes));
23
+ return ShieldedCoinPublicKey.codec.encode(getZswapNetworkId(), coinPublicKey).asString();
24
+ }
25
+ else {
26
+ return formatContractAddress(target.right.bytes);
27
+ }
28
+ }
29
+ async function queryContractStateSafely(publicDataProvider, contractAddress) {
30
+ try {
31
+ const contractState = await publicDataProvider.queryContractState(contractAddress);
32
+ if (contractState == null) {
33
+ return failure(new ContractNotFoundError(contractAddress));
34
+ }
35
+ return success(contractState);
36
+ }
37
+ catch (error) {
38
+ return failure(new ProviderError(`Failed to query contract state: ${error instanceof Error ? error.message : String(error)}`, error));
39
+ }
40
+ }
41
+ async function traverseDomainHierarchy(publicDataProvider, fullDomain, returnFinalTarget = false) {
42
+ try {
43
+ const tldAddress = getDefaultTldAddress();
44
+ const domainParts = fullDomain.split('.');
45
+ const traversalParts = domainParts.slice(0, -1).reverse();
46
+ let currentResolver = tldAddress;
47
+ // If we're resolving the TLD itself and want the target
48
+ if (traversalParts.length === 0) {
49
+ if (returnFinalTarget) {
50
+ const contractStateResult = await queryContractStateSafely(publicDataProvider, currentResolver);
51
+ if (!contractStateResult.success)
52
+ return failure(contractStateResult.error);
53
+ const contractLedger = ledger(contractStateResult.data.data);
54
+ return success(getTargetFromLedger(contractLedger));
55
+ }
56
+ return success(tldAddress);
57
+ }
58
+ // Traverse the domain hierarchy
59
+ for (const part of traversalParts) {
60
+ const contractStateResult = await queryContractStateSafely(publicDataProvider, currentResolver);
61
+ if (!contractStateResult.success) {
62
+ return failure(contractStateResult.error);
63
+ }
64
+ const contractLedger = ledger(contractStateResult.data.data);
65
+ if (!contractLedger.domains.member(part)) {
66
+ return failure(new DomainNotFoundError(`${part} in ${fullDomain}`));
67
+ }
68
+ const domainData = contractLedger.domains.lookup(part);
69
+ const resolverBytes = domainData.resolver.bytes;
70
+ currentResolver = formatContractAddress(resolverBytes);
71
+ }
72
+ // Return either the final resolver address or the target it points to
73
+ if (returnFinalTarget) {
74
+ const finalContractStateResult = await queryContractStateSafely(publicDataProvider, currentResolver);
75
+ if (!finalContractStateResult.success)
76
+ return failure(finalContractStateResult.error);
77
+ const finalLedger = ledger(finalContractStateResult.data.data);
78
+ return success(getTargetFromLedger(finalLedger));
79
+ }
80
+ return success(currentResolver);
81
+ }
82
+ catch (error) {
83
+ return failure(new NetworkError(`Failed to traverse domain hierarchy: ${error instanceof Error ? error.message : String(error)}`, error));
84
+ }
85
+ }
86
+ async function getResolverAddress(publicDataProvider, fullDomain) {
87
+ return traverseDomainHierarchy(publicDataProvider, fullDomain, false);
88
+ }
89
+ export async function resolveDomain(domain, options = {}) {
90
+ const publicDataProvider = options.provider || getDefaultProvider();
91
+ const fullDomain = normalizeDomain(domain);
92
+ // Validate TLD
93
+ const domainParts = fullDomain.split('.');
94
+ if (domainParts[domainParts.length - 1] !== TLD) {
95
+ return failure(new InvalidDomainError(fullDomain, `Domain must end with .${TLD}`));
96
+ }
97
+ return traverseDomainHierarchy(publicDataProvider, fullDomain, true);
98
+ }
99
+ export async function getDomainInfo(contractAddress, domainName, options = {}) {
100
+ const publicDataProvider = options.provider || getDefaultProvider();
101
+ try {
102
+ const contractStateResult = await queryContractStateSafely(publicDataProvider, contractAddress);
103
+ if (!contractStateResult.success)
104
+ return failure(contractStateResult.error);
105
+ const contractLedger = ledger(contractStateResult.data.data);
106
+ if (!contractLedger.domains.member(domainName)) {
107
+ return failure(new DomainNotFoundError(domainName));
108
+ }
109
+ const domainData = contractLedger.domains.lookup(domainName);
110
+ const ownerCoinPublicKey = new ShieldedCoinPublicKey(Buffer.from(domainData.owner.bytes));
111
+ const ownerAddress = ShieldedCoinPublicKey.codec.encode(getZswapNetworkId(), ownerCoinPublicKey).asString();
112
+ return success({ owner: ownerAddress, resolver: formatContractAddress(domainData.resolver.bytes) });
113
+ }
114
+ catch (error) {
115
+ return failure(new NetworkError(`Failed to get domain info: ${error instanceof Error ? error.message : String(error)}`, error));
116
+ }
117
+ }
118
+ export async function getDomainInfoByResolving(fullDomain, options = {}) {
119
+ const publicDataProvider = options.provider || getDefaultProvider();
120
+ try {
121
+ const normalizedDomain = normalizeDomain(fullDomain);
122
+ const parsed = parseFullDomain(normalizedDomain);
123
+ if (!parsed.isValid) {
124
+ return failure(new InvalidDomainError(fullDomain, 'Invalid domain format'));
125
+ }
126
+ const parentContractAddressResult = await getResolverAddress(publicDataProvider, parsed.parentDomainPath);
127
+ if (!parentContractAddressResult.success)
128
+ return failure(parentContractAddressResult.error);
129
+ const infoResult = await getDomainInfo(parentContractAddressResult.data, parsed.domainName, { provider: publicDataProvider });
130
+ if (!infoResult.success)
131
+ return failure(infoResult.error);
132
+ return success({ ...infoResult.data, contractAddress: parentContractAddressResult.data });
133
+ }
134
+ catch (error) {
135
+ return failure(new NetworkError(`Failed to get domain info by resolving: ${error instanceof Error ? error.message : String(error)}`, error));
136
+ }
137
+ }
138
+ export async function getDomainFields(contractAddress, options = {}) {
139
+ const publicDataProvider = options.provider || getDefaultProvider();
140
+ try {
141
+ const contractStateResult = await queryContractStateSafely(publicDataProvider, contractAddress);
142
+ if (!contractStateResult.success)
143
+ return failure(contractStateResult.error);
144
+ const contractLedger = ledger(contractStateResult.data.data);
145
+ const fields = [];
146
+ for (const [key, value] of contractLedger.fields)
147
+ fields.push([key, value]);
148
+ return success(fields);
149
+ }
150
+ catch (error) {
151
+ return failure(new NetworkError(`Failed to get domain fields: ${error instanceof Error ? error.message : String(error)}`, error));
152
+ }
153
+ }
154
+ export async function getDomainSettings(contractAddress, options = {}) {
155
+ const publicDataProvider = options.provider || getDefaultProvider();
156
+ try {
157
+ const contractStateResult = await queryContractStateSafely(publicDataProvider, contractAddress);
158
+ if (!contractStateResult.success)
159
+ return failure(contractStateResult.error);
160
+ const contractLedger = ledger(contractStateResult.data.data);
161
+ return success({ coinColor: contractLedger.COIN_COLOR, domainCost: contractLedger.DOMAIN_COST });
162
+ }
163
+ catch (error) {
164
+ return failure(new NetworkError(`Failed to get domain settings: ${error instanceof Error ? error.message : String(error)}`, error));
165
+ }
166
+ }
167
+ export async function getDomainProfile(fullDomain, options = {}) {
168
+ const publicDataProvider = options.provider || getDefaultProvider();
169
+ try {
170
+ const normalized = normalizeDomain(fullDomain);
171
+ const [resolvedTargetResult, infoResult] = await Promise.all([
172
+ resolveDomain(normalized, { provider: publicDataProvider }),
173
+ getDomainInfoByResolving(normalized, { provider: publicDataProvider })
174
+ ]);
175
+ const resolvedTarget = resolvedTargetResult.success ? resolvedTargetResult.data : null;
176
+ const info = infoResult.success ? infoResult.data : null;
177
+ if (info && info.contractAddress) {
178
+ const [fieldsResult, settingsResult] = await Promise.all([
179
+ getDomainFields(info.resolver, { provider: publicDataProvider }),
180
+ getDomainSettings(info.resolver, { provider: publicDataProvider })
181
+ ]);
182
+ const fields = fieldsResult.success ? fieldsResult.data : [];
183
+ const settings = settingsResult.success ? settingsResult.data : null;
184
+ return success({ fullDomain: normalized, resolvedTarget, info, fields, settings });
185
+ }
186
+ return success({ fullDomain: normalized, resolvedTarget, info, fields: [], settings: null });
187
+ }
188
+ catch (error) {
189
+ return failure(new NetworkError(`Failed to get domain profile: ${error instanceof Error ? error.message : String(error)}`, error));
190
+ }
191
+ }
package/dist/index.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  export * from './types.js';
2
2
  export * from './utils/domain.js';
3
3
  export * from './utils/address.js';
4
- export { setDefaultProvider, getDefaultProvider, setupDefaultProvider } from './provider.js';
5
- export { resolveDomain, getDomainInfo, getDomainInfoByResolving, getDomainFields, getNamespacedDomainFields, getDomainSettings, getDomainProfile } from './modules/index.js';
6
- export { TESTNET_TLD_ADDRESS } from './modules/core.js';
4
+ export * from './core.js';
5
+ export * from './provider.js';
package/dist/index.js CHANGED
@@ -1,10 +1,5 @@
1
- // Types and utilities
2
1
  export * from './types.js';
3
2
  export * from './utils/domain.js';
4
3
  export * from './utils/address.js';
5
- // Provider management
6
- export { setDefaultProvider, getDefaultProvider, setupDefaultProvider } from './provider.js';
7
- // Simplified API (provider optional)
8
- export { resolveDomain, getDomainInfo, getDomainInfoByResolving, getDomainFields, getNamespacedDomainFields, getDomainSettings, getDomainProfile } from './modules/index.js';
9
- // Constants
10
- export { TESTNET_TLD_ADDRESS } from './modules/core.js';
4
+ export * from './core.js';
5
+ export * from './provider.js';
@@ -5,7 +5,6 @@ export interface ProviderConfig {
5
5
  indexerWsUrl?: string;
6
6
  networkId?: NetworkId;
7
7
  }
8
- export declare function setupDefaultProvider(config?: ProviderConfig): PublicDataProvider;
8
+ export declare function getDefaultProvider(): PublicDataProvider;
9
9
  export declare function setDefaultProvider(provider: PublicDataProvider): void;
10
- export declare function getDefaultProvider(): PublicDataProvider | null;
11
- export declare function getProviderOrThrow(provider?: PublicDataProvider): PublicDataProvider;
10
+ export declare function createDefaultProvider(config?: ProviderConfig): PublicDataProvider;
package/dist/provider.js CHANGED
@@ -1,26 +1,21 @@
1
- import { setNetworkId, NetworkId } from '@midnight-ntwrk/midnight-js-network-id';
1
+ import { NetworkId, setNetworkId } from '@midnight-ntwrk/midnight-js-network-id';
2
2
  import { indexerPublicDataProvider } from '@midnight-ntwrk/midnight-js-indexer-public-data-provider';
3
3
  let defaultProvider = null;
4
- export function setupDefaultProvider(config = {}) {
5
- const { indexerUrl = "https://indexer.testnet-02.midnight.network/api/v1/graphql", indexerWsUrl = "wss://indexer.testnet-02.midnight.network/api/v1/graphql/ws", networkId = NetworkId.TestNet } = config;
6
- // Set network ID globally
7
- setNetworkId(networkId);
8
- // Create the provider with testnet defaults
9
- const provider = indexerPublicDataProvider(indexerUrl, indexerWsUrl);
10
- // Set it as the default
11
- setDefaultProvider(provider);
12
- return provider;
4
+ export function getDefaultProvider() {
5
+ if (!defaultProvider) {
6
+ const indexerUrl = "https://indexer.testnet-02.midnight.network/api/v1/graphql";
7
+ const indexerWsUrl = "wss://indexer.testnet-02.midnight.network/api/v1/graphql/ws";
8
+ const networkId = NetworkId.TestNet;
9
+ setNetworkId(networkId);
10
+ defaultProvider = indexerPublicDataProvider(indexerUrl, indexerWsUrl);
11
+ }
12
+ return defaultProvider;
13
13
  }
14
14
  export function setDefaultProvider(provider) {
15
15
  defaultProvider = provider;
16
16
  }
17
- export function getDefaultProvider() {
18
- return defaultProvider;
19
- }
20
- export function getProviderOrThrow(provider) {
21
- if (provider)
22
- return provider;
23
- if (defaultProvider)
24
- return defaultProvider;
25
- throw new Error('No provider specified. Either pass a provider parameter or set a default provider using setDefaultProvider().');
17
+ export function createDefaultProvider(config = {}) {
18
+ const { indexerUrl = "https://indexer.testnet-02.midnight.network/api/v1/graphql", indexerWsUrl = "wss://indexer.testnet-02.midnight.network/api/v1/graphql/ws", networkId = NetworkId.TestNet } = config;
19
+ setNetworkId(networkId);
20
+ return indexerPublicDataProvider(indexerUrl, indexerWsUrl);
26
21
  }
@@ -0,0 +1,2 @@
1
+ export { DomainProfileWidget, CopyableValue } from '../DomainProfileWidget.js';
2
+ export type { DomainProfileWidgetProps } from '../DomainProfileWidget.js';
@@ -0,0 +1 @@
1
+ export { DomainProfileWidget, CopyableValue } from '../DomainProfileWidget.js';
@@ -3,8 +3,8 @@ import { useEffect, useMemo, useState } from 'react';
3
3
  import { MidNamesError } from '../types.js';
4
4
  import { deriveShieldedAddress } from '../utils/address.js';
5
5
  import { Copy, Check } from 'lucide-react';
6
- import { getDomainProfile } from '../modules/index.js';
7
- import { getProviderOrThrow } from '../provider.js';
6
+ import { getDomainProfile } from '../core.js';
7
+ import { getDefaultProvider } from '../provider.js';
8
8
  function truncate(addr, head = 10, tail = 6) {
9
9
  if (!addr)
10
10
  return 'N/A';
@@ -61,7 +61,7 @@ onFieldClick, onCopySuccess, }) {
61
61
  let mounted = true;
62
62
  setLoading(true);
63
63
  setError(null);
64
- getDomainProfile(fullDomain, { provider: getProviderOrThrow(publicDataProvider) })
64
+ getDomainProfile(fullDomain, { provider: publicDataProvider || getDefaultProvider() })
65
65
  .then((d) => {
66
66
  var _a, _b, _c, _d, _e, _f, _g, _h;
67
67
  if (mounted) {
@@ -0,0 +1,3 @@
1
+ export { default } from '../HolographicCard.js';
2
+ export { default as HolographicCard } from '../HolographicCard.js';
3
+ export type { HolographicCardProps } from '../HolographicCard.js';
@@ -0,0 +1,2 @@
1
+ export { default } from '../HolographicCard.js';
2
+ export { default as HolographicCard } from '../HolographicCard.js';
@@ -7,7 +7,7 @@ import { MidNamesError } from '../types.js';
7
7
  export interface HolographicCardProps {
8
8
  /** Domain name to resolve and display */
9
9
  domain: string;
10
- /** Public data provider for fetching domain information (optional if default provider is set) */
10
+ /** Public data provider for fetching domain information */
11
11
  publicDataProvider?: PublicDataProvider;
12
12
  /** Custom CSS gradient string for the background gradient effect */
13
13
  behindGradient?: string;
@@ -1,8 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React, { useEffect, useRef, useCallback, useMemo, useState } from 'react';
3
3
  import { MidNamesError } from '../types.js';
4
- import { getDomainProfile } from '../modules/index.js';
5
- import { getProviderOrThrow } from '../provider.js';
4
+ import { getDomainProfile } from '../core.js';
5
+ import { getDefaultProvider } from '../provider.js';
6
6
  const DEFAULT_BEHIND_GRADIENT = 'radial-gradient(farthest-side circle at var(--midnames-holo-pointer-x) var(--midnames-holo-pointer-y),hsla(266,100%,90%,var(--midnames-holo-card-opacity)) 4%,hsla(266,50%,80%,calc(var(--midnames-holo-card-opacity)*0.75)) 10%,hsla(266,25%,70%,calc(var(--midnames-holo-card-opacity)*0.5)) 50%,hsla(266,0%,60%,0) 100%),radial-gradient(35% 52% at 55% 20%,#00ffaac4 0%,#073aff00 100%),radial-gradient(100% 100% at 50% 50%,#00c1ffff 1%,#073aff00 76%),conic-gradient(from 124deg at 50% 50%,#c137ffff 0%,#07c6ffff 40%,#07c6ffff 60%,#c137ffff 100%)';
7
7
  const DEFAULT_INNER_GRADIENT = 'linear-gradient(145deg,#60496e8c 0%,#71C4FF44 100%)';
8
8
  const ANIMATION_CONFIG = {
@@ -29,7 +29,7 @@ const HolographicCardComponent = ({ domain, publicDataProvider, behindGradient,
29
29
  let mounted = true;
30
30
  setLoading(true);
31
31
  setError(null);
32
- getDomainProfile(domain, { provider: getProviderOrThrow(publicDataProvider) })
32
+ getDomainProfile(domain, { provider: publicDataProvider || getDefaultProvider() })
33
33
  .then((result) => {
34
34
  var _a, _b, _c, _d;
35
35
  if (mounted) {
@@ -1,3 +1,4 @@
1
1
  export declare function bytesToHex(bytes: Uint8Array): string;
2
2
  export declare function formatContractAddress(bytes: Uint8Array): string;
3
3
  export declare function deriveShieldedAddress(coinPublicKeyAddress: string, encryptionPublicKey: string): string | null;
4
+ export declare function isWalletAddress(address: string): boolean;
@@ -22,3 +22,6 @@ export function deriveShieldedAddress(coinPublicKeyAddress, encryptionPublicKey)
22
22
  return null;
23
23
  }
24
24
  }
25
+ export function isWalletAddress(address) {
26
+ return address.startsWith('mn_');
27
+ }
@@ -0,0 +1,2 @@
1
+ export * from './domain.js';
2
+ export * from './address.js';
@@ -0,0 +1,2 @@
1
+ export * from './domain.js';
2
+ export * from './address.js';