@aibtc/mcp-server 1.7.0 → 1.13.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.
Files changed (143) hide show
  1. package/README.md +84 -9
  2. package/dist/config/bitcoin-constants.d.ts +32 -0
  3. package/dist/config/bitcoin-constants.d.ts.map +1 -0
  4. package/dist/config/bitcoin-constants.js +32 -0
  5. package/dist/config/bitcoin-constants.js.map +1 -0
  6. package/dist/config/contracts.d.ts +12 -3
  7. package/dist/config/contracts.d.ts.map +1 -1
  8. package/dist/config/contracts.js +7 -1
  9. package/dist/config/contracts.js.map +1 -1
  10. package/dist/endpoints/registry.d.ts +3 -3
  11. package/dist/endpoints/registry.d.ts.map +1 -1
  12. package/dist/endpoints/registry.js +187 -3
  13. package/dist/endpoints/registry.js.map +1 -1
  14. package/dist/services/bitflow.service.d.ts +2 -1
  15. package/dist/services/bitflow.service.d.ts.map +1 -1
  16. package/dist/services/bitflow.service.js +3 -1
  17. package/dist/services/bitflow.service.js.map +1 -1
  18. package/dist/services/bns.service.d.ts +21 -5
  19. package/dist/services/bns.service.d.ts.map +1 -1
  20. package/dist/services/bns.service.js +145 -51
  21. package/dist/services/bns.service.js.map +1 -1
  22. package/dist/services/defi.service.d.ts +16 -6
  23. package/dist/services/defi.service.d.ts.map +1 -1
  24. package/dist/services/defi.service.js +99 -27
  25. package/dist/services/defi.service.js.map +1 -1
  26. package/dist/services/hiro-api.d.ts +26 -0
  27. package/dist/services/hiro-api.d.ts.map +1 -1
  28. package/dist/services/hiro-api.js +8 -0
  29. package/dist/services/hiro-api.js.map +1 -1
  30. package/dist/services/inscription-parser.d.ts +122 -0
  31. package/dist/services/inscription-parser.d.ts.map +1 -0
  32. package/dist/services/inscription-parser.js +163 -0
  33. package/dist/services/inscription-parser.js.map +1 -0
  34. package/dist/services/nft.service.d.ts +2 -1
  35. package/dist/services/nft.service.d.ts.map +1 -1
  36. package/dist/services/nft.service.js +3 -1
  37. package/dist/services/nft.service.js.map +1 -1
  38. package/dist/services/ordinal-indexer.d.ts +128 -0
  39. package/dist/services/ordinal-indexer.d.ts.map +1 -0
  40. package/dist/services/ordinal-indexer.js +128 -0
  41. package/dist/services/ordinal-indexer.js.map +1 -0
  42. package/dist/services/sbtc.service.d.ts +2 -1
  43. package/dist/services/sbtc.service.d.ts.map +1 -1
  44. package/dist/services/sbtc.service.js +3 -1
  45. package/dist/services/sbtc.service.js.map +1 -1
  46. package/dist/services/tokens.service.d.ts +2 -1
  47. package/dist/services/tokens.service.d.ts.map +1 -1
  48. package/dist/services/tokens.service.js +3 -1
  49. package/dist/services/tokens.service.js.map +1 -1
  50. package/dist/services/wallet-manager.d.ts +20 -12
  51. package/dist/services/wallet-manager.d.ts.map +1 -1
  52. package/dist/services/wallet-manager.js +41 -62
  53. package/dist/services/wallet-manager.js.map +1 -1
  54. package/dist/tools/bitcoin.tools.d.ts.map +1 -1
  55. package/dist/tools/bitcoin.tools.js +214 -34
  56. package/dist/tools/bitcoin.tools.js.map +1 -1
  57. package/dist/tools/bitflow.tools.d.ts.map +1 -1
  58. package/dist/tools/bitflow.tools.js +8 -3
  59. package/dist/tools/bitflow.tools.js.map +1 -1
  60. package/dist/tools/bns.tools.d.ts.map +1 -1
  61. package/dist/tools/bns.tools.js +87 -7
  62. package/dist/tools/bns.tools.js.map +1 -1
  63. package/dist/tools/contract.tools.d.ts.map +1 -1
  64. package/dist/tools/contract.tools.js +19 -4
  65. package/dist/tools/contract.tools.js.map +1 -1
  66. package/dist/tools/defi.tools.d.ts.map +1 -1
  67. package/dist/tools/defi.tools.js +43 -0
  68. package/dist/tools/defi.tools.js.map +1 -1
  69. package/dist/tools/index.d.ts +8 -1
  70. package/dist/tools/index.d.ts.map +1 -1
  71. package/dist/tools/index.js +49 -32
  72. package/dist/tools/index.js.map +1 -1
  73. package/dist/tools/nft.tools.d.ts.map +1 -1
  74. package/dist/tools/nft.tools.js +8 -3
  75. package/dist/tools/nft.tools.js.map +1 -1
  76. package/dist/tools/ordinals.tools.d.ts +15 -0
  77. package/dist/tools/ordinals.tools.d.ts.map +1 -0
  78. package/dist/tools/ordinals.tools.js +401 -0
  79. package/dist/tools/ordinals.tools.js.map +1 -0
  80. package/dist/tools/query.tools.d.ts.map +1 -1
  81. package/dist/tools/query.tools.js +71 -0
  82. package/dist/tools/query.tools.js.map +1 -1
  83. package/dist/tools/sbtc.tools.d.ts.map +1 -1
  84. package/dist/tools/sbtc.tools.js +8 -3
  85. package/dist/tools/sbtc.tools.js.map +1 -1
  86. package/dist/tools/signing.tools.d.ts +25 -0
  87. package/dist/tools/signing.tools.d.ts.map +1 -0
  88. package/dist/tools/signing.tools.js +776 -0
  89. package/dist/tools/signing.tools.js.map +1 -0
  90. package/dist/tools/tokens.tools.d.ts.map +1 -1
  91. package/dist/tools/tokens.tools.js +8 -3
  92. package/dist/tools/tokens.tools.js.map +1 -1
  93. package/dist/tools/transfer.tools.d.ts.map +1 -1
  94. package/dist/tools/transfer.tools.js +8 -3
  95. package/dist/tools/transfer.tools.js.map +1 -1
  96. package/dist/tools/wallet-management.tools.d.ts.map +1 -1
  97. package/dist/tools/wallet-management.tools.js +36 -11
  98. package/dist/tools/wallet-management.tools.js.map +1 -1
  99. package/dist/tools/wallet.tools.d.ts.map +1 -1
  100. package/dist/tools/wallet.tools.js +23 -8
  101. package/dist/tools/wallet.tools.js.map +1 -1
  102. package/dist/tools/yield-hunter.tools.d.ts.map +1 -1
  103. package/dist/tools/yield-hunter.tools.js +53 -48
  104. package/dist/tools/yield-hunter.tools.js.map +1 -1
  105. package/dist/transactions/bitcoin-builder.d.ts.map +1 -1
  106. package/dist/transactions/bitcoin-builder.js +1 -16
  107. package/dist/transactions/bitcoin-builder.js.map +1 -1
  108. package/dist/transactions/builder.d.ts +9 -5
  109. package/dist/transactions/builder.d.ts.map +1 -1
  110. package/dist/transactions/builder.js +8 -2
  111. package/dist/transactions/builder.js.map +1 -1
  112. package/dist/transactions/inscription-builder.d.ts +183 -0
  113. package/dist/transactions/inscription-builder.d.ts.map +1 -0
  114. package/dist/transactions/inscription-builder.js +230 -0
  115. package/dist/transactions/inscription-builder.js.map +1 -0
  116. package/dist/utils/bitcoin.d.ts +38 -0
  117. package/dist/utils/bitcoin.d.ts.map +1 -1
  118. package/dist/utils/bitcoin.js +59 -0
  119. package/dist/utils/bitcoin.js.map +1 -1
  120. package/dist/utils/fee.d.ts +41 -0
  121. package/dist/utils/fee.d.ts.map +1 -0
  122. package/dist/utils/fee.js +69 -0
  123. package/dist/utils/fee.js.map +1 -0
  124. package/dist/utils/index.d.ts +2 -0
  125. package/dist/utils/index.d.ts.map +1 -1
  126. package/dist/utils/index.js +2 -0
  127. package/dist/utils/index.js.map +1 -1
  128. package/dist/utils/storage.d.ts +12 -4
  129. package/dist/utils/storage.d.ts.map +1 -1
  130. package/dist/utils/storage.js.map +1 -1
  131. package/dist/utils/tokens.d.ts +13 -0
  132. package/dist/utils/tokens.d.ts.map +1 -0
  133. package/dist/utils/tokens.js +24 -0
  134. package/dist/utils/tokens.js.map +1 -0
  135. package/dist/yield-hunter/index.d.ts.map +1 -1
  136. package/dist/yield-hunter/index.js +10 -15
  137. package/dist/yield-hunter/index.js.map +1 -1
  138. package/package.json +7 -3
  139. package/skill/README.md +108 -0
  140. package/skill/SKILL.md +187 -0
  141. package/skill/references/pillar-wallet.md +213 -0
  142. package/skill/references/stacks-defi.md +258 -0
  143. package/skill/references/troubleshooting.md +211 -0
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Inscription Parser Service
3
+ *
4
+ * Wrapper around micro-ordinals library for parsing inscriptions from
5
+ * Bitcoin transaction witness data and scripts.
6
+ *
7
+ * micro-ordinals API:
8
+ * - parseWitness(witness: Bytes[]): Inscription[] | undefined
9
+ * - parseInscriptions(script: ScriptType, strict?: boolean): Inscription[] | undefined
10
+ *
11
+ * Reference: https://github.com/paulmillr/micro-ordinals
12
+ */
13
+ import { type Inscription } from "micro-ordinals";
14
+ import type { Network } from "../config/networks.js";
15
+ /**
16
+ * Parsed inscription with metadata
17
+ */
18
+ export interface ParsedInscription {
19
+ /**
20
+ * Content type (e.g., "text/plain", "image/png")
21
+ */
22
+ contentType?: string;
23
+ /**
24
+ * Inscription body as bytes
25
+ */
26
+ body: Uint8Array;
27
+ /**
28
+ * Inscription body as UTF-8 string (if text content)
29
+ */
30
+ bodyText?: string;
31
+ /**
32
+ * Inscription body as base64 (for binary content)
33
+ */
34
+ bodyBase64: string;
35
+ /**
36
+ * Whether this is a cursed inscription
37
+ */
38
+ cursed?: boolean;
39
+ /**
40
+ * Pointer tag (if present)
41
+ */
42
+ pointer?: bigint;
43
+ /**
44
+ * Metaprotocol (if present)
45
+ */
46
+ metaprotocol?: string;
47
+ /**
48
+ * Content encoding (if present, e.g., "br" for Brotli)
49
+ */
50
+ contentEncoding?: string;
51
+ /**
52
+ * Metadata (if present)
53
+ */
54
+ metadata?: any;
55
+ /**
56
+ * Rune tag (if present)
57
+ */
58
+ rune?: bigint;
59
+ /**
60
+ * Note tag (if present)
61
+ */
62
+ note?: string;
63
+ /**
64
+ * All tags from the inscription (raw, may contain Coder objects)
65
+ */
66
+ rawTags: Inscription["tags"];
67
+ }
68
+ /**
69
+ * Inscription Parser Service
70
+ */
71
+ export declare class InscriptionParser {
72
+ private readonly network;
73
+ private readonly mempoolApiUrl;
74
+ constructor(network: Network);
75
+ /**
76
+ * Parse inscriptions from transaction witness data
77
+ *
78
+ * This is the primary method for extracting inscriptions from reveal transactions.
79
+ * The witness data is typically in the first input of a reveal transaction.
80
+ *
81
+ * @param witness - Array of hex-encoded witness elements
82
+ * @returns Array of parsed inscriptions, or undefined if no inscriptions found
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * const parser = new InscriptionParser('mainnet');
87
+ * const inscriptions = parser.parseWitness(tx.vin[0].witness);
88
+ * if (inscriptions) {
89
+ * console.log(`Found ${inscriptions.length} inscriptions`);
90
+ * }
91
+ * ```
92
+ */
93
+ parseWitness(witness: string[]): ParsedInscription[] | undefined;
94
+ /**
95
+ * Fetch a transaction and parse inscriptions from its witness data
96
+ *
97
+ * This is a convenience method that fetches a transaction from mempool.space
98
+ * and extracts inscriptions from the first input's witness data (typical for
99
+ * reveal transactions).
100
+ *
101
+ * @param txid - Transaction ID
102
+ * @returns Array of parsed inscriptions, or undefined if no inscriptions found
103
+ * @throws Error if transaction fetch fails
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * const parser = new InscriptionParser('mainnet');
108
+ * const inscriptions = await parser.getInscriptionsFromTx(revealTxid);
109
+ * if (inscriptions) {
110
+ * inscriptions.forEach(i => {
111
+ * console.log(`Type: ${i.contentType}, Size: ${i.body.length} bytes`);
112
+ * });
113
+ * }
114
+ * ```
115
+ */
116
+ getInscriptionsFromTx(txid: string): Promise<ParsedInscription[] | undefined>;
117
+ }
118
+ /**
119
+ * Create an inscription parser for the given network
120
+ */
121
+ export declare function createInscriptionParser(network: Network): InscriptionParser;
122
+ //# sourceMappingURL=inscription-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inscription-parser.d.ts","sourceRoot":"","sources":["../../src/services/inscription-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AA4CrD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,IAAI,EAAE,UAAU,CAAC;IACjB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC9B;AA0DD;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,OAAO,EAAE,OAAO;IAK5B;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,GAAG,SAAS;IAehE;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,qBAAqB,CACzB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,iBAAiB,EAAE,GAAG,SAAS,CAAC;CAqC5C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,CAE3E"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Inscription Parser Service
3
+ *
4
+ * Wrapper around micro-ordinals library for parsing inscriptions from
5
+ * Bitcoin transaction witness data and scripts.
6
+ *
7
+ * micro-ordinals API:
8
+ * - parseWitness(witness: Bytes[]): Inscription[] | undefined
9
+ * - parseInscriptions(script: ScriptType, strict?: boolean): Inscription[] | undefined
10
+ *
11
+ * Reference: https://github.com/paulmillr/micro-ordinals
12
+ */
13
+ import { parseWitness as microOrdinalsParseWitness, } from "micro-ordinals";
14
+ import { getMempoolApiUrl } from "./mempool-api.js";
15
+ /**
16
+ * Convert hex string to Uint8Array
17
+ */
18
+ function hexToBytes(hex) {
19
+ if (hex.length % 2 !== 0) {
20
+ throw new Error("Invalid hex string");
21
+ }
22
+ const bytes = new Uint8Array(hex.length / 2);
23
+ for (let i = 0; i < hex.length; i += 2) {
24
+ bytes[i / 2] = parseInt(hex.slice(i, i + 2), 16);
25
+ }
26
+ return bytes;
27
+ }
28
+ /**
29
+ * Convert Uint8Array to base64 string
30
+ */
31
+ function bytesToBase64(bytes) {
32
+ // Use Buffer for Node.js environment
33
+ return Buffer.from(bytes).toString("base64");
34
+ }
35
+ /**
36
+ * Try to decode bytes as UTF-8 text
37
+ */
38
+ function tryDecodeText(bytes) {
39
+ try {
40
+ return new TextDecoder("utf-8", { fatal: true }).decode(bytes);
41
+ }
42
+ catch {
43
+ return undefined;
44
+ }
45
+ }
46
+ /**
47
+ * Parse and enhance inscription data from micro-ordinals
48
+ */
49
+ function enhanceInscription(inscription) {
50
+ const bodyBase64 = bytesToBase64(inscription.body);
51
+ const bodyText = tryDecodeText(inscription.body);
52
+ return {
53
+ contentType: inscription.tags.contentType,
54
+ body: inscription.body,
55
+ bodyText,
56
+ bodyBase64,
57
+ cursed: inscription.cursed,
58
+ pointer: inscription.tags.pointer,
59
+ metaprotocol: inscription.tags.metaprotocol,
60
+ contentEncoding: inscription.tags.contentEncoding,
61
+ metadata: inscription.tags.metadata,
62
+ rune: inscription.tags.rune,
63
+ note: inscription.tags.note,
64
+ rawTags: inscription.tags,
65
+ };
66
+ }
67
+ /**
68
+ * Inscription Parser Service
69
+ */
70
+ export class InscriptionParser {
71
+ network;
72
+ mempoolApiUrl;
73
+ constructor(network) {
74
+ this.network = network;
75
+ this.mempoolApiUrl = getMempoolApiUrl(network);
76
+ }
77
+ /**
78
+ * Parse inscriptions from transaction witness data
79
+ *
80
+ * This is the primary method for extracting inscriptions from reveal transactions.
81
+ * The witness data is typically in the first input of a reveal transaction.
82
+ *
83
+ * @param witness - Array of hex-encoded witness elements
84
+ * @returns Array of parsed inscriptions, or undefined if no inscriptions found
85
+ *
86
+ * @example
87
+ * ```typescript
88
+ * const parser = new InscriptionParser('mainnet');
89
+ * const inscriptions = parser.parseWitness(tx.vin[0].witness);
90
+ * if (inscriptions) {
91
+ * console.log(`Found ${inscriptions.length} inscriptions`);
92
+ * }
93
+ * ```
94
+ */
95
+ parseWitness(witness) {
96
+ // Convert hex strings to Uint8Array
97
+ const witnessBytes = witness.map((hex) => hexToBytes(hex));
98
+ // Parse inscriptions using micro-ordinals
99
+ const inscriptions = microOrdinalsParseWitness(witnessBytes);
100
+ if (!inscriptions || inscriptions.length === 0) {
101
+ return undefined;
102
+ }
103
+ // Enhance inscriptions with additional metadata
104
+ return inscriptions.map(enhanceInscription);
105
+ }
106
+ /**
107
+ * Fetch a transaction and parse inscriptions from its witness data
108
+ *
109
+ * This is a convenience method that fetches a transaction from mempool.space
110
+ * and extracts inscriptions from the first input's witness data (typical for
111
+ * reveal transactions).
112
+ *
113
+ * @param txid - Transaction ID
114
+ * @returns Array of parsed inscriptions, or undefined if no inscriptions found
115
+ * @throws Error if transaction fetch fails
116
+ *
117
+ * @example
118
+ * ```typescript
119
+ * const parser = new InscriptionParser('mainnet');
120
+ * const inscriptions = await parser.getInscriptionsFromTx(revealTxid);
121
+ * if (inscriptions) {
122
+ * inscriptions.forEach(i => {
123
+ * console.log(`Type: ${i.contentType}, Size: ${i.body.length} bytes`);
124
+ * });
125
+ * }
126
+ * ```
127
+ */
128
+ async getInscriptionsFromTx(txid) {
129
+ try {
130
+ // Fetch transaction from mempool.space
131
+ const response = await fetch(`${this.mempoolApiUrl}/tx/${txid}`);
132
+ if (!response.ok) {
133
+ const errorText = await response.text().catch(() => "Unknown error");
134
+ throw new Error(`Failed to fetch transaction ${txid}: ${response.status} ${response.statusText} - ${errorText}`);
135
+ }
136
+ const tx = (await response.json());
137
+ // Check if transaction has inputs with witness data
138
+ if (!tx.vin || tx.vin.length === 0) {
139
+ return undefined;
140
+ }
141
+ // Try to parse witness data from first input (typical for reveal txs)
142
+ const firstInput = tx.vin[0];
143
+ if (!firstInput.witness || firstInput.witness.length === 0) {
144
+ return undefined;
145
+ }
146
+ // Parse inscriptions from witness
147
+ return this.parseWitness(firstInput.witness);
148
+ }
149
+ catch (error) {
150
+ if (error instanceof Error) {
151
+ throw error;
152
+ }
153
+ throw new Error(`Failed to get inscriptions from transaction: ${String(error)}`);
154
+ }
155
+ }
156
+ }
157
+ /**
158
+ * Create an inscription parser for the given network
159
+ */
160
+ export function createInscriptionParser(network) {
161
+ return new InscriptionParser(network);
162
+ }
163
+ //# sourceMappingURL=inscription-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inscription-parser.js","sourceRoot":"","sources":["../../src/services/inscription-parser.ts"],"names":[],"mappings":"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"}
@@ -59,8 +59,9 @@ export declare class NftService {
59
59
  }>;
60
60
  /**
61
61
  * Transfer an NFT (SIP-009 standard)
62
+ * @param fee Optional fee in micro-STX. If omitted, fee is auto-estimated.
62
63
  */
63
- transfer(account: Account, contractId: string, tokenId: number, recipient: string): Promise<TransferResult>;
64
+ transfer(account: Account, contractId: string, tokenId: number, recipient: string, fee?: bigint): Promise<TransferResult>;
64
65
  /**
65
66
  * Mint an NFT (contract-specific, not part of SIP-009)
66
67
  */
@@ -1 +1 @@
1
- {"version":3,"file":"nft.service.d.ts","sourceRoot":"","sources":["../../src/services/nft.service.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,UAAU,EAAY,MAAM,eAAe,CAAC;AACjF,OAAO,EAAmB,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAgB,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAM7F,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,qBAAa,UAAU;IAGT,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,IAAI,CAAiB;gBAET,OAAO,EAAE,OAAO;IAIpC;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GACjE,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IAcjD;;OAEG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxE;;OAEG;IACG,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAyBzB;;OAEG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmCvE;;OAEG;IACG,UAAU,CACd,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,gBAAgB,EAAE,CAAA;KAAE,CAAC;IAiBzD;;OAEG;IACG,QAAQ,CACZ,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;IAmB1B;;OAEG;IACG,IAAI,CACR,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,gBAAgB,GAAE,MAAe,GAChC,OAAO,CAAC,cAAc,CAAC;CAa3B;AAQD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAK1D"}
1
+ {"version":3,"file":"nft.service.d.ts","sourceRoot":"","sources":["../../src/services/nft.service.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,UAAU,EAAY,MAAM,eAAe,CAAC;AACjF,OAAO,EAAmB,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAgB,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAM7F,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,qBAAa,UAAU;IAGT,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,IAAI,CAAiB;gBAET,OAAO,EAAE,OAAO;IAIpC;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GACjE,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IAcjD;;OAEG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxE;;OAEG;IACG,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAyBzB;;OAEG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmCvE;;OAEG;IACG,UAAU,CACd,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,gBAAgB,EAAE,CAAA;KAAE,CAAC;IAiBzD;;;OAGG;IACG,QAAQ,CACZ,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC;IAoB1B;;OAEG;IACG,IAAI,CACR,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,gBAAgB,GAAE,MAAe,GAChC,OAAO,CAAC,cAAc,CAAC;CAa3B;AAQD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAK1D"}
@@ -103,8 +103,9 @@ export class NftService {
103
103
  }
104
104
  /**
105
105
  * Transfer an NFT (SIP-009 standard)
106
+ * @param fee Optional fee in micro-STX. If omitted, fee is auto-estimated.
106
107
  */
107
- async transfer(account, contractId, tokenId, recipient) {
108
+ async transfer(account, contractId, tokenId, recipient, fee) {
108
109
  const { address: contractAddress, name: contractName } = parseContractId(contractId);
109
110
  // SIP-009 transfer function signature:
110
111
  // (transfer (token-id uint) (sender principal) (recipient principal))
@@ -118,6 +119,7 @@ export class NftService {
118
119
  contractName,
119
120
  functionName: "transfer",
120
121
  functionArgs,
122
+ ...(fee !== undefined && { fee }),
121
123
  });
122
124
  }
123
125
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"nft.service.js","sourceRoot":"","sources":["../../src/services/nft.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nft.service.js","sourceRoot":"","sources":["../../src/services/nft.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Ordinal Indexer Service
3
+ *
4
+ * Combines Hiro Ordinals API with mempool.space to classify UTXOs:
5
+ * - Cardinal: Safe to spend (no inscriptions)
6
+ * - Ordinal: Contains inscriptions (must not spend accidentally)
7
+ *
8
+ * Uses free APIs:
9
+ * - Hiro Ordinals API: https://api.hiro.so/ordinals/v1/inscriptions?address={address}
10
+ * - mempool.space API: via MempoolApi service
11
+ */
12
+ import type { Network } from "../config/networks.js";
13
+ import type { UTXO } from "./mempool-api.js";
14
+ /**
15
+ * Inscription data from Hiro Ordinals API
16
+ */
17
+ export interface Inscription {
18
+ /**
19
+ * Inscription ID (txid + inscription number)
20
+ */
21
+ id: string;
22
+ /**
23
+ * Inscription number (global ordinal)
24
+ */
25
+ number: number;
26
+ /**
27
+ * Content type (e.g., "text/plain", "image/png")
28
+ */
29
+ content_type: string;
30
+ /**
31
+ * Content length in bytes
32
+ */
33
+ content_length: number;
34
+ /**
35
+ * Genesis transaction ID
36
+ */
37
+ genesis_tx_id: string;
38
+ /**
39
+ * Genesis block height
40
+ */
41
+ genesis_block_height: number;
42
+ /**
43
+ * Genesis block hash
44
+ */
45
+ genesis_block_hash: string;
46
+ /**
47
+ * Genesis timestamp
48
+ */
49
+ genesis_timestamp: number;
50
+ /**
51
+ * Location of the inscription (txid:vout:offset)
52
+ */
53
+ location: string;
54
+ /**
55
+ * Output reference (txid:vout) - this is what we use to match UTXOs
56
+ */
57
+ output: string;
58
+ /**
59
+ * Current owner address
60
+ */
61
+ address: string;
62
+ /**
63
+ * Offset within the output
64
+ */
65
+ offset: string;
66
+ }
67
+ /**
68
+ * Classified UTXOs
69
+ */
70
+ export interface ClassifiedUtxos {
71
+ /**
72
+ * Cardinal UTXOs - safe to spend (no inscriptions)
73
+ */
74
+ cardinal: UTXO[];
75
+ /**
76
+ * Ordinal UTXOs - contain inscriptions (do not spend)
77
+ */
78
+ ordinal: UTXO[];
79
+ }
80
+ /**
81
+ * Ordinal Indexer Service
82
+ *
83
+ * Note: Hiro Ordinals API only supports mainnet. On testnet, all UTXOs are
84
+ * treated as cardinal (safe to spend) since we cannot index inscriptions.
85
+ */
86
+ export declare class OrdinalIndexer {
87
+ private readonly network;
88
+ private readonly mempoolApi;
89
+ private readonly isMainnet;
90
+ constructor(network: Network);
91
+ /**
92
+ * Get all inscriptions for a Bitcoin address
93
+ *
94
+ * @param address - Bitcoin address (bc1... for mainnet)
95
+ * @returns Array of inscriptions with their output references (empty on testnet)
96
+ * @throws Error if API request fails
97
+ */
98
+ getInscriptionsForAddress(address: string): Promise<Inscription[]>;
99
+ /**
100
+ * Classify UTXOs into cardinal (safe to spend) and ordinal (contains inscriptions)
101
+ *
102
+ * @param address - Bitcoin address
103
+ * @returns Classified UTXOs
104
+ * @throws Error if API requests fail
105
+ */
106
+ classifyUtxos(address: string): Promise<ClassifiedUtxos>;
107
+ /**
108
+ * Get cardinal UTXOs (safe to spend - no inscriptions)
109
+ *
110
+ * @param address - Bitcoin address
111
+ * @returns Cardinal UTXOs only
112
+ * @throws Error if API requests fail
113
+ */
114
+ getCardinalUtxos(address: string): Promise<UTXO[]>;
115
+ /**
116
+ * Get ordinal UTXOs (contain inscriptions - do not spend)
117
+ *
118
+ * @param address - Bitcoin address
119
+ * @returns Ordinal UTXOs only
120
+ * @throws Error if API requests fail
121
+ */
122
+ getOrdinalUtxos(address: string): Promise<UTXO[]>;
123
+ }
124
+ /**
125
+ * Create an ordinal indexer for the given network
126
+ */
127
+ export declare function createOrdinalIndexer(network: Network): OrdinalIndexer;
128
+ //# sourceMappingURL=ordinal-indexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ordinal-indexer.d.ts","sourceRoot":"","sources":["../../src/services/ordinal-indexer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAG7C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAYD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB;;OAEG;IACH,OAAO,EAAE,IAAI,EAAE,CAAC;CACjB;AAID;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;gBAExB,OAAO,EAAE,OAAO;IAM5B;;;;;;OAMG;IACG,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA2CxE;;;;;;OAMG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA6B9D;;;;;;OAMG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAKxD;;;;;;OAMG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;CAKxD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,CAErE"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Ordinal Indexer Service
3
+ *
4
+ * Combines Hiro Ordinals API with mempool.space to classify UTXOs:
5
+ * - Cardinal: Safe to spend (no inscriptions)
6
+ * - Ordinal: Contains inscriptions (must not spend accidentally)
7
+ *
8
+ * Uses free APIs:
9
+ * - Hiro Ordinals API: https://api.hiro.so/ordinals/v1/inscriptions?address={address}
10
+ * - mempool.space API: via MempoolApi service
11
+ */
12
+ import { MempoolApi } from "./mempool-api.js";
13
+ const HIRO_ORDINALS_API_URL = "https://api.hiro.so/ordinals/v1";
14
+ /**
15
+ * Ordinal Indexer Service
16
+ *
17
+ * Note: Hiro Ordinals API only supports mainnet. On testnet, all UTXOs are
18
+ * treated as cardinal (safe to spend) since we cannot index inscriptions.
19
+ */
20
+ export class OrdinalIndexer {
21
+ network;
22
+ mempoolApi;
23
+ isMainnet;
24
+ constructor(network) {
25
+ this.network = network;
26
+ this.mempoolApi = new MempoolApi(network);
27
+ this.isMainnet = network === "mainnet";
28
+ }
29
+ /**
30
+ * Get all inscriptions for a Bitcoin address
31
+ *
32
+ * @param address - Bitcoin address (bc1... for mainnet)
33
+ * @returns Array of inscriptions with their output references (empty on testnet)
34
+ * @throws Error if API request fails
35
+ */
36
+ async getInscriptionsForAddress(address) {
37
+ // Testnet: return empty (Hiro API doesn't index testnet inscriptions)
38
+ if (!this.isMainnet) {
39
+ return [];
40
+ }
41
+ const allInscriptions = [];
42
+ let offset = 0;
43
+ const limit = 60; // Hiro API default/max per page
44
+ try {
45
+ // Fetch all pages
46
+ while (true) {
47
+ const url = `${HIRO_ORDINALS_API_URL}/inscriptions?address=${address}&limit=${limit}&offset=${offset}`;
48
+ const response = await fetch(url);
49
+ if (!response.ok) {
50
+ const errorText = await response.text().catch(() => "Unknown error");
51
+ throw new Error(`Failed to fetch inscriptions from Hiro API: ${response.status} ${response.statusText} - ${errorText}`);
52
+ }
53
+ const data = (await response.json());
54
+ allInscriptions.push(...data.results);
55
+ // Check if we've fetched all inscriptions
56
+ if (offset + data.results.length >= data.total) {
57
+ break;
58
+ }
59
+ offset += limit;
60
+ }
61
+ return allInscriptions;
62
+ }
63
+ catch (error) {
64
+ if (error instanceof Error) {
65
+ throw error;
66
+ }
67
+ throw new Error(`Failed to fetch inscriptions: ${String(error)}`);
68
+ }
69
+ }
70
+ /**
71
+ * Classify UTXOs into cardinal (safe to spend) and ordinal (contains inscriptions)
72
+ *
73
+ * @param address - Bitcoin address
74
+ * @returns Classified UTXOs
75
+ * @throws Error if API requests fail
76
+ */
77
+ async classifyUtxos(address) {
78
+ // Fetch UTXOs from mempool.space
79
+ const utxos = await this.mempoolApi.getUtxos(address);
80
+ // Fetch inscriptions from Hiro Ordinals API
81
+ const inscriptions = await this.getInscriptionsForAddress(address);
82
+ // Build set of outputs that contain inscriptions
83
+ // Hiro API returns "output" field as "txid:vout"
84
+ const ordinalOutputs = new Set(inscriptions.map((inscription) => inscription.output));
85
+ // Classify UTXOs
86
+ const cardinal = [];
87
+ const ordinal = [];
88
+ for (const utxo of utxos) {
89
+ const outputRef = `${utxo.txid}:${utxo.vout}`;
90
+ if (ordinalOutputs.has(outputRef)) {
91
+ ordinal.push(utxo);
92
+ }
93
+ else {
94
+ cardinal.push(utxo);
95
+ }
96
+ }
97
+ return { cardinal, ordinal };
98
+ }
99
+ /**
100
+ * Get cardinal UTXOs (safe to spend - no inscriptions)
101
+ *
102
+ * @param address - Bitcoin address
103
+ * @returns Cardinal UTXOs only
104
+ * @throws Error if API requests fail
105
+ */
106
+ async getCardinalUtxos(address) {
107
+ const classified = await this.classifyUtxos(address);
108
+ return classified.cardinal;
109
+ }
110
+ /**
111
+ * Get ordinal UTXOs (contain inscriptions - do not spend)
112
+ *
113
+ * @param address - Bitcoin address
114
+ * @returns Ordinal UTXOs only
115
+ * @throws Error if API requests fail
116
+ */
117
+ async getOrdinalUtxos(address) {
118
+ const classified = await this.classifyUtxos(address);
119
+ return classified.ordinal;
120
+ }
121
+ }
122
+ /**
123
+ * Create an ordinal indexer for the given network
124
+ */
125
+ export function createOrdinalIndexer(network) {
126
+ return new OrdinalIndexer(network);
127
+ }
128
+ //# sourceMappingURL=ordinal-indexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ordinal-indexer.js","sourceRoot":"","sources":["../../src/services/ordinal-indexer.ts"],"names":[],"mappings":"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"}
@@ -28,8 +28,9 @@ export declare class SbtcService {
28
28
  getBalance(address: string): Promise<SbtcBalance>;
29
29
  /**
30
30
  * Transfer sBTC to a recipient
31
+ * @param fee Optional fee in micro-STX. If omitted, fee is auto-estimated.
31
32
  */
32
- transfer(account: Account, recipient: string, amount: bigint, memo?: string): Promise<TransferResult>;
33
+ transfer(account: Account, recipient: string, amount: bigint, memo?: string, fee?: bigint): Promise<TransferResult>;
33
34
  /**
34
35
  * Get sBTC deposit instructions
35
36
  * Note: sBTC deposits require interacting with the Bitcoin network directly
@@ -1 +1 @@
1
- {"version":3,"file":"sbtc.service.d.ts","sourceRoot":"","sources":["../../src/services/sbtc.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,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAMD,qBAAa,WAAW;IAIV,OAAO,CAAC,OAAO;IAH3B,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,SAAS,CAAkC;gBAE/B,OAAO,EAAE,OAAO;IAKpC;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAevD;;OAEG;IACG,QAAQ,CACZ,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC;IAwB1B;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC;IAehD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;CAgBzC;AAQD,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAK5D"}
1
+ {"version":3,"file":"sbtc.service.d.ts","sourceRoot":"","sources":["../../src/services/sbtc.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,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAMD,qBAAa,WAAW;IAIV,OAAO,CAAC,OAAO;IAH3B,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,SAAS,CAAkC;gBAE/B,OAAO,EAAE,OAAO;IAKpC;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAevD;;;OAGG;IACG,QAAQ,CACZ,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC;IAyB1B;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC;IAehD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;CAgBzC;AAQD,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAK5D"}
@@ -31,8 +31,9 @@ export class SbtcService {
31
31
  }
32
32
  /**
33
33
  * Transfer sBTC to a recipient
34
+ * @param fee Optional fee in micro-STX. If omitted, fee is auto-estimated.
34
35
  */
35
- async transfer(account, recipient, amount, memo) {
36
+ async transfer(account, recipient, amount, memo, fee) {
36
37
  const sbtcContract = this.contracts.SBTC_TOKEN;
37
38
  const { address: contractAddress, name: contractName } = parseContractId(sbtcContract);
38
39
  const functionArgs = [
@@ -50,6 +51,7 @@ export class SbtcService {
50
51
  contractName,
51
52
  functionName: "transfer",
52
53
  functionArgs,
54
+ ...(fee !== undefined && { fee }),
53
55
  });
54
56
  }
55
57
  /**