@midnames/sdk 0.2.1 → 1.0.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/dist/controller-types.d.ts +104 -0
- package/dist/controller-types.js +16 -0
- package/dist/core.d.ts +12 -9
- package/dist/core.js +142 -59
- package/dist/errors.d.ts +20 -0
- package/dist/errors.js +39 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/managed/index.d.ts +2 -9
- package/dist/managed/index.js +15 -5
- package/dist/managed/index.js.map +1 -1
- package/dist/managed/leaf.compact +39 -48
- package/dist/managed/managed/leaf/contract/{index.d.cts → index.d.ts} +55 -57
- package/dist/managed/managed/leaf/contract/index.js +2358 -0
- package/dist/managed/managed/leaf/contract/index.js.map +8 -0
- package/dist/operations.d.ts +78 -0
- package/dist/operations.js +421 -0
- package/dist/provider.d.ts +2 -3
- package/dist/provider.js +6 -7
- package/dist/react/DomainProfileWidget.d.ts +2 -2
- package/dist/react/DomainProfileWidget.js +6 -6
- package/dist/react/HolographicCard.d.ts +2 -2
- package/dist/react/HolographicCard.js +5 -5
- package/dist/results.d.ts +38 -0
- package/dist/results.js +88 -0
- package/dist/types.d.ts +2 -40
- package/dist/types.js +1 -61
- package/dist/utils/address.js +6 -5
- package/dist/utils/domain.d.ts +1 -0
- package/dist/utils/domain.js +1 -1
- package/dist/utils/imageResolver.d.ts +8 -0
- package/dist/utils/imageResolver.js +89 -0
- package/exported.md +1 -1
- package/managed/index.js +15 -5
- package/managed/index.js.map +1 -1
- package/managed/leaf.compact +39 -48
- package/managed/managed/leaf/contract/index.js +2358 -0
- package/managed/managed/leaf/contract/index.js.map +8 -0
- package/package.json +20 -10
- package/dist/managed/managed/leaf/contract/index.cjs +0 -2789
- package/dist/managed/managed/leaf/contract/index.cjs.map +0 -8
- package/managed/managed/leaf/contract/index.cjs +0 -2789
- package/managed/managed/leaf/contract/index.cjs.map +0 -8
- package/managed/managed/leaf/contract/index.d.cts +0 -146
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"file": "index.js",
|
|
4
|
+
"sourceRoot": "../../../../",
|
|
5
|
+
"sources": ["src/leaf.compact", "compiler/standard-library.compact"],
|
|
6
|
+
"names": [],
|
|
7
|
+
"mappings": "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"
|
|
8
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { CompiledContract } from "@midnight-ntwrk/compact-js";
|
|
2
|
+
import { type ContractProviders } from "@midnight-ntwrk/midnight-js-contracts";
|
|
3
|
+
import { Leaf } from "@midnames/ns";
|
|
4
|
+
import type { Result } from "./results.js";
|
|
5
|
+
export declare const leafContractInstance: CompiledContract.CompiledContract<Leaf.Contract<any, any>, any, never>;
|
|
6
|
+
/**
|
|
7
|
+
* Insert or update a field for a domain
|
|
8
|
+
*/
|
|
9
|
+
export declare function insertField(domain: string, key: string, value: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
10
|
+
transactionId: string;
|
|
11
|
+
}>>;
|
|
12
|
+
/**
|
|
13
|
+
* Clear a specific field for a domain
|
|
14
|
+
*/
|
|
15
|
+
export declare function clearField(domain: string, key: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
16
|
+
transactionId: string;
|
|
17
|
+
}>>;
|
|
18
|
+
/**
|
|
19
|
+
* Clear all fields for a domain
|
|
20
|
+
*/
|
|
21
|
+
export declare function clearAllFields(domain: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
22
|
+
transactionId: string;
|
|
23
|
+
}>>;
|
|
24
|
+
/**
|
|
25
|
+
* Add multiple fields to a domain in a single transaction
|
|
26
|
+
* Maximum of 10 fields can be added at once
|
|
27
|
+
*/
|
|
28
|
+
export declare function addMultipleFields(domain: string, fields: Array<[string, string]>, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
29
|
+
transactionId: string;
|
|
30
|
+
}>>;
|
|
31
|
+
/**
|
|
32
|
+
* Update domain target address
|
|
33
|
+
*/
|
|
34
|
+
export declare function updateDomainTarget(domain: string, targetAddress: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
35
|
+
transactionId: string;
|
|
36
|
+
}>>;
|
|
37
|
+
/**
|
|
38
|
+
* Update domain cost (subdomain pricing)
|
|
39
|
+
*/
|
|
40
|
+
export declare function updateDomainCost(domain: string, cost: bigint, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
41
|
+
transactionId: string;
|
|
42
|
+
}>>;
|
|
43
|
+
/**
|
|
44
|
+
* Update domain color (accepted token type)
|
|
45
|
+
*/
|
|
46
|
+
export declare function updateDomainColor(domain: string, colorBytes: Uint8Array, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
47
|
+
transactionId: string;
|
|
48
|
+
}>>;
|
|
49
|
+
/**
|
|
50
|
+
* Transfer domain ownership (executed on parent contract)
|
|
51
|
+
*/
|
|
52
|
+
export declare function transferDomainOwnership(parentDomain: string, subdomainName: string, newOwnerAddress: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
53
|
+
transactionId: string;
|
|
54
|
+
}>>;
|
|
55
|
+
/**
|
|
56
|
+
* Set resolver for a domain (executed on parent contract)
|
|
57
|
+
*/
|
|
58
|
+
export declare function setDomainResolver(parentDomain: string, subdomainName: string, resolverAddress: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
59
|
+
transactionId: string;
|
|
60
|
+
}>>;
|
|
61
|
+
/**
|
|
62
|
+
* Register domain for an address (free for parent domain owner)
|
|
63
|
+
*/
|
|
64
|
+
export declare function registerDomainFor(parentDomain: string, ownerAddress: string, subdomainName: string, resolverAddress: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
65
|
+
transactionId: string;
|
|
66
|
+
}>>;
|
|
67
|
+
/**
|
|
68
|
+
* Buy domain for an address (requires payment)
|
|
69
|
+
*/
|
|
70
|
+
export declare function buyDomainFor(parentDomain: string, ownerAddress: string, subdomainName: string, resolverAddress: string, _paymentAmount: bigint, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
71
|
+
transactionId: string;
|
|
72
|
+
}>>;
|
|
73
|
+
/**
|
|
74
|
+
* Change domain owner (executed on domain's own contract)
|
|
75
|
+
*/
|
|
76
|
+
export declare function changeDomainOwner(domain: string, newOwnerAddress: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
|
|
77
|
+
transactionId: string;
|
|
78
|
+
}>>;
|
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
import { CompiledContract } from "@midnight-ntwrk/compact-js";
|
|
2
|
+
import { findDeployedContract, } from "@midnight-ntwrk/midnight-js-contracts";
|
|
3
|
+
// Note: Payment coin creation is no longer needed - wallet handles payment balancing automatically
|
|
4
|
+
import { ShieldedCoinPublicKey, MidnightBech32m, } from "@midnight-ntwrk/wallet-sdk-address-format";
|
|
5
|
+
import { isWalletAddress } from "./utils/address.js";
|
|
6
|
+
import { getNetworkId } from "@midnight-ntwrk/midnight-js-network-id";
|
|
7
|
+
import { Leaf } from "@midnames/ns";
|
|
8
|
+
import { success, failure } from "./results.js";
|
|
9
|
+
import { NetworkError, InvalidDomainError } from "./errors.js";
|
|
10
|
+
import { normalizeDomain, parseFullDomain } from "./utils/domain.js";
|
|
11
|
+
import { getDomainInfo } from "./core.js";
|
|
12
|
+
function validateDomain(domain) {
|
|
13
|
+
const normalized = normalizeDomain(domain);
|
|
14
|
+
const parsed = parseFullDomain(normalized);
|
|
15
|
+
if (!parsed.isValid) {
|
|
16
|
+
return failure(new InvalidDomainError(domain, "Invalid domain format"));
|
|
17
|
+
}
|
|
18
|
+
return success(normalized);
|
|
19
|
+
}
|
|
20
|
+
// Contract types and instances
|
|
21
|
+
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
|
+
async function joinLeafContract(providers, contractAddress) {
|
|
24
|
+
return await findDeployedContract(providers, {
|
|
25
|
+
contractAddress,
|
|
26
|
+
compiledContract: leafContractInstance,
|
|
27
|
+
privateStateId: "namespacePrivateState",
|
|
28
|
+
initialPrivateState: { phantom: false },
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
// Helper to parse address to bytes format
|
|
32
|
+
function parseAddressToBytes(address) {
|
|
33
|
+
if (isWalletAddress(address)) {
|
|
34
|
+
// Wallet address (mn_ prefix)
|
|
35
|
+
const bech32Parsed = MidnightBech32m.parse(address);
|
|
36
|
+
const coinPublicKey = ShieldedCoinPublicKey.codec.decode(getNetworkId(), bech32Parsed);
|
|
37
|
+
return { bytes: new Uint8Array(coinPublicKey.data) };
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// Contract address (64-char hex string) - strip 0200 prefix for backward compat
|
|
41
|
+
let hexString = address;
|
|
42
|
+
if (address.startsWith("0200")) {
|
|
43
|
+
hexString = address.slice(4);
|
|
44
|
+
}
|
|
45
|
+
const bytes = new Uint8Array(Buffer.from(hexString, "hex"));
|
|
46
|
+
return { bytes: bytes.length === 32 ? bytes : bytes.subarray(-32) };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Helper to format target address for contract calls
|
|
50
|
+
function formatTargetAddress(address) {
|
|
51
|
+
if (isWalletAddress(address)) {
|
|
52
|
+
// Wallet address (mn_ prefix)
|
|
53
|
+
return {
|
|
54
|
+
tag: "Left",
|
|
55
|
+
value: parseAddressToBytes(address),
|
|
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
|
+
};
|
|
79
|
+
}
|
|
80
|
+
// Note: Payment coin creation is no longer needed
|
|
81
|
+
// The wallet handles payment balancing automatically when using register_domain_for
|
|
82
|
+
/**
|
|
83
|
+
* Insert or update a field for a domain
|
|
84
|
+
*/
|
|
85
|
+
export async function insertField(domain, key, value, providers) {
|
|
86
|
+
const validated = validateDomain(domain);
|
|
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
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Clear a specific field for a domain
|
|
109
|
+
*/
|
|
110
|
+
export async function clearField(domain, key, providers) {
|
|
111
|
+
const validated = validateDomain(domain);
|
|
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
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Clear all fields for a domain
|
|
134
|
+
*/
|
|
135
|
+
export async function clearAllFields(domain, providers) {
|
|
136
|
+
const validated = validateDomain(domain);
|
|
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
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Add multiple fields to a domain in a single transaction
|
|
160
|
+
* Maximum of 10 fields can be added at once
|
|
161
|
+
*/
|
|
162
|
+
export async function addMultipleFields(domain, fields, providers) {
|
|
163
|
+
const validated = validateDomain(domain);
|
|
164
|
+
if (!validated.success)
|
|
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
|
+
});
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
return failure(new NetworkError(`Failed to add multiple fields: ${error instanceof Error ? error.message : String(error)}`, error));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Update domain target address
|
|
208
|
+
*/
|
|
209
|
+
export async function updateDomainTarget(domain, targetAddress, providers) {
|
|
210
|
+
const validated = validateDomain(domain);
|
|
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
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Update domain cost (subdomain pricing)
|
|
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));
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Update domain color (accepted token type)
|
|
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));
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Transfer domain ownership (executed on parent contract)
|
|
291
|
+
*/
|
|
292
|
+
export async function transferDomainOwnership(parentDomain, subdomainName, newOwnerAddress, providers) {
|
|
293
|
+
const validated = validateDomain(parentDomain);
|
|
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
|
+
}
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Set resolver for a domain (executed on parent contract)
|
|
317
|
+
*/
|
|
318
|
+
export async function setDomainResolver(parentDomain, subdomainName, resolverAddress, providers) {
|
|
319
|
+
const validated = validateDomain(parentDomain);
|
|
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
|
+
}
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Register domain for an address (free for parent domain owner)
|
|
343
|
+
*/
|
|
344
|
+
export async function registerDomainFor(parentDomain, ownerAddress, subdomainName, resolverAddress, providers) {
|
|
345
|
+
const validated = validateDomain(parentDomain);
|
|
346
|
+
if (!validated.success)
|
|
347
|
+
return failure(validated.error);
|
|
348
|
+
try {
|
|
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
|
+
}
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Buy domain for an address (requires payment)
|
|
370
|
+
*/
|
|
371
|
+
export async function buyDomainFor(parentDomain, ownerAddress, subdomainName, resolverAddress, _paymentAmount, providers) {
|
|
372
|
+
const validated = validateDomain(parentDomain);
|
|
373
|
+
if (!validated.success)
|
|
374
|
+
return failure(validated.error);
|
|
375
|
+
try {
|
|
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
|
+
}
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Change domain owner (executed on domain's own contract)
|
|
398
|
+
*/
|
|
399
|
+
export async function changeDomainOwner(domain, newOwnerAddress, providers) {
|
|
400
|
+
const validated = validateDomain(domain);
|
|
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
|
+
}
|
|
421
|
+
}
|
package/dist/provider.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import type { PublicDataProvider } from
|
|
2
|
-
import { NetworkId } from '@midnight-ntwrk/midnight-js-network-id';
|
|
1
|
+
import type { PublicDataProvider } from "@midnight-ntwrk/midnight-js-types";
|
|
3
2
|
export interface ProviderConfig {
|
|
4
3
|
indexerUrl?: string;
|
|
5
4
|
indexerWsUrl?: string;
|
|
6
|
-
networkId?:
|
|
5
|
+
networkId?: string;
|
|
7
6
|
}
|
|
8
7
|
export declare function getDefaultProvider(): PublicDataProvider;
|
|
9
8
|
export declare function setDefaultProvider(provider: PublicDataProvider): void;
|
package/dist/provider.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { indexerPublicDataProvider } from
|
|
1
|
+
import { setNetworkId, } from "@midnight-ntwrk/midnight-js-network-id";
|
|
2
|
+
import { indexerPublicDataProvider } from "@midnight-ntwrk/midnight-js-indexer-public-data-provider";
|
|
3
3
|
let defaultProvider = null;
|
|
4
4
|
export function getDefaultProvider() {
|
|
5
5
|
if (!defaultProvider) {
|
|
6
|
-
const indexerUrl = "https://indexer.
|
|
7
|
-
const indexerWsUrl = "wss://indexer.
|
|
8
|
-
|
|
9
|
-
setNetworkId(networkId);
|
|
6
|
+
const indexerUrl = "https://indexer.preprod.midnight.network/api/v3/graphql";
|
|
7
|
+
const indexerWsUrl = "wss://indexer.preprod.midnight.network/api/v3/graphql/ws";
|
|
8
|
+
setNetworkId("preprod");
|
|
10
9
|
defaultProvider = indexerPublicDataProvider(indexerUrl, indexerWsUrl);
|
|
11
10
|
}
|
|
12
11
|
return defaultProvider;
|
|
@@ -15,7 +14,7 @@ export function setDefaultProvider(provider) {
|
|
|
15
14
|
defaultProvider = provider;
|
|
16
15
|
}
|
|
17
16
|
export function createDefaultProvider(config = {}) {
|
|
18
|
-
const { indexerUrl = "https://indexer.
|
|
17
|
+
const { indexerUrl = "https://indexer.preprod.midnight.network/api/v3/graphql", indexerWsUrl = "wss://indexer.preprod.midnight.network/api/v3/graphql/ws", networkId = "preprod", } = config;
|
|
19
18
|
setNetworkId(networkId);
|
|
20
19
|
return indexerPublicDataProvider(indexerUrl, indexerWsUrl);
|
|
21
20
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { PublicDataProvider } from '@midnight-ntwrk/midnight-js-types';
|
|
3
3
|
import type { DomainProfileData } from '../types.js';
|
|
4
|
-
import {
|
|
4
|
+
import { MidnamesError } from '../errors.js';
|
|
5
5
|
export type DomainProfileWidgetProps = {
|
|
6
6
|
fullDomain: string;
|
|
7
7
|
publicDataProvider?: PublicDataProvider;
|
|
8
8
|
className?: string;
|
|
9
9
|
showStatus?: boolean;
|
|
10
|
-
onError?: (error:
|
|
10
|
+
onError?: (error: MidnamesError) => void;
|
|
11
11
|
variant?: 'full' | 'compact' | 'inline' | 'minimal';
|
|
12
12
|
showBanner?: boolean;
|
|
13
13
|
showAvatar?: boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useMemo, useState } from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { MidnamesError } from '../errors.js';
|
|
4
4
|
import { deriveShieldedAddress } from '../utils/address.js';
|
|
5
5
|
import { Copy, Check } from 'lucide-react';
|
|
6
6
|
import { getDomainProfile } from '../core.js';
|
|
@@ -69,19 +69,19 @@ onFieldClick, onCopySuccess, }) {
|
|
|
69
69
|
setData(d.data);
|
|
70
70
|
}
|
|
71
71
|
else {
|
|
72
|
-
setError(new
|
|
72
|
+
setError(new MidnamesError((_b = (_a = d.error) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : 'Unknown error', (_d = (_c = d.error) === null || _c === void 0 ? void 0 : _c.code) !== null && _d !== void 0 ? _d : 'UNKNOWN', d.error));
|
|
73
73
|
if (onError)
|
|
74
|
-
onError(new
|
|
74
|
+
onError(new MidnamesError((_f = (_e = d.error) === null || _e === void 0 ? void 0 : _e.message) !== null && _f !== void 0 ? _f : 'Unknown error', (_h = (_g = d.error) === null || _g === void 0 ? void 0 : _g.code) !== null && _h !== void 0 ? _h : 'UNKNOWN', d.error));
|
|
75
75
|
setData(null);
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
})
|
|
79
79
|
.catch((err) => {
|
|
80
80
|
if (mounted) {
|
|
81
|
-
const
|
|
82
|
-
setError(
|
|
81
|
+
const midnamesErr = err instanceof MidnamesError ? err : new MidnamesError('Unknown error', 'UNKNOWN', err);
|
|
82
|
+
setError(midnamesErr);
|
|
83
83
|
if (onError)
|
|
84
|
-
onError(
|
|
84
|
+
onError(midnamesErr);
|
|
85
85
|
}
|
|
86
86
|
})
|
|
87
87
|
.finally(() => mounted && setLoading(false));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { PublicDataProvider } from '@midnight-ntwrk/midnight-js-types';
|
|
3
|
-
import {
|
|
3
|
+
import { MidnamesError } from '../errors.js';
|
|
4
4
|
/**
|
|
5
5
|
* HolographicCard props
|
|
6
6
|
*/
|
|
@@ -30,7 +30,7 @@ export interface HolographicCardProps {
|
|
|
30
30
|
/** Callback function called when the contact button is clicked */
|
|
31
31
|
onContactClick?: () => void;
|
|
32
32
|
/** Callback function called when an error occurs */
|
|
33
|
-
onError?: (error:
|
|
33
|
+
onError?: (error: MidnamesError) => void;
|
|
34
34
|
}
|
|
35
35
|
declare const HolographicCard: React.NamedExoticComponent<HolographicCardProps>;
|
|
36
36
|
export default HolographicCard;
|
|
@@ -1,6 +1,6 @@
|
|
|
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
|
-
import {
|
|
3
|
+
import { MidnamesError } from '../errors.js';
|
|
4
4
|
import { getDomainProfile } from '../core.js';
|
|
5
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%)';
|
|
@@ -37,7 +37,7 @@ const HolographicCardComponent = ({ domain, publicDataProvider, behindGradient,
|
|
|
37
37
|
setData(result.data);
|
|
38
38
|
}
|
|
39
39
|
else {
|
|
40
|
-
const err = new
|
|
40
|
+
const err = new MidnamesError((_b = (_a = result.error) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : 'Unknown error', (_d = (_c = result.error) === null || _c === void 0 ? void 0 : _c.code) !== null && _d !== void 0 ? _d : 'UNKNOWN', result.error);
|
|
41
41
|
setError(err);
|
|
42
42
|
if (onError)
|
|
43
43
|
onError(err);
|
|
@@ -47,10 +47,10 @@ const HolographicCardComponent = ({ domain, publicDataProvider, behindGradient,
|
|
|
47
47
|
})
|
|
48
48
|
.catch((err) => {
|
|
49
49
|
if (mounted) {
|
|
50
|
-
const
|
|
51
|
-
setError(
|
|
50
|
+
const midnamesErr = err instanceof MidnamesError ? err : new MidnamesError('Unknown error', 'UNKNOWN', err);
|
|
51
|
+
setError(midnamesErr);
|
|
52
52
|
if (onError)
|
|
53
|
-
onError(
|
|
53
|
+
onError(midnamesErr);
|
|
54
54
|
}
|
|
55
55
|
})
|
|
56
56
|
.finally(() => mounted && setLoading(false));
|