@midnames/sdk 1.0.5 → 2.0.0-rc1
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 +4 -43
- package/dist/contract.d.ts +5 -0
- package/dist/contract.js +5 -0
- package/dist/core.d.ts +27 -9
- package/dist/core.js +196 -233
- package/dist/errors.d.ts +0 -3
- package/dist/errors.js +9 -17
- package/dist/holographic-card.css +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/index.js +15 -11
- package/{node_modules/@midnames/ns/dist/managed/leaf → dist/managed}/compiler/contract-info.json +298 -232
- package/dist/managed/contract/index.d.ts +237 -0
- package/{node_modules/@midnames/ns/dist/managed/leaf → dist/managed}/contract/index.js +2044 -1713
- package/dist/managed/keys/add_domain_field.prover +0 -0
- package/dist/managed/keys/add_multiple_fields.prover +0 -0
- package/dist/managed/keys/change_field_limit.prover +0 -0
- package/dist/managed/keys/change_root_enable_subdomains.prover +0 -0
- package/dist/managed/keys/clear_domain_fields.prover +0 -0
- package/dist/managed/keys/create_domain.prover +0 -0
- package/dist/managed/keys/lock_payment_config.prover +0 -0
- package/dist/managed/keys/lock_target.prover +0 -0
- package/dist/managed/keys/remove_domain_field.prover +0 -0
- package/dist/managed/keys/transfer_domain.prover +0 -0
- package/dist/managed/keys/update_domain_default_field.prover +0 -0
- package/dist/managed/keys/update_payment_config.prover +0 -0
- package/dist/managed/keys/update_target.prover +0 -0
- package/dist/operations.d.ts +32 -20
- package/dist/operations.js +86 -103
- package/dist/provider.d.ts +6 -7
- package/dist/provider.js +11 -7
- package/dist/react/DomainProfileWidget.d.ts +1 -1
- package/dist/react/DomainProfileWidget.js +14 -36
- package/dist/react/HolographicCard.d.ts +1 -17
- package/dist/react/HolographicCard.js +1 -6
- package/dist/results.d.ts +0 -25
- package/dist/results.js +2 -75
- package/dist/styles.css +0 -1
- package/dist/types.d.ts +19 -4
- package/dist/types.js +1 -2
- package/dist/utils/address.d.ts +6 -1
- package/dist/utils/address.js +23 -6
- package/dist/utils/domain.d.ts +0 -4
- package/dist/utils/domain.js +15 -40
- package/dist/utils/sanitize.js +0 -4
- package/dist/witnesses.d.ts +8 -0
- package/dist/witnesses.js +6 -0
- package/package.json +45 -83
- package/dist/controller-types.d.ts +0 -108
- package/dist/controller-types.js +0 -17
- package/dist/controller-types.js.map +0 -1
- package/dist/core.js.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/operations.js.map +0 -1
- package/dist/provider.js.map +0 -1
- package/dist/react/DomainProfileWidget/index.d.ts +0 -2
- package/dist/react/DomainProfileWidget/index.js +0 -2
- package/dist/react/DomainProfileWidget/index.js.map +0 -1
- package/dist/react/DomainProfileWidget.js.map +0 -1
- package/dist/react/HolographicCard/index.d.ts +0 -3
- package/dist/react/HolographicCard/index.js +0 -3
- package/dist/react/HolographicCard/index.js.map +0 -1
- package/dist/react/HolographicCard.js.map +0 -1
- package/dist/react/index.d.ts +0 -3
- package/dist/react/index.js +0 -3
- package/dist/react/index.js.map +0 -1
- package/dist/results.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils/address.js.map +0 -1
- package/dist/utils/domain.js.map +0 -1
- package/dist/utils/imageResolver.d.ts +0 -8
- package/dist/utils/imageResolver.js +0 -90
- package/dist/utils/imageResolver.js.map +0 -1
- package/dist/utils/index.d.ts +0 -2
- package/dist/utils/index.js +0 -3
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/sanitize.js.map +0 -1
- package/node_modules/@midnames/ns/dist/index.d.ts +0 -5
- package/node_modules/@midnames/ns/dist/index.js +0 -6
- package/node_modules/@midnames/ns/dist/index.js.map +0 -1
- package/node_modules/@midnames/ns/dist/leaf.compact +0 -290
- package/node_modules/@midnames/ns/dist/managed/leaf/contract/index.d.ts +0 -197
- package/node_modules/@midnames/ns/dist/managed/leaf/contract/index.js.map +0 -8
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/add_multiple_fields.prover +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/add_multiple_fields.verifier +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/buy_domain_for.prover +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/buy_domain_for.verifier +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/change_owner.prover +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/change_owner.verifier +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/clear_all_fields.prover +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/clear_all_fields.verifier +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/clear_field.prover +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/clear_field.verifier +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/insert_field.prover +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/insert_field.verifier +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/register_domain_for.prover +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/register_domain_for.verifier +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/set_resolver.prover +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/set_resolver.verifier +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/transfer_domain.prover +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/transfer_domain.verifier +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/update_color.prover +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/update_color.verifier +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/update_costs.prover +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/update_costs.verifier +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/update_domain_target.prover +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/update_domain_target.verifier +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/update_target_and_fields.prover +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/keys/update_target_and_fields.verifier +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/add_multiple_fields.bzkir +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/add_multiple_fields.zkir +0 -424
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/buy_domain_for.bzkir +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/buy_domain_for.zkir +0 -1456
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/change_owner.bzkir +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/change_owner.zkir +0 -57
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/clear_all_fields.bzkir +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/clear_all_fields.zkir +0 -53
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/clear_field.bzkir +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/clear_field.zkir +0 -58
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/insert_field.bzkir +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/insert_field.zkir +0 -65
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/register_domain_for.bzkir +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/register_domain_for.zkir +0 -401
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/set_resolver.bzkir +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/set_resolver.zkir +0 -109
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/transfer_domain.bzkir +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/transfer_domain.zkir +0 -212
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/update_color.bzkir +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/update_color.zkir +0 -58
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/update_costs.bzkir +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/update_costs.zkir +0 -88
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/update_domain_target.bzkir +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/update_domain_target.zkir +0 -66
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/update_target_and_fields.bzkir +0 -0
- package/node_modules/@midnames/ns/dist/managed/leaf/zkir/update_target_and_fields.zkir +0 -450
- package/node_modules/@midnames/ns/dist/utils.d.ts +0 -5
- package/node_modules/@midnames/ns/dist/utils.js +0 -19
- package/node_modules/@midnames/ns/dist/utils.js.map +0 -1
- package/node_modules/@midnames/ns/dist/witnesses.d.ts +0 -4
- package/node_modules/@midnames/ns/dist/witnesses.js +0 -3
- package/node_modules/@midnames/ns/dist/witnesses.js.map +0 -1
- package/node_modules/@midnames/ns/package.json +0 -55
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/operations.d.ts
CHANGED
|
@@ -1,49 +1,61 @@
|
|
|
1
1
|
import { CompiledContract } from "@midnight-ntwrk/compact-js";
|
|
2
2
|
import { type ContractProviders } from "@midnight-ntwrk/midnight-js-contracts";
|
|
3
|
-
import {
|
|
4
|
-
import type {
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
import { NS } from "./contract.js";
|
|
4
|
+
import type { DomainTarget } from "./types.js";
|
|
5
|
+
import type { PaymentConfig } from "./managed/contract/index.js";
|
|
6
|
+
import { type Result } from "./results.js";
|
|
7
|
+
export declare const nsContractInstance: CompiledContract.CompiledContract<NS.Contract<any, any>, any, never>;
|
|
8
|
+
export interface OperationOptions {
|
|
9
|
+
contractAddress?: string;
|
|
10
|
+
secretKey?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function buildKvs(fields: Array<[string, string]>, size?: number): Array<{
|
|
7
13
|
is_some: boolean;
|
|
8
14
|
value: [string, string];
|
|
9
15
|
}>;
|
|
10
|
-
export declare function
|
|
16
|
+
export declare function createDomain(domainName: string, parentId: bigint, ownerAddress: {
|
|
17
|
+
bytes: Uint8Array;
|
|
18
|
+
}, target: DomainTarget, paymentConfig: PaymentConfig, providers: ContractProviders<NS.Contract>, options?: OperationOptions & {
|
|
19
|
+
fields?: Array<[string, string]>;
|
|
20
|
+
defaultField?: string;
|
|
21
|
+
}): Promise<Result<{
|
|
11
22
|
transactionId: string;
|
|
12
23
|
}>>;
|
|
13
|
-
export declare function
|
|
24
|
+
export declare function transferDomain(domainName: string, parentId: bigint, newOwner: Uint8Array, newOwnerAddress: {
|
|
25
|
+
bytes: Uint8Array;
|
|
26
|
+
}, providers: ContractProviders<NS.Contract>, options?: OperationOptions): Promise<Result<{
|
|
14
27
|
transactionId: string;
|
|
15
28
|
}>>;
|
|
16
|
-
export declare function
|
|
29
|
+
export declare function addDomainField(domainId: bigint, key: string, value: string, providers: ContractProviders<NS.Contract>, options?: OperationOptions): Promise<Result<{
|
|
17
30
|
transactionId: string;
|
|
18
31
|
}>>;
|
|
19
|
-
export declare function addMultipleFields(
|
|
32
|
+
export declare function addMultipleFields(domainId: bigint, fields: Array<[string, string]>, providers: ContractProviders<NS.Contract>, options?: OperationOptions): Promise<Result<{
|
|
20
33
|
transactionId: string;
|
|
21
34
|
}>>;
|
|
22
|
-
export declare function
|
|
35
|
+
export declare function removeDomainField(domainId: bigint, key: string, providers: ContractProviders<NS.Contract>, options?: OperationOptions): Promise<Result<{
|
|
23
36
|
transactionId: string;
|
|
24
37
|
}>>;
|
|
25
|
-
export declare function
|
|
38
|
+
export declare function clearDomainFields(domainId: bigint, providers: ContractProviders<NS.Contract>, options?: OperationOptions): Promise<Result<{
|
|
26
39
|
transactionId: string;
|
|
27
40
|
}>>;
|
|
28
|
-
export declare function
|
|
29
|
-
short: bigint;
|
|
30
|
-
medium: bigint;
|
|
31
|
-
long: bigint;
|
|
32
|
-
}, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
41
|
+
export declare function updateDefaultField(domainId: bigint, field: string | null, providers: ContractProviders<NS.Contract>, options?: OperationOptions): Promise<Result<{
|
|
33
42
|
transactionId: string;
|
|
34
43
|
}>>;
|
|
35
|
-
export declare function
|
|
44
|
+
export declare function updateDomainTarget(domainId: bigint, target: DomainTarget, providers: ContractProviders<NS.Contract>, options?: OperationOptions): Promise<Result<{
|
|
36
45
|
transactionId: string;
|
|
37
46
|
}>>;
|
|
38
|
-
export declare function
|
|
47
|
+
export declare function updatePaymentConfig(domainId: bigint, config: PaymentConfig, providers: ContractProviders<NS.Contract>, options?: OperationOptions): Promise<Result<{
|
|
39
48
|
transactionId: string;
|
|
40
49
|
}>>;
|
|
41
|
-
export declare function
|
|
50
|
+
export declare function changeRootEnableSubdomains(enabled: boolean, providers: ContractProviders<NS.Contract>, options?: OperationOptions): Promise<Result<{
|
|
42
51
|
transactionId: string;
|
|
43
52
|
}>>;
|
|
44
|
-
export declare function
|
|
53
|
+
export declare function changeFieldLimit(limit: bigint | null, providers: ContractProviders<NS.Contract>, options?: OperationOptions): Promise<Result<{
|
|
45
54
|
transactionId: string;
|
|
46
55
|
}>>;
|
|
47
|
-
export declare function
|
|
56
|
+
export declare function lockTarget(domainId: bigint, providers: ContractProviders<NS.Contract>, options?: OperationOptions): Promise<Result<{
|
|
57
|
+
transactionId: string;
|
|
58
|
+
}>>;
|
|
59
|
+
export declare function lockPaymentConfig(domainId: bigint, providers: ContractProviders<NS.Contract>, options?: OperationOptions): Promise<Result<{
|
|
48
60
|
transactionId: string;
|
|
49
61
|
}>>;
|
package/dist/operations.js
CHANGED
|
@@ -1,47 +1,33 @@
|
|
|
1
1
|
import { CompiledContract } from "@midnight-ntwrk/compact-js";
|
|
2
2
|
import { findDeployedContract, } from "@midnight-ntwrk/midnight-js-contracts";
|
|
3
|
-
import { ShieldedCoinPublicKey, MidnightBech32m, } from "@midnight-ntwrk/wallet-sdk-address-format";
|
|
4
|
-
import { isWalletAddress } from "./utils/address.js";
|
|
5
3
|
import { getNetworkId } from "@midnight-ntwrk/midnight-js-network-id";
|
|
6
|
-
import {
|
|
4
|
+
import { NS, MANAGED_DIR, witnesses, AddressType } from "./contract.js";
|
|
7
5
|
import { success, failure } from "./results.js";
|
|
8
|
-
import { NetworkError
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
6
|
+
import { NetworkError } from "./errors.js";
|
|
7
|
+
import { domainToKey } from "./utils/domain.js";
|
|
8
|
+
import { parseAddressToBytes } from "./utils/address.js";
|
|
9
|
+
import { getNetworkConfig } from "./provider.js";
|
|
10
|
+
// ---- Contract instance ----
|
|
11
|
+
export const nsContractInstance = CompiledContract.make("ns-contract", NS.Contract).pipe(CompiledContract.withWitnesses(witnesses), CompiledContract.withCompiledFileAssets(MANAGED_DIR));
|
|
12
|
+
function getDefaultContractAddress() {
|
|
13
|
+
const currentNetwork = getNetworkId();
|
|
14
|
+
return getNetworkConfig(currentNetwork).contractAddress;
|
|
15
|
+
}
|
|
16
|
+
async function joinNsContract(providers, contractAddress, secretKey) {
|
|
17
|
+
const initialPrivateState = secretKey
|
|
18
|
+
? { secretKey }
|
|
19
|
+
: { phantom: false };
|
|
22
20
|
return await findDeployedContract(providers, {
|
|
23
|
-
contractAddress,
|
|
24
|
-
compiledContract:
|
|
25
|
-
privateStateId: "
|
|
26
|
-
initialPrivateState
|
|
21
|
+
contractAddress: contractAddress ?? getDefaultContractAddress(),
|
|
22
|
+
compiledContract: nsContractInstance,
|
|
23
|
+
privateStateId: "nsPrivateState",
|
|
24
|
+
initialPrivateState,
|
|
27
25
|
});
|
|
28
26
|
}
|
|
29
|
-
|
|
30
|
-
async function withLeafContract(domain, providers, label, fn) {
|
|
31
|
-
const validated = validateDomain(domain);
|
|
32
|
-
if (!validated.success)
|
|
33
|
-
return failure(validated.error);
|
|
27
|
+
async function withContract(providers, label, fn, options) {
|
|
34
28
|
try {
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
});
|
|
38
|
-
if (!domainInfoResult.success) {
|
|
39
|
-
return failure(domainInfoResult.error);
|
|
40
|
-
}
|
|
41
|
-
const contractAddress = domainInfoResult.data.resolver;
|
|
42
|
-
const contract = await joinLeafContract(providers, contractAddress);
|
|
43
|
-
const result = await fn(contract, domainInfoResult.data);
|
|
44
|
-
return success(result);
|
|
29
|
+
const contract = await joinNsContract(providers, options?.contractAddress, options?.secretKey);
|
|
30
|
+
return success(await fn(contract));
|
|
45
31
|
}
|
|
46
32
|
catch (error) {
|
|
47
33
|
return failure(new NetworkError(`Failed to ${label}: ${error instanceof Error ? error.message : String(error)}`, error));
|
|
@@ -50,89 +36,86 @@ async function withLeafContract(domain, providers, label, fn) {
|
|
|
50
36
|
function txId(result) {
|
|
51
37
|
return { transactionId: result.public.txId };
|
|
52
38
|
}
|
|
53
|
-
|
|
54
|
-
|
|
39
|
+
function targetToContractArgs(target) {
|
|
40
|
+
const parsed = parseAddressToBytes(target.address);
|
|
41
|
+
switch (target.type) {
|
|
42
|
+
case "contract":
|
|
43
|
+
return { targetBytes: parsed.bytes, targetType: AddressType.ContractAddr };
|
|
44
|
+
case "shielded":
|
|
45
|
+
return { targetBytes: parsed.bytes, targetType: AddressType.ZswapCPKAddr };
|
|
46
|
+
case "unshielded":
|
|
47
|
+
return { targetBytes: parsed.bytes, targetType: AddressType.UnshieldedAddr };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export function buildKvs(fields, size = 10) {
|
|
51
|
+
return Array.from({ length: size }, (_, i) => ({
|
|
55
52
|
is_some: i < fields.length,
|
|
56
53
|
value: i < fields.length ? fields[i] : ["", ""],
|
|
57
54
|
}));
|
|
58
55
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
left: isLeft ? parsed : { bytes: new Uint8Array(32) },
|
|
80
|
-
right: isLeft ? { bytes: new Uint8Array(32) } : parsed,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
// --- Domain operations ---
|
|
84
|
-
export async function insertField(domain, key, value, providers) {
|
|
85
|
-
return withLeafContract(domain, providers, "insert field", async (contract) => txId(await contract.callTx.insert_field(key, value)));
|
|
86
|
-
}
|
|
87
|
-
export async function clearField(domain, key, providers) {
|
|
88
|
-
return withLeafContract(domain, providers, "clear field", async (contract) => txId(await contract.callTx.clear_field(key)));
|
|
89
|
-
}
|
|
90
|
-
export async function clearAllFields(domain, providers) {
|
|
91
|
-
return withLeafContract(domain, providers, "clear all fields", async (contract) => txId(await contract.callTx.clear_all_fields()));
|
|
92
|
-
}
|
|
93
|
-
export async function addMultipleFields(domain, fields, providers) {
|
|
56
|
+
// ---- Domain creation ----
|
|
57
|
+
export async function createDomain(domainName, parentId, ownerAddress, target, paymentConfig, providers, options) {
|
|
58
|
+
const { key, len } = domainToKey(domainName);
|
|
59
|
+
const { targetBytes, targetType } = targetToContractArgs(target);
|
|
60
|
+
const kvs = buildKvs(options?.fields ?? [], 10);
|
|
61
|
+
const defaultField = options?.defaultField
|
|
62
|
+
? { is_some: true, value: options.defaultField }
|
|
63
|
+
: { is_some: false, value: "" };
|
|
64
|
+
return withContract(providers, "create domain", async (contract) => txId(await contract.callTx.create_domain(ownerAddress, key, len, parentId, targetBytes, targetType, defaultField, paymentConfig, kvs)), options);
|
|
65
|
+
}
|
|
66
|
+
// ---- Domain updates ----
|
|
67
|
+
export async function transferDomain(domainName, parentId, newOwner, newOwnerAddress, providers, options) {
|
|
68
|
+
const { key } = domainToKey(domainName);
|
|
69
|
+
return withContract(providers, "transfer domain", async (contract) => txId(await contract.callTx.transfer_domain(key, parentId, newOwner, newOwnerAddress)), options);
|
|
70
|
+
}
|
|
71
|
+
// ---- Field operations ----
|
|
72
|
+
export async function addDomainField(domainId, key, value, providers, options) {
|
|
73
|
+
return withContract(providers, "add domain field", async (contract) => txId(await contract.callTx.add_domain_field(domainId, key, value)), options);
|
|
74
|
+
}
|
|
75
|
+
export async function addMultipleFields(domainId, fields, providers, options) {
|
|
94
76
|
if (fields.length === 0) {
|
|
95
77
|
return failure(new NetworkError("No fields provided"));
|
|
96
78
|
}
|
|
97
79
|
if (fields.length > 10) {
|
|
98
80
|
return failure(new NetworkError("Maximum of 10 fields can be added at once"));
|
|
99
81
|
}
|
|
100
|
-
|
|
82
|
+
const kvs = buildKvs(fields, 10);
|
|
83
|
+
return withContract(providers, "add multiple fields", async (contract) => txId(await contract.callTx.add_multiple_fields(domainId, kvs)), options);
|
|
101
84
|
}
|
|
102
|
-
export async function
|
|
103
|
-
return
|
|
85
|
+
export async function removeDomainField(domainId, key, providers, options) {
|
|
86
|
+
return withContract(providers, "remove domain field", async (contract) => txId(await contract.callTx.remove_domain_field(domainId, key)), options);
|
|
104
87
|
}
|
|
105
|
-
export async function
|
|
106
|
-
|
|
107
|
-
return failure(new NetworkError("Color must be exactly 32 bytes"));
|
|
108
|
-
}
|
|
109
|
-
return withLeafContract(domain, providers, "update domain color", async (contract) => txId(await contract.callTx.update_color(color)));
|
|
88
|
+
export async function clearDomainFields(domainId, providers, options) {
|
|
89
|
+
return withContract(providers, "clear domain fields", async (contract) => txId(await contract.callTx.clear_domain_fields(domainId)), options);
|
|
110
90
|
}
|
|
111
|
-
export async function
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
return
|
|
91
|
+
export async function updateDefaultField(domainId, field, providers, options) {
|
|
92
|
+
const maybe = field !== null
|
|
93
|
+
? { is_some: true, value: field }
|
|
94
|
+
: { is_some: false, value: "" };
|
|
95
|
+
return withContract(providers, "update default field", async (contract) => txId(await contract.callTx.update_domain_default_field(domainId, maybe)), options);
|
|
116
96
|
}
|
|
117
|
-
|
|
118
|
-
|
|
97
|
+
// ---- Granular update operations ----
|
|
98
|
+
export async function updateDomainTarget(domainId, target, providers, options) {
|
|
99
|
+
const { targetBytes, targetType } = targetToContractArgs(target);
|
|
100
|
+
return withContract(providers, "update target", async (contract) => txId(await contract.callTx.update_target(domainId, targetBytes, targetType)), options);
|
|
119
101
|
}
|
|
120
|
-
export async function
|
|
121
|
-
return
|
|
102
|
+
export async function updatePaymentConfig(domainId, config, providers, options) {
|
|
103
|
+
return withContract(providers, "update payment config", async (contract) => txId(await contract.callTx.update_payment_config(domainId, config)), options);
|
|
122
104
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
return txId(await contract.callTx.register_domain_for(parseAddressToBytes(ownerAddress), key, len, parseAddressToBytes(resolverAddress)));
|
|
127
|
-
});
|
|
105
|
+
// ---- Root zone operations ----
|
|
106
|
+
export async function changeRootEnableSubdomains(enabled, providers, options) {
|
|
107
|
+
return withContract(providers, "change root enable subdomains", async (contract) => txId(await contract.callTx.change_root_enable_subdomains(enabled)), options);
|
|
128
108
|
}
|
|
129
|
-
export async function
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
109
|
+
export async function changeFieldLimit(limit, providers, options) {
|
|
110
|
+
const maybe = limit !== null
|
|
111
|
+
? { is_some: true, value: limit }
|
|
112
|
+
: { is_some: false, value: 0n };
|
|
113
|
+
return withContract(providers, "change field limit", async (contract) => txId(await contract.callTx.change_field_limit(maybe)), options);
|
|
114
|
+
}
|
|
115
|
+
// ---- Lock operations ----
|
|
116
|
+
export async function lockTarget(domainId, providers, options) {
|
|
117
|
+
return withContract(providers, "lock target", async (contract) => txId(await contract.callTx.lock_target(domainId)), options);
|
|
134
118
|
}
|
|
135
|
-
export async function
|
|
136
|
-
return
|
|
119
|
+
export async function lockPaymentConfig(domainId, providers, options) {
|
|
120
|
+
return withContract(providers, "lock payment config", async (contract) => txId(await contract.callTx.lock_payment_config(domainId)), options);
|
|
137
121
|
}
|
|
138
|
-
//# sourceMappingURL=operations.js.map
|
package/dist/provider.d.ts
CHANGED
|
@@ -2,15 +2,14 @@ import type { PublicDataProvider } from "@midnight-ntwrk/midnight-js-types";
|
|
|
2
2
|
export interface NetworkConfig {
|
|
3
3
|
indexerUrl: string;
|
|
4
4
|
indexerWsUrl: string;
|
|
5
|
-
|
|
5
|
+
contractAddress: string;
|
|
6
6
|
}
|
|
7
7
|
export declare const NETWORK_REGISTRY: Record<string, NetworkConfig>;
|
|
8
|
-
export interface ProviderConfig {
|
|
9
|
-
indexerUrl?: string;
|
|
10
|
-
indexerWsUrl?: string;
|
|
11
|
-
networkId?: string;
|
|
12
|
-
}
|
|
13
8
|
export declare function getNetworkConfig(networkId: string): NetworkConfig;
|
|
14
9
|
export declare function getDefaultProvider(networkId?: string): PublicDataProvider;
|
|
15
10
|
export declare function setDefaultProvider(provider: PublicDataProvider): void;
|
|
16
|
-
export declare function createDefaultProvider(config?:
|
|
11
|
+
export declare function createDefaultProvider(config?: {
|
|
12
|
+
indexerUrl?: string;
|
|
13
|
+
indexerWsUrl?: string;
|
|
14
|
+
networkId?: string;
|
|
15
|
+
}): PublicDataProvider;
|
package/dist/provider.js
CHANGED
|
@@ -1,26 +1,31 @@
|
|
|
1
|
-
import { setNetworkId
|
|
1
|
+
import { setNetworkId } from "@midnight-ntwrk/midnight-js-network-id";
|
|
2
2
|
import { indexerPublicDataProvider } from "@midnight-ntwrk/midnight-js-indexer-public-data-provider";
|
|
3
3
|
export const NETWORK_REGISTRY = {
|
|
4
4
|
preview: {
|
|
5
5
|
indexerUrl: "https://indexer.preview.midnight.network/api/v3/graphql",
|
|
6
6
|
indexerWsUrl: "wss://indexer.preview.midnight.network/api/v3/graphql/ws",
|
|
7
|
-
|
|
7
|
+
contractAddress: "", // TODO: set after deployment
|
|
8
8
|
},
|
|
9
9
|
preprod: {
|
|
10
10
|
indexerUrl: "https://indexer.preprod.midnight.network/api/v3/graphql",
|
|
11
11
|
indexerWsUrl: "wss://indexer.preprod.midnight.network/api/v3/graphql/ws",
|
|
12
|
-
|
|
12
|
+
contractAddress: "cd74a2e9765e1f56e4ada5e2eaea37040212456c386e7f0e7671bcde23577c9c",
|
|
13
|
+
},
|
|
14
|
+
mainnet: {
|
|
15
|
+
indexerUrl: "https://indexer.mainnet.midnight.network/api/v3/graphql",
|
|
16
|
+
indexerWsUrl: "wss://indexer.mainnet.midnight.network/api/v3/graphql/ws",
|
|
17
|
+
contractAddress: "83b0d57aba442f92e12b5cdf92642adb9927ccd554a9061b5bd0992fc72596bb",
|
|
13
18
|
},
|
|
14
19
|
};
|
|
15
20
|
export function getNetworkConfig(networkId) {
|
|
16
21
|
const config = NETWORK_REGISTRY[networkId];
|
|
17
22
|
if (!config) {
|
|
18
|
-
throw new Error(`Unknown network "${networkId}". Known networks: ${Object.keys(NETWORK_REGISTRY).join(", ")}
|
|
23
|
+
throw new Error(`Unknown network "${networkId}". Known networks: ${Object.keys(NETWORK_REGISTRY).join(", ")}`);
|
|
19
24
|
}
|
|
20
25
|
return config;
|
|
21
26
|
}
|
|
22
27
|
let defaultProvider = null;
|
|
23
|
-
export function getDefaultProvider(networkId = "
|
|
28
|
+
export function getDefaultProvider(networkId = "mainnet") {
|
|
24
29
|
if (!defaultProvider) {
|
|
25
30
|
const net = getNetworkConfig(networkId);
|
|
26
31
|
setNetworkId(networkId);
|
|
@@ -32,7 +37,7 @@ export function setDefaultProvider(provider) {
|
|
|
32
37
|
defaultProvider = provider;
|
|
33
38
|
}
|
|
34
39
|
export function createDefaultProvider(config = {}) {
|
|
35
|
-
const networkId = config.networkId ?? "
|
|
40
|
+
const networkId = config.networkId ?? "mainnet";
|
|
36
41
|
const knownConfig = NETWORK_REGISTRY[networkId];
|
|
37
42
|
const indexerUrl = config.indexerUrl ?? knownConfig?.indexerUrl;
|
|
38
43
|
const indexerWsUrl = config.indexerWsUrl ?? knownConfig?.indexerWsUrl;
|
|
@@ -42,4 +47,3 @@ export function createDefaultProvider(config = {}) {
|
|
|
42
47
|
setNetworkId(networkId);
|
|
43
48
|
return indexerPublicDataProvider(indexerUrl, indexerWsUrl);
|
|
44
49
|
}
|
|
45
|
-
//# sourceMappingURL=provider.js.map
|
|
@@ -15,7 +15,7 @@ export type DomainProfileWidgetProps = {
|
|
|
15
15
|
showDomainInfo?: boolean;
|
|
16
16
|
showSocialLinks?: boolean;
|
|
17
17
|
showCopyButtons?: boolean;
|
|
18
|
-
fields?: ('target' | 'owner'
|
|
18
|
+
fields?: ('target' | 'owner')[];
|
|
19
19
|
customFields?: string[];
|
|
20
20
|
theme?: 'light' | 'dark' | 'auto';
|
|
21
21
|
borderRadius?: 'none' | 'sm' | 'md' | 'lg';
|
|
@@ -41,19 +41,7 @@ export function CopyableValue({ value, className, showCopy = true, onCopySuccess
|
|
|
41
41
|
};
|
|
42
42
|
return (_jsxs("span", { className: `${className} ${showCopy || onFieldClick ? 'midnames-copyable' : ''}`, onClick: handleClick, onMouseEnter: () => setHovered(true), onMouseLeave: () => setHovered(false), title: value, children: [truncate(value), showCopy && (_jsx("span", { className: "midnames-copy-icon-container", children: copied ? (_jsx(Check, { className: "midnames-copy-icon midnames-copy-success" })) : (_jsx(Copy, { className: `midnames-copy-icon midnames-copy-hover ${hovered ? 'midnames-copy-visible' : 'midnames-copy-invisible'}` })) }))] }));
|
|
43
43
|
}
|
|
44
|
-
export function DomainProfileWidget({ fullDomain, publicDataProvider, className, showStatus = true, onError,
|
|
45
|
-
// Variant and layout
|
|
46
|
-
variant = 'full',
|
|
47
|
-
// Visibility controls
|
|
48
|
-
showBanner = true, showAvatar = true, showBio = true, showDomainInfo = true, showSocialLinks = true, showCopyButtons = true,
|
|
49
|
-
// Field selection
|
|
50
|
-
fields = ['target', 'owner', 'resolver'], customFields = [],
|
|
51
|
-
// Styling
|
|
52
|
-
theme = 'auto', borderRadius = 'md', padding = 'md',
|
|
53
|
-
// Custom rendering
|
|
54
|
-
renderActions,
|
|
55
|
-
// Event callbacks
|
|
56
|
-
onFieldClick, onCopySuccess, }) {
|
|
44
|
+
export function DomainProfileWidget({ fullDomain, publicDataProvider, className, showStatus = true, onError, variant = 'full', showBanner = true, showAvatar = true, showBio = true, showDomainInfo = true, showSocialLinks = true, showCopyButtons = true, fields = ['target', 'owner'], customFields = [], theme = 'auto', borderRadius = 'md', padding = 'md', renderActions, onFieldClick, onCopySuccess, }) {
|
|
57
45
|
const [loading, setLoading] = useState(false);
|
|
58
46
|
const [data, setData] = useState(null);
|
|
59
47
|
const [error, setError] = useState(null);
|
|
@@ -105,12 +93,14 @@ onFieldClick, onCopySuccess, }) {
|
|
|
105
93
|
const bannerUrl = fieldsMap['banner'] || fieldsMap['header'] || '';
|
|
106
94
|
const epk = fieldsMap['epk'];
|
|
107
95
|
const resolvedTarget = useMemo(() => {
|
|
108
|
-
|
|
96
|
+
const target = data?.info?.target;
|
|
97
|
+
if (!target)
|
|
109
98
|
return null;
|
|
110
|
-
if (epk)
|
|
111
|
-
return deriveShieldedAddress(
|
|
112
|
-
|
|
113
|
-
|
|
99
|
+
if (target.type === 'shielded' && epk) {
|
|
100
|
+
return deriveShieldedAddress(target.address, epk) || target.address;
|
|
101
|
+
}
|
|
102
|
+
return target.address;
|
|
103
|
+
}, [data?.info?.target, epk]);
|
|
114
104
|
const status = useMemo(() => {
|
|
115
105
|
if (loading)
|
|
116
106
|
return 'unknown';
|
|
@@ -118,39 +108,28 @@ onFieldClick, onCopySuccess, }) {
|
|
|
118
108
|
return 'error';
|
|
119
109
|
return data?.info ? 'registered' : 'available';
|
|
120
110
|
}, [loading, data?.info, error]);
|
|
121
|
-
// Build CSS classes based on props
|
|
122
111
|
const cardClasses = useMemo(() => {
|
|
123
112
|
const classes = ['midnames-card'];
|
|
124
|
-
if (variant !== 'full')
|
|
113
|
+
if (variant !== 'full')
|
|
125
114
|
classes.push(`midnames-card-${variant}`);
|
|
126
|
-
|
|
127
|
-
if (theme !== 'auto') {
|
|
115
|
+
if (theme !== 'auto')
|
|
128
116
|
classes.push(`midnames-theme-${theme}`);
|
|
129
|
-
|
|
130
|
-
if (borderRadius !== 'md') {
|
|
117
|
+
if (borderRadius !== 'md')
|
|
131
118
|
classes.push(`midnames-border-${borderRadius}`);
|
|
132
|
-
|
|
133
|
-
if (padding !== 'md') {
|
|
119
|
+
if (padding !== 'md')
|
|
134
120
|
classes.push(`midnames-padding-${padding}`);
|
|
135
|
-
|
|
136
|
-
if (className) {
|
|
121
|
+
if (className)
|
|
137
122
|
classes.push(className);
|
|
138
|
-
}
|
|
139
123
|
return classes.join(' ');
|
|
140
124
|
}, [variant, theme, borderRadius, padding, className]);
|
|
141
|
-
// Filter fields to show
|
|
142
125
|
const fieldsToShow = useMemo(() => {
|
|
143
126
|
const fieldsData = [];
|
|
144
127
|
if (fields.includes('target')) {
|
|
145
128
|
fieldsData.push({ key: 'target', label: 'Resolved Target', value: resolvedTarget, fieldName: 'target' });
|
|
146
129
|
}
|
|
147
130
|
if (fields.includes('owner')) {
|
|
148
|
-
fieldsData.push({ key: 'owner', label: 'Owner', value: data?.info?.
|
|
149
|
-
}
|
|
150
|
-
if (fields.includes('resolver')) {
|
|
151
|
-
fieldsData.push({ key: 'resolver', label: 'Resolver', value: data?.info?.resolver || null, fieldName: 'resolver' });
|
|
131
|
+
fieldsData.push({ key: 'owner', label: 'Owner', value: data?.info?.ownerAddress || null, fieldName: 'owner' });
|
|
152
132
|
}
|
|
153
|
-
// Add custom fields
|
|
154
133
|
customFields.forEach(fieldKey => {
|
|
155
134
|
const fieldValue = fieldsMap[fieldKey.toLowerCase()];
|
|
156
135
|
if (fieldValue) {
|
|
@@ -164,4 +143,3 @@ onFieldClick, onCopySuccess, }) {
|
|
|
164
143
|
}
|
|
165
144
|
return (_jsxs("div", { className: cardClasses, children: [showBanner && bannerUrl && _jsx("img", { src: sanitizeUrl(bannerUrl), alt: "", className: "midnames-banner" }), _jsxs("div", { className: "midnames-header", children: [showAvatar && (_jsx("div", { className: "midnames-avatar", children: avatarUrl ? (_jsx("img", { src: sanitizeUrl(avatarUrl), alt: "", onError: (e) => (e.currentTarget.style.display = 'none') })) : (_jsx("span", { children: (displayName || data?.fullDomain || '?')[0]?.toUpperCase?.() ?? '?' })) })), _jsxs("div", { className: "midnames-ident", children: [_jsx("div", { className: "midnames-name", children: displayName || data?.fullDomain || fullDomain }), variant !== 'minimal' && _jsx("div", { className: "midnames-domain", children: data?.fullDomain || fullDomain })] }), showStatus && (_jsx("div", { className: `midnames-status midnames-status-${status}`, children: loading ? 'Checking…' : status === 'registered' ? 'Registered' : status === 'available' ? 'Available' : status === 'error' ? 'Error' : 'Unknown' }))] }), showBio && bio && _jsx("p", { className: "midnames-bio", children: bio }), showDomainInfo && fieldsToShow.length > 0 && (_jsx("div", { className: "midnames-grid", children: fieldsToShow.map((field) => (_jsxs("div", { className: "midnames-box", children: [_jsx("div", { className: "midnames-box-label", children: field.label }), _jsx(CopyableValue, { value: field.value, className: "midnames-box-value", showCopy: showCopyButtons, onCopySuccess: onCopySuccess, onFieldClick: onFieldClick, fieldName: field.fieldName })] }, field.key))) })), showSocialLinks && (website || twitter || github || location) && (_jsxs("div", { className: "midnames-links", children: [website && (_jsx("a", { className: "midnames-chip", href: sanitizeUrl(website.startsWith('http') ? website : `https://${website}`), target: "_blank", rel: "noreferrer", children: website.replace(/^https?:\/\//, '') })), twitter && (_jsxs("a", { className: "midnames-chip", href: `https://x.com/${twitter}`, target: "_blank", rel: "noreferrer", children: ["@", twitter] })), github && (_jsx("a", { className: "midnames-chip", href: `https://github.com/${github}`, target: "_blank", rel: "noreferrer", children: github })), location && _jsx("span", { className: "midnames-chip", children: location })] })), renderActions && (_jsx("div", { className: "midnames-actions", children: renderActions(data) }))] }));
|
|
166
145
|
}
|
|
167
|
-
//# sourceMappingURL=DomainProfileWidget.js.map
|
|
@@ -1,36 +1,20 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { PublicDataProvider } from '@midnight-ntwrk/midnight-js-types';
|
|
3
3
|
import { MidnamesError } from '../errors.js';
|
|
4
|
-
/**
|
|
5
|
-
* HolographicCard props
|
|
6
|
-
*/
|
|
7
4
|
export interface HolographicCardProps {
|
|
8
|
-
/** Domain name to resolve and display */
|
|
9
5
|
domain: string;
|
|
10
|
-
/** Public data provider for fetching domain information */
|
|
11
6
|
publicDataProvider?: PublicDataProvider;
|
|
12
|
-
/** Custom CSS gradient string for the background gradient effect */
|
|
13
7
|
behindGradient?: string;
|
|
14
|
-
/** Custom CSS gradient string for the inner card gradient */
|
|
15
8
|
innerGradient?: string;
|
|
16
|
-
/** Whether to display the background gradient effect */
|
|
17
9
|
showBehindGradient?: boolean;
|
|
18
|
-
/** Additional CSS classes to apply to the card wrapper */
|
|
19
10
|
className?: string;
|
|
20
|
-
/** Enable or disable the 3D tilt effect on mouse hover */
|
|
21
11
|
enableTilt?: boolean;
|
|
22
|
-
/** Enable or disable the 3D tilt effect on mobile devices */
|
|
23
12
|
enableMobileTilt?: boolean;
|
|
24
|
-
/** Sensitivity of the 3D tilt effect on mobile devices */
|
|
25
13
|
mobileTiltSensitivity?: number;
|
|
26
|
-
/** Text displayed on the contact button */
|
|
27
14
|
contactText?: string;
|
|
28
|
-
/** Whether to display the user information section */
|
|
29
15
|
showUserInfo?: boolean;
|
|
30
|
-
/** Callback function called when the contact button is clicked */
|
|
31
16
|
onContactClick?: () => void;
|
|
32
|
-
/** Callback function called when an error occurs */
|
|
33
17
|
onError?: (error: MidnamesError) => void;
|
|
34
18
|
}
|
|
35
|
-
declare const HolographicCard: React.NamedExoticComponent<HolographicCardProps>;
|
|
19
|
+
export declare const HolographicCard: React.NamedExoticComponent<HolographicCardProps>;
|
|
36
20
|
export default HolographicCard;
|
|
@@ -21,11 +21,9 @@ const HolographicCardComponent = ({ domain, publicDataProvider, behindGradient,
|
|
|
21
21
|
const wrapRef = useRef(null);
|
|
22
22
|
const cardRef = useRef(null);
|
|
23
23
|
const lastXY = useRef(null);
|
|
24
|
-
// Domain data state
|
|
25
24
|
const [loading, setLoading] = useState(false);
|
|
26
25
|
const [data, setData] = useState(null);
|
|
27
26
|
const [error, setError] = useState(null);
|
|
28
|
-
// Fetch domain data
|
|
29
27
|
useEffect(() => {
|
|
30
28
|
let mounted = true;
|
|
31
29
|
setLoading(true);
|
|
@@ -58,7 +56,6 @@ const HolographicCardComponent = ({ domain, publicDataProvider, behindGradient,
|
|
|
58
56
|
mounted = false;
|
|
59
57
|
};
|
|
60
58
|
}, [publicDataProvider, domain, onError]);
|
|
61
|
-
// Extract fields from domain data
|
|
62
59
|
const fieldsMap = useMemo(() => {
|
|
63
60
|
const m = {};
|
|
64
61
|
if (data?.fields) {
|
|
@@ -69,7 +66,6 @@ const HolographicCardComponent = ({ domain, publicDataProvider, behindGradient,
|
|
|
69
66
|
const displayName = fieldsMap['name'] || fieldsMap['displayname'] || fieldsMap['handle'] || '';
|
|
70
67
|
const avatarUrl = fieldsMap['avatar'] || fieldsMap['image'] || fieldsMap['pfp'] || '';
|
|
71
68
|
const handle = fieldsMap['handle'] || '';
|
|
72
|
-
// Animation logic
|
|
73
69
|
const animation = useMemo(() => {
|
|
74
70
|
if (!enableTilt)
|
|
75
71
|
return null;
|
|
@@ -190,6 +186,5 @@ const HolographicCardComponent = ({ domain, publicDataProvider, behindGradient,
|
|
|
190
186
|
}), [showBehindGradient, behindGradient, innerGradient]);
|
|
191
187
|
return (_jsx("div", { ref: wrapRef, className: `midnames-holo-card-wrapper ${className}`.trim(), style: cardStyle, children: _jsx("section", { ref: cardRef, className: "midnames-holo-card", children: _jsxs("div", { className: "midnames-holo-inside", children: [_jsx("div", { className: "midnames-holo-shine" }), _jsx("div", { className: "midnames-holo-glare" }), _jsxs("div", { className: "midnames-holo-content midnames-holo-avatar-content", children: [loading && (_jsx("div", { className: "midnames-holo-loading", children: "Loading domain..." })), error && !loading && (_jsxs("div", { className: "midnames-holo-error", children: [_jsx("div", { children: "Failed to load domain" }), _jsx("div", { style: { fontSize: '12px', opacity: 0.8, marginTop: '8px' }, children: error.message })] })), avatarUrl && !loading && !error && (_jsx("img", { className: "midnames-holo-avatar", src: sanitizeUrl(avatarUrl), alt: `${displayName || domain} avatar`, loading: "lazy", onError: (e) => { e.target.style.display = 'none'; } })), showUserInfo && !loading && !error && (displayName || handle || contactText) && (_jsxs("div", { className: "midnames-holo-user-info", children: [_jsxs("div", { className: "midnames-holo-user-details", children: [_jsx("div", { className: "midnames-holo-mini-avatar", children: _jsx("img", { src: sanitizeUrl(avatarUrl), alt: "mini", loading: "lazy", onError: (e) => { e.target.style.display = 'none'; } }) }), _jsxs("div", { className: "midnames-holo-user-text", children: [displayName && _jsx("div", { className: "midnames-holo-handle", children: displayName }), handle && _jsxs("div", { className: "midnames-holo-status", children: ["@", handle] }), _jsx("div", { className: "midnames-holo-status", children: domain })] })] }), _jsx("button", { className: "midnames-holo-contact-btn", onClick: onContactClick, type: "button", children: contactText })] }))] })] }) }) }));
|
|
192
188
|
};
|
|
193
|
-
const HolographicCard = React.memo(HolographicCardComponent);
|
|
189
|
+
export const HolographicCard = React.memo(HolographicCardComponent);
|
|
194
190
|
export default HolographicCard;
|
|
195
|
-
//# sourceMappingURL=HolographicCard.js.map
|