@midnames/sdk 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core.d.ts +2 -1
- package/dist/core.js +25 -17
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/managed/index.d.ts +3 -2
- package/dist/managed/index.js +1 -13
- package/dist/managed/index.js.map +1 -1
- package/dist/managed/leaf.compact +70 -29
- package/dist/managed/managed/leaf/contract/index.d.ts +78 -25
- package/dist/managed/managed/leaf/contract/index.js +1251 -515
- package/dist/managed/managed/leaf/contract/index.js.map +1 -1
- package/dist/managed/utils.d.ts +5 -0
- package/dist/managed/utils.js +19 -0
- package/dist/managed/utils.js.map +1 -0
- package/dist/operations.d.ts +10 -39
- package/dist/operations.js +68 -352
- package/dist/provider.d.ts +8 -1
- package/dist/provider.js +31 -6
- package/dist/react/DomainProfileWidget.js +5 -2
- package/dist/react/HolographicCard.js +5 -2
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.js +1 -2
- package/dist/types.d.ts +5 -1
- package/dist/utils/domain.d.ts +5 -0
- package/dist/utils/domain.js +18 -0
- package/dist/utils/imageResolver.js +19 -19
- package/dist/utils/sanitize.d.ts +6 -0
- package/dist/utils/sanitize.js +28 -0
- package/managed/index.js +1 -13
- package/managed/index.js.map +1 -1
- package/managed/leaf.compact +70 -29
- package/managed/managed/leaf/contract/index.js +1251 -515
- package/managed/managed/leaf/contract/index.js.map +1 -1
- package/managed/utils.js +19 -0
- package/managed/utils.js.map +1 -0
- package/package.json +4 -3
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
"sourceRoot": "../../../../",
|
|
5
5
|
"sources": ["src/leaf.compact", "compiler/standard-library.compact"],
|
|
6
6
|
"names": [],
|
|
7
|
-
"mappings": "
|
|
7
|
+
"mappings": "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"
|
|
8
8
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function domainToKey(name) {
|
|
2
|
+
const bytes = new TextEncoder().encode(name);
|
|
3
|
+
if (bytes.length === 0 || bytes.length > 32)
|
|
4
|
+
throw new Error(`Domain name must be 1-32 bytes, got ${bytes.length}`);
|
|
5
|
+
const key = new Uint8Array(32).fill(255);
|
|
6
|
+
key.set(bytes);
|
|
7
|
+
return { key, len: BigInt(bytes.length) };
|
|
8
|
+
}
|
|
9
|
+
export function keyToDomain(key) {
|
|
10
|
+
let len = 32;
|
|
11
|
+
for (let i = 0; i < 32; i++) {
|
|
12
|
+
if (key[i] === 255) {
|
|
13
|
+
len = i;
|
|
14
|
+
break;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return new TextDecoder().decode(key.subarray(0, len));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;QACzC,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACf,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAe;IACzC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAAC,GAAG,GAAG,CAAC,CAAC;YAAC,MAAM;QAAC,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACxD,CAAC"}
|
package/dist/operations.d.ts
CHANGED
|
@@ -3,76 +3,47 @@ import { type ContractProviders } from "@midnight-ntwrk/midnight-js-contracts";
|
|
|
3
3
|
import { Leaf } from "@midnames/ns";
|
|
4
4
|
import type { Result } from "./results.js";
|
|
5
5
|
export declare const leafContractInstance: CompiledContract.CompiledContract<Leaf.Contract<any, any>, any, never>;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
export declare function buildKvs(fields: Array<[string, string]>): Array<{
|
|
7
|
+
is_some: boolean;
|
|
8
|
+
value: [string, string];
|
|
9
|
+
}>;
|
|
9
10
|
export declare function insertField(domain: string, key: string, value: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
10
11
|
transactionId: string;
|
|
11
12
|
}>>;
|
|
12
|
-
/**
|
|
13
|
-
* Clear a specific field for a domain
|
|
14
|
-
*/
|
|
15
13
|
export declare function clearField(domain: string, key: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
16
14
|
transactionId: string;
|
|
17
15
|
}>>;
|
|
18
|
-
/**
|
|
19
|
-
* Clear all fields for a domain
|
|
20
|
-
*/
|
|
21
16
|
export declare function clearAllFields(domain: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
22
17
|
transactionId: string;
|
|
23
18
|
}>>;
|
|
24
|
-
/**
|
|
25
|
-
* Add multiple fields to a domain in a single transaction
|
|
26
|
-
* Maximum of 10 fields can be added at once
|
|
27
|
-
*/
|
|
28
19
|
export declare function addMultipleFields(domain: string, fields: Array<[string, string]>, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
29
20
|
transactionId: string;
|
|
30
21
|
}>>;
|
|
31
|
-
/**
|
|
32
|
-
* Update domain target address
|
|
33
|
-
*/
|
|
34
22
|
export declare function updateDomainTarget(domain: string, targetAddress: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
35
23
|
transactionId: string;
|
|
36
24
|
}>>;
|
|
37
|
-
|
|
38
|
-
* Update domain cost (subdomain pricing)
|
|
39
|
-
*/
|
|
40
|
-
export declare function updateDomainCost(domain: string, cost: bigint, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
25
|
+
export declare function updateDomainColor(domain: string, color: Uint8Array, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
41
26
|
transactionId: string;
|
|
42
27
|
}>>;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
28
|
+
export declare function updateDomainCosts(domain: string, costs: {
|
|
29
|
+
short: bigint;
|
|
30
|
+
medium: bigint;
|
|
31
|
+
long: bigint;
|
|
32
|
+
}, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
47
33
|
transactionId: string;
|
|
48
34
|
}>>;
|
|
49
|
-
/**
|
|
50
|
-
* Transfer domain ownership (executed on parent contract)
|
|
51
|
-
*/
|
|
52
35
|
export declare function transferDomainOwnership(parentDomain: string, subdomainName: string, newOwnerAddress: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
53
36
|
transactionId: string;
|
|
54
37
|
}>>;
|
|
55
|
-
/**
|
|
56
|
-
* Set resolver for a domain (executed on parent contract)
|
|
57
|
-
*/
|
|
58
38
|
export declare function setDomainResolver(parentDomain: string, subdomainName: string, resolverAddress: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
59
39
|
transactionId: string;
|
|
60
40
|
}>>;
|
|
61
|
-
/**
|
|
62
|
-
* Register domain for an address (free for parent domain owner)
|
|
63
|
-
*/
|
|
64
41
|
export declare function registerDomainFor(parentDomain: string, ownerAddress: string, subdomainName: string, resolverAddress: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
65
42
|
transactionId: string;
|
|
66
43
|
}>>;
|
|
67
|
-
/**
|
|
68
|
-
* Buy domain for an address (requires payment)
|
|
69
|
-
*/
|
|
70
44
|
export declare function buyDomainFor(parentDomain: string, ownerAddress: string, subdomainName: string, resolverAddress: string, _paymentAmount: bigint, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
71
45
|
transactionId: string;
|
|
72
46
|
}>>;
|
|
73
|
-
/**
|
|
74
|
-
* Change domain owner (executed on domain's own contract)
|
|
75
|
-
*/
|
|
76
47
|
export declare function changeDomainOwner(domain: string, newOwnerAddress: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
77
48
|
transactionId: string;
|
|
78
49
|
}>>;
|
package/dist/operations.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { CompiledContract } from "@midnight-ntwrk/compact-js";
|
|
2
2
|
import { findDeployedContract, } from "@midnight-ntwrk/midnight-js-contracts";
|
|
3
|
-
// Note: Payment coin creation is no longer needed - wallet handles payment balancing automatically
|
|
4
3
|
import { ShieldedCoinPublicKey, MidnightBech32m, } from "@midnight-ntwrk/wallet-sdk-address-format";
|
|
5
4
|
import { isWalletAddress } from "./utils/address.js";
|
|
6
5
|
import { getNetworkId } from "@midnight-ntwrk/midnight-js-network-id";
|
|
7
6
|
import { Leaf } from "@midnames/ns";
|
|
8
7
|
import { success, failure } from "./results.js";
|
|
9
8
|
import { NetworkError, InvalidDomainError } from "./errors.js";
|
|
10
|
-
import { normalizeDomain, parseFullDomain } from "./utils/domain.js";
|
|
9
|
+
import { normalizeDomain, parseFullDomain, domainToKey } from "./utils/domain.js";
|
|
11
10
|
import { getDomainInfo } from "./core.js";
|
|
12
11
|
function validateDomain(domain) {
|
|
13
12
|
const normalized = normalizeDomain(domain);
|
|
@@ -19,7 +18,6 @@ function validateDomain(domain) {
|
|
|
19
18
|
}
|
|
20
19
|
// Contract types and instances
|
|
21
20
|
export const leafContractInstance = CompiledContract.make("leaf-contract", Leaf.Contract).pipe(CompiledContract.withVacantWitnesses, CompiledContract.withCompiledFileAssets("./managed/leaf"));
|
|
22
|
-
// Helper function to join a leaf contract
|
|
23
21
|
async function joinLeafContract(providers, contractAddress) {
|
|
24
22
|
return await findDeployedContract(providers, {
|
|
25
23
|
contractAddress,
|
|
@@ -28,16 +26,43 @@ async function joinLeafContract(providers, contractAddress) {
|
|
|
28
26
|
initialPrivateState: { phantom: false },
|
|
29
27
|
});
|
|
30
28
|
}
|
|
31
|
-
//
|
|
29
|
+
// --- Shared helpers ---
|
|
30
|
+
async function withLeafContract(domain, providers, label, fn) {
|
|
31
|
+
const validated = validateDomain(domain);
|
|
32
|
+
if (!validated.success)
|
|
33
|
+
return failure(validated.error);
|
|
34
|
+
try {
|
|
35
|
+
const domainInfoResult = await getDomainInfo(validated.data, {
|
|
36
|
+
provider: providers.publicDataProvider,
|
|
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);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
return failure(new NetworkError(`Failed to ${label}: ${error instanceof Error ? error.message : String(error)}`, error));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function txId(result) {
|
|
51
|
+
return { transactionId: result.public.txId };
|
|
52
|
+
}
|
|
53
|
+
export function buildKvs(fields) {
|
|
54
|
+
return Array.from({ length: 10 }, (_, i) => ({
|
|
55
|
+
is_some: i < fields.length,
|
|
56
|
+
value: i < fields.length ? fields[i] : ["", ""],
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
32
59
|
function parseAddressToBytes(address) {
|
|
33
60
|
if (isWalletAddress(address)) {
|
|
34
|
-
// Wallet address (mn_ prefix)
|
|
35
61
|
const bech32Parsed = MidnightBech32m.parse(address);
|
|
36
62
|
const coinPublicKey = ShieldedCoinPublicKey.codec.decode(getNetworkId(), bech32Parsed);
|
|
37
63
|
return { bytes: new Uint8Array(coinPublicKey.data) };
|
|
38
64
|
}
|
|
39
65
|
else {
|
|
40
|
-
// Contract address (64-char hex string) - strip 0200 prefix for backward compat
|
|
41
66
|
let hexString = address;
|
|
42
67
|
if (address.startsWith("0200")) {
|
|
43
68
|
hexString = address.slice(4);
|
|
@@ -46,376 +71,67 @@ function parseAddressToBytes(address) {
|
|
|
46
71
|
return { bytes: bytes.length === 32 ? bytes : bytes.subarray(-32) };
|
|
47
72
|
}
|
|
48
73
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
// Contract address (64-char hex string)
|
|
60
|
-
return {
|
|
61
|
-
tag: "Right",
|
|
62
|
-
value: parseAddressToBytes(address),
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
// Helper to create target Either for contract calls
|
|
67
|
-
function createTargetEither(target) {
|
|
68
|
-
return target.tag === "Left"
|
|
69
|
-
? {
|
|
70
|
-
is_left: true,
|
|
71
|
-
left: target.value,
|
|
72
|
-
right: { bytes: new Uint8Array(32) },
|
|
73
|
-
}
|
|
74
|
-
: {
|
|
75
|
-
is_left: false,
|
|
76
|
-
left: { bytes: new Uint8Array(32) },
|
|
77
|
-
right: target.value,
|
|
78
|
-
};
|
|
74
|
+
function formatTargetForContract(address) {
|
|
75
|
+
const parsed = parseAddressToBytes(address);
|
|
76
|
+
const isLeft = isWalletAddress(address);
|
|
77
|
+
return {
|
|
78
|
+
is_left: isLeft,
|
|
79
|
+
left: isLeft ? parsed : { bytes: new Uint8Array(32) },
|
|
80
|
+
right: isLeft ? { bytes: new Uint8Array(32) } : parsed,
|
|
81
|
+
};
|
|
79
82
|
}
|
|
80
|
-
//
|
|
81
|
-
// The wallet handles payment balancing automatically when using register_domain_for
|
|
82
|
-
/**
|
|
83
|
-
* Insert or update a field for a domain
|
|
84
|
-
*/
|
|
83
|
+
// --- Domain operations ---
|
|
85
84
|
export async function insertField(domain, key, value, providers) {
|
|
86
|
-
|
|
87
|
-
if (!validated.success)
|
|
88
|
-
return failure(validated.error);
|
|
89
|
-
try {
|
|
90
|
-
const domainInfoResult = await getDomainInfo(validated.data, {
|
|
91
|
-
provider: providers.publicDataProvider,
|
|
92
|
-
});
|
|
93
|
-
if (!domainInfoResult.success) {
|
|
94
|
-
return failure(domainInfoResult.error);
|
|
95
|
-
}
|
|
96
|
-
const contractAddress = domainInfoResult.data.resolver;
|
|
97
|
-
const contract = await joinLeafContract(providers, contractAddress);
|
|
98
|
-
const result = await contract.callTx.insert_field(key, value);
|
|
99
|
-
return success({
|
|
100
|
-
transactionId: result.public.txId,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
catch (error) {
|
|
104
|
-
return failure(new NetworkError(`Failed to insert field: ${error instanceof Error ? error.message : String(error)}`, error));
|
|
105
|
-
}
|
|
85
|
+
return withLeafContract(domain, providers, "insert field", async (contract) => txId(await contract.callTx.insert_field(key, value)));
|
|
106
86
|
}
|
|
107
|
-
/**
|
|
108
|
-
* Clear a specific field for a domain
|
|
109
|
-
*/
|
|
110
87
|
export async function clearField(domain, key, providers) {
|
|
111
|
-
|
|
112
|
-
if (!validated.success)
|
|
113
|
-
return failure(validated.error);
|
|
114
|
-
try {
|
|
115
|
-
const domainInfoResult = await getDomainInfo(validated.data, {
|
|
116
|
-
provider: providers.publicDataProvider,
|
|
117
|
-
});
|
|
118
|
-
if (!domainInfoResult.success) {
|
|
119
|
-
return failure(domainInfoResult.error);
|
|
120
|
-
}
|
|
121
|
-
const contractAddress = domainInfoResult.data.resolver;
|
|
122
|
-
const contract = await joinLeafContract(providers, contractAddress);
|
|
123
|
-
const result = await contract.callTx.clear_field(key);
|
|
124
|
-
return success({
|
|
125
|
-
transactionId: result.public.txId,
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
catch (error) {
|
|
129
|
-
return failure(new NetworkError(`Failed to clear field: ${error instanceof Error ? error.message : String(error)}`, error));
|
|
130
|
-
}
|
|
88
|
+
return withLeafContract(domain, providers, "clear field", async (contract) => txId(await contract.callTx.clear_field(key)));
|
|
131
89
|
}
|
|
132
|
-
/**
|
|
133
|
-
* Clear all fields for a domain
|
|
134
|
-
*/
|
|
135
90
|
export async function clearAllFields(domain, providers) {
|
|
136
|
-
|
|
137
|
-
if (!validated.success)
|
|
138
|
-
return failure(validated.error);
|
|
139
|
-
try {
|
|
140
|
-
const domainInfoResult = await getDomainInfo(validated.data, {
|
|
141
|
-
provider: providers.publicDataProvider,
|
|
142
|
-
});
|
|
143
|
-
if (!domainInfoResult.success) {
|
|
144
|
-
return failure(domainInfoResult.error);
|
|
145
|
-
}
|
|
146
|
-
const contractAddress = domainInfoResult.data.resolver;
|
|
147
|
-
const domainName = validated.data.split(".")[0];
|
|
148
|
-
const contract = await joinLeafContract(providers, contractAddress);
|
|
149
|
-
const result = await contract.callTx.clear_all_fields(domainName);
|
|
150
|
-
return success({
|
|
151
|
-
transactionId: result.public.txId,
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
catch (error) {
|
|
155
|
-
return failure(new NetworkError(`Failed to clear all fields: ${error instanceof Error ? error.message : String(error)}`, error));
|
|
156
|
-
}
|
|
91
|
+
return withLeafContract(domain, providers, "clear all fields", async (contract) => txId(await contract.callTx.clear_all_fields()));
|
|
157
92
|
}
|
|
158
|
-
/**
|
|
159
|
-
* Add multiple fields to a domain in a single transaction
|
|
160
|
-
* Maximum of 10 fields can be added at once
|
|
161
|
-
*/
|
|
162
93
|
export async function addMultipleFields(domain, fields, providers) {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
return failure(validated.error);
|
|
166
|
-
try {
|
|
167
|
-
if (fields.length === 0) {
|
|
168
|
-
return failure(new NetworkError("No fields provided"));
|
|
169
|
-
}
|
|
170
|
-
if (fields.length > 10) {
|
|
171
|
-
return failure(new NetworkError("Maximum of 10 fields can be added at once"));
|
|
172
|
-
}
|
|
173
|
-
// Convert to the Vector<10, Maybe<[string, string]>> format
|
|
174
|
-
const kvs = [];
|
|
175
|
-
for (let i = 0; i < 10; i++) {
|
|
176
|
-
if (i < fields.length) {
|
|
177
|
-
kvs.push({
|
|
178
|
-
is_some: true,
|
|
179
|
-
value: fields[i],
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
kvs.push({
|
|
184
|
-
is_some: false,
|
|
185
|
-
value: ["", ""], // Empty strings for unused slots
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
const domainInfoResult = await getDomainInfo(validated.data, {
|
|
190
|
-
provider: providers.publicDataProvider,
|
|
191
|
-
});
|
|
192
|
-
if (!domainInfoResult.success) {
|
|
193
|
-
return failure(domainInfoResult.error);
|
|
194
|
-
}
|
|
195
|
-
const contractAddress = domainInfoResult.data.resolver;
|
|
196
|
-
const contract = await joinLeafContract(providers, contractAddress);
|
|
197
|
-
const result = await contract.callTx.add_multiple_fields(kvs);
|
|
198
|
-
return success({
|
|
199
|
-
transactionId: result.public.txId,
|
|
200
|
-
});
|
|
94
|
+
if (fields.length === 0) {
|
|
95
|
+
return failure(new NetworkError("No fields provided"));
|
|
201
96
|
}
|
|
202
|
-
|
|
203
|
-
return failure(new NetworkError(
|
|
97
|
+
if (fields.length > 10) {
|
|
98
|
+
return failure(new NetworkError("Maximum of 10 fields can be added at once"));
|
|
204
99
|
}
|
|
100
|
+
return withLeafContract(domain, providers, "add multiple fields", async (contract) => txId(await contract.callTx.add_multiple_fields(buildKvs(fields))));
|
|
205
101
|
}
|
|
206
|
-
/**
|
|
207
|
-
* Update domain target address
|
|
208
|
-
*/
|
|
209
102
|
export async function updateDomainTarget(domain, targetAddress, providers) {
|
|
210
|
-
|
|
211
|
-
if (!validated.success)
|
|
212
|
-
return failure(validated.error);
|
|
213
|
-
try {
|
|
214
|
-
const domainInfoResult = await getDomainInfo(validated.data, {
|
|
215
|
-
provider: providers.publicDataProvider,
|
|
216
|
-
});
|
|
217
|
-
if (!domainInfoResult.success) {
|
|
218
|
-
return failure(domainInfoResult.error);
|
|
219
|
-
}
|
|
220
|
-
const contractAddress = domainInfoResult.data.resolver;
|
|
221
|
-
const targetFormatted = formatTargetAddress(targetAddress);
|
|
222
|
-
const targetEither = createTargetEither(targetFormatted);
|
|
223
|
-
const contract = await joinLeafContract(providers, contractAddress);
|
|
224
|
-
const result = await contract.callTx.update_domain_target(targetEither);
|
|
225
|
-
return success({
|
|
226
|
-
transactionId: result.public.txId,
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
catch (error) {
|
|
230
|
-
return failure(new NetworkError(`Failed to update domain target: ${error instanceof Error ? error.message : String(error)}`, error));
|
|
231
|
-
}
|
|
103
|
+
return withLeafContract(domain, providers, "update domain target", async (contract) => txId(await contract.callTx.update_domain_target(formatTargetForContract(targetAddress))));
|
|
232
104
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
export async function updateDomainCost(domain, cost, providers) {
|
|
237
|
-
const validated = validateDomain(domain);
|
|
238
|
-
if (!validated.success)
|
|
239
|
-
return failure(validated.error);
|
|
240
|
-
try {
|
|
241
|
-
if (cost < BigInt(0)) {
|
|
242
|
-
return failure(new NetworkError("Cost must be non-negative"));
|
|
243
|
-
}
|
|
244
|
-
const domainInfoResult = await getDomainInfo(validated.data, {
|
|
245
|
-
provider: providers.publicDataProvider,
|
|
246
|
-
});
|
|
247
|
-
if (!domainInfoResult.success) {
|
|
248
|
-
return failure(domainInfoResult.error);
|
|
249
|
-
}
|
|
250
|
-
const contractAddress = domainInfoResult.data.resolver;
|
|
251
|
-
const contract = await joinLeafContract(providers, contractAddress);
|
|
252
|
-
const result = await contract.callTx.update_cost(cost);
|
|
253
|
-
return success({
|
|
254
|
-
transactionId: result.public.txId,
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
catch (error) {
|
|
258
|
-
return failure(new NetworkError(`Failed to update domain cost: ${error instanceof Error ? error.message : String(error)}`, error));
|
|
105
|
+
export async function updateDomainColor(domain, color, providers) {
|
|
106
|
+
if (color.length !== 32) {
|
|
107
|
+
return failure(new NetworkError("Color must be exactly 32 bytes"));
|
|
259
108
|
}
|
|
109
|
+
return withLeafContract(domain, providers, "update domain color", async (contract) => txId(await contract.callTx.update_color(color)));
|
|
260
110
|
}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
export async function updateDomainColor(domain, colorBytes, providers) {
|
|
265
|
-
const validated = validateDomain(domain);
|
|
266
|
-
if (!validated.success)
|
|
267
|
-
return failure(validated.error);
|
|
268
|
-
try {
|
|
269
|
-
if (colorBytes.length !== 32) {
|
|
270
|
-
return failure(new NetworkError("Color must be exactly 32 bytes"));
|
|
271
|
-
}
|
|
272
|
-
const domainInfoResult = await getDomainInfo(validated.data, {
|
|
273
|
-
provider: providers.publicDataProvider,
|
|
274
|
-
});
|
|
275
|
-
if (!domainInfoResult.success) {
|
|
276
|
-
return failure(domainInfoResult.error);
|
|
277
|
-
}
|
|
278
|
-
const contractAddress = domainInfoResult.data.resolver;
|
|
279
|
-
const contract = await joinLeafContract(providers, contractAddress);
|
|
280
|
-
const result = await contract.callTx.update_color(colorBytes);
|
|
281
|
-
return success({
|
|
282
|
-
transactionId: result.public.txId,
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
catch (error) {
|
|
286
|
-
return failure(new NetworkError(`Failed to update domain color: ${error instanceof Error ? error.message : String(error)}`, error));
|
|
111
|
+
export async function updateDomainCosts(domain, costs, providers) {
|
|
112
|
+
if (costs.short < BigInt(0) || costs.medium < BigInt(0) || costs.long < BigInt(0)) {
|
|
113
|
+
return failure(new NetworkError("Costs must be non-negative"));
|
|
287
114
|
}
|
|
115
|
+
return withLeafContract(domain, providers, "update domain costs", async (contract) => txId(await contract.callTx.update_costs(costs.short, costs.medium, costs.long)));
|
|
288
116
|
}
|
|
289
|
-
/**
|
|
290
|
-
* Transfer domain ownership (executed on parent contract)
|
|
291
|
-
*/
|
|
292
117
|
export async function transferDomainOwnership(parentDomain, subdomainName, newOwnerAddress, providers) {
|
|
293
|
-
|
|
294
|
-
if (!validated.success)
|
|
295
|
-
return failure(validated.error);
|
|
296
|
-
try {
|
|
297
|
-
const domainInfoResult = await getDomainInfo(validated.data, {
|
|
298
|
-
provider: providers.publicDataProvider,
|
|
299
|
-
});
|
|
300
|
-
if (!domainInfoResult.success) {
|
|
301
|
-
return failure(domainInfoResult.error);
|
|
302
|
-
}
|
|
303
|
-
const parentContractAddress = domainInfoResult.data.resolver;
|
|
304
|
-
const newOwnerBytes = parseAddressToBytes(newOwnerAddress);
|
|
305
|
-
const parentContract = await joinLeafContract(providers, parentContractAddress);
|
|
306
|
-
const result = await parentContract.callTx.transfer_domain(subdomainName, newOwnerBytes);
|
|
307
|
-
return success({
|
|
308
|
-
transactionId: result.public.txId,
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
catch (error) {
|
|
312
|
-
return failure(new NetworkError(`Failed to transfer domain ownership: ${error instanceof Error ? error.message : String(error)}`, error));
|
|
313
|
-
}
|
|
118
|
+
return withLeafContract(parentDomain, providers, "transfer domain ownership", async (contract) => txId(await contract.callTx.transfer_domain(domainToKey(subdomainName).key, parseAddressToBytes(newOwnerAddress))));
|
|
314
119
|
}
|
|
315
|
-
/**
|
|
316
|
-
* Set resolver for a domain (executed on parent contract)
|
|
317
|
-
*/
|
|
318
120
|
export async function setDomainResolver(parentDomain, subdomainName, resolverAddress, providers) {
|
|
319
|
-
|
|
320
|
-
if (!validated.success)
|
|
321
|
-
return failure(validated.error);
|
|
322
|
-
try {
|
|
323
|
-
const domainInfoResult = await getDomainInfo(validated.data, {
|
|
324
|
-
provider: providers.publicDataProvider,
|
|
325
|
-
});
|
|
326
|
-
if (!domainInfoResult.success) {
|
|
327
|
-
return failure(domainInfoResult.error);
|
|
328
|
-
}
|
|
329
|
-
const parentContractAddress = domainInfoResult.data.resolver;
|
|
330
|
-
const resolverBytes = parseAddressToBytes(resolverAddress);
|
|
331
|
-
const parentContract = await joinLeafContract(providers, parentContractAddress);
|
|
332
|
-
const result = await parentContract.callTx.set_resolver(subdomainName, resolverBytes);
|
|
333
|
-
return success({
|
|
334
|
-
transactionId: result.public.txId,
|
|
335
|
-
});
|
|
336
|
-
}
|
|
337
|
-
catch (error) {
|
|
338
|
-
return failure(new NetworkError(`Failed to set domain resolver: ${error instanceof Error ? error.message : String(error)}`, error));
|
|
339
|
-
}
|
|
121
|
+
return withLeafContract(parentDomain, providers, "set domain resolver", async (contract) => txId(await contract.callTx.set_resolver(domainToKey(subdomainName).key, parseAddressToBytes(resolverAddress))));
|
|
340
122
|
}
|
|
341
|
-
/**
|
|
342
|
-
* Register domain for an address (free for parent domain owner)
|
|
343
|
-
*/
|
|
344
123
|
export async function registerDomainFor(parentDomain, ownerAddress, subdomainName, resolverAddress, providers) {
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
return
|
|
348
|
-
|
|
349
|
-
const domainInfoResult = await getDomainInfo(validated.data, {
|
|
350
|
-
provider: providers.publicDataProvider,
|
|
351
|
-
});
|
|
352
|
-
if (!domainInfoResult.success) {
|
|
353
|
-
return failure(domainInfoResult.error);
|
|
354
|
-
}
|
|
355
|
-
const parentContractAddress = domainInfoResult.data.resolver;
|
|
356
|
-
const ownerBytes = parseAddressToBytes(ownerAddress);
|
|
357
|
-
const resolverBytes = parseAddressToBytes(resolverAddress);
|
|
358
|
-
const parentContract = await joinLeafContract(providers, parentContractAddress);
|
|
359
|
-
const result = await parentContract.callTx.register_domain_for(ownerBytes, subdomainName, resolverBytes);
|
|
360
|
-
return success({
|
|
361
|
-
transactionId: result.public.txId,
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
catch (error) {
|
|
365
|
-
return failure(new NetworkError(`Failed to register domain: ${error instanceof Error ? error.message : String(error)}`, error));
|
|
366
|
-
}
|
|
124
|
+
return withLeafContract(parentDomain, providers, "register domain", async (contract) => {
|
|
125
|
+
const { key, len } = domainToKey(subdomainName);
|
|
126
|
+
return txId(await contract.callTx.register_domain_for(parseAddressToBytes(ownerAddress), key, len, parseAddressToBytes(resolverAddress)));
|
|
127
|
+
});
|
|
367
128
|
}
|
|
368
|
-
/**
|
|
369
|
-
* Buy domain for an address (requires payment)
|
|
370
|
-
*/
|
|
371
129
|
export async function buyDomainFor(parentDomain, ownerAddress, subdomainName, resolverAddress, _paymentAmount, providers) {
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
return
|
|
375
|
-
|
|
376
|
-
const domainInfoResult = await getDomainInfo(validated.data, {
|
|
377
|
-
provider: providers.publicDataProvider,
|
|
378
|
-
});
|
|
379
|
-
if (!domainInfoResult.success) {
|
|
380
|
-
return failure(domainInfoResult.error);
|
|
381
|
-
}
|
|
382
|
-
const parentContractAddress = domainInfoResult.data.resolver;
|
|
383
|
-
const ownerBytes = parseAddressToBytes(ownerAddress);
|
|
384
|
-
const resolverBytes = parseAddressToBytes(resolverAddress);
|
|
385
|
-
//const paymentCoin = createPaymentCoin(paymentAmount);
|
|
386
|
-
const parentContract = await joinLeafContract(providers, parentContractAddress);
|
|
387
|
-
const result = await parentContract.callTx.register_domain_for(ownerBytes, subdomainName, resolverBytes);
|
|
388
|
-
return success({
|
|
389
|
-
transactionId: result.public.txId,
|
|
390
|
-
});
|
|
391
|
-
}
|
|
392
|
-
catch (error) {
|
|
393
|
-
return failure(new NetworkError(`Failed to buy domain: ${error instanceof Error ? error.message : String(error)}`, error));
|
|
394
|
-
}
|
|
130
|
+
return withLeafContract(parentDomain, providers, "buy domain", async (contract) => {
|
|
131
|
+
const { key, len } = domainToKey(subdomainName);
|
|
132
|
+
return txId(await contract.callTx.register_domain_for(parseAddressToBytes(ownerAddress), key, len, parseAddressToBytes(resolverAddress)));
|
|
133
|
+
});
|
|
395
134
|
}
|
|
396
|
-
/**
|
|
397
|
-
* Change domain owner (executed on domain's own contract)
|
|
398
|
-
*/
|
|
399
135
|
export async function changeDomainOwner(domain, newOwnerAddress, providers) {
|
|
400
|
-
|
|
401
|
-
if (!validated.success)
|
|
402
|
-
return failure(validated.error);
|
|
403
|
-
try {
|
|
404
|
-
const domainInfoResult = await getDomainInfo(validated.data, {
|
|
405
|
-
provider: providers.publicDataProvider,
|
|
406
|
-
});
|
|
407
|
-
if (!domainInfoResult.success) {
|
|
408
|
-
return failure(domainInfoResult.error);
|
|
409
|
-
}
|
|
410
|
-
const contractAddress = domainInfoResult.data.resolver;
|
|
411
|
-
const newOwnerBytes = parseAddressToBytes(newOwnerAddress);
|
|
412
|
-
const contract = await joinLeafContract(providers, contractAddress);
|
|
413
|
-
const result = await contract.callTx.change_owner(newOwnerBytes);
|
|
414
|
-
return success({
|
|
415
|
-
transactionId: result.public.txId,
|
|
416
|
-
});
|
|
417
|
-
}
|
|
418
|
-
catch (error) {
|
|
419
|
-
return failure(new NetworkError(`Failed to change domain owner: ${error instanceof Error ? error.message : String(error)}`, error));
|
|
420
|
-
}
|
|
136
|
+
return withLeafContract(domain, providers, "change domain owner", async (contract) => txId(await contract.callTx.change_owner(parseAddressToBytes(newOwnerAddress))));
|
|
421
137
|
}
|
package/dist/provider.d.ts
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import type { PublicDataProvider } from "@midnight-ntwrk/midnight-js-types";
|
|
2
|
+
export interface NetworkConfig {
|
|
3
|
+
indexerUrl: string;
|
|
4
|
+
indexerWsUrl: string;
|
|
5
|
+
tldAddress: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const NETWORK_REGISTRY: Record<string, NetworkConfig>;
|
|
2
8
|
export interface ProviderConfig {
|
|
3
9
|
indexerUrl?: string;
|
|
4
10
|
indexerWsUrl?: string;
|
|
5
11
|
networkId?: string;
|
|
6
12
|
}
|
|
7
|
-
export declare function
|
|
13
|
+
export declare function getNetworkConfig(networkId: string): NetworkConfig;
|
|
14
|
+
export declare function getDefaultProvider(networkId?: string): PublicDataProvider;
|
|
8
15
|
export declare function setDefaultProvider(provider: PublicDataProvider): void;
|
|
9
16
|
export declare function createDefaultProvider(config?: ProviderConfig): PublicDataProvider;
|