@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 +26 -94
- package/dist/core.d.ts +22 -5
- package/dist/core.js +191 -4
- package/dist/index.d.ts +2 -3
- package/dist/index.js +2 -7
- package/dist/provider.d.ts +2 -3
- package/dist/provider.js +14 -19
- package/dist/react/DomainProfileWidget/index.d.ts +2 -0
- package/dist/react/DomainProfileWidget/index.js +1 -0
- package/dist/react/DomainProfileWidget.js +3 -3
- package/dist/react/HolographicCard/index.d.ts +3 -0
- package/dist/react/HolographicCard/index.js +2 -0
- package/dist/react/HolographicCard.d.ts +1 -1
- package/dist/react/HolographicCard.js +3 -3
- package/dist/utils/address.d.ts +1 -0
- package/dist/utils/address.js +3 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +2 -0
- package/package.json +47 -50
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/info.d.ts +0 -5
- package/dist/info.js +0 -5
- package/dist/modules/core.d.ts +0 -8
- package/dist/modules/core.js +0 -80
- package/dist/modules/index.d.ts +0 -3
- package/dist/modules/index.js +0 -6
- package/dist/modules/info.d.ts +0 -20
- package/dist/modules/info.js +0 -152
- package/dist/utils.d.ts +0 -2
- package/dist/utils.js +0 -3
- package/exports.json +0 -7717
package/README.md
CHANGED
|
@@ -1,114 +1,46 @@
|
|
|
1
1
|
># @midnames/sdk
|
|
2
2
|
|
|
3
|
-
SDK to resolve Midnames domains and render
|
|
3
|
+
SDK to resolve Midnames domains, and render a profile widget.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Build
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
import { getDomainProfile, setupDefaultProvider } from '@midnames/sdk';
|
|
7
|
+
Run the `build` script with `npm`, `bun`, etc.
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
setupDefaultProvider();
|
|
9
|
+
## Usage
|
|
12
10
|
|
|
13
|
-
|
|
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
|
-
|
|
13
|
+
```ts
|
|
14
|
+
import { resolveDomain, getDomainProfile } from '@midnames/sdk';
|
|
15
|
+
import type { PublicDataProvider } from '@midnight-ntwrk/midnight-js-types';
|
|
21
16
|
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
26
|
+
```tsx
|
|
27
|
+
import '@midnames/sdk/styles.css';
|
|
28
|
+
import { DomainProfileWidget } from '@midnames/sdk/react';
|
|
39
29
|
|
|
40
|
-
|
|
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
|
-
|
|
33
|
+
Fields recognized for display: `name`, `bio`, `avatar`, `banner`, `website`, `twitter`, `github`, `location`, and `epk`.
|
|
48
34
|
|
|
49
|
-
|
|
50
|
-
import { getDomainProfile, setupDefaultProvider, setDefaultProvider } from '@midnames/sdk';
|
|
35
|
+
## API
|
|
51
36
|
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
|
|
59
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
|
5
|
-
export
|
|
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
|
-
|
|
6
|
-
export
|
|
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';
|
package/dist/provider.d.ts
CHANGED
|
@@ -5,7 +5,6 @@ export interface ProviderConfig {
|
|
|
5
5
|
indexerWsUrl?: string;
|
|
6
6
|
networkId?: NetworkId;
|
|
7
7
|
}
|
|
8
|
-
export declare function
|
|
8
|
+
export declare function getDefaultProvider(): PublicDataProvider;
|
|
9
9
|
export declare function setDefaultProvider(provider: PublicDataProvider): void;
|
|
10
|
-
export declare function
|
|
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 {
|
|
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
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
return
|
|
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
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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 @@
|
|
|
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 '../
|
|
7
|
-
import {
|
|
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:
|
|
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) {
|
|
@@ -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
|
|
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 '../
|
|
5
|
-
import {
|
|
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:
|
|
32
|
+
getDomainProfile(domain, { provider: publicDataProvider || getDefaultProvider() })
|
|
33
33
|
.then((result) => {
|
|
34
34
|
var _a, _b, _c, _d;
|
|
35
35
|
if (mounted) {
|
package/dist/utils/address.d.ts
CHANGED
|
@@ -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;
|
package/dist/utils/address.js
CHANGED