@aibtc/mcp-server 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/README.md +340 -0
- package/dist/api.d.ts +9 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +79 -0
- package/dist/api.js.map +1 -0
- package/dist/config/contracts.d.ts +169 -0
- package/dist/config/contracts.d.ts.map +1 -0
- package/dist/config/contracts.js +250 -0
- package/dist/config/contracts.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/networks.d.ts +11 -0
- package/dist/config/networks.d.ts.map +1 -0
- package/dist/config/networks.js +21 -0
- package/dist/config/networks.js.map +1 -0
- package/dist/endpoints/index.d.ts +2 -0
- package/dist/endpoints/index.d.ts.map +1 -0
- package/dist/endpoints/index.js +2 -0
- package/dist/endpoints/index.js.map +1 -0
- package/dist/endpoints/registry.d.ts +38 -0
- package/dist/endpoints/registry.d.ts.map +1 -0
- package/dist/endpoints/registry.js +935 -0
- package/dist/endpoints/registry.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/services/bitflow.service.d.ts +159 -0
- package/dist/services/bitflow.service.d.ts.map +1 -0
- package/dist/services/bitflow.service.js +325 -0
- package/dist/services/bitflow.service.js.map +1 -0
- package/dist/services/bns.service.d.ts +87 -0
- package/dist/services/bns.service.d.ts.map +1 -0
- package/dist/services/bns.service.js +312 -0
- package/dist/services/bns.service.js.map +1 -0
- package/dist/services/defi.service.d.ts +146 -0
- package/dist/services/defi.service.d.ts.map +1 -0
- package/dist/services/defi.service.js +461 -0
- package/dist/services/defi.service.js.map +1 -0
- package/dist/services/hiro-api.d.ts +438 -0
- package/dist/services/hiro-api.d.ts.map +1 -0
- package/dist/services/hiro-api.js +376 -0
- package/dist/services/hiro-api.js.map +1 -0
- package/dist/services/nft.service.d.ts +70 -0
- package/dist/services/nft.service.d.ts.map +1 -0
- package/dist/services/nft.service.js +148 -0
- package/dist/services/nft.service.js.map +1 -0
- package/dist/services/sbtc.service.d.ts +44 -0
- package/dist/services/sbtc.service.d.ts.map +1 -0
- package/dist/services/sbtc.service.js +100 -0
- package/dist/services/sbtc.service.js.map +1 -0
- package/dist/services/scaffold.service.d.ts +41 -0
- package/dist/services/scaffold.service.d.ts.map +1 -0
- package/dist/services/scaffold.service.js +1055 -0
- package/dist/services/scaffold.service.js.map +1 -0
- package/dist/services/stacking.service.d.ts +58 -0
- package/dist/services/stacking.service.d.ts.map +1 -0
- package/dist/services/stacking.service.js +153 -0
- package/dist/services/stacking.service.js.map +1 -0
- package/dist/services/tokens.service.d.ts +62 -0
- package/dist/services/tokens.service.d.ts.map +1 -0
- package/dist/services/tokens.service.js +119 -0
- package/dist/services/tokens.service.js.map +1 -0
- package/dist/services/wallet-manager.d.ts +107 -0
- package/dist/services/wallet-manager.d.ts.map +1 -0
- package/dist/services/wallet-manager.js +389 -0
- package/dist/services/wallet-manager.js.map +1 -0
- package/dist/services/x402.service.d.ts +26 -0
- package/dist/services/x402.service.d.ts.map +1 -0
- package/dist/services/x402.service.js +125 -0
- package/dist/services/x402.service.js.map +1 -0
- package/dist/tools/bitflow.tools.d.ts +3 -0
- package/dist/tools/bitflow.tools.d.ts.map +1 -0
- package/dist/tools/bitflow.tools.js +501 -0
- package/dist/tools/bitflow.tools.js.map +1 -0
- package/dist/tools/bns.tools.d.ts +3 -0
- package/dist/tools/bns.tools.d.ts.map +1 -0
- package/dist/tools/bns.tools.js +164 -0
- package/dist/tools/bns.tools.js.map +1 -0
- package/dist/tools/contract.tools.d.ts +3 -0
- package/dist/tools/contract.tools.d.ts.map +1 -0
- package/dist/tools/contract.tools.js +126 -0
- package/dist/tools/contract.tools.js.map +1 -0
- package/dist/tools/defi.tools.d.ts +3 -0
- package/dist/tools/defi.tools.d.ts.map +1 -0
- package/dist/tools/defi.tools.js +425 -0
- package/dist/tools/defi.tools.js.map +1 -0
- package/dist/tools/endpoint.tools.d.ts +3 -0
- package/dist/tools/endpoint.tools.d.ts.map +1 -0
- package/dist/tools/endpoint.tools.js +157 -0
- package/dist/tools/endpoint.tools.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +52 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/nft.tools.d.ts +3 -0
- package/dist/tools/nft.tools.d.ts.map +1 -0
- package/dist/tools/nft.tools.js +154 -0
- package/dist/tools/nft.tools.js.map +1 -0
- package/dist/tools/openrouter.tools.d.ts +3 -0
- package/dist/tools/openrouter.tools.d.ts.map +1 -0
- package/dist/tools/openrouter.tools.js +664 -0
- package/dist/tools/openrouter.tools.js.map +1 -0
- package/dist/tools/query.tools.d.ts +3 -0
- package/dist/tools/query.tools.d.ts.map +1 -0
- package/dist/tools/query.tools.js +209 -0
- package/dist/tools/query.tools.js.map +1 -0
- package/dist/tools/sbtc.tools.d.ts +3 -0
- package/dist/tools/sbtc.tools.d.ts.map +1 -0
- package/dist/tools/sbtc.tools.js +103 -0
- package/dist/tools/sbtc.tools.js.map +1 -0
- package/dist/tools/scaffold.tools.d.ts +3 -0
- package/dist/tools/scaffold.tools.d.ts.map +1 -0
- package/dist/tools/scaffold.tools.js +216 -0
- package/dist/tools/scaffold.tools.js.map +1 -0
- package/dist/tools/stacking.tools.d.ts +3 -0
- package/dist/tools/stacking.tools.d.ts.map +1 -0
- package/dist/tools/stacking.tools.js +112 -0
- package/dist/tools/stacking.tools.js.map +1 -0
- package/dist/tools/tokens.tools.d.ts +3 -0
- package/dist/tools/tokens.tools.d.ts.map +1 -0
- package/dist/tools/tokens.tools.js +154 -0
- package/dist/tools/tokens.tools.js.map +1 -0
- package/dist/tools/transfer.tools.d.ts +3 -0
- package/dist/tools/transfer.tools.d.ts.map +1 -0
- package/dist/tools/transfer.tools.js +62 -0
- package/dist/tools/transfer.tools.js.map +1 -0
- package/dist/tools/wallet-management.tools.d.ts +6 -0
- package/dist/tools/wallet-management.tools.d.ts.map +1 -0
- package/dist/tools/wallet-management.tools.js +390 -0
- package/dist/tools/wallet-management.tools.js.map +1 -0
- package/dist/tools/wallet.tools.d.ts +3 -0
- package/dist/tools/wallet.tools.d.ts.map +1 -0
- package/dist/tools/wallet.tools.js +105 -0
- package/dist/tools/wallet.tools.js.map +1 -0
- package/dist/transactions/builder.d.ts +56 -0
- package/dist/transactions/builder.d.ts.map +1 -0
- package/dist/transactions/builder.js +134 -0
- package/dist/transactions/builder.js.map +1 -0
- package/dist/transactions/clarity-values.d.ts +67 -0
- package/dist/transactions/clarity-values.d.ts.map +1 -0
- package/dist/transactions/clarity-values.js +169 -0
- package/dist/transactions/clarity-values.js.map +1 -0
- package/dist/transactions/post-conditions.d.ts +27 -0
- package/dist/transactions/post-conditions.d.ts.map +1 -0
- package/dist/transactions/post-conditions.js +101 -0
- package/dist/transactions/post-conditions.js.map +1 -0
- package/dist/utils/encryption.d.ts +33 -0
- package/dist/utils/encryption.d.ts.map +1 -0
- package/dist/utils/encryption.js +110 -0
- package/dist/utils/encryption.js.map +1 -0
- package/dist/utils/errors.d.ts +84 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +132 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/formatting.d.ts +51 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/formatting.js +114 -0
- package/dist/utils/formatting.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/storage.d.ts +90 -0
- package/dist/utils/storage.d.ts.map +1 -0
- package/dist/utils/storage.js +196 -0
- package/dist/utils/storage.js.map +1 -0
- package/dist/utils/validation.d.ts +67 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +74 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/wallet.d.ts +86 -0
- package/dist/wallet.d.ts.map +1 -0
- package/dist/wallet.js +279 -0
- package/dist/wallet.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { type Network } from "../config/index.js";
|
|
2
|
+
import { type Account, type TransferResult } from "../transactions/builder.js";
|
|
3
|
+
export interface BnsLookupResult {
|
|
4
|
+
name: string;
|
|
5
|
+
address: string;
|
|
6
|
+
namespace: string;
|
|
7
|
+
expireBlock: number;
|
|
8
|
+
zonefile?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface BnsNameInfo {
|
|
11
|
+
name: string;
|
|
12
|
+
namespace: string;
|
|
13
|
+
address: string;
|
|
14
|
+
expireBlock: number;
|
|
15
|
+
gracePeriod: number;
|
|
16
|
+
status: string;
|
|
17
|
+
zonefile?: string;
|
|
18
|
+
zonefileHash?: string;
|
|
19
|
+
lastTxId: string;
|
|
20
|
+
}
|
|
21
|
+
export interface BnsPrice {
|
|
22
|
+
units: string;
|
|
23
|
+
amount: string;
|
|
24
|
+
amountStx: string;
|
|
25
|
+
}
|
|
26
|
+
export declare class BnsService {
|
|
27
|
+
private network;
|
|
28
|
+
private hiro;
|
|
29
|
+
private bnsV2;
|
|
30
|
+
private contracts;
|
|
31
|
+
constructor(network: Network);
|
|
32
|
+
/**
|
|
33
|
+
* Lookup a BNS name and get the associated address
|
|
34
|
+
* Uses BNS V2 API for .btc names, falls back to Hiro API for other namespaces
|
|
35
|
+
*/
|
|
36
|
+
lookupName(name: string): Promise<BnsLookupResult | null>;
|
|
37
|
+
/**
|
|
38
|
+
* Reverse lookup - get BNS names for an address
|
|
39
|
+
* Combines results from both BNS V2 and Hiro API (V1)
|
|
40
|
+
*/
|
|
41
|
+
reverseLookup(address: string): Promise<string[]>;
|
|
42
|
+
/**
|
|
43
|
+
* Get detailed info about a BNS name
|
|
44
|
+
* Uses BNS V2 API for .btc names, falls back to Hiro API
|
|
45
|
+
*/
|
|
46
|
+
getNameInfo(name: string): Promise<BnsNameInfo | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Check if a BNS name is available for registration
|
|
49
|
+
* A name is available if it's not found in either BNS V2 or V1
|
|
50
|
+
*/
|
|
51
|
+
checkAvailability(name: string): Promise<boolean>;
|
|
52
|
+
/**
|
|
53
|
+
* Get the price of a BNS name
|
|
54
|
+
*/
|
|
55
|
+
getPrice(name: string): Promise<BnsPrice | null>;
|
|
56
|
+
/**
|
|
57
|
+
* Get all domains owned by an address
|
|
58
|
+
*/
|
|
59
|
+
getUserDomains(address: string): Promise<string[]>;
|
|
60
|
+
/**
|
|
61
|
+
* Resolve a name to an address (convenient wrapper)
|
|
62
|
+
*/
|
|
63
|
+
resolve(name: string): Promise<string | null>;
|
|
64
|
+
/**
|
|
65
|
+
* Register a new BNS name
|
|
66
|
+
* Note: BNS registration is a multi-step process involving preorder and register
|
|
67
|
+
*/
|
|
68
|
+
preorderName(account: Account, name: string, salt: string): Promise<TransferResult>;
|
|
69
|
+
/**
|
|
70
|
+
* Register a name after preorder
|
|
71
|
+
*/
|
|
72
|
+
registerName(account: Account, name: string, salt: string, zonefile?: string): Promise<TransferResult>;
|
|
73
|
+
/**
|
|
74
|
+
* Update a name's zonefile
|
|
75
|
+
*/
|
|
76
|
+
updateZonefile(account: Account, name: string, zonefile: string): Promise<TransferResult>;
|
|
77
|
+
/**
|
|
78
|
+
* Transfer a BNS name to a new owner
|
|
79
|
+
*/
|
|
80
|
+
transferName(account: Account, name: string, newOwner: string, zonefile?: string): Promise<TransferResult>;
|
|
81
|
+
/**
|
|
82
|
+
* Renew a BNS name
|
|
83
|
+
*/
|
|
84
|
+
renewName(account: Account, name: string): Promise<TransferResult>;
|
|
85
|
+
}
|
|
86
|
+
export declare function getBnsService(network: Network): BnsService;
|
|
87
|
+
//# sourceMappingURL=bns.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bns.service.d.ts","sourceRoot":"","sources":["../../src/services/bns.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiC,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAgB,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAM7F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,qBAAa,UAAU;IAKT,OAAO,CAAC,OAAO;IAJ3B,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,SAAS,CAAkC;gBAE/B,OAAO,EAAE,OAAO;IAMpC;;;OAGG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAqC/D;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA+BvD;;;OAGG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IA2C5D;;;OAGG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BvD;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAoBtD;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIxD;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKnD;;;OAGG;IACG,YAAY,CAChB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC;IAyB1B;;OAEG;IACG,YAAY,CAChB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;IAqB1B;;OAEG;IACG,cAAc,CAClB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,CAAC;IAoB1B;;OAEG;IACG,YAAY,CAChB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;IAqB1B;;OAEG;IACG,SAAS,CACb,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC;CAmB3B;AAQD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAK1D"}
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { bufferCV, uintCV } from "@stacks/transactions";
|
|
2
|
+
import { getHiroApi, getBnsV2Api } from "./hiro-api.js";
|
|
3
|
+
import { getContracts, parseContractId } from "../config/index.js";
|
|
4
|
+
import { callContract } from "../transactions/builder.js";
|
|
5
|
+
// ============================================================================
|
|
6
|
+
// BNS Service
|
|
7
|
+
// ============================================================================
|
|
8
|
+
export class BnsService {
|
|
9
|
+
network;
|
|
10
|
+
hiro;
|
|
11
|
+
bnsV2;
|
|
12
|
+
contracts;
|
|
13
|
+
constructor(network) {
|
|
14
|
+
this.network = network;
|
|
15
|
+
this.hiro = getHiroApi(network);
|
|
16
|
+
this.bnsV2 = getBnsV2Api();
|
|
17
|
+
this.contracts = getContracts(network);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Lookup a BNS name and get the associated address
|
|
21
|
+
* Uses BNS V2 API for .btc names, falls back to Hiro API for other namespaces
|
|
22
|
+
*/
|
|
23
|
+
async lookupName(name) {
|
|
24
|
+
const fullName = name.endsWith(".btc") ? name : `${name}.btc`;
|
|
25
|
+
const [baseName, namespace] = fullName.split(".");
|
|
26
|
+
// For .btc names, use BNS V2 API (where most names are registered)
|
|
27
|
+
if (namespace === "btc" || !namespace) {
|
|
28
|
+
try {
|
|
29
|
+
const info = await this.bnsV2.getNameInfo(fullName);
|
|
30
|
+
if (info.status === "active" && info.data.is_valid && !info.data.revoked) {
|
|
31
|
+
return {
|
|
32
|
+
name: fullName,
|
|
33
|
+
address: info.data.owner,
|
|
34
|
+
namespace: info.data.namespace_string || "btc",
|
|
35
|
+
expireBlock: parseInt(info.data.renewal_height, 10),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Name not found in BNS V2, try Hiro API as fallback (for legacy BNS V1 names)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Fallback to Hiro API for other namespaces or legacy V1 names
|
|
45
|
+
try {
|
|
46
|
+
const info = await this.hiro.getBnsNameInfo(fullName);
|
|
47
|
+
return {
|
|
48
|
+
name: fullName,
|
|
49
|
+
address: info.address,
|
|
50
|
+
namespace: namespace || "btc",
|
|
51
|
+
expireBlock: info.expire_block,
|
|
52
|
+
zonefile: info.zonefile,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Reverse lookup - get BNS names for an address
|
|
61
|
+
* Combines results from both BNS V2 and Hiro API (V1)
|
|
62
|
+
*/
|
|
63
|
+
async reverseLookup(address) {
|
|
64
|
+
const allNames = [];
|
|
65
|
+
// Get names from BNS V2
|
|
66
|
+
try {
|
|
67
|
+
const v2Result = await this.bnsV2.getNamesOwnedByAddress(address);
|
|
68
|
+
if (v2Result.names) {
|
|
69
|
+
allNames.push(...v2Result.names.map(n => n.full_name));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// BNS V2 lookup failed, continue with Hiro API
|
|
74
|
+
}
|
|
75
|
+
// Get names from Hiro API (BNS V1)
|
|
76
|
+
try {
|
|
77
|
+
const v1Result = await this.hiro.getBnsNamesOwnedByAddress(address);
|
|
78
|
+
if (v1Result.names) {
|
|
79
|
+
// Add only names not already in the list
|
|
80
|
+
for (const name of v1Result.names) {
|
|
81
|
+
if (!allNames.includes(name)) {
|
|
82
|
+
allNames.push(name);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// Hiro API lookup failed
|
|
89
|
+
}
|
|
90
|
+
return allNames;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get detailed info about a BNS name
|
|
94
|
+
* Uses BNS V2 API for .btc names, falls back to Hiro API
|
|
95
|
+
*/
|
|
96
|
+
async getNameInfo(name) {
|
|
97
|
+
const fullName = name.endsWith(".btc") ? name : `${name}.btc`;
|
|
98
|
+
const [baseName, namespace] = fullName.split(".");
|
|
99
|
+
// For .btc names, try BNS V2 first
|
|
100
|
+
if (namespace === "btc" || !namespace) {
|
|
101
|
+
try {
|
|
102
|
+
const info = await this.bnsV2.getNameInfo(fullName);
|
|
103
|
+
if (info.data) {
|
|
104
|
+
return {
|
|
105
|
+
name: fullName,
|
|
106
|
+
namespace: info.data.namespace_string || "btc",
|
|
107
|
+
address: info.data.owner,
|
|
108
|
+
expireBlock: parseInt(info.data.renewal_height, 10),
|
|
109
|
+
gracePeriod: 0, // BNS V2 doesn't have grace period in the same way
|
|
110
|
+
status: info.status,
|
|
111
|
+
lastTxId: "", // Not available in V2 response
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// Name not found in BNS V2, try Hiro API
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Fallback to Hiro API
|
|
120
|
+
try {
|
|
121
|
+
const info = await this.hiro.getBnsNameInfo(fullName);
|
|
122
|
+
return {
|
|
123
|
+
name: fullName,
|
|
124
|
+
namespace: namespace || "btc",
|
|
125
|
+
address: info.address,
|
|
126
|
+
expireBlock: info.expire_block,
|
|
127
|
+
gracePeriod: info.grace_period,
|
|
128
|
+
status: info.status,
|
|
129
|
+
zonefile: info.zonefile,
|
|
130
|
+
zonefileHash: info.zonefile_hash,
|
|
131
|
+
lastTxId: info.last_txid,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Check if a BNS name is available for registration
|
|
140
|
+
* A name is available if it's not found in either BNS V2 or V1
|
|
141
|
+
*/
|
|
142
|
+
async checkAvailability(name) {
|
|
143
|
+
const fullName = name.endsWith(".btc") ? name : `${name}.btc`;
|
|
144
|
+
// Check BNS V2 first (where most .btc names are registered)
|
|
145
|
+
try {
|
|
146
|
+
const exists = await this.bnsV2.nameExists(fullName);
|
|
147
|
+
if (exists) {
|
|
148
|
+
return false; // Name is taken
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
// Error checking BNS V2, continue to check V1
|
|
153
|
+
}
|
|
154
|
+
// Also check Hiro API (BNS V1) for legacy names
|
|
155
|
+
try {
|
|
156
|
+
const info = await this.hiro.getBnsNameInfo(fullName);
|
|
157
|
+
if (info && info.address) {
|
|
158
|
+
return false; // Name is taken in V1
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// Name not found in V1 either - it's available
|
|
163
|
+
}
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get the price of a BNS name
|
|
168
|
+
*/
|
|
169
|
+
async getPrice(name) {
|
|
170
|
+
try {
|
|
171
|
+
const fullName = name.endsWith(".btc") ? name : `${name}.btc`;
|
|
172
|
+
const [baseName] = fullName.split(".");
|
|
173
|
+
const price = await this.hiro.getBnsNamePrice(baseName);
|
|
174
|
+
const amountMicroStx = price.amount;
|
|
175
|
+
const amountStx = (BigInt(amountMicroStx) / BigInt(1_000_000)).toString();
|
|
176
|
+
return {
|
|
177
|
+
units: price.units,
|
|
178
|
+
amount: amountMicroStx,
|
|
179
|
+
amountStx,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get all domains owned by an address
|
|
188
|
+
*/
|
|
189
|
+
async getUserDomains(address) {
|
|
190
|
+
return this.reverseLookup(address);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Resolve a name to an address (convenient wrapper)
|
|
194
|
+
*/
|
|
195
|
+
async resolve(name) {
|
|
196
|
+
const result = await this.lookupName(name);
|
|
197
|
+
return result?.address || null;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Register a new BNS name
|
|
201
|
+
* Note: BNS registration is a multi-step process involving preorder and register
|
|
202
|
+
*/
|
|
203
|
+
async preorderName(account, name, salt) {
|
|
204
|
+
const { address: contractAddress, name: contractName } = parseContractId(this.contracts.BNS);
|
|
205
|
+
const fullName = name.endsWith(".btc") ? name : `${name}.btc`;
|
|
206
|
+
const [baseName, namespace] = fullName.split(".");
|
|
207
|
+
// Create the hashed salted name for preorder
|
|
208
|
+
const crypto = await import("crypto");
|
|
209
|
+
const hash = crypto.createHash("sha256")
|
|
210
|
+
.update(Buffer.from(fullName + salt))
|
|
211
|
+
.digest();
|
|
212
|
+
const functionArgs = [
|
|
213
|
+
bufferCV(hash),
|
|
214
|
+
uintCV(0), // STX to burn (registration fee)
|
|
215
|
+
];
|
|
216
|
+
return callContract(account, {
|
|
217
|
+
contractAddress,
|
|
218
|
+
contractName,
|
|
219
|
+
functionName: "name-preorder",
|
|
220
|
+
functionArgs,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Register a name after preorder
|
|
225
|
+
*/
|
|
226
|
+
async registerName(account, name, salt, zonefile) {
|
|
227
|
+
const { address: contractAddress, name: contractName } = parseContractId(this.contracts.BNS);
|
|
228
|
+
const fullName = name.endsWith(".btc") ? name : `${name}.btc`;
|
|
229
|
+
const [baseName, namespace] = fullName.split(".");
|
|
230
|
+
const functionArgs = [
|
|
231
|
+
bufferCV(Buffer.from(namespace)),
|
|
232
|
+
bufferCV(Buffer.from(baseName)),
|
|
233
|
+
bufferCV(Buffer.from(salt)),
|
|
234
|
+
zonefile ? bufferCV(Buffer.from(zonefile)) : bufferCV(Buffer.alloc(0)),
|
|
235
|
+
];
|
|
236
|
+
return callContract(account, {
|
|
237
|
+
contractAddress,
|
|
238
|
+
contractName,
|
|
239
|
+
functionName: "name-register",
|
|
240
|
+
functionArgs,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Update a name's zonefile
|
|
245
|
+
*/
|
|
246
|
+
async updateZonefile(account, name, zonefile) {
|
|
247
|
+
const { address: contractAddress, name: contractName } = parseContractId(this.contracts.BNS);
|
|
248
|
+
const fullName = name.endsWith(".btc") ? name : `${name}.btc`;
|
|
249
|
+
const [baseName, namespace] = fullName.split(".");
|
|
250
|
+
const functionArgs = [
|
|
251
|
+
bufferCV(Buffer.from(namespace)),
|
|
252
|
+
bufferCV(Buffer.from(baseName)),
|
|
253
|
+
bufferCV(Buffer.from(zonefile)),
|
|
254
|
+
];
|
|
255
|
+
return callContract(account, {
|
|
256
|
+
contractAddress,
|
|
257
|
+
contractName,
|
|
258
|
+
functionName: "name-update",
|
|
259
|
+
functionArgs,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Transfer a BNS name to a new owner
|
|
264
|
+
*/
|
|
265
|
+
async transferName(account, name, newOwner, zonefile) {
|
|
266
|
+
const { address: contractAddress, name: contractName } = parseContractId(this.contracts.BNS);
|
|
267
|
+
const fullName = name.endsWith(".btc") ? name : `${name}.btc`;
|
|
268
|
+
const [baseName, namespace] = fullName.split(".");
|
|
269
|
+
const functionArgs = [
|
|
270
|
+
bufferCV(Buffer.from(namespace)),
|
|
271
|
+
bufferCV(Buffer.from(baseName)),
|
|
272
|
+
{ type: "principal", value: newOwner },
|
|
273
|
+
zonefile ? bufferCV(Buffer.from(zonefile)) : bufferCV(Buffer.alloc(0)),
|
|
274
|
+
];
|
|
275
|
+
return callContract(account, {
|
|
276
|
+
contractAddress,
|
|
277
|
+
contractName,
|
|
278
|
+
functionName: "name-transfer",
|
|
279
|
+
functionArgs,
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Renew a BNS name
|
|
284
|
+
*/
|
|
285
|
+
async renewName(account, name) {
|
|
286
|
+
const { address: contractAddress, name: contractName } = parseContractId(this.contracts.BNS);
|
|
287
|
+
const fullName = name.endsWith(".btc") ? name : `${name}.btc`;
|
|
288
|
+
const [baseName, namespace] = fullName.split(".");
|
|
289
|
+
const functionArgs = [
|
|
290
|
+
bufferCV(Buffer.from(namespace)),
|
|
291
|
+
bufferCV(Buffer.from(baseName)),
|
|
292
|
+
uintCV(0), // STX to burn (renewal fee)
|
|
293
|
+
];
|
|
294
|
+
return callContract(account, {
|
|
295
|
+
contractAddress,
|
|
296
|
+
contractName,
|
|
297
|
+
functionName: "name-renewal",
|
|
298
|
+
functionArgs,
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// ============================================================================
|
|
303
|
+
// Helper Functions
|
|
304
|
+
// ============================================================================
|
|
305
|
+
let _bnsServiceInstance = null;
|
|
306
|
+
export function getBnsService(network) {
|
|
307
|
+
if (!_bnsServiceInstance || _bnsServiceInstance["network"] !== network) {
|
|
308
|
+
_bnsServiceInstance = new BnsService(network);
|
|
309
|
+
}
|
|
310
|
+
return _bnsServiceInstance;
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=bns.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bns.service.js","sourceRoot":"","sources":["../../src/services/bns.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { type TokenInfo } from "alex-sdk";
|
|
2
|
+
import { type Network } from "../config/index.js";
|
|
3
|
+
import { type Account, type TransferResult } from "../transactions/builder.js";
|
|
4
|
+
export interface SwapQuote {
|
|
5
|
+
tokenIn: string;
|
|
6
|
+
tokenOut: string;
|
|
7
|
+
amountIn: string;
|
|
8
|
+
amountOut: string;
|
|
9
|
+
priceImpact?: string;
|
|
10
|
+
route: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface PoolInfo {
|
|
13
|
+
poolId: string;
|
|
14
|
+
tokenX: string;
|
|
15
|
+
tokenY: string;
|
|
16
|
+
reserveX: string;
|
|
17
|
+
reserveY: string;
|
|
18
|
+
totalShares?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface PoolListing {
|
|
21
|
+
id: number;
|
|
22
|
+
tokenX: string;
|
|
23
|
+
tokenY: string;
|
|
24
|
+
tokenXSymbol: string;
|
|
25
|
+
tokenYSymbol: string;
|
|
26
|
+
factor: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ZestMarketInfo {
|
|
29
|
+
asset: string;
|
|
30
|
+
totalSupply: string;
|
|
31
|
+
totalBorrow: string;
|
|
32
|
+
supplyRate: string;
|
|
33
|
+
borrowRate: string;
|
|
34
|
+
utilizationRate: string;
|
|
35
|
+
}
|
|
36
|
+
export interface ZestUserPosition {
|
|
37
|
+
asset: string;
|
|
38
|
+
supplied: string;
|
|
39
|
+
borrowed: string;
|
|
40
|
+
healthFactor?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface ZestAsset {
|
|
43
|
+
contractId: string;
|
|
44
|
+
symbol: string;
|
|
45
|
+
name: string;
|
|
46
|
+
decimals?: number;
|
|
47
|
+
}
|
|
48
|
+
export declare class AlexDexService {
|
|
49
|
+
private network;
|
|
50
|
+
private sdk;
|
|
51
|
+
private hiro;
|
|
52
|
+
private contracts;
|
|
53
|
+
private tokenInfoCache;
|
|
54
|
+
constructor(network: Network);
|
|
55
|
+
private ensureMainnet;
|
|
56
|
+
/**
|
|
57
|
+
* Get all swappable token info from SDK (cached)
|
|
58
|
+
*/
|
|
59
|
+
private getTokenInfos;
|
|
60
|
+
/**
|
|
61
|
+
* Convert a token identifier (contract ID or symbol) to an ALEX SDK Currency
|
|
62
|
+
*/
|
|
63
|
+
private resolveCurrency;
|
|
64
|
+
/**
|
|
65
|
+
* Get a swap quote for token X to token Y using ALEX SDK
|
|
66
|
+
*/
|
|
67
|
+
getSwapQuote(tokenX: string, tokenY: string, amountIn: bigint, _senderAddress: string): Promise<SwapQuote>;
|
|
68
|
+
/**
|
|
69
|
+
* Execute a swap using ALEX SDK
|
|
70
|
+
* The SDK handles STX wrapping internally
|
|
71
|
+
*/
|
|
72
|
+
swap(account: Account, tokenX: string, tokenY: string, amountIn: bigint, minAmountOut: bigint): Promise<TransferResult>;
|
|
73
|
+
/**
|
|
74
|
+
* Get pool information
|
|
75
|
+
*/
|
|
76
|
+
getPoolInfo(tokenX: string, tokenY: string, senderAddress: string): Promise<PoolInfo | null>;
|
|
77
|
+
/**
|
|
78
|
+
* List all available pools on ALEX DEX
|
|
79
|
+
* Uses SDK to fetch swappable currencies
|
|
80
|
+
*/
|
|
81
|
+
listPools(limit?: number): Promise<PoolListing[]>;
|
|
82
|
+
/**
|
|
83
|
+
* Get all swappable currencies from ALEX SDK
|
|
84
|
+
*/
|
|
85
|
+
getSwappableCurrencies(): Promise<TokenInfo[]>;
|
|
86
|
+
/**
|
|
87
|
+
* Get latest prices from ALEX SDK
|
|
88
|
+
*/
|
|
89
|
+
getLatestPrices(): Promise<Record<string, number>>;
|
|
90
|
+
}
|
|
91
|
+
export declare class ZestProtocolService {
|
|
92
|
+
private network;
|
|
93
|
+
private hiro;
|
|
94
|
+
private contracts;
|
|
95
|
+
constructor(network: Network);
|
|
96
|
+
private ensureMainnet;
|
|
97
|
+
/**
|
|
98
|
+
* Get asset configuration from ZEST_ASSETS by symbol or contract ID
|
|
99
|
+
*/
|
|
100
|
+
private getAssetConfig;
|
|
101
|
+
/**
|
|
102
|
+
* Build the assets-list CV required for borrow/withdraw operations
|
|
103
|
+
* This is a list of tuples containing (asset, lp-token, oracle) for all supported assets
|
|
104
|
+
*/
|
|
105
|
+
private buildAssetsListCV;
|
|
106
|
+
/**
|
|
107
|
+
* Get all supported assets from Zest Protocol
|
|
108
|
+
* Returns the hardcoded asset list with full metadata
|
|
109
|
+
*/
|
|
110
|
+
getAssets(): Promise<ZestAsset[]>;
|
|
111
|
+
/**
|
|
112
|
+
* Resolve an asset symbol or contract ID to a full contract ID
|
|
113
|
+
*/
|
|
114
|
+
resolveAsset(assetOrSymbol: string): Promise<string>;
|
|
115
|
+
/**
|
|
116
|
+
* Get user's reserve/position data for an asset
|
|
117
|
+
*/
|
|
118
|
+
getUserPosition(asset: string, userAddress: string): Promise<ZestUserPosition | null>;
|
|
119
|
+
/**
|
|
120
|
+
* Supply assets to Zest lending pool
|
|
121
|
+
*
|
|
122
|
+
* Contract signature: supply(lp, pool-reserve, asset, amount, owner)
|
|
123
|
+
*/
|
|
124
|
+
supply(account: Account, asset: string, amount: bigint, onBehalfOf?: string): Promise<TransferResult>;
|
|
125
|
+
/**
|
|
126
|
+
* Withdraw assets from Zest lending pool
|
|
127
|
+
*
|
|
128
|
+
* Contract signature: withdraw(pool-reserve, asset, lp, oracle, assets, amount, owner)
|
|
129
|
+
*/
|
|
130
|
+
withdraw(account: Account, asset: string, amount: bigint): Promise<TransferResult>;
|
|
131
|
+
/**
|
|
132
|
+
* Borrow assets from Zest lending pool
|
|
133
|
+
*
|
|
134
|
+
* Contract signature: borrow(pool-reserve, oracle, asset-to-borrow, lp, assets, amount, fee-calculator, interest-rate-mode, owner)
|
|
135
|
+
*/
|
|
136
|
+
borrow(account: Account, asset: string, amount: bigint): Promise<TransferResult>;
|
|
137
|
+
/**
|
|
138
|
+
* Repay borrowed assets
|
|
139
|
+
*
|
|
140
|
+
* Contract signature: repay(asset, amount-to-repay, on-behalf-of, payer)
|
|
141
|
+
*/
|
|
142
|
+
repay(account: Account, asset: string, amount: bigint, onBehalfOf?: string): Promise<TransferResult>;
|
|
143
|
+
}
|
|
144
|
+
export declare function getAlexDexService(network: Network): AlexDexService;
|
|
145
|
+
export declare function getZestProtocolService(network: Network): ZestProtocolService;
|
|
146
|
+
//# sourceMappingURL=defi.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defi.service.d.ts","sourceRoot":"","sources":["../../src/services/defi.service.ts"],"names":[],"mappings":"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"}
|