@midnames/sdk 1.0.6 → 2.0.0-rc2
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 +47 -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
package/dist/results.d.ts
CHANGED
|
@@ -10,29 +10,4 @@ export type Result<T, E = MidnamesError> = {
|
|
|
10
10
|
};
|
|
11
11
|
export declare function success<T, E = MidnamesError>(data: T): Result<T, E>;
|
|
12
12
|
export declare function failure<E = MidnamesError>(error: E): Result<never, E>;
|
|
13
|
-
export declare function match<T, E, U>(result: Result<T, E>, patterns: {
|
|
14
|
-
success: (data: T) => U;
|
|
15
|
-
error: (error: E) => U;
|
|
16
|
-
}): U;
|
|
17
|
-
export declare function map<T, U, E>(result: Result<T, E>, fn: (data: T) => U): Result<U, E>;
|
|
18
|
-
export declare function flatMap<T, U, E>(result: Result<T, E>, fn: (data: T) => Result<U, E>): Result<U, E>;
|
|
19
|
-
export declare function mapError<T, E, F>(result: Result<T, E>, fn: (error: E) => F): Result<T, F>;
|
|
20
|
-
export declare function recover<T, E>(result: Result<T, E>, fn: (error: E) => T): Result<T, never>;
|
|
21
13
|
export declare function wrapAsync<T>(asyncFn: () => Promise<T>): Promise<Result<T>>;
|
|
22
|
-
export declare class ResultChain<T, E = MidnamesError> {
|
|
23
|
-
private result;
|
|
24
|
-
constructor(result: Result<T, E>);
|
|
25
|
-
map<U>(fn: (data: T) => U): ResultChain<U, E>;
|
|
26
|
-
flatMap<U>(fn: (data: T) => Result<U, E>): ResultChain<U, E>;
|
|
27
|
-
mapError<F>(fn: (error: E) => F): ResultChain<T, F>;
|
|
28
|
-
recover(fn: (error: E) => T): ResultChain<T, never>;
|
|
29
|
-
match<U>(patterns: {
|
|
30
|
-
success: (data: T) => U;
|
|
31
|
-
error: (error: E) => U;
|
|
32
|
-
}): U;
|
|
33
|
-
unwrap(): Result<T, E>;
|
|
34
|
-
}
|
|
35
|
-
export declare function chain<T, E = MidnamesError>(result: Result<T, E>): ResultChain<T, E>;
|
|
36
|
-
export declare function combine<T extends readonly unknown[], E>(results: {
|
|
37
|
-
[K in keyof T]: Result<T[K], E>;
|
|
38
|
-
}): Result<T, E>;
|
package/dist/results.js
CHANGED
|
@@ -1,90 +1,17 @@
|
|
|
1
1
|
import { MidnamesError } from "./errors.js";
|
|
2
|
-
// Helper functions for Result type
|
|
3
2
|
export function success(data) {
|
|
4
3
|
return { success: true, data };
|
|
5
4
|
}
|
|
6
5
|
export function failure(error) {
|
|
7
6
|
return { success: false, error };
|
|
8
7
|
}
|
|
9
|
-
// Enhanced pattern matching for Results
|
|
10
|
-
export function match(result, patterns) {
|
|
11
|
-
if (result.success) {
|
|
12
|
-
return patterns.success(result.data);
|
|
13
|
-
}
|
|
14
|
-
else {
|
|
15
|
-
return patterns.error(result.error);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
// Transform success value, keep error unchanged
|
|
19
|
-
export function map(result, fn) {
|
|
20
|
-
return result.success
|
|
21
|
-
? success(fn(result.data))
|
|
22
|
-
: result;
|
|
23
|
-
}
|
|
24
|
-
// Chain operations that can fail
|
|
25
|
-
export function flatMap(result, fn) {
|
|
26
|
-
return result.success ? fn(result.data) : result;
|
|
27
|
-
}
|
|
28
|
-
// Transform error, keep success unchanged
|
|
29
|
-
export function mapError(result, fn) {
|
|
30
|
-
return result.success ? result : failure(fn(result.error));
|
|
31
|
-
}
|
|
32
|
-
// Recover from error with a fallback value
|
|
33
|
-
export function recover(result, fn) {
|
|
34
|
-
return result.success ? result : success(fn(result.error));
|
|
35
|
-
}
|
|
36
|
-
// Async result helpers
|
|
37
8
|
export async function wrapAsync(asyncFn) {
|
|
38
9
|
try {
|
|
39
|
-
|
|
40
|
-
return success(data);
|
|
10
|
+
return success(await asyncFn());
|
|
41
11
|
}
|
|
42
12
|
catch (error) {
|
|
43
|
-
if (error instanceof MidnamesError)
|
|
13
|
+
if (error instanceof MidnamesError)
|
|
44
14
|
return failure(error);
|
|
45
|
-
}
|
|
46
15
|
return failure(new MidnamesError(error instanceof Error ? error.message : String(error), "UNKNOWN_ERROR", error));
|
|
47
16
|
}
|
|
48
17
|
}
|
|
49
|
-
// Chainable Result class for fluent API
|
|
50
|
-
export class ResultChain {
|
|
51
|
-
result;
|
|
52
|
-
constructor(result) {
|
|
53
|
-
this.result = result;
|
|
54
|
-
}
|
|
55
|
-
map(fn) {
|
|
56
|
-
return new ResultChain(map(this.result, fn));
|
|
57
|
-
}
|
|
58
|
-
flatMap(fn) {
|
|
59
|
-
return new ResultChain(flatMap(this.result, fn));
|
|
60
|
-
}
|
|
61
|
-
mapError(fn) {
|
|
62
|
-
return new ResultChain(mapError(this.result, fn));
|
|
63
|
-
}
|
|
64
|
-
recover(fn) {
|
|
65
|
-
return new ResultChain(recover(this.result, fn));
|
|
66
|
-
}
|
|
67
|
-
match(patterns) {
|
|
68
|
-
return match(this.result, patterns);
|
|
69
|
-
}
|
|
70
|
-
unwrap() {
|
|
71
|
-
return this.result;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
// Helper function to start chain
|
|
75
|
-
export function chain(result) {
|
|
76
|
-
return new ResultChain(result);
|
|
77
|
-
}
|
|
78
|
-
// Combine multiple Results
|
|
79
|
-
export function combine(results) {
|
|
80
|
-
const data = [];
|
|
81
|
-
for (let i = 0; i < results.length; i++) {
|
|
82
|
-
const result = results[i];
|
|
83
|
-
if (!result.success) {
|
|
84
|
-
return result;
|
|
85
|
-
}
|
|
86
|
-
data[i] = result.data;
|
|
87
|
-
}
|
|
88
|
-
return success(data);
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=results.js.map
|
package/dist/styles.css
CHANGED
package/dist/types.d.ts
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
|
-
export type { DomainData } from "
|
|
1
|
+
export type { DomainData, DomainReference, Maybe, PaymentConfig } from "./managed/contract/index.js";
|
|
2
|
+
export { AddressType } from "./managed/contract/index.js";
|
|
3
|
+
export type DomainTarget = {
|
|
4
|
+
type: "contract";
|
|
5
|
+
address: string;
|
|
6
|
+
} | {
|
|
7
|
+
type: "shielded";
|
|
8
|
+
address: string;
|
|
9
|
+
} | {
|
|
10
|
+
type: "unshielded";
|
|
11
|
+
address: string;
|
|
12
|
+
};
|
|
2
13
|
export interface DomainInfo {
|
|
14
|
+
id: bigint;
|
|
3
15
|
owner: string;
|
|
4
|
-
|
|
5
|
-
|
|
16
|
+
ownerAddress: string;
|
|
17
|
+
target: DomainTarget;
|
|
18
|
+
targetLocked: boolean;
|
|
6
19
|
}
|
|
7
20
|
export interface DomainSettings {
|
|
8
21
|
coinColor: Uint8Array;
|
|
@@ -11,10 +24,12 @@ export interface DomainSettings {
|
|
|
11
24
|
medium: bigint;
|
|
12
25
|
long: bigint;
|
|
13
26
|
};
|
|
27
|
+
buyEnabled: boolean;
|
|
28
|
+
defaultField: string | null;
|
|
29
|
+
paymentConfigLocked: boolean;
|
|
14
30
|
}
|
|
15
31
|
export interface DomainProfileData {
|
|
16
32
|
fullDomain: string;
|
|
17
|
-
resolvedTarget: string | null;
|
|
18
33
|
info: DomainInfo | null;
|
|
19
34
|
fields: Map<string, string>;
|
|
20
35
|
settings: DomainSettings | null;
|
package/dist/types.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=types.js.map
|
|
1
|
+
export { AddressType } from "./managed/contract/index.js";
|
package/dist/utils/address.d.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
export declare function bytesToHex(bytes: Uint8Array): string;
|
|
2
|
+
export declare function hexToBytes(hex: string): Uint8Array;
|
|
2
3
|
export declare function formatContractAddress(bytes: Uint8Array): string;
|
|
3
|
-
export declare function deriveShieldedAddress(coinPublicKeyAddress: string, encryptionPublicKey: string): string | null;
|
|
4
4
|
export declare function isWalletAddress(address: string): boolean;
|
|
5
|
+
export declare function deriveShieldedAddress(coinPublicKeyAddress: string, encryptionPublicKey: string): string | null;
|
|
6
|
+
export declare function formatUnshieldedAddress(bytes: Uint8Array): string;
|
|
7
|
+
export declare function parseAddressToBytes(address: string): {
|
|
8
|
+
bytes: Uint8Array;
|
|
9
|
+
};
|
package/dist/utils/address.js
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
import { MidnightBech32m, ShieldedCoinPublicKey, ShieldedAddress,
|
|
1
|
+
import { MidnightBech32m, ShieldedCoinPublicKey, ShieldedEncryptionPublicKey, ShieldedAddress, UnshieldedAddress } from "@midnight-ntwrk/wallet-sdk-address-format";
|
|
2
2
|
import { getNetworkId } from "@midnight-ntwrk/midnight-js-network-id";
|
|
3
3
|
export function bytesToHex(bytes) {
|
|
4
|
-
return Array.from(bytes)
|
|
4
|
+
return Array.from(bytes)
|
|
5
|
+
.map((b) => b.toString(16).padStart(2, "0"))
|
|
6
|
+
.join("");
|
|
7
|
+
}
|
|
8
|
+
export function hexToBytes(hex) {
|
|
9
|
+
return new Uint8Array(Buffer.from(hex, "hex"));
|
|
5
10
|
}
|
|
6
11
|
export function formatContractAddress(bytes) {
|
|
7
|
-
return
|
|
12
|
+
return bytesToHex(bytes);
|
|
13
|
+
}
|
|
14
|
+
export function isWalletAddress(address) {
|
|
15
|
+
return address.startsWith("mn_");
|
|
8
16
|
}
|
|
9
17
|
export function deriveShieldedAddress(coinPublicKeyAddress, encryptionPublicKey) {
|
|
10
18
|
try {
|
|
@@ -23,7 +31,16 @@ export function deriveShieldedAddress(coinPublicKeyAddress, encryptionPublicKey)
|
|
|
23
31
|
return null;
|
|
24
32
|
}
|
|
25
33
|
}
|
|
26
|
-
export function
|
|
27
|
-
|
|
34
|
+
export function formatUnshieldedAddress(bytes) {
|
|
35
|
+
const addr = new UnshieldedAddress(Buffer.from(bytes));
|
|
36
|
+
return UnshieldedAddress.codec.encode(getNetworkId(), addr).asString();
|
|
37
|
+
}
|
|
38
|
+
export function parseAddressToBytes(address) {
|
|
39
|
+
if (isWalletAddress(address)) {
|
|
40
|
+
const bech32Parsed = MidnightBech32m.parse(address);
|
|
41
|
+
const coinPublicKey = ShieldedCoinPublicKey.codec.decode(getNetworkId(), bech32Parsed);
|
|
42
|
+
return { bytes: new Uint8Array(coinPublicKey.data) };
|
|
43
|
+
}
|
|
44
|
+
const bytes = new Uint8Array(Buffer.from(address, "hex"));
|
|
45
|
+
return { bytes: bytes.length === 32 ? bytes : bytes.subarray(-32) };
|
|
28
46
|
}
|
|
29
|
-
//# sourceMappingURL=address.js.map
|
package/dist/utils/domain.d.ts
CHANGED
|
@@ -8,12 +8,8 @@ export interface ParsedDomain {
|
|
|
8
8
|
depth: number;
|
|
9
9
|
}
|
|
10
10
|
export declare function parseFullDomain(fullDomain: string, tld?: string): ParsedDomain;
|
|
11
|
-
export declare function buildTraversalPath(fullDomain: string, tld?: string): string[];
|
|
12
11
|
export declare function isValidDomainName(domainName: string): boolean;
|
|
13
|
-
export declare function getParentDomain(fullDomain: string): string | null;
|
|
14
|
-
export declare function getSubdomain(fullDomain: string): string;
|
|
15
12
|
export declare function isTLD(domain: string, tld?: string): boolean;
|
|
16
|
-
export declare function buildFullDomain(subdomain: string, parent: string): string;
|
|
17
13
|
export declare function domainToKey(name: string): {
|
|
18
14
|
key: Uint8Array;
|
|
19
15
|
len: bigint;
|
package/dist/utils/domain.js
CHANGED
|
@@ -1,60 +1,36 @@
|
|
|
1
|
-
export const DEFAULT_TLD =
|
|
1
|
+
export const DEFAULT_TLD = "night";
|
|
2
2
|
export function normalizeDomain(input, assumeTld = true) {
|
|
3
|
-
const
|
|
4
|
-
const cleaned = trimmedInput.replace(/\.+/g, '.').replace(/\.$/, '');
|
|
3
|
+
const cleaned = input.trim().toLowerCase().replace(/\.+/g, ".").replace(/\.$/, "");
|
|
5
4
|
if (!assumeTld)
|
|
6
5
|
return cleaned;
|
|
6
|
+
if (cleaned === DEFAULT_TLD)
|
|
7
|
+
return cleaned;
|
|
7
8
|
if (cleaned.endsWith(`.${DEFAULT_TLD}`))
|
|
8
9
|
return cleaned;
|
|
9
10
|
return `${cleaned}.${DEFAULT_TLD}`;
|
|
10
11
|
}
|
|
11
12
|
export function parseFullDomain(fullDomain, tld = DEFAULT_TLD) {
|
|
12
13
|
const normalized = normalizeDomain(fullDomain);
|
|
13
|
-
const parts = normalized.split(
|
|
14
|
+
const parts = normalized.split(".");
|
|
14
15
|
if (parts[parts.length - 1] !== tld || parts.length < 2) {
|
|
15
|
-
return { isValid: false, domainName:
|
|
16
|
-
}
|
|
17
|
-
const domainName = parts[0];
|
|
18
|
-
const parentDomainPath = parts.slice(1).join('.');
|
|
19
|
-
return { isValid: true, domainName, parentDomainPath, fullDomain: normalized, depth: parts.length - 1 };
|
|
20
|
-
}
|
|
21
|
-
export function buildTraversalPath(fullDomain, tld = DEFAULT_TLD) {
|
|
22
|
-
const parsed = parseFullDomain(fullDomain, tld);
|
|
23
|
-
if (!parsed.isValid)
|
|
24
|
-
return [];
|
|
25
|
-
const path = [tld];
|
|
26
|
-
if (parsed.depth === 0)
|
|
27
|
-
return path;
|
|
28
|
-
const parts = parsed.fullDomain.split('.');
|
|
29
|
-
for (let i = parts.length - 2; i >= 0; i--) {
|
|
30
|
-
path.push(parts.slice(i).join('.'));
|
|
16
|
+
return { isValid: false, domainName: "", parentDomainPath: "", fullDomain: normalized, depth: 0 };
|
|
31
17
|
}
|
|
32
|
-
return
|
|
18
|
+
return {
|
|
19
|
+
isValid: true,
|
|
20
|
+
domainName: parts[0],
|
|
21
|
+
parentDomainPath: parts.slice(1).join("."),
|
|
22
|
+
fullDomain: normalized,
|
|
23
|
+
depth: parts.length - 1,
|
|
24
|
+
};
|
|
33
25
|
}
|
|
34
26
|
export function isValidDomainName(domainName) {
|
|
35
|
-
if (!domainName || domainName.length === 0 || domainName.length >
|
|
27
|
+
if (!domainName || domainName.length === 0 || domainName.length > 32)
|
|
36
28
|
return false;
|
|
37
|
-
|
|
38
|
-
return regex.test(domainName.toLowerCase());
|
|
39
|
-
}
|
|
40
|
-
export function getParentDomain(fullDomain) {
|
|
41
|
-
const parts = fullDomain.split('.');
|
|
42
|
-
if (parts.length <= 1)
|
|
43
|
-
return null;
|
|
44
|
-
return parts.slice(1).join('.');
|
|
45
|
-
}
|
|
46
|
-
export function getSubdomain(fullDomain) {
|
|
47
|
-
const parts = fullDomain.split('.');
|
|
48
|
-
return parts[0] || '';
|
|
29
|
+
return /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(domainName.toLowerCase());
|
|
49
30
|
}
|
|
50
31
|
export function isTLD(domain, tld = DEFAULT_TLD) {
|
|
51
32
|
return normalizeDomain(domain, false) === tld;
|
|
52
33
|
}
|
|
53
|
-
export function buildFullDomain(subdomain, parent) {
|
|
54
|
-
if (!subdomain)
|
|
55
|
-
return parent;
|
|
56
|
-
return `${subdomain}.${parent}`;
|
|
57
|
-
}
|
|
58
34
|
export function domainToKey(name) {
|
|
59
35
|
const bytes = new TextEncoder().encode(name);
|
|
60
36
|
if (bytes.length === 0 || bytes.length > 32)
|
|
@@ -73,4 +49,3 @@ export function keyToDomain(key) {
|
|
|
73
49
|
}
|
|
74
50
|
return new TextDecoder().decode(key.subarray(0, len));
|
|
75
51
|
}
|
|
76
|
-
//# sourceMappingURL=domain.js.map
|
package/dist/utils/sanitize.js
CHANGED
|
@@ -10,7 +10,6 @@ export function sanitizeUrl(url) {
|
|
|
10
10
|
const trimmed = url.trim();
|
|
11
11
|
if (!trimmed)
|
|
12
12
|
return '';
|
|
13
|
-
// Decode URL-encoded characters to catch bypasses like java%73cript:
|
|
14
13
|
let decoded;
|
|
15
14
|
try {
|
|
16
15
|
decoded = decodeURIComponent(trimmed);
|
|
@@ -18,12 +17,9 @@ export function sanitizeUrl(url) {
|
|
|
18
17
|
catch {
|
|
19
18
|
decoded = trimmed;
|
|
20
19
|
}
|
|
21
|
-
// Relative URLs and protocol-relative are fine
|
|
22
20
|
if (decoded.startsWith('/') || decoded.startsWith('./'))
|
|
23
21
|
return trimmed;
|
|
24
|
-
// Allow only safe protocols (check decoded version)
|
|
25
22
|
if (ALLOWED_PROTOCOLS.test(decoded))
|
|
26
23
|
return trimmed;
|
|
27
24
|
return '';
|
|
28
25
|
}
|
|
29
|
-
//# sourceMappingURL=sanitize.js.map
|
package/package.json
CHANGED
|
@@ -1,17 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@midnames/sdk",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "SDK for
|
|
5
|
-
"keywords": [
|
|
6
|
-
"midnight",
|
|
7
|
-
"nameservice",
|
|
8
|
-
"dns",
|
|
9
|
-
"blockchain",
|
|
10
|
-
"midnames",
|
|
11
|
-
"widget",
|
|
12
|
-
"domain",
|
|
13
|
-
"resolver"
|
|
14
|
-
],
|
|
3
|
+
"version": "2.0.0-rc2",
|
|
4
|
+
"description": "SDK for midnight.domains",
|
|
15
5
|
"type": "module",
|
|
16
6
|
"main": "dist/index.js",
|
|
17
7
|
"module": "dist/index.js",
|
|
@@ -24,112 +14,86 @@
|
|
|
24
14
|
".": {
|
|
25
15
|
"types": "./dist/index.d.ts",
|
|
26
16
|
"import": "./dist/index.js",
|
|
27
|
-
"require": "./dist/index.js",
|
|
28
17
|
"default": "./dist/index.js"
|
|
29
18
|
},
|
|
30
19
|
"./provider": {
|
|
31
20
|
"types": "./dist/provider.d.ts",
|
|
32
21
|
"import": "./dist/provider.js",
|
|
33
|
-
"require": "./dist/provider.js",
|
|
34
22
|
"default": "./dist/provider.js"
|
|
35
23
|
},
|
|
36
24
|
"./types": {
|
|
37
25
|
"types": "./dist/types.d.ts",
|
|
38
26
|
"import": "./dist/types.js",
|
|
39
|
-
"require": "./dist/types.js",
|
|
40
27
|
"default": "./dist/types.js"
|
|
41
28
|
},
|
|
42
|
-
"./utils": {
|
|
43
|
-
"types": "./dist/utils/index.d.ts",
|
|
44
|
-
"import": "./dist/utils/index.js",
|
|
45
|
-
"require": "./dist/utils/index.js",
|
|
46
|
-
"default": "./dist/utils/index.js"
|
|
47
|
-
},
|
|
48
|
-
"./utils/domain": {
|
|
49
|
-
"types": "./dist/utils/domain.d.ts",
|
|
50
|
-
"import": "./dist/utils/domain.js",
|
|
51
|
-
"require": "./dist/utils/domain.js",
|
|
52
|
-
"default": "./dist/utils/domain.js"
|
|
53
|
-
},
|
|
54
|
-
"./utils/address": {
|
|
55
|
-
"types": "./dist/utils/address.d.ts",
|
|
56
|
-
"import": "./dist/utils/address.js",
|
|
57
|
-
"require": "./dist/utils/address.js",
|
|
58
|
-
"default": "./dist/utils/address.js"
|
|
59
|
-
},
|
|
60
|
-
"./react/DomainProfileWidget": {
|
|
61
|
-
"types": "./dist/react/DomainProfileWidget/index.d.ts",
|
|
62
|
-
"import": "./dist/react/DomainProfileWidget/index.js",
|
|
63
|
-
"require": "./dist/react/DomainProfileWidget/index.js",
|
|
64
|
-
"default": "./dist/react/DomainProfileWidget/index.js"
|
|
65
|
-
},
|
|
66
|
-
"./react/HolographicCard": {
|
|
67
|
-
"types": "./dist/react/HolographicCard/index.d.ts",
|
|
68
|
-
"import": "./dist/react/HolographicCard/index.js",
|
|
69
|
-
"require": "./dist/react/HolographicCard/index.js",
|
|
70
|
-
"default": "./dist/react/HolographicCard/index.js"
|
|
71
|
-
},
|
|
72
29
|
"./core": {
|
|
73
30
|
"types": "./dist/core.d.ts",
|
|
74
31
|
"import": "./dist/core.js",
|
|
75
|
-
"require": "./dist/core.js",
|
|
76
32
|
"default": "./dist/core.js"
|
|
77
33
|
},
|
|
34
|
+
"./react/DomainProfileWidget": {
|
|
35
|
+
"types": "./dist/react/DomainProfileWidget.d.ts",
|
|
36
|
+
"import": "./dist/react/DomainProfileWidget.js",
|
|
37
|
+
"default": "./dist/react/DomainProfileWidget.js"
|
|
38
|
+
},
|
|
39
|
+
"./react/HolographicCard": {
|
|
40
|
+
"types": "./dist/react/HolographicCard.d.ts",
|
|
41
|
+
"import": "./dist/react/HolographicCard.js",
|
|
42
|
+
"default": "./dist/react/HolographicCard.js"
|
|
43
|
+
},
|
|
78
44
|
"./styles.css": "./dist/styles.css",
|
|
79
45
|
"./holographic-card.css": "./dist/holographic-card.css"
|
|
80
46
|
},
|
|
81
47
|
"scripts": {
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"
|
|
48
|
+
"compact": "compact compile +0.30.0 ns.compact src/managed",
|
|
49
|
+
"compact:skip-zk": "compact compile +0.30.0 --skip-zk ns.compact src/managed",
|
|
50
|
+
"build": "rm -rf dist && tsc --project tsconfig.build.json && mkdir -p ./dist/managed/keys && mkdir -p ./dist/managed/contract && cp ./src/managed/contract/index.js ./src/managed/contract/index.d.ts ./dist/managed/contract/ && cp -Rf ./src/managed/compiler ./dist/managed/compiler && cp ./src/managed/keys/*.prover ./dist/managed/keys/ && cp ./src/styles.css ./dist/styles.css && cp ./src/holographic-card.css ./dist/holographic-card.css",
|
|
51
|
+
"typecheck": "tsc --project tsconfig.build.json --noEmit",
|
|
52
|
+
"deploy": "bun run src/test/batch-deploy.ts",
|
|
53
|
+
"resolve": "bun run resolve.ts",
|
|
54
|
+
"serve": "bun run resolve.ts --serve"
|
|
87
55
|
},
|
|
88
56
|
"dependencies": {
|
|
89
|
-
"@
|
|
57
|
+
"@midnight-ntwrk/compact-js": "2.5.0",
|
|
90
58
|
"@midnight-ntwrk/compact-runtime": "0.15.0",
|
|
91
59
|
"@midnight-ntwrk/ledger-v8": "^8.0.3",
|
|
60
|
+
"@midnight-ntwrk/midnight-js-contracts": "4.0.2",
|
|
92
61
|
"@midnight-ntwrk/midnight-js-indexer-public-data-provider": "4.0.2",
|
|
93
62
|
"@midnight-ntwrk/midnight-js-network-id": "4.0.2",
|
|
94
63
|
"@midnight-ntwrk/wallet-sdk-address-format": "3.1.0"
|
|
95
64
|
},
|
|
96
|
-
"
|
|
97
|
-
"@
|
|
98
|
-
|
|
65
|
+
"devDependencies": {
|
|
66
|
+
"@midnight-ntwrk/compact-js": "2.5.0",
|
|
67
|
+
"@midnight-ntwrk/midnight-js-contracts": "4.0.2",
|
|
68
|
+
"@midnight-ntwrk/midnight-js-http-client-proof-provider": "4.0.2",
|
|
69
|
+
"@midnight-ntwrk/midnight-js-level-private-state-provider": "4.0.2",
|
|
70
|
+
"@midnight-ntwrk/midnight-js-node-zk-config-provider": "4.0.2",
|
|
71
|
+
"@midnight-ntwrk/midnight-js-types": "4.0.2",
|
|
72
|
+
"@midnight-ntwrk/wallet-sdk-abstractions": "2.0.0",
|
|
73
|
+
"@midnight-ntwrk/wallet-sdk-dust-wallet": "3.0.0",
|
|
74
|
+
"@midnight-ntwrk/wallet-sdk-facade": "3.0.0",
|
|
75
|
+
"@midnight-ntwrk/wallet-sdk-hd": "3.0.1",
|
|
76
|
+
"@midnight-ntwrk/wallet-sdk-shielded": "2.1.0",
|
|
77
|
+
"@midnight-ntwrk/wallet-sdk-unshielded-wallet": "2.1.0",
|
|
78
|
+
"@scure/bip39": "^2.0.1",
|
|
79
|
+
"@types/ws": "^8.18.1",
|
|
80
|
+
"dotenv": "^17.3.1",
|
|
81
|
+
"pino": "^10.3.1",
|
|
82
|
+
"pino-pretty": "^13.1.3",
|
|
83
|
+
"rxjs": "^7.8.1",
|
|
84
|
+
"typescript": "^5.8.3",
|
|
85
|
+
"ws": "^8.19.0"
|
|
86
|
+
},
|
|
99
87
|
"peerDependencies": {
|
|
100
88
|
"react": ">=18",
|
|
101
89
|
"react-dom": ">=18",
|
|
102
90
|
"lucide-react": ">=0.400.0"
|
|
103
91
|
},
|
|
104
92
|
"peerDependenciesMeta": {
|
|
105
|
-
"react": {
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
"react-dom": {
|
|
109
|
-
"optional": true
|
|
110
|
-
},
|
|
111
|
-
"lucide-react": {
|
|
112
|
-
"optional": true
|
|
113
|
-
}
|
|
114
|
-
},
|
|
115
|
-
"repository": {
|
|
116
|
-
"type": "git",
|
|
117
|
-
"url": "git+https://github.com/midnames/sdk.git",
|
|
118
|
-
"directory": "packages/sdk"
|
|
119
|
-
},
|
|
120
|
-
"homepage": "https://github.com/midnames/sdk",
|
|
121
|
-
"bugs": {
|
|
122
|
-
"url": "https://github.com/midnames/sdk/issues"
|
|
93
|
+
"react": { "optional": true },
|
|
94
|
+
"react-dom": { "optional": true },
|
|
95
|
+
"lucide-react": { "optional": true }
|
|
123
96
|
},
|
|
124
97
|
"license": "MIT",
|
|
125
|
-
"author": "Midnames"
|
|
126
|
-
"devDependencies": {
|
|
127
|
-
"@midnight-ntwrk/compact-js": "2.5.0",
|
|
128
|
-
"@midnight-ntwrk/midnight-js-contracts": "4.0.2",
|
|
129
|
-
"@midnight-ntwrk/midnight-js-types": "4.0.2",
|
|
130
|
-
"@types/react": "^19.1.2",
|
|
131
|
-
"@types/react-dom": "^19.1.2",
|
|
132
|
-
"lucide-react": "0.577.0",
|
|
133
|
-
"rxjs": "^7.8.1"
|
|
134
|
-
}
|
|
98
|
+
"author": "Midnames"
|
|
135
99
|
}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Controller Types for the Nameservice SDK
|
|
3
|
-
*
|
|
4
|
-
* These types define the interface for the LeafContractController
|
|
5
|
-
* which manages domain contract interactions with RxJS observable state.
|
|
6
|
-
*
|
|
7
|
-
* Note: The full LeafContractController implementation is in the frontend
|
|
8
|
-
* module at: modules/midnight/nameservice-sdk/api/leafContractController.ts
|
|
9
|
-
*/
|
|
10
|
-
import type { Observable, Subject } from 'rxjs';
|
|
11
|
-
/**
|
|
12
|
-
* Target address - domains can point to either a wallet (CoinPublicKey) or another contract
|
|
13
|
-
*/
|
|
14
|
-
export interface EitherTarget {
|
|
15
|
-
is_left: boolean;
|
|
16
|
-
left: {
|
|
17
|
-
bytes: Uint8Array;
|
|
18
|
-
};
|
|
19
|
-
right: {
|
|
20
|
-
bytes: Uint8Array;
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Subdomain data stored in the parent contract
|
|
25
|
-
*/
|
|
26
|
-
export interface SubdomainData {
|
|
27
|
-
owner: {
|
|
28
|
-
bytes: Uint8Array;
|
|
29
|
-
};
|
|
30
|
-
resolver: {
|
|
31
|
-
bytes: Uint8Array;
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Observable state for a single domain contract
|
|
36
|
-
*/
|
|
37
|
-
export interface DomainState {
|
|
38
|
-
contractAddress: string;
|
|
39
|
-
target: EitherTarget;
|
|
40
|
-
fields: Map<string, string>;
|
|
41
|
-
subdomains: Map<string, SubdomainData>;
|
|
42
|
-
coinColor: Uint8Array;
|
|
43
|
-
costs: {
|
|
44
|
-
short: bigint;
|
|
45
|
-
medium: bigint;
|
|
46
|
-
long: bigint;
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Operation status for tracking async operations
|
|
51
|
-
*/
|
|
52
|
-
export type OperationStatus = {
|
|
53
|
-
type: 'idle';
|
|
54
|
-
} | {
|
|
55
|
-
type: 'proving';
|
|
56
|
-
message?: string;
|
|
57
|
-
} | {
|
|
58
|
-
type: 'signing';
|
|
59
|
-
message?: string;
|
|
60
|
-
} | {
|
|
61
|
-
type: 'submitting';
|
|
62
|
-
message?: string;
|
|
63
|
-
} | {
|
|
64
|
-
type: 'complete';
|
|
65
|
-
txHash?: string;
|
|
66
|
-
} | {
|
|
67
|
-
type: 'error';
|
|
68
|
-
error: Error;
|
|
69
|
-
};
|
|
70
|
-
/**
|
|
71
|
-
* Result of a transaction operation
|
|
72
|
-
*/
|
|
73
|
-
export interface TxResult {
|
|
74
|
-
txHash: string;
|
|
75
|
-
blockHeight?: bigint;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Derived state combining contract state with operation status
|
|
79
|
-
*/
|
|
80
|
-
export interface DerivedDomainState {
|
|
81
|
-
domain: DomainState | null;
|
|
82
|
-
operationStatus: OperationStatus;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Interface for the LeafContractController
|
|
86
|
-
*
|
|
87
|
-
* This interface defines the contract for managing domain operations.
|
|
88
|
-
* The implementation uses RxJS observables for reactive state updates.
|
|
89
|
-
*/
|
|
90
|
-
export interface LeafContractControllerInterface {
|
|
91
|
-
/** The contract address this controller is connected to */
|
|
92
|
-
readonly contractAddress: string;
|
|
93
|
-
/** Observable stream of domain state */
|
|
94
|
-
readonly state$: Observable<DerivedDomainState>;
|
|
95
|
-
/** Subject for operation status updates */
|
|
96
|
-
readonly operations$: Subject<OperationStatus>;
|
|
97
|
-
updateTarget(target: EitherTarget): Promise<TxResult>;
|
|
98
|
-
insertField(key: string, value: string): Promise<TxResult>;
|
|
99
|
-
clearField(key: string): Promise<TxResult>;
|
|
100
|
-
clearAllFields(): Promise<TxResult>;
|
|
101
|
-
addMultipleFields(kvs: Array<[string, string]>): Promise<TxResult>;
|
|
102
|
-
registerDomainFor(ownerCoinPublicKey: Uint8Array, domainName: string, resolverAddress: string): Promise<TxResult>;
|
|
103
|
-
transferDomain(domainName: string, newOwnerCoinPublicKey: Uint8Array): Promise<TxResult>;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Empty initial state constant
|
|
107
|
-
*/
|
|
108
|
-
export declare const emptyDomainState: DerivedDomainState;
|
package/dist/controller-types.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Controller Types for the Nameservice SDK
|
|
3
|
-
*
|
|
4
|
-
* These types define the interface for the LeafContractController
|
|
5
|
-
* which manages domain contract interactions with RxJS observable state.
|
|
6
|
-
*
|
|
7
|
-
* Note: The full LeafContractController implementation is in the frontend
|
|
8
|
-
* module at: modules/midnight/nameservice-sdk/api/leafContractController.ts
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* Empty initial state constant
|
|
12
|
-
*/
|
|
13
|
-
export const emptyDomainState = {
|
|
14
|
-
domain: null,
|
|
15
|
-
operationStatus: { type: 'idle' },
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=controller-types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"controller-types.js","sourceRoot":"","sources":["../src/controller-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA0FH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAuB;IAClD,MAAM,EAAE,IAAI;IACZ,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;CAClC,CAAC"}
|