@secondlayer/stacks 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/README.md +92 -0
  2. package/dist/shared/stacks-02actsrx.cjs +17 -0
  3. package/dist/shared/stacks-02actsrx.cjs.map +10 -0
  4. package/dist/shared/stacks-1aqm7c2h.cjs +110 -0
  5. package/dist/shared/stacks-1aqm7c2h.cjs.map +11 -0
  6. package/dist/shared/stacks-24h5k94q.cjs +74 -0
  7. package/dist/shared/stacks-24h5k94q.cjs.map +11 -0
  8. package/dist/shared/stacks-2ar4prfz.cjs +328 -0
  9. package/dist/shared/stacks-2ar4prfz.cjs.map +11 -0
  10. package/dist/shared/stacks-4py5pm0r.cjs +237 -0
  11. package/dist/shared/stacks-4py5pm0r.cjs.map +10 -0
  12. package/dist/shared/stacks-5tprhns9.cjs +54 -0
  13. package/dist/shared/stacks-5tprhns9.cjs.map +11 -0
  14. package/dist/shared/stacks-61rvzkz1.cjs +132 -0
  15. package/dist/shared/stacks-61rvzkz1.cjs.map +17 -0
  16. package/dist/shared/stacks-709tra19.js +30 -0
  17. package/dist/shared/stacks-709tra19.js.map +10 -0
  18. package/dist/shared/stacks-74k8cxgb.cjs +567 -0
  19. package/dist/shared/stacks-74k8cxgb.cjs.map +13 -0
  20. package/dist/shared/stacks-8m9byk2j.js +7 -0
  21. package/dist/shared/stacks-8m9byk2j.js.map +9 -0
  22. package/dist/shared/stacks-8yykgdww.js +125 -0
  23. package/dist/shared/stacks-8yykgdww.js.map +11 -0
  24. package/dist/shared/stacks-9g0jhab3.cjs +40 -0
  25. package/dist/shared/stacks-9g0jhab3.cjs.map +10 -0
  26. package/dist/shared/stacks-an5k8n4t.cjs +291 -0
  27. package/dist/shared/stacks-an5k8n4t.cjs.map +23 -0
  28. package/dist/shared/stacks-b008c3w8.cjs +214 -0
  29. package/dist/shared/stacks-b008c3w8.cjs.map +11 -0
  30. package/dist/shared/stacks-bnvfmt7y.cjs +31 -0
  31. package/dist/shared/stacks-bnvfmt7y.cjs.map +9 -0
  32. package/dist/shared/stacks-bycy6t9k.js +22 -0
  33. package/dist/shared/stacks-bycy6t9k.js.map +10 -0
  34. package/dist/shared/stacks-d1fmkv3p.js +258 -0
  35. package/dist/shared/stacks-d1fmkv3p.js.map +13 -0
  36. package/dist/shared/stacks-dr5en54r.cjs +119 -0
  37. package/dist/shared/stacks-dr5en54r.cjs.map +10 -0
  38. package/dist/shared/stacks-dxhntr76.js +278 -0
  39. package/dist/shared/stacks-dxhntr76.js.map +10 -0
  40. package/dist/shared/stacks-evnzth1q.cjs +35 -0
  41. package/dist/shared/stacks-evnzth1q.cjs.map +10 -0
  42. package/dist/shared/stacks-f3tk2k5s.js +27 -0
  43. package/dist/shared/stacks-f3tk2k5s.js.map +9 -0
  44. package/dist/shared/stacks-f7wdrzs3.js +285 -0
  45. package/dist/shared/stacks-f7wdrzs3.js.map +11 -0
  46. package/dist/shared/stacks-fcaefc5b.cjs +16 -0
  47. package/dist/shared/stacks-fcaefc5b.cjs.map +10 -0
  48. package/dist/shared/stacks-g9mcjcqg.cjs +3 -0
  49. package/dist/shared/stacks-g9mcjcqg.cjs.map +9 -0
  50. package/dist/shared/stacks-gck1sq7h.cjs +28 -0
  51. package/dist/shared/stacks-gck1sq7h.cjs.map +10 -0
  52. package/dist/shared/stacks-gjvbq6w7.js +46 -0
  53. package/dist/shared/stacks-gjvbq6w7.js.map +10 -0
  54. package/dist/shared/stacks-j2cy7qtt.js +237 -0
  55. package/dist/shared/stacks-j2cy7qtt.js.map +11 -0
  56. package/dist/shared/stacks-k08tgzyp.cjs +232 -0
  57. package/dist/shared/stacks-k08tgzyp.cjs.map +13 -0
  58. package/dist/shared/stacks-k2p5tv6x.js +37 -0
  59. package/dist/shared/stacks-k2p5tv6x.js.map +10 -0
  60. package/dist/shared/stacks-k58k970n.js +234 -0
  61. package/dist/shared/stacks-k58k970n.js.map +10 -0
  62. package/dist/shared/stacks-n2g56wgg.js +338 -0
  63. package/dist/shared/stacks-n2g56wgg.js.map +23 -0
  64. package/dist/shared/stacks-nqytwfcc.js +243 -0
  65. package/dist/shared/stacks-nqytwfcc.js.map +11 -0
  66. package/dist/shared/stacks-qcae5852.js +19 -0
  67. package/dist/shared/stacks-qcae5852.js.map +10 -0
  68. package/dist/shared/stacks-qt8ehebn.js +76 -0
  69. package/dist/shared/stacks-qt8ehebn.js.map +11 -0
  70. package/dist/shared/stacks-qvg7c24g.cjs +232 -0
  71. package/dist/shared/stacks-qvg7c24g.cjs.map +10 -0
  72. package/dist/shared/stacks-r1t6g3c3.cjs +241 -0
  73. package/dist/shared/stacks-r1t6g3c3.cjs.map +11 -0
  74. package/dist/shared/stacks-tjxmrssa.js +282 -0
  75. package/dist/shared/stacks-tjxmrssa.js.map +11 -0
  76. package/dist/shared/stacks-v9jqcpd4.js +18 -0
  77. package/dist/shared/stacks-v9jqcpd4.js.map +10 -0
  78. package/dist/shared/stacks-vdfag81a.cjs +121 -0
  79. package/dist/shared/stacks-vdfag81a.cjs.map +10 -0
  80. package/dist/shared/stacks-vdfs3e5v.js +134 -0
  81. package/dist/shared/stacks-vdfs3e5v.js.map +10 -0
  82. package/dist/shared/stacks-y3dh7hv1.js +60 -0
  83. package/dist/shared/stacks-y3dh7hv1.js.map +11 -0
  84. package/dist/shared/stacks-ya3x01yd.cjs +16 -0
  85. package/dist/shared/stacks-ya3x01yd.cjs.map +10 -0
  86. package/dist/shared/stacks-yfgsm6ap.js +599 -0
  87. package/dist/shared/stacks-yfgsm6ap.js.map +13 -0
  88. package/dist/shared/stacks-yfveb68e.js +121 -0
  89. package/dist/shared/stacks-yfveb68e.js.map +10 -0
  90. package/dist/shared/stacks-zm0b3tgy.js +160 -0
  91. package/dist/shared/stacks-zm0b3tgy.js.map +17 -0
  92. package/dist/shared/stacks-zyv9qqme.cjs +249 -0
  93. package/dist/shared/stacks-zyv9qqme.cjs.map +11 -0
  94. package/dist/src/accounts/index.cjs +90 -0
  95. package/dist/src/accounts/index.cjs.map +12 -0
  96. package/dist/src/accounts/index.d.cts +47 -0
  97. package/dist/src/accounts/index.d.ts +47 -0
  98. package/dist/src/accounts/index.js +104 -0
  99. package/dist/src/accounts/index.js.map +12 -0
  100. package/dist/src/actions/index.cjs +36 -0
  101. package/dist/src/actions/index.cjs.map +9 -0
  102. package/dist/src/actions/index.d.cts +886 -0
  103. package/dist/src/actions/index.d.ts +886 -0
  104. package/dist/src/actions/index.js +81 -0
  105. package/dist/src/actions/index.js.map +9 -0
  106. package/dist/src/bns/index.cjs +590 -0
  107. package/dist/src/bns/index.cjs.map +15 -0
  108. package/dist/src/bns/index.d.cts +241 -0
  109. package/dist/src/bns/index.d.ts +241 -0
  110. package/dist/src/bns/index.js +611 -0
  111. package/dist/src/bns/index.js.map +15 -0
  112. package/dist/src/chains/index.cjs +13 -0
  113. package/dist/src/chains/index.cjs.map +9 -0
  114. package/dist/src/chains/index.d.cts +53 -0
  115. package/dist/src/chains/index.d.ts +53 -0
  116. package/dist/src/chains/index.js +18 -0
  117. package/dist/src/chains/index.js.map +9 -0
  118. package/dist/src/clarity/index.cjs +3 -0
  119. package/dist/src/clarity/index.cjs.map +9 -0
  120. package/dist/src/clarity/index.d.cts +821 -0
  121. package/dist/src/clarity/index.d.ts +821 -0
  122. package/dist/src/clarity/index.js +145 -0
  123. package/dist/src/clarity/index.js.map +9 -0
  124. package/dist/src/connect/index.cjs +480 -0
  125. package/dist/src/connect/index.cjs.map +19 -0
  126. package/dist/src/connect/index.d.cts +110 -0
  127. package/dist/src/connect/index.d.ts +110 -0
  128. package/dist/src/connect/index.js +448 -0
  129. package/dist/src/connect/index.js.map +19 -0
  130. package/dist/src/connect/walletconnect/index.cjs +1322 -0
  131. package/dist/src/connect/walletconnect/index.cjs.map +18 -0
  132. package/dist/src/connect/walletconnect/index.d.cts +132 -0
  133. package/dist/src/connect/walletconnect/index.d.ts +132 -0
  134. package/dist/src/connect/walletconnect/index.js +1290 -0
  135. package/dist/src/connect/walletconnect/index.js.map +18 -0
  136. package/dist/src/index.cjs +557 -0
  137. package/dist/src/index.cjs.map +21 -0
  138. package/dist/src/index.d.cts +847 -0
  139. package/dist/src/index.d.ts +847 -0
  140. package/dist/src/index.js +629 -0
  141. package/dist/src/index.js.map +21 -0
  142. package/dist/src/postconditions/index.cjs +3 -0
  143. package/dist/src/postconditions/index.cjs.map +9 -0
  144. package/dist/src/postconditions/index.d.cts +91 -0
  145. package/dist/src/postconditions/index.d.ts +91 -0
  146. package/dist/src/postconditions/index.js +12 -0
  147. package/dist/src/postconditions/index.js.map +9 -0
  148. package/dist/src/pox/index.cjs +860 -0
  149. package/dist/src/pox/index.cjs.map +15 -0
  150. package/dist/src/pox/index.d.cts +244 -0
  151. package/dist/src/pox/index.d.ts +244 -0
  152. package/dist/src/pox/index.js +877 -0
  153. package/dist/src/pox/index.js.map +15 -0
  154. package/dist/src/stackingdao/index.cjs +300 -0
  155. package/dist/src/stackingdao/index.cjs.map +13 -0
  156. package/dist/src/stackingdao/index.d.cts +179 -0
  157. package/dist/src/stackingdao/index.d.ts +179 -0
  158. package/dist/src/stackingdao/index.js +318 -0
  159. package/dist/src/stackingdao/index.js.map +13 -0
  160. package/dist/src/subscriptions/index.cjs +14 -0
  161. package/dist/src/subscriptions/index.cjs.map +9 -0
  162. package/dist/src/subscriptions/index.d.cts +250 -0
  163. package/dist/src/subscriptions/index.d.ts +250 -0
  164. package/dist/src/subscriptions/index.js +21 -0
  165. package/dist/src/subscriptions/index.js.map +9 -0
  166. package/dist/src/transactions/index.cjs +50 -0
  167. package/dist/src/transactions/index.cjs.map +9 -0
  168. package/dist/src/transactions/index.d.cts +412 -0
  169. package/dist/src/transactions/index.d.ts +412 -0
  170. package/dist/src/transactions/index.js +101 -0
  171. package/dist/src/transactions/index.js.map +9 -0
  172. package/dist/src/utils/index.cjs +168 -0
  173. package/dist/src/utils/index.cjs.map +11 -0
  174. package/dist/src/utils/index.d.cts +140 -0
  175. package/dist/src/utils/index.d.ts +140 -0
  176. package/dist/src/utils/index.js +222 -0
  177. package/dist/src/utils/index.js.map +11 -0
  178. package/package.json +105 -0
@@ -0,0 +1,611 @@
1
+ import"../../shared/stacks-tjxmrssa.js";
2
+ import"../../shared/stacks-k58k970n.js";
3
+ import {
4
+ getContract
5
+ } from "../../shared/stacks-vdfs3e5v.js";
6
+ import"../../shared/stacks-zm0b3tgy.js";
7
+ import"../../shared/stacks-709tra19.js";
8
+ import"../../shared/stacks-d1fmkv3p.js";
9
+ import {
10
+ Pc
11
+ } from "../../shared/stacks-yfveb68e.js";
12
+ import"../../shared/stacks-f7wdrzs3.js";
13
+ import"../../shared/stacks-yfgsm6ap.js";
14
+ import {
15
+ Cl
16
+ } from "../../shared/stacks-j2cy7qtt.js";
17
+ import"../../shared/stacks-8yykgdww.js";
18
+ import"../../shared/stacks-v9jqcpd4.js";
19
+ import {
20
+ hash160
21
+ } from "../../shared/stacks-bycy6t9k.js";
22
+ import"../../shared/stacks-gjvbq6w7.js";
23
+ import"../../shared/stacks-nqytwfcc.js";
24
+ import"../../shared/stacks-8m9byk2j.js";
25
+
26
+ // src/bns/abi.ts
27
+ var BNS_ABI = {
28
+ functions: [
29
+ {
30
+ name: "get-owner-name",
31
+ access: "read-only",
32
+ args: [
33
+ { name: "name", type: { buff: { length: 48 } } },
34
+ { name: "namespace", type: { buff: { length: 20 } } }
35
+ ],
36
+ outputs: {
37
+ response: {
38
+ ok: { optional: "principal" },
39
+ error: "uint128"
40
+ }
41
+ }
42
+ },
43
+ {
44
+ name: "get-id-from-bns",
45
+ access: "read-only",
46
+ args: [
47
+ { name: "name", type: { buff: { length: 48 } } },
48
+ { name: "namespace", type: { buff: { length: 20 } } }
49
+ ],
50
+ outputs: { optional: "uint128" }
51
+ },
52
+ {
53
+ name: "get-bns-from-id",
54
+ access: "read-only",
55
+ args: [{ name: "id", type: "uint128" }],
56
+ outputs: {
57
+ optional: {
58
+ tuple: [
59
+ { name: "name", type: { buff: { length: 48 } } },
60
+ { name: "namespace", type: { buff: { length: 20 } } }
61
+ ]
62
+ }
63
+ }
64
+ },
65
+ {
66
+ name: "get-owner",
67
+ access: "read-only",
68
+ args: [{ name: "id", type: "uint128" }],
69
+ outputs: {
70
+ response: {
71
+ ok: { optional: "principal" },
72
+ error: "none"
73
+ }
74
+ }
75
+ },
76
+ {
77
+ name: "get-primary",
78
+ access: "read-only",
79
+ args: [{ name: "owner", type: "principal" }],
80
+ outputs: {
81
+ response: {
82
+ ok: {
83
+ optional: {
84
+ tuple: [
85
+ { name: "name", type: { buff: { length: 48 } } },
86
+ { name: "namespace", type: { buff: { length: 20 } } }
87
+ ]
88
+ }
89
+ },
90
+ error: "none"
91
+ }
92
+ }
93
+ },
94
+ {
95
+ name: "can-resolve-name",
96
+ access: "read-only",
97
+ args: [
98
+ { name: "namespace", type: { buff: { length: 20 } } },
99
+ { name: "name", type: { buff: { length: 48 } } }
100
+ ],
101
+ outputs: {
102
+ response: {
103
+ ok: {
104
+ tuple: [
105
+ { name: "renewal", type: "uint128" },
106
+ { name: "owner", type: "principal" }
107
+ ]
108
+ },
109
+ error: "uint128"
110
+ }
111
+ }
112
+ },
113
+ {
114
+ name: "get-renewal-height",
115
+ access: "read-only",
116
+ args: [{ name: "id", type: "uint128" }],
117
+ outputs: { response: { ok: "uint128", error: "uint128" } }
118
+ },
119
+ {
120
+ name: "get-name-price",
121
+ access: "read-only",
122
+ args: [
123
+ { name: "namespace", type: { buff: { length: 20 } } },
124
+ { name: "name", type: { buff: { length: 48 } } }
125
+ ],
126
+ outputs: {
127
+ response: {
128
+ ok: { response: { ok: "uint128", error: "uint128" } },
129
+ error: "uint128"
130
+ }
131
+ }
132
+ },
133
+ {
134
+ name: "get-bns-info",
135
+ access: "read-only",
136
+ args: [
137
+ { name: "name", type: { buff: { length: 48 } } },
138
+ { name: "namespace", type: { buff: { length: 20 } } }
139
+ ],
140
+ outputs: {
141
+ optional: {
142
+ tuple: [
143
+ { name: "hashed-salted-fqn-preorder", type: { optional: { buff: { length: 20 } } } },
144
+ { name: "imported-at", type: { optional: "uint128" } },
145
+ { name: "owner", type: "principal" },
146
+ { name: "preordered-by", type: { optional: "principal" } },
147
+ { name: "registered-at", type: { optional: "uint128" } },
148
+ { name: "renewal-height", type: "uint128" },
149
+ { name: "stx-burn", type: "uint128" }
150
+ ]
151
+ }
152
+ }
153
+ },
154
+ {
155
+ name: "name-preorder",
156
+ access: "public",
157
+ args: [
158
+ { name: "hashed-salted-fqn", type: { buff: { length: 20 } } },
159
+ { name: "stx-to-burn", type: "uint128" }
160
+ ],
161
+ outputs: { response: { ok: "uint128", error: "uint128" } }
162
+ },
163
+ {
164
+ name: "name-register",
165
+ access: "public",
166
+ args: [
167
+ { name: "namespace", type: { buff: { length: 20 } } },
168
+ { name: "name", type: { buff: { length: 48 } } },
169
+ { name: "salt", type: { buff: { length: 20 } } }
170
+ ],
171
+ outputs: { response: { ok: "uint128", error: "uint128" } }
172
+ },
173
+ {
174
+ name: "name-claim-fast",
175
+ access: "public",
176
+ args: [
177
+ { name: "name", type: { buff: { length: 48 } } },
178
+ { name: "namespace", type: { buff: { length: 20 } } },
179
+ { name: "send-to", type: "principal" }
180
+ ],
181
+ outputs: { response: { ok: "uint128", error: "uint128" } }
182
+ },
183
+ {
184
+ name: "name-renewal",
185
+ access: "public",
186
+ args: [
187
+ { name: "namespace", type: { buff: { length: 20 } } },
188
+ { name: "name", type: { buff: { length: 48 } } }
189
+ ],
190
+ outputs: { response: { ok: "bool", error: "uint128" } }
191
+ },
192
+ {
193
+ name: "transfer",
194
+ access: "public",
195
+ args: [
196
+ { name: "id", type: "uint128" },
197
+ { name: "owner", type: "principal" },
198
+ { name: "recipient", type: "principal" }
199
+ ],
200
+ outputs: { response: { ok: "bool", error: "uint128" } }
201
+ },
202
+ {
203
+ name: "set-primary-name",
204
+ access: "public",
205
+ args: [{ name: "primary-name-id", type: "uint128" }],
206
+ outputs: { response: { ok: "bool", error: "uint128" } }
207
+ }
208
+ ],
209
+ non_fungible_tokens: [{ name: "BNS-V2", type: "uint128" }]
210
+ };
211
+
212
+ // src/bns/zonefile-abi.ts
213
+ var ZONEFILE_RESOLVER_ABI = {
214
+ functions: [
215
+ {
216
+ name: "resolve-name",
217
+ access: "read-only",
218
+ args: [
219
+ { name: "name", type: { buff: { length: 48 } } },
220
+ { name: "namespace", type: { buff: { length: 20 } } }
221
+ ],
222
+ outputs: {
223
+ response: {
224
+ ok: { optional: { buff: { length: 8192 } } },
225
+ error: "uint128"
226
+ }
227
+ }
228
+ },
229
+ {
230
+ name: "update-zonefile",
231
+ access: "public",
232
+ args: [
233
+ { name: "name", type: { buff: { length: 48 } } },
234
+ { name: "namespace", type: { buff: { length: 20 } } },
235
+ { name: "new-zonefile", type: { optional: { buff: { length: 8192 } } } }
236
+ ],
237
+ outputs: { response: { ok: "bool", error: "uint128" } }
238
+ },
239
+ {
240
+ name: "revoke-name",
241
+ access: "public",
242
+ args: [
243
+ { name: "name", type: { buff: { length: 48 } } },
244
+ { name: "namespace", type: { buff: { length: 20 } } }
245
+ ],
246
+ outputs: { response: { ok: "bool", error: "uint128" } }
247
+ }
248
+ ]
249
+ };
250
+
251
+ // src/bns/constants.ts
252
+ var BNS_CONTRACTS = {
253
+ mainnet: {
254
+ address: "SP2QEZ06AGJ3RKJPBV14SY1V5BBFNAW33D96YPGZF",
255
+ name: "BNS-V2"
256
+ },
257
+ testnet: {
258
+ address: "ST2QEZ06AGJ3RKJPBV14SY1V5BBFNAW33D9SZJQ0M",
259
+ name: "BNS-V2"
260
+ }
261
+ };
262
+ var ZONEFILE_RESOLVER_CONTRACTS = {
263
+ mainnet: {
264
+ address: "SP2QEZ06AGJ3RKJPBV14SY1V5BBFNAW33D96YPGZF",
265
+ name: "zonefile-resolver"
266
+ },
267
+ testnet: {
268
+ address: "ST2QEZ06AGJ3RKJPBV14SY1V5BBFNAW33D9SZJQ0M",
269
+ name: "zonefile-resolver"
270
+ }
271
+ };
272
+ var DEFAULT_NAMESPACE = "btc";
273
+
274
+ // src/bns/utils.ts
275
+ function parseFQN(fqn) {
276
+ const parts = fqn.split(".");
277
+ if (parts.length === 1) {
278
+ return {
279
+ name: parts[0],
280
+ namespace: DEFAULT_NAMESPACE
281
+ };
282
+ }
283
+ if (parts.length === 2) {
284
+ return {
285
+ name: parts[0],
286
+ namespace: parts[1]
287
+ };
288
+ }
289
+ throw new Error(`Invalid fully qualified name: ${fqn}. Expected format: "name.namespace" or "name"`);
290
+ }
291
+ function formatFQN(name, namespace) {
292
+ return `${name}.${namespace}`;
293
+ }
294
+ function validateName(name) {
295
+ if (name.length < 1 || name.length > 48)
296
+ return false;
297
+ const regex = /^[a-z0-9]([a-z0-9_-]*[a-z0-9])?$/;
298
+ return regex.test(name);
299
+ }
300
+ function validateNamespace(namespace) {
301
+ if (namespace.length < 1 || namespace.length > 20)
302
+ return false;
303
+ const regex = /^[a-z0-9]+$/;
304
+ return regex.test(namespace);
305
+ }
306
+ function validateFQN(fqn) {
307
+ try {
308
+ const { name, namespace } = parseFQN(fqn);
309
+ return validateName(name) && validateNamespace(namespace);
310
+ } catch {
311
+ return false;
312
+ }
313
+ }
314
+ function generateSalt() {
315
+ const salt = new Uint8Array(20);
316
+ crypto.getRandomValues(salt);
317
+ return salt;
318
+ }
319
+ function hashPreorder(name, namespace, salt) {
320
+ const nameBytes = new TextEncoder().encode(name);
321
+ const namespaceBytes = new TextEncoder().encode(namespace);
322
+ const combined = new Uint8Array(nameBytes.length + namespaceBytes.length + salt.length);
323
+ combined.set(nameBytes, 0);
324
+ combined.set(namespaceBytes, nameBytes.length);
325
+ combined.set(salt, nameBytes.length + namespaceBytes.length);
326
+ return hash160(combined);
327
+ }
328
+
329
+ // src/bns/actions.ts
330
+ function getBnsContract(client) {
331
+ if (!client.chain) {
332
+ throw new Error("Client must have a chain configured");
333
+ }
334
+ const network = client.chain.network;
335
+ const contract = network === "mainnet" ? BNS_CONTRACTS.mainnet : BNS_CONTRACTS.testnet;
336
+ return getContract({
337
+ client,
338
+ address: contract.address,
339
+ name: contract.name,
340
+ abi: BNS_ABI
341
+ });
342
+ }
343
+ function getZonefileContract(client) {
344
+ if (!client.chain) {
345
+ throw new Error("Client must have a chain configured");
346
+ }
347
+ const network = client.chain.network;
348
+ const contract = network === "mainnet" ? ZONEFILE_RESOLVER_CONTRACTS.mainnet : ZONEFILE_RESOLVER_CONTRACTS.testnet;
349
+ return getContract({
350
+ client,
351
+ address: contract.address,
352
+ name: contract.name,
353
+ abi: ZONEFILE_RESOLVER_ABI
354
+ });
355
+ }
356
+ function stringToBytes(str) {
357
+ return new TextEncoder().encode(str);
358
+ }
359
+ async function resolveName(client, nameOrFQN) {
360
+ if (!validateFQN(nameOrFQN)) {
361
+ throw new Error(`Invalid name format: ${nameOrFQN}`);
362
+ }
363
+ const { name, namespace } = parseFQN(nameOrFQN);
364
+ const bns = getBnsContract(client);
365
+ const owner = await bns.read["get-owner-name"]({
366
+ name: stringToBytes(name),
367
+ namespace: stringToBytes(namespace)
368
+ });
369
+ return owner;
370
+ }
371
+ async function getPrimaryName(client, address) {
372
+ const bns = getBnsContract(client);
373
+ const result = await bns.read["get-primary"]({
374
+ owner: address
375
+ });
376
+ if (result === null)
377
+ return null;
378
+ const name = new TextDecoder().decode(result.name);
379
+ const namespace = new TextDecoder().decode(result.namespace);
380
+ return formatFQN(name, namespace);
381
+ }
382
+ async function canRegister(client, nameOrFQN) {
383
+ if (!validateFQN(nameOrFQN)) {
384
+ throw new Error(`Invalid name format: ${nameOrFQN}`);
385
+ }
386
+ const { name, namespace } = parseFQN(nameOrFQN);
387
+ const bns = getBnsContract(client);
388
+ try {
389
+ await bns.read["can-resolve-name"]({
390
+ namespace: stringToBytes(namespace),
391
+ name: stringToBytes(name)
392
+ });
393
+ return false;
394
+ } catch {
395
+ return true;
396
+ }
397
+ }
398
+ async function getNamePrice(client, nameOrFQN) {
399
+ if (!validateFQN(nameOrFQN)) {
400
+ throw new Error(`Invalid name format: ${nameOrFQN}`);
401
+ }
402
+ const { name, namespace } = parseFQN(nameOrFQN);
403
+ const bns = getBnsContract(client);
404
+ const result = await bns.read["get-name-price"]({
405
+ namespace: stringToBytes(namespace),
406
+ name: stringToBytes(name)
407
+ });
408
+ if ("ok" in result)
409
+ return result.ok;
410
+ throw new Error(`Failed to get name price for ${nameOrFQN}`);
411
+ }
412
+ async function getNameId(client, nameOrFQN) {
413
+ if (!validateFQN(nameOrFQN)) {
414
+ throw new Error(`Invalid name format: ${nameOrFQN}`);
415
+ }
416
+ const { name, namespace } = parseFQN(nameOrFQN);
417
+ const bns = getBnsContract(client);
418
+ return await bns.read["get-id-from-bns"]({
419
+ name: stringToBytes(name),
420
+ namespace: stringToBytes(namespace)
421
+ });
422
+ }
423
+ async function preorder(client, params) {
424
+ const { name: nameInput, namespace: namespaceInput, salt: providedSalt } = params;
425
+ const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;
426
+ if (!validateFQN(fqn)) {
427
+ throw new Error(`Invalid name format: ${fqn}`);
428
+ }
429
+ const { name, namespace } = parseFQN(fqn);
430
+ const available = await canRegister(client, fqn);
431
+ if (!available) {
432
+ throw new Error(`Name ${fqn} is not available for registration`);
433
+ }
434
+ const price = await getNamePrice(client, fqn);
435
+ const salt = providedSalt ?? generateSalt();
436
+ const hashedSaltedFqn = hashPreorder(name, namespace, salt);
437
+ const bns = getBnsContract(client);
438
+ const txid = await bns.call["name-preorder"]({
439
+ hashedSaltedFqn,
440
+ stxToBurn: price
441
+ }, {
442
+ postConditions: [Pc.principal(client.account.address).willSendLte(price).ustx()]
443
+ });
444
+ return { txid, salt };
445
+ }
446
+ async function register(client, params) {
447
+ const { name: nameInput, namespace: namespaceInput, salt } = params;
448
+ const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;
449
+ if (!validateFQN(fqn)) {
450
+ throw new Error(`Invalid name format: ${fqn}`);
451
+ }
452
+ const { name, namespace } = parseFQN(fqn);
453
+ const bns = getBnsContract(client);
454
+ return bns.call["name-register"]({
455
+ name: stringToBytes(name),
456
+ namespace: stringToBytes(namespace),
457
+ salt
458
+ });
459
+ }
460
+ async function claimFast(client, params) {
461
+ const { name: nameInput, namespace: namespaceInput, recipient } = params;
462
+ const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;
463
+ if (!validateFQN(fqn)) {
464
+ throw new Error(`Invalid name format: ${fqn}`);
465
+ }
466
+ const { name, namespace } = parseFQN(fqn);
467
+ const available = await canRegister(client, fqn);
468
+ if (!available) {
469
+ throw new Error(`Name ${fqn} is not available for registration`);
470
+ }
471
+ const price = await getNamePrice(client, fqn);
472
+ const bns = getBnsContract(client);
473
+ return bns.call["name-claim-fast"]({
474
+ name: stringToBytes(name),
475
+ namespace: stringToBytes(namespace),
476
+ sendTo: recipient
477
+ }, {
478
+ postConditions: [Pc.principal(recipient).willSendLte(price).ustx()]
479
+ });
480
+ }
481
+ async function transfer(client, params) {
482
+ const { name: nameInput, namespace: namespaceInput, recipient } = params;
483
+ const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;
484
+ if (!validateFQN(fqn)) {
485
+ throw new Error(`Invalid name format: ${fqn}`);
486
+ }
487
+ const id = await getNameId(client, fqn);
488
+ if (id === null) {
489
+ throw new Error(`Name ${fqn} does not exist`);
490
+ }
491
+ const currentOwner = await resolveName(client, fqn);
492
+ if (!currentOwner) {
493
+ throw new Error(`Cannot determine owner of ${fqn}`);
494
+ }
495
+ const bns = getBnsContract(client);
496
+ if (!client.chain) {
497
+ throw new Error("Client must have a chain configured");
498
+ }
499
+ const network = client.chain.network;
500
+ const contract = network === "mainnet" ? BNS_CONTRACTS.mainnet : BNS_CONTRACTS.testnet;
501
+ return bns.call.transfer({
502
+ id,
503
+ owner: currentOwner,
504
+ recipient
505
+ }, {
506
+ postConditions: [
507
+ Pc.principal(currentOwner).willSendAsset().nft(`${contract.address}.${contract.name}::BNS-V2`, Cl.uint(id))
508
+ ]
509
+ });
510
+ }
511
+ async function setPrimary(client, params) {
512
+ const { name: nameInput, namespace: namespaceInput } = params;
513
+ const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;
514
+ if (!validateFQN(fqn)) {
515
+ throw new Error(`Invalid name format: ${fqn}`);
516
+ }
517
+ const id = await getNameId(client, fqn);
518
+ if (id === null) {
519
+ throw new Error(`Name ${fqn} does not exist`);
520
+ }
521
+ const bns = getBnsContract(client);
522
+ return bns.call["set-primary-name"]({ primaryNameId: id });
523
+ }
524
+ async function getZonefile(client, nameOrFQN) {
525
+ if (!validateFQN(nameOrFQN)) {
526
+ throw new Error(`Invalid name format: ${nameOrFQN}`);
527
+ }
528
+ const { name, namespace } = parseFQN(nameOrFQN);
529
+ const zonefile = getZonefileContract(client);
530
+ try {
531
+ const result = await zonefile.read["resolve-name"]({
532
+ name: stringToBytes(name),
533
+ namespace: stringToBytes(namespace)
534
+ });
535
+ return result;
536
+ } catch {
537
+ return null;
538
+ }
539
+ }
540
+ async function updateZonefile(client, params) {
541
+ const { name: nameInput, namespace: namespaceInput, zonefile } = params;
542
+ const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;
543
+ if (!validateFQN(fqn)) {
544
+ throw new Error(`Invalid name format: ${fqn}`);
545
+ }
546
+ const { name, namespace } = parseFQN(fqn);
547
+ const currentOwner = await resolveName(client, fqn);
548
+ if (!currentOwner) {
549
+ throw new Error(`Name ${fqn} does not exist`);
550
+ }
551
+ const zonefileContract = getZonefileContract(client);
552
+ let zonefileBytes = null;
553
+ if (zonefile !== null) {
554
+ zonefileBytes = typeof zonefile === "string" ? new TextEncoder().encode(zonefile) : zonefile;
555
+ if (zonefileBytes.length > 8192) {
556
+ throw new Error(`Zonefile too large: ${zonefileBytes.length} bytes (max 8192)`);
557
+ }
558
+ }
559
+ return zonefileContract.call["update-zonefile"]({
560
+ name: stringToBytes(name),
561
+ namespace: stringToBytes(namespace),
562
+ newZonefile: zonefileBytes
563
+ });
564
+ }
565
+ async function revokeZonefile(client, nameOrFQN) {
566
+ if (!validateFQN(nameOrFQN)) {
567
+ throw new Error(`Invalid name format: ${nameOrFQN}`);
568
+ }
569
+ const { name, namespace } = parseFQN(nameOrFQN);
570
+ const zonefileContract = getZonefileContract(client);
571
+ return zonefileContract.call["revoke-name"]({
572
+ name: stringToBytes(name),
573
+ namespace: stringToBytes(namespace)
574
+ });
575
+ }
576
+
577
+ // src/bns/index.ts
578
+ function bns() {
579
+ return (client) => ({
580
+ bns: {
581
+ resolveName: (name) => resolveName(client, name),
582
+ getPrimaryName: (address) => getPrimaryName(client, address),
583
+ canRegister: (name) => canRegister(client, name),
584
+ getNamePrice: (name) => getNamePrice(client, name),
585
+ getNameId: (name) => getNameId(client, name),
586
+ preorder: (params) => preorder(client, params),
587
+ register: (params) => register(client, params),
588
+ claimFast: (params) => claimFast(client, params),
589
+ transfer: (params) => transfer(client, params),
590
+ setPrimary: (params) => setPrimary(client, params),
591
+ getZonefile: (name) => getZonefile(client, name),
592
+ updateZonefile: (params) => updateZonefile(client, params),
593
+ revokeZonefile: (name) => revokeZonefile(client, name)
594
+ }
595
+ });
596
+ }
597
+ export {
598
+ validateNamespace,
599
+ validateName,
600
+ validateFQN,
601
+ parseFQN,
602
+ hashPreorder,
603
+ generateSalt,
604
+ formatFQN,
605
+ bns,
606
+ ZONEFILE_RESOLVER_CONTRACTS,
607
+ BNS_CONTRACTS
608
+ };
609
+
610
+ //# debugId=0D633A7E4933680A64756E2164756E21
611
+ //# sourceMappingURL=index.js.map