@secondlayer/stacks 0.0.4 → 0.2.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 (113) hide show
  1. package/dist/shared/{stacks-zm0b3tgy.js → stacks-0hqzpm29.js} +7 -7
  2. package/dist/shared/{stacks-zm0b3tgy.js.map → stacks-0hqzpm29.js.map} +2 -2
  3. package/dist/shared/{stacks-bnvfmt7y.cjs → stacks-2gdt3aqj.cjs} +15 -2
  4. package/dist/shared/{stacks-8m9byk2j.js.map → stacks-2gdt3aqj.cjs.map} +1 -1
  5. package/dist/shared/stacks-61rvzkz1.cjs.map +1 -1
  6. package/dist/shared/stacks-709tra19.js.map +2 -2
  7. package/dist/shared/{stacks-n2g56wgg.js → stacks-8qhfd37f.js} +13 -13
  8. package/dist/shared/{stacks-n2g56wgg.js.map → stacks-8qhfd37f.js.map} +3 -3
  9. package/dist/shared/stacks-9g0jhab3.cjs.map +2 -2
  10. package/dist/shared/stacks-an5k8n4t.cjs.map +2 -2
  11. package/dist/shared/stacks-b008c3w8.cjs.map +2 -2
  12. package/dist/shared/stacks-gck1sq7h.cjs.map +2 -2
  13. package/dist/shared/stacks-gjvbq6w7.js.map +2 -2
  14. package/dist/shared/{stacks-74k8cxgb.cjs → stacks-hfem9dck.cjs} +46 -2
  15. package/dist/shared/stacks-hfem9dck.cjs.map +13 -0
  16. package/dist/shared/stacks-j2cy7qtt.js.map +2 -2
  17. package/dist/shared/stacks-k58k970n.js.map +2 -2
  18. package/dist/shared/{stacks-zyv9qqme.cjs → stacks-kgesjxq4.cjs} +3 -5
  19. package/dist/shared/stacks-kgesjxq4.cjs.map +11 -0
  20. package/dist/shared/{stacks-f7wdrzs3.js → stacks-nbz193yk.js} +18 -21
  21. package/dist/shared/stacks-nbz193yk.js.map +11 -0
  22. package/dist/shared/stacks-njvyj3ab.js +23 -0
  23. package/dist/shared/{stacks-bnvfmt7y.cjs.map → stacks-njvyj3ab.js.map} +1 -1
  24. package/dist/shared/{stacks-dxhntr76.js → stacks-ph4a6322.js} +54 -11
  25. package/dist/shared/stacks-ph4a6322.js.map +10 -0
  26. package/dist/shared/stacks-qvg7c24g.cjs.map +2 -2
  27. package/dist/shared/{stacks-4py5pm0r.cjs → stacks-v3zy6zds.cjs} +42 -2
  28. package/dist/shared/stacks-v3zy6zds.cjs.map +10 -0
  29. package/dist/shared/stacks-v9jqcpd4.js.map +2 -2
  30. package/dist/shared/stacks-vdfag81a.cjs.map +2 -2
  31. package/dist/shared/{stacks-yfgsm6ap.js → stacks-xtz0n62y.js} +58 -3
  32. package/dist/shared/stacks-xtz0n62y.js.map +13 -0
  33. package/dist/shared/stacks-ya3x01yd.cjs.map +2 -2
  34. package/dist/shared/{stacks-vdfs3e5v.js → stacks-zhd20wgz.js} +2 -2
  35. package/dist/shared/stacks-zhd20wgz.js.map +10 -0
  36. package/dist/src/accounts/index.js +1 -1
  37. package/dist/src/actions/index.d.cts +46 -7
  38. package/dist/src/actions/index.d.ts +46 -7
  39. package/dist/src/actions/index.js +7 -7
  40. package/dist/src/bns/index.cjs +13 -13
  41. package/dist/src/bns/index.cjs.map +3 -3
  42. package/dist/src/bns/index.js +22 -22
  43. package/dist/src/bns/index.js.map +3 -3
  44. package/dist/src/chains/index.js +1 -1
  45. package/dist/src/clarity/index.cjs +326 -1
  46. package/dist/src/clarity/index.cjs.map +5 -3
  47. package/dist/src/clarity/index.d.cts +24 -5
  48. package/dist/src/clarity/index.d.ts +24 -5
  49. package/dist/src/clarity/index.js +264 -13
  50. package/dist/src/clarity/index.js.map +5 -3
  51. package/dist/src/connect/index.cjs.map +2 -2
  52. package/dist/src/connect/index.d.cts +7 -1
  53. package/dist/src/connect/index.d.ts +7 -1
  54. package/dist/src/connect/index.js.map +2 -2
  55. package/dist/src/connect/walletconnect/index.cjs +4 -4
  56. package/dist/src/connect/walletconnect/index.cjs.map +7 -7
  57. package/dist/src/connect/walletconnect/index.d.cts +5 -5
  58. package/dist/src/connect/walletconnect/index.d.ts +5 -5
  59. package/dist/src/connect/walletconnect/index.js +4 -4
  60. package/dist/src/connect/walletconnect/index.js.map +7 -7
  61. package/dist/src/index.cjs +1 -1
  62. package/dist/src/index.cjs.map +4 -4
  63. package/dist/src/index.d.cts +44 -3
  64. package/dist/src/index.d.ts +44 -3
  65. package/dist/src/index.js +12 -11
  66. package/dist/src/index.js.map +5 -5
  67. package/dist/src/postconditions/index.cjs +117 -1
  68. package/dist/src/postconditions/index.cjs.map +4 -3
  69. package/dist/src/postconditions/index.js +119 -6
  70. package/dist/src/postconditions/index.js.map +4 -3
  71. package/dist/src/pox/index.cjs +9 -9
  72. package/dist/src/pox/index.cjs.map +4 -4
  73. package/dist/src/pox/index.js +17 -17
  74. package/dist/src/pox/index.js.map +4 -4
  75. package/dist/src/stackingdao/index.cjs +13 -13
  76. package/dist/src/stackingdao/index.cjs.map +4 -4
  77. package/dist/src/stackingdao/index.d.cts +18 -7
  78. package/dist/src/stackingdao/index.d.ts +18 -7
  79. package/dist/src/stackingdao/index.js +21 -21
  80. package/dist/src/stackingdao/index.js.map +4 -4
  81. package/dist/src/subscriptions/index.js +1 -1
  82. package/dist/src/transactions/index.cjs +5 -1
  83. package/dist/src/transactions/index.cjs.map +1 -1
  84. package/dist/src/transactions/index.d.cts +40 -2
  85. package/dist/src/transactions/index.d.ts +40 -2
  86. package/dist/src/transactions/index.js +18 -10
  87. package/dist/src/transactions/index.js.map +1 -1
  88. package/dist/src/utils/index.cjs.map +2 -2
  89. package/dist/src/utils/index.d.cts +4 -4
  90. package/dist/src/utils/index.d.ts +4 -4
  91. package/dist/src/utils/index.js +5 -5
  92. package/dist/src/utils/index.js.map +3 -3
  93. package/package.json +1 -1
  94. package/dist/shared/stacks-2ar4prfz.cjs +0 -328
  95. package/dist/shared/stacks-2ar4prfz.cjs.map +0 -11
  96. package/dist/shared/stacks-4py5pm0r.cjs.map +0 -10
  97. package/dist/shared/stacks-74k8cxgb.cjs.map +0 -13
  98. package/dist/shared/stacks-8m9byk2j.js +0 -7
  99. package/dist/shared/stacks-dr5en54r.cjs +0 -119
  100. package/dist/shared/stacks-dr5en54r.cjs.map +0 -10
  101. package/dist/shared/stacks-dxhntr76.js.map +0 -10
  102. package/dist/shared/stacks-f3tk2k5s.js +0 -27
  103. package/dist/shared/stacks-f3tk2k5s.js.map +0 -9
  104. package/dist/shared/stacks-f7wdrzs3.js.map +0 -11
  105. package/dist/shared/stacks-g9mcjcqg.cjs +0 -3
  106. package/dist/shared/stacks-g9mcjcqg.cjs.map +0 -9
  107. package/dist/shared/stacks-tjxmrssa.js +0 -282
  108. package/dist/shared/stacks-tjxmrssa.js.map +0 -11
  109. package/dist/shared/stacks-vdfs3e5v.js.map +0 -10
  110. package/dist/shared/stacks-yfgsm6ap.js.map +0 -13
  111. package/dist/shared/stacks-yfveb68e.js +0 -121
  112. package/dist/shared/stacks-yfveb68e.js.map +0 -10
  113. package/dist/shared/stacks-zyv9qqme.cjs.map +0 -11
@@ -1,17 +1,12 @@
1
- import"../../shared/stacks-tjxmrssa.js";
2
1
  import"../../shared/stacks-k58k970n.js";
3
2
  import {
4
3
  ContractResponseError,
5
4
  getContract
6
- } from "../../shared/stacks-vdfs3e5v.js";
7
- import"../../shared/stacks-zm0b3tgy.js";
5
+ } from "../../shared/stacks-zhd20wgz.js";
6
+ import"../../shared/stacks-0hqzpm29.js";
8
7
  import"../../shared/stacks-709tra19.js";
9
8
  import"../../shared/stacks-d1fmkv3p.js";
10
- import {
11
- Pc
12
- } from "../../shared/stacks-yfveb68e.js";
13
- import"../../shared/stacks-f7wdrzs3.js";
14
- import"../../shared/stacks-yfgsm6ap.js";
9
+ import"../../shared/stacks-nbz193yk.js";
15
10
  import {
16
11
  Cl
17
12
  } from "../../shared/stacks-j2cy7qtt.js";
@@ -22,7 +17,12 @@ import {
22
17
  } from "../../shared/stacks-bycy6t9k.js";
23
18
  import"../../shared/stacks-gjvbq6w7.js";
24
19
  import"../../shared/stacks-nqytwfcc.js";
25
- import"../../shared/stacks-8m9byk2j.js";
20
+ import"../../shared/stacks-njvyj3ab.js";
21
+ import"../clarity/index.js";
22
+ import {
23
+ Pc
24
+ } from "../postconditions/index.js";
25
+ import"../../shared/stacks-xtz0n62y.js";
26
26
 
27
27
  // src/bns/abi.ts
28
28
  var BNS_ABI = {
@@ -364,7 +364,7 @@ async function resolveName(client, nameOrFQN) {
364
364
  const { name, namespace } = parseFQN(nameOrFQN);
365
365
  const bns = getBnsContract(client);
366
366
  try {
367
- return await bns.read["get-owner-name"]({
367
+ return await bns.read.getOwnerName({
368
368
  name: stringToBytes(name),
369
369
  namespace: stringToBytes(namespace)
370
370
  });
@@ -377,7 +377,7 @@ async function resolveName(client, nameOrFQN) {
377
377
  async function getPrimaryName(client, address) {
378
378
  const bns = getBnsContract(client);
379
379
  try {
380
- const result = await bns.read["get-primary"]({
380
+ const result = await bns.read.getPrimary({
381
381
  owner: address
382
382
  });
383
383
  if (result === null)
@@ -398,7 +398,7 @@ async function canRegister(client, nameOrFQN) {
398
398
  const { name, namespace } = parseFQN(nameOrFQN);
399
399
  const bns = getBnsContract(client);
400
400
  try {
401
- await bns.read["can-resolve-name"]({
401
+ await bns.read.canResolveName({
402
402
  namespace: stringToBytes(namespace),
403
403
  name: stringToBytes(name)
404
404
  });
@@ -413,7 +413,7 @@ async function getNamePrice(client, nameOrFQN) {
413
413
  }
414
414
  const { name, namespace } = parseFQN(nameOrFQN);
415
415
  const bns = getBnsContract(client);
416
- const result = await bns.read["get-name-price"]({
416
+ const result = await bns.read.getNamePrice({
417
417
  namespace: stringToBytes(namespace),
418
418
  name: stringToBytes(name)
419
419
  });
@@ -428,7 +428,7 @@ async function getNameId(client, nameOrFQN) {
428
428
  const { name, namespace } = parseFQN(nameOrFQN);
429
429
  const bns = getBnsContract(client);
430
430
  try {
431
- return await bns.read["get-id-from-bns"]({
431
+ return await bns.read.getIdFromBns({
432
432
  name: stringToBytes(name),
433
433
  namespace: stringToBytes(namespace)
434
434
  });
@@ -453,7 +453,7 @@ async function preorder(client, params) {
453
453
  const salt = providedSalt ?? generateSalt();
454
454
  const hashedSaltedFqn = hashPreorder(name, namespace, salt);
455
455
  const bns = getBnsContract(client);
456
- const txid = await bns.call["name-preorder"]({
456
+ const txid = await bns.call.namePreorder({
457
457
  hashedSaltedFqn,
458
458
  stxToBurn: price
459
459
  }, {
@@ -469,7 +469,7 @@ async function register(client, params) {
469
469
  }
470
470
  const { name, namespace } = parseFQN(fqn);
471
471
  const bns = getBnsContract(client);
472
- return bns.call["name-register"]({
472
+ return bns.call.nameRegister({
473
473
  name: stringToBytes(name),
474
474
  namespace: stringToBytes(namespace),
475
475
  salt
@@ -488,7 +488,7 @@ async function claimFast(client, params) {
488
488
  }
489
489
  const price = await getNamePrice(client, fqn);
490
490
  const bns = getBnsContract(client);
491
- return bns.call["name-claim-fast"]({
491
+ return bns.call.nameClaimFast({
492
492
  name: stringToBytes(name),
493
493
  namespace: stringToBytes(namespace),
494
494
  sendTo: recipient
@@ -537,7 +537,7 @@ async function setPrimary(client, params) {
537
537
  throw new Error(`Name ${fqn} does not exist`);
538
538
  }
539
539
  const bns = getBnsContract(client);
540
- return bns.call["set-primary-name"]({ primaryNameId: id });
540
+ return bns.call.setPrimaryName({ primaryNameId: id });
541
541
  }
542
542
  async function getZonefile(client, nameOrFQN) {
543
543
  if (!validateFQN(nameOrFQN)) {
@@ -546,7 +546,7 @@ async function getZonefile(client, nameOrFQN) {
546
546
  const { name, namespace } = parseFQN(nameOrFQN);
547
547
  const zonefile = getZonefileContract(client);
548
548
  try {
549
- const result = await zonefile.read["resolve-name"]({
549
+ const result = await zonefile.read.resolveName({
550
550
  name: stringToBytes(name),
551
551
  namespace: stringToBytes(namespace)
552
552
  });
@@ -574,7 +574,7 @@ async function updateZonefile(client, params) {
574
574
  throw new Error(`Zonefile too large: ${zonefileBytes.length} bytes (max 8192)`);
575
575
  }
576
576
  }
577
- return zonefileContract.call["update-zonefile"]({
577
+ return zonefileContract.call.updateZonefile({
578
578
  name: stringToBytes(name),
579
579
  namespace: stringToBytes(namespace),
580
580
  newZonefile: zonefileBytes
@@ -586,7 +586,7 @@ async function revokeZonefile(client, nameOrFQN) {
586
586
  }
587
587
  const { name, namespace } = parseFQN(nameOrFQN);
588
588
  const zonefileContract = getZonefileContract(client);
589
- return zonefileContract.call["revoke-name"]({
589
+ return zonefileContract.call.revokeName({
590
590
  name: stringToBytes(name),
591
591
  namespace: stringToBytes(namespace)
592
592
  });
@@ -625,5 +625,5 @@ export {
625
625
  BNS_CONTRACTS
626
626
  };
627
627
 
628
- //# debugId=3B5D8D19A6967B5564756E2164756E21
628
+ //# debugId=5838568A4B2757A664756E2164756E21
629
629
  //# sourceMappingURL=index.js.map
@@ -6,10 +6,10 @@
6
6
  "import type { AbiContract } from \"../clarity/abi/contract.ts\";\n\n/**\n * BNS v2 Zonefile Resolver ABI\n * Manages DNS-like records for BNS names (up to 8192 bytes).\n * Separate contract from BNS-V2 for decoupled zonefile management.\n */\nexport const ZONEFILE_RESOLVER_ABI = {\n functions: [\n {\n name: \"resolve-name\",\n access: \"read-only\",\n args: [\n { name: \"name\", type: { buff: { length: 48 } } },\n { name: \"namespace\", type: { buff: { length: 20 } } },\n ],\n outputs: {\n response: {\n ok: { optional: { buff: { length: 8192 } } },\n error: \"uint128\",\n },\n },\n },\n {\n name: \"update-zonefile\",\n access: \"public\",\n args: [\n { name: \"name\", type: { buff: { length: 48 } } },\n { name: \"namespace\", type: { buff: { length: 20 } } },\n { name: \"new-zonefile\", type: { optional: { buff: { length: 8192 } } } },\n ],\n outputs: { response: { ok: \"bool\", error: \"uint128\" } },\n },\n {\n name: \"revoke-name\",\n access: \"public\",\n args: [\n { name: \"name\", type: { buff: { length: 48 } } },\n { name: \"namespace\", type: { buff: { length: 20 } } },\n ],\n outputs: { response: { ok: \"bool\", error: \"uint128\" } },\n },\n ],\n} as const satisfies AbiContract;\n",
7
7
  "export const BNS_CONTRACTS = {\n mainnet: {\n address: \"SP2QEZ06AGJ3RKJPBV14SY1V5BBFNAW33D96YPGZF\",\n name: \"BNS-V2\",\n },\n testnet: {\n address: \"ST2QEZ06AGJ3RKJPBV14SY1V5BBFNAW33D9SZJQ0M\",\n name: \"BNS-V2\",\n },\n} as const;\n\nexport const ZONEFILE_RESOLVER_CONTRACTS = {\n mainnet: {\n address: \"SP2QEZ06AGJ3RKJPBV14SY1V5BBFNAW33D96YPGZF\",\n name: \"zonefile-resolver\",\n },\n testnet: {\n address: \"ST2QEZ06AGJ3RKJPBV14SY1V5BBFNAW33D9SZJQ0M\",\n name: \"zonefile-resolver\",\n },\n} as const;\n\n// BNS v2 uses .btc namespace primarily\nexport const DEFAULT_NAMESPACE = \"btc\";\n",
8
8
  "import type { FullyQualifiedName } from \"./types.ts\";\nimport { DEFAULT_NAMESPACE } from \"./constants.ts\";\nimport { hash160 } from \"../utils/hash.ts\";\n\n/**\n * Parse a fully qualified name string into components.\n * Supports:\n * - \"name.namespace\" → { name: \"name\", namespace: \"namespace\" }\n * - \"name\" → { name: \"name\", namespace: \"btc\" } (default)\n */\nexport function parseFQN(fqn: string): FullyQualifiedName {\n const parts = fqn.split(\".\");\n\n if (parts.length === 1) {\n return {\n name: parts[0]!,\n namespace: DEFAULT_NAMESPACE,\n };\n }\n\n if (parts.length === 2) {\n return {\n name: parts[0]!,\n namespace: parts[1]!,\n };\n }\n\n throw new Error(\n `Invalid fully qualified name: ${fqn}. Expected format: \"name.namespace\" or \"name\"`\n );\n}\n\n/**\n * Format name components into FQN string.\n */\nexport function formatFQN(name: string, namespace: string): string {\n return `${name}.${namespace}`;\n}\n\n/**\n * Validate name format.\n * Names must be:\n * - 1-48 characters\n * - Lowercase alphanumeric, hyphens, underscores\n * - Cannot start or end with hyphen/underscore\n */\nexport function validateName(name: string): boolean {\n if (name.length < 1 || name.length > 48) return false;\n\n const regex = /^[a-z0-9]([a-z0-9_-]*[a-z0-9])?$/;\n return regex.test(name);\n}\n\n/**\n * Validate namespace format.\n * Namespaces must be:\n * - 1-20 characters\n * - Lowercase alphanumeric\n */\nexport function validateNamespace(namespace: string): boolean {\n if (namespace.length < 1 || namespace.length > 20) return false;\n\n const regex = /^[a-z0-9]+$/;\n return regex.test(namespace);\n}\n\n/**\n * Validate a fully qualified name.\n */\nexport function validateFQN(fqn: string): boolean {\n try {\n const { name, namespace } = parseFQN(fqn);\n return validateName(name) && validateNamespace(namespace);\n } catch {\n return false;\n }\n}\n\n/**\n * Generate a random 20-byte salt for name preorders.\n * @returns Random Uint8Array of length 20\n */\nexport function generateSalt(): Uint8Array {\n const salt = new Uint8Array(20);\n crypto.getRandomValues(salt);\n return salt;\n}\n\n/**\n * Calculate hash160 for name preorder commitment.\n * Hash format: hash160(name + namespace + salt)\n *\n * @param name - BNS name (without namespace)\n * @param namespace - BNS namespace (e.g., \"btc\")\n * @param salt - 20-byte random salt\n * @returns 20-byte hash160 commitment\n */\nexport function hashPreorder(\n name: string,\n namespace: string,\n salt: Uint8Array\n): Uint8Array {\n const nameBytes = new TextEncoder().encode(name);\n const namespaceBytes = new TextEncoder().encode(namespace);\n\n // Concatenate: name + namespace + salt\n const combined = new Uint8Array(\n nameBytes.length + namespaceBytes.length + salt.length\n );\n combined.set(nameBytes, 0);\n combined.set(namespaceBytes, nameBytes.length);\n combined.set(salt, nameBytes.length + namespaceBytes.length);\n\n return hash160(combined);\n}\n",
9
- "import type { Client } from \"../clients/types.ts\";\nimport { getContract } from \"../actions/getContract.ts\";\nimport { BNS_ABI } from \"./abi.ts\";\nimport { ZONEFILE_RESOLVER_ABI } from \"./zonefile-abi.ts\";\nimport { BNS_CONTRACTS, ZONEFILE_RESOLVER_CONTRACTS } from \"./constants.ts\";\nimport {\n parseFQN,\n validateFQN,\n formatFQN,\n generateSalt,\n hashPreorder,\n} from \"./utils.ts\";\nimport type {\n ClaimFastParams,\n TransferParams,\n SetPrimaryParams,\n PreorderParams,\n RegisterParams,\n UpdateZonefileParams,\n} from \"./types.ts\";\nimport { Pc } from \"../postconditions/index.ts\";\nimport { Cl } from \"../clarity/index.ts\";\nimport { ContractResponseError } from \"../actions/getContract.ts\";\n\nfunction getBnsContract(client: Client) {\n if (!client.chain) {\n throw new Error(\"Client must have a chain configured\");\n }\n const network = client.chain.network;\n const contract =\n network === \"mainnet\" ? BNS_CONTRACTS.mainnet : BNS_CONTRACTS.testnet;\n\n return getContract({\n client,\n address: contract.address,\n name: contract.name,\n abi: BNS_ABI,\n });\n}\n\nfunction getZonefileContract(client: Client) {\n if (!client.chain) {\n throw new Error(\"Client must have a chain configured\");\n }\n const network = client.chain.network;\n const contract =\n network === \"mainnet\"\n ? ZONEFILE_RESOLVER_CONTRACTS.mainnet\n : ZONEFILE_RESOLVER_CONTRACTS.testnet;\n\n return getContract({\n client,\n address: contract.address,\n name: contract.name,\n abi: ZONEFILE_RESOLVER_ABI,\n });\n}\n\nfunction stringToBytes(str: string): Uint8Array {\n return new TextEncoder().encode(str);\n}\n\n/**\n * Resolve a BNS name to its owner address.\n * @example\n * const owner = await resolveName(client, \"alice.btc\");\n */\nexport async function resolveName(\n client: Client,\n nameOrFQN: string\n): Promise<string | null> {\n if (!validateFQN(nameOrFQN)) {\n throw new Error(`Invalid name format: ${nameOrFQN}`);\n }\n\n const { name, namespace } = parseFQN(nameOrFQN);\n const bns = getBnsContract(client);\n\n try {\n return (await bns.read[\"get-owner-name\"]({\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n })) as string | null;\n } catch (e) {\n if (e instanceof ContractResponseError) return null;\n throw e;\n }\n}\n\n/**\n * Get the primary name for an address.\n * @example\n * const primary = await getPrimaryName(client, \"SP2J6...\");\n */\nexport async function getPrimaryName(\n client: Client,\n address: string\n): Promise<string | null> {\n const bns = getBnsContract(client);\n\n try {\n const result = (await bns.read[\"get-primary\"]({\n owner: address,\n })) as { name: Uint8Array; namespace: Uint8Array } | null;\n\n if (result === null) return null;\n\n const name = new TextDecoder().decode(result.name);\n const namespace = new TextDecoder().decode(result.namespace);\n\n return formatFQN(name, namespace);\n } catch (e) {\n if (e instanceof ContractResponseError) return null;\n throw e;\n }\n}\n\n/**\n * Check if a name is available for registration.\n * @example\n * const available = await canRegister(client, \"bob.btc\");\n */\nexport async function canRegister(\n client: Client,\n nameOrFQN: string\n): Promise<boolean> {\n if (!validateFQN(nameOrFQN)) {\n throw new Error(`Invalid name format: ${nameOrFQN}`);\n }\n\n const { name, namespace } = parseFQN(nameOrFQN);\n const bns = getBnsContract(client);\n\n // No can-register-name function — use can-resolve-name instead.\n // If it resolves, the name is taken. If it errors, it's available.\n try {\n await bns.read[\"can-resolve-name\"]({\n namespace: stringToBytes(namespace),\n name: stringToBytes(name),\n });\n return false; // resolved = taken\n } catch {\n return true; // error = available\n }\n}\n\n/**\n * Get the price to register a name in microSTX.\n * @example\n * const price = await getNamePrice(client, \"bob.btc\");\n */\nexport async function getNamePrice(\n client: Client,\n nameOrFQN: string\n): Promise<bigint> {\n if (!validateFQN(nameOrFQN)) {\n throw new Error(`Invalid name format: ${nameOrFQN}`);\n }\n\n const { name, namespace } = parseFQN(nameOrFQN);\n const bns = getBnsContract(client);\n\n // get-name-price returns a nested response: (ok (ok uint))\n const result = (await bns.read[\"get-name-price\"]({\n namespace: stringToBytes(namespace),\n name: stringToBytes(name),\n })) as { ok: bigint } | { err: bigint };\n\n if (\"ok\" in result) return result.ok;\n throw new Error(`Failed to get name price for ${nameOrFQN}`);\n}\n\n/**\n * Get the NFT token ID for a name.\n * @example\n * const id = await getNameId(client, \"alice.btc\");\n */\nexport async function getNameId(\n client: Client,\n nameOrFQN: string\n): Promise<bigint | null> {\n if (!validateFQN(nameOrFQN)) {\n throw new Error(`Invalid name format: ${nameOrFQN}`);\n }\n\n const { name, namespace } = parseFQN(nameOrFQN);\n const bns = getBnsContract(client);\n\n try {\n return (await bns.read[\"get-id-from-bns\"]({\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n })) as bigint | null;\n } catch (e) {\n if (e instanceof ContractResponseError) return null;\n throw e;\n }\n}\n\n/**\n * Preorder a name (step 1 of secure registration).\n * Commits to a name with a salted hash, preventing front-running.\n * Must wait 1 Bitcoin block (~10 min) before calling register().\n *\n * @example\n * const { txid, salt } = await preorder(client, {\n * name: \"bob.btc\",\n * });\n * // Save salt! You'll need it for register()\n * // Wait ~10 minutes (1 Bitcoin block)\n * await register(client, { name: \"bob.btc\", salt });\n */\nexport async function preorder(\n client: Client,\n params: PreorderParams\n): Promise<{ txid: string; salt: Uint8Array }> {\n const { name: nameInput, namespace: namespaceInput, salt: providedSalt } = params;\n const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n if (!validateFQN(fqn)) {\n throw new Error(`Invalid name format: ${fqn}`);\n }\n\n const { name, namespace } = parseFQN(fqn);\n\n // Check availability\n const available = await canRegister(client, fqn);\n if (!available) {\n throw new Error(`Name ${fqn} is not available for registration`);\n }\n\n // Get price\n const price = await getNamePrice(client, fqn);\n\n // Generate or use provided salt\n const salt = providedSalt ?? generateSalt();\n\n // Calculate hash commitment\n const hashedSaltedFqn = hashPreorder(name, namespace, salt);\n\n const bns = getBnsContract(client);\n\n const txid = await bns.call[\"name-preorder\"](\n {\n hashedSaltedFqn,\n stxToBurn: price,\n },\n {\n postConditions: [Pc.principal(client.account!.address).willSendLte(price).ustx()],\n }\n );\n\n return { txid, salt };\n}\n\n/**\n * Register a name (step 2 of secure registration).\n * Reveals the name after preorder. Must wait 1 Bitcoin block after preorder.\n *\n * @example\n * const { txid } = await register(client, {\n * name: \"bob.btc\",\n * salt, // from preorder()\n * });\n */\nexport async function register(\n client: Client,\n params: RegisterParams\n): Promise<string> {\n const { name: nameInput, namespace: namespaceInput, salt } = params;\n const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n if (!validateFQN(fqn)) {\n throw new Error(`Invalid name format: ${fqn}`);\n }\n\n const { name, namespace } = parseFQN(fqn);\n\n const bns = getBnsContract(client);\n\n return bns.call[\"name-register\"]({\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n salt,\n });\n}\n\n/**\n * Claim a name instantly (fast but snipeable).\n * Burns STX to register the name immediately.\n * @example\n * const txid = await claimFast(client, {\n * name: \"bob.btc\",\n * recipient: account.address,\n * });\n */\nexport async function claimFast(\n client: Client,\n params: ClaimFastParams\n): Promise<string> {\n const { name: nameInput, namespace: namespaceInput, recipient } = params;\n const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n if (!validateFQN(fqn)) {\n throw new Error(`Invalid name format: ${fqn}`);\n }\n\n const { name, namespace } = parseFQN(fqn);\n\n // Check availability\n const available = await canRegister(client, fqn);\n if (!available) {\n throw new Error(`Name ${fqn} is not available for registration`);\n }\n\n // Get price\n const price = await getNamePrice(client, fqn);\n\n const bns = getBnsContract(client);\n\n return bns.call[\"name-claim-fast\"](\n {\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n sendTo: recipient,\n },\n {\n postConditions: [Pc.principal(recipient).willSendLte(price).ustx()],\n }\n );\n}\n\n/**\n * Transfer a name to a new owner.\n * @example\n * const txid = await transfer(client, {\n * name: \"alice.btc\",\n * recipient: \"SP3FBR...\",\n * });\n */\nexport async function transfer(\n client: Client,\n params: TransferParams\n): Promise<string> {\n const { name: nameInput, namespace: namespaceInput, recipient } = params;\n const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n if (!validateFQN(fqn)) {\n throw new Error(`Invalid name format: ${fqn}`);\n }\n\n const id = await getNameId(client, fqn);\n if (id === null) {\n throw new Error(`Name ${fqn} does not exist`);\n }\n\n const currentOwner = await resolveName(client, fqn);\n if (!currentOwner) {\n throw new Error(`Cannot determine owner of ${fqn}`);\n }\n\n const bns = getBnsContract(client);\n if (!client.chain) {\n throw new Error(\"Client must have a chain configured\");\n }\n const network = client.chain.network;\n const contract =\n network === \"mainnet\" ? BNS_CONTRACTS.mainnet : BNS_CONTRACTS.testnet;\n\n return bns.call.transfer(\n {\n id,\n owner: currentOwner,\n recipient,\n },\n {\n postConditions: [\n Pc.principal(currentOwner)\n .willSendAsset()\n .nft(`${contract.address}.${contract.name}::BNS-V2`, Cl.uint(id)),\n ],\n }\n );\n}\n\n/**\n * Set a name as your primary name.\n * @example\n * const txid = await setPrimary(client, {\n * name: \"alice.btc\",\n * });\n */\nexport async function setPrimary(\n client: Client,\n params: SetPrimaryParams\n): Promise<string> {\n const { name: nameInput, namespace: namespaceInput } = params;\n const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n if (!validateFQN(fqn)) {\n throw new Error(`Invalid name format: ${fqn}`);\n }\n\n const id = await getNameId(client, fqn);\n if (id === null) {\n throw new Error(`Name ${fqn} does not exist`);\n }\n\n const bns = getBnsContract(client);\n\n return bns.call[\"set-primary-name\"]({ primaryNameId: id });\n}\n\n/**\n * Get the zonefile for a name.\n * Zonefiles contain DNS-like records (up to 8192 bytes).\n *\n * @example\n * const zonefile = await getZonefile(client, \"alice.btc\");\n * if (zonefile) {\n * console.log(new TextDecoder().decode(zonefile));\n * }\n */\nexport async function getZonefile(\n client: Client,\n nameOrFQN: string\n): Promise<Uint8Array | null> {\n if (!validateFQN(nameOrFQN)) {\n throw new Error(`Invalid name format: ${nameOrFQN}`);\n }\n\n const { name, namespace } = parseFQN(nameOrFQN);\n const zonefile = getZonefileContract(client);\n\n try {\n const result = (await zonefile.read[\"resolve-name\"]({\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n })) as Uint8Array | null;\n\n return result;\n } catch {\n // Contract returns (err 101) when no zonefile is set\n return null;\n }\n}\n\n/**\n * Update or clear the zonefile for a name.\n * Only the name owner can update the zonefile.\n *\n * @example\n * // Update zonefile\n * await updateZonefile(client, {\n * name: \"alice.btc\",\n * zonefile: \"$ORIGIN alice.btc\\n$TTL 3600\\n...\",\n * });\n *\n * // Clear zonefile\n * await updateZonefile(client, {\n * name: \"alice.btc\",\n * zonefile: null,\n * });\n */\nexport async function updateZonefile(\n client: Client,\n params: UpdateZonefileParams\n): Promise<string> {\n const { name: nameInput, namespace: namespaceInput, zonefile } = params;\n const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n if (!validateFQN(fqn)) {\n throw new Error(`Invalid name format: ${fqn}`);\n }\n\n const { name, namespace } = parseFQN(fqn);\n\n // Verify ownership\n const currentOwner = await resolveName(client, fqn);\n if (!currentOwner) {\n throw new Error(`Name ${fqn} does not exist`);\n }\n\n const zonefileContract = getZonefileContract(client);\n\n // Convert zonefile to Uint8Array or null\n let zonefileBytes: Uint8Array | null = null;\n if (zonefile !== null) {\n zonefileBytes =\n typeof zonefile === \"string\"\n ? new TextEncoder().encode(zonefile)\n : zonefile;\n\n if (zonefileBytes.length > 8192) {\n throw new Error(\n `Zonefile too large: ${zonefileBytes.length} bytes (max 8192)`\n );\n }\n }\n\n return zonefileContract.call[\"update-zonefile\"]({\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n newZonefile: zonefileBytes,\n });\n}\n\n/**\n * Revoke (clear) the zonefile for a name.\n * Alias for updateZonefile with zonefile: null.\n *\n * @example\n * await revokeZonefile(client, \"alice.btc\");\n */\nexport async function revokeZonefile(\n client: Client,\n nameOrFQN: string\n): Promise<string> {\n if (!validateFQN(nameOrFQN)) {\n throw new Error(`Invalid name format: ${nameOrFQN}`);\n }\n\n const { name, namespace } = parseFQN(nameOrFQN);\n const zonefileContract = getZonefileContract(client);\n\n return zonefileContract.call[\"revoke-name\"]({\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n });\n}\n",
9
+ "import type { Client } from \"../clients/types.ts\";\nimport { getContract } from \"../actions/getContract.ts\";\nimport { BNS_ABI } from \"./abi.ts\";\nimport { ZONEFILE_RESOLVER_ABI } from \"./zonefile-abi.ts\";\nimport { BNS_CONTRACTS, ZONEFILE_RESOLVER_CONTRACTS } from \"./constants.ts\";\nimport {\n parseFQN,\n validateFQN,\n formatFQN,\n generateSalt,\n hashPreorder,\n} from \"./utils.ts\";\nimport type {\n ClaimFastParams,\n TransferParams,\n SetPrimaryParams,\n PreorderParams,\n RegisterParams,\n UpdateZonefileParams,\n} from \"./types.ts\";\nimport { Pc } from \"../postconditions/index.ts\";\nimport { Cl } from \"../clarity/index.ts\";\nimport { ContractResponseError } from \"../actions/getContract.ts\";\n\nfunction getBnsContract(client: Client) {\n if (!client.chain) {\n throw new Error(\"Client must have a chain configured\");\n }\n const network = client.chain.network;\n const contract =\n network === \"mainnet\" ? BNS_CONTRACTS.mainnet : BNS_CONTRACTS.testnet;\n\n return getContract({\n client,\n address: contract.address,\n name: contract.name,\n abi: BNS_ABI,\n });\n}\n\nfunction getZonefileContract(client: Client) {\n if (!client.chain) {\n throw new Error(\"Client must have a chain configured\");\n }\n const network = client.chain.network;\n const contract =\n network === \"mainnet\"\n ? ZONEFILE_RESOLVER_CONTRACTS.mainnet\n : ZONEFILE_RESOLVER_CONTRACTS.testnet;\n\n return getContract({\n client,\n address: contract.address,\n name: contract.name,\n abi: ZONEFILE_RESOLVER_ABI,\n });\n}\n\nfunction stringToBytes(str: string): Uint8Array {\n return new TextEncoder().encode(str);\n}\n\n/**\n * Resolve a BNS name to its owner address.\n * @example\n * const owner = await resolveName(client, \"alice.btc\");\n */\nexport async function resolveName(\n client: Client,\n nameOrFQN: string\n): Promise<string | null> {\n if (!validateFQN(nameOrFQN)) {\n throw new Error(`Invalid name format: ${nameOrFQN}`);\n }\n\n const { name, namespace } = parseFQN(nameOrFQN);\n const bns = getBnsContract(client);\n\n try {\n return (await bns.read.getOwnerName({\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n })) as string | null;\n } catch (e) {\n if (e instanceof ContractResponseError) return null;\n throw e;\n }\n}\n\n/**\n * Get the primary name for an address.\n * @example\n * const primary = await getPrimaryName(client, \"SP2J6...\");\n */\nexport async function getPrimaryName(\n client: Client,\n address: string\n): Promise<string | null> {\n const bns = getBnsContract(client);\n\n try {\n const result = (await bns.read.getPrimary({\n owner: address,\n })) as { name: Uint8Array; namespace: Uint8Array } | null;\n\n if (result === null) return null;\n\n const name = new TextDecoder().decode(result.name);\n const namespace = new TextDecoder().decode(result.namespace);\n\n return formatFQN(name, namespace);\n } catch (e) {\n if (e instanceof ContractResponseError) return null;\n throw e;\n }\n}\n\n/**\n * Check if a name is available for registration.\n * @example\n * const available = await canRegister(client, \"bob.btc\");\n */\nexport async function canRegister(\n client: Client,\n nameOrFQN: string\n): Promise<boolean> {\n if (!validateFQN(nameOrFQN)) {\n throw new Error(`Invalid name format: ${nameOrFQN}`);\n }\n\n const { name, namespace } = parseFQN(nameOrFQN);\n const bns = getBnsContract(client);\n\n // No can-register-name function — use can-resolve-name instead.\n // If it resolves, the name is taken. If it errors, it's available.\n try {\n await bns.read.canResolveName({\n namespace: stringToBytes(namespace),\n name: stringToBytes(name),\n });\n return false; // resolved = taken\n } catch {\n return true; // error = available\n }\n}\n\n/**\n * Get the price to register a name in microSTX.\n * @example\n * const price = await getNamePrice(client, \"bob.btc\");\n */\nexport async function getNamePrice(\n client: Client,\n nameOrFQN: string\n): Promise<bigint> {\n if (!validateFQN(nameOrFQN)) {\n throw new Error(`Invalid name format: ${nameOrFQN}`);\n }\n\n const { name, namespace } = parseFQN(nameOrFQN);\n const bns = getBnsContract(client);\n\n // get-name-price returns a nested response: (ok (ok uint))\n const result = (await bns.read.getNamePrice({\n namespace: stringToBytes(namespace),\n name: stringToBytes(name),\n })) as { ok: bigint } | { err: bigint };\n\n if (\"ok\" in result) return result.ok;\n throw new Error(`Failed to get name price for ${nameOrFQN}`);\n}\n\n/**\n * Get the NFT token ID for a name.\n * @example\n * const id = await getNameId(client, \"alice.btc\");\n */\nexport async function getNameId(\n client: Client,\n nameOrFQN: string\n): Promise<bigint | null> {\n if (!validateFQN(nameOrFQN)) {\n throw new Error(`Invalid name format: ${nameOrFQN}`);\n }\n\n const { name, namespace } = parseFQN(nameOrFQN);\n const bns = getBnsContract(client);\n\n try {\n return (await bns.read.getIdFromBns({\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n })) as bigint | null;\n } catch (e) {\n if (e instanceof ContractResponseError) return null;\n throw e;\n }\n}\n\n/**\n * Preorder a name (step 1 of secure registration).\n * Commits to a name with a salted hash, preventing front-running.\n * Must wait 1 Bitcoin block (~10 min) before calling register().\n *\n * @example\n * const { txid, salt } = await preorder(client, {\n * name: \"bob.btc\",\n * });\n * // Save salt! You'll need it for register()\n * // Wait ~10 minutes (1 Bitcoin block)\n * await register(client, { name: \"bob.btc\", salt });\n */\nexport async function preorder(\n client: Client,\n params: PreorderParams\n): Promise<{ txid: string; salt: Uint8Array }> {\n const { name: nameInput, namespace: namespaceInput, salt: providedSalt } = params;\n const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n if (!validateFQN(fqn)) {\n throw new Error(`Invalid name format: ${fqn}`);\n }\n\n const { name, namespace } = parseFQN(fqn);\n\n // Check availability\n const available = await canRegister(client, fqn);\n if (!available) {\n throw new Error(`Name ${fqn} is not available for registration`);\n }\n\n // Get price\n const price = await getNamePrice(client, fqn);\n\n // Generate or use provided salt\n const salt = providedSalt ?? generateSalt();\n\n // Calculate hash commitment\n const hashedSaltedFqn = hashPreorder(name, namespace, salt);\n\n const bns = getBnsContract(client);\n\n const txid = await bns.call.namePreorder(\n {\n hashedSaltedFqn,\n stxToBurn: price,\n },\n {\n postConditions: [Pc.principal(client.account!.address).willSendLte(price).ustx()],\n }\n );\n\n return { txid, salt };\n}\n\n/**\n * Register a name (step 2 of secure registration).\n * Reveals the name after preorder. Must wait 1 Bitcoin block after preorder.\n *\n * @example\n * const { txid } = await register(client, {\n * name: \"bob.btc\",\n * salt, // from preorder()\n * });\n */\nexport async function register(\n client: Client,\n params: RegisterParams\n): Promise<string> {\n const { name: nameInput, namespace: namespaceInput, salt } = params;\n const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n if (!validateFQN(fqn)) {\n throw new Error(`Invalid name format: ${fqn}`);\n }\n\n const { name, namespace } = parseFQN(fqn);\n\n const bns = getBnsContract(client);\n\n return bns.call.nameRegister({\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n salt,\n });\n}\n\n/**\n * Claim a name instantly (fast but snipeable).\n * Burns STX to register the name immediately.\n * @example\n * const txid = await claimFast(client, {\n * name: \"bob.btc\",\n * recipient: account.address,\n * });\n */\nexport async function claimFast(\n client: Client,\n params: ClaimFastParams\n): Promise<string> {\n const { name: nameInput, namespace: namespaceInput, recipient } = params;\n const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n if (!validateFQN(fqn)) {\n throw new Error(`Invalid name format: ${fqn}`);\n }\n\n const { name, namespace } = parseFQN(fqn);\n\n // Check availability\n const available = await canRegister(client, fqn);\n if (!available) {\n throw new Error(`Name ${fqn} is not available for registration`);\n }\n\n // Get price\n const price = await getNamePrice(client, fqn);\n\n const bns = getBnsContract(client);\n\n return bns.call.nameClaimFast(\n {\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n sendTo: recipient,\n },\n {\n postConditions: [Pc.principal(recipient).willSendLte(price).ustx()],\n }\n );\n}\n\n/**\n * Transfer a name to a new owner.\n * @example\n * const txid = await transfer(client, {\n * name: \"alice.btc\",\n * recipient: \"SP3FBR...\",\n * });\n */\nexport async function transfer(\n client: Client,\n params: TransferParams\n): Promise<string> {\n const { name: nameInput, namespace: namespaceInput, recipient } = params;\n const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n if (!validateFQN(fqn)) {\n throw new Error(`Invalid name format: ${fqn}`);\n }\n\n const id = await getNameId(client, fqn);\n if (id === null) {\n throw new Error(`Name ${fqn} does not exist`);\n }\n\n const currentOwner = await resolveName(client, fqn);\n if (!currentOwner) {\n throw new Error(`Cannot determine owner of ${fqn}`);\n }\n\n const bns = getBnsContract(client);\n if (!client.chain) {\n throw new Error(\"Client must have a chain configured\");\n }\n const network = client.chain.network;\n const contract =\n network === \"mainnet\" ? BNS_CONTRACTS.mainnet : BNS_CONTRACTS.testnet;\n\n return bns.call.transfer(\n {\n id,\n owner: currentOwner,\n recipient,\n },\n {\n postConditions: [\n Pc.principal(currentOwner)\n .willSendAsset()\n .nft(`${contract.address}.${contract.name}::BNS-V2`, Cl.uint(id)),\n ],\n }\n );\n}\n\n/**\n * Set a name as your primary name.\n * @example\n * const txid = await setPrimary(client, {\n * name: \"alice.btc\",\n * });\n */\nexport async function setPrimary(\n client: Client,\n params: SetPrimaryParams\n): Promise<string> {\n const { name: nameInput, namespace: namespaceInput } = params;\n const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n if (!validateFQN(fqn)) {\n throw new Error(`Invalid name format: ${fqn}`);\n }\n\n const id = await getNameId(client, fqn);\n if (id === null) {\n throw new Error(`Name ${fqn} does not exist`);\n }\n\n const bns = getBnsContract(client);\n\n return bns.call.setPrimaryName({ primaryNameId: id });\n}\n\n/**\n * Get the zonefile for a name.\n * Zonefiles contain DNS-like records (up to 8192 bytes).\n *\n * @example\n * const zonefile = await getZonefile(client, \"alice.btc\");\n * if (zonefile) {\n * console.log(new TextDecoder().decode(zonefile));\n * }\n */\nexport async function getZonefile(\n client: Client,\n nameOrFQN: string\n): Promise<Uint8Array | null> {\n if (!validateFQN(nameOrFQN)) {\n throw new Error(`Invalid name format: ${nameOrFQN}`);\n }\n\n const { name, namespace } = parseFQN(nameOrFQN);\n const zonefile = getZonefileContract(client);\n\n try {\n const result = (await zonefile.read.resolveName({\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n })) as Uint8Array | null;\n\n return result;\n } catch {\n // Contract returns (err 101) when no zonefile is set\n return null;\n }\n}\n\n/**\n * Update or clear the zonefile for a name.\n * Only the name owner can update the zonefile.\n *\n * @example\n * // Update zonefile\n * await updateZonefile(client, {\n * name: \"alice.btc\",\n * zonefile: \"$ORIGIN alice.btc\\n$TTL 3600\\n...\",\n * });\n *\n * // Clear zonefile\n * await updateZonefile(client, {\n * name: \"alice.btc\",\n * zonefile: null,\n * });\n */\nexport async function updateZonefile(\n client: Client,\n params: UpdateZonefileParams\n): Promise<string> {\n const { name: nameInput, namespace: namespaceInput, zonefile } = params;\n const fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n if (!validateFQN(fqn)) {\n throw new Error(`Invalid name format: ${fqn}`);\n }\n\n const { name, namespace } = parseFQN(fqn);\n\n // Verify ownership\n const currentOwner = await resolveName(client, fqn);\n if (!currentOwner) {\n throw new Error(`Name ${fqn} does not exist`);\n }\n\n const zonefileContract = getZonefileContract(client);\n\n // Convert zonefile to Uint8Array or null\n let zonefileBytes: Uint8Array | null = null;\n if (zonefile !== null) {\n zonefileBytes =\n typeof zonefile === \"string\"\n ? new TextEncoder().encode(zonefile)\n : zonefile;\n\n if (zonefileBytes.length > 8192) {\n throw new Error(\n `Zonefile too large: ${zonefileBytes.length} bytes (max 8192)`\n );\n }\n }\n\n return zonefileContract.call.updateZonefile({\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n newZonefile: zonefileBytes,\n });\n}\n\n/**\n * Revoke (clear) the zonefile for a name.\n * Alias for updateZonefile with zonefile: null.\n *\n * @example\n * await revokeZonefile(client, \"alice.btc\");\n */\nexport async function revokeZonefile(\n client: Client,\n nameOrFQN: string\n): Promise<string> {\n if (!validateFQN(nameOrFQN)) {\n throw new Error(`Invalid name format: ${nameOrFQN}`);\n }\n\n const { name, namespace } = parseFQN(nameOrFQN);\n const zonefileContract = getZonefileContract(client);\n\n return zonefileContract.call.revokeName({\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n });\n}\n",
10
10
  "import type { Client } from \"../clients/types.ts\";\nimport {\n resolveName,\n getPrimaryName,\n canRegister,\n getNamePrice,\n getNameId,\n preorder,\n register,\n claimFast,\n transfer,\n setPrimary,\n getZonefile,\n updateZonefile,\n revokeZonefile,\n} from \"./actions.ts\";\nimport type {\n ClaimFastParams,\n TransferParams,\n SetPrimaryParams,\n PreorderParams,\n RegisterParams,\n UpdateZonefileParams,\n} from \"./types.ts\";\n\nexport type {\n ClaimFastParams,\n TransferParams,\n SetPrimaryParams,\n PreorderParams,\n RegisterParams,\n UpdateZonefileParams,\n};\n\n/** Actions provided by the BNS extension. */\nexport type BnsActions = {\n bns: {\n resolveName: (name: string) => Promise<string | null>;\n getPrimaryName: (address: string) => Promise<string | null>;\n canRegister: (name: string) => Promise<boolean>;\n getNamePrice: (name: string) => Promise<bigint>;\n getNameId: (name: string) => Promise<bigint | null>;\n preorder: (params: PreorderParams) => Promise<{ txid: string; salt: Uint8Array }>;\n register: (params: RegisterParams) => Promise<string>;\n claimFast: (params: ClaimFastParams) => Promise<string>;\n transfer: (params: TransferParams) => Promise<string>;\n setPrimary: (params: SetPrimaryParams) => Promise<string>;\n getZonefile: (name: string) => Promise<Uint8Array | null>;\n updateZonefile: (params: UpdateZonefileParams) => Promise<string>;\n revokeZonefile: (name: string) => Promise<string>;\n };\n};\n\nexport { BNS_CONTRACTS, ZONEFILE_RESOLVER_CONTRACTS } from \"./constants.ts\";\nexport {\n parseFQN,\n formatFQN,\n validateName,\n validateNamespace,\n validateFQN,\n generateSalt,\n hashPreorder,\n} from \"./utils.ts\";\n\n/**\n * BNS v2 extension for Stacks client.\n * Provides name resolution, registration, and management.\n *\n * @example\n * import { createWalletClient, http, mainnet } from \"stacks\";\n * import { bns } from \"stacks/bns\";\n * import { privateKeyToAccount } from \"stacks/accounts\";\n *\n * const account = privateKeyToAccount(\"0x...\");\n * const client = createWalletClient({\n * account,\n * chain: mainnet,\n * transport: http(),\n * }).extend(bns());\n *\n * // Resolve names\n * const owner = await client.bns.resolveName(\"alice.btc\");\n *\n * // Register names\n * const txid = await client.bns.claimFast({\n * name: \"bob.btc\",\n * recipient: account.address,\n * });\n *\n * // Transfer names\n * await client.bns.transfer({\n * name: \"alice.btc\",\n * recipient: \"SP3FBR...\",\n * });\n */\nexport function bns(): (client: Client) => BnsActions {\n return (client: Client) => ({\n bns: {\n /**\n * Resolve a BNS name to its owner address.\n * @param name - Fully qualified name (e.g., \"alice.btc\" or \"alice\")\n * @returns Owner address or null if name doesn't exist\n */\n resolveName: (name: string) => resolveName(client, name),\n\n /**\n * Get the primary name for an address.\n * @param address - Stacks address\n * @returns Primary name or null if no primary set\n */\n getPrimaryName: (address: string) => getPrimaryName(client, address),\n\n /**\n * Check if a name is available for registration.\n * @param name - Fully qualified name to check\n * @returns True if available, false otherwise\n */\n canRegister: (name: string) => canRegister(client, name),\n\n /**\n * Get the price to register a name in microSTX.\n * @param name - Fully qualified name\n * @returns Price in microSTX\n */\n getNamePrice: (name: string) => getNamePrice(client, name),\n\n /**\n * Get the NFT token ID for a name.\n * @param name - Fully qualified name\n * @returns Token ID or null if name doesn't exist\n */\n getNameId: (name: string) => getNameId(client, name),\n\n /**\n * Preorder a name (step 1 of secure registration).\n * Commits to a name with a salted hash, preventing front-running.\n * Must wait 1 Bitcoin block (~10 min) before calling register().\n * Requires wallet client with account.\n * @param params - Preorder parameters\n * @returns Transaction ID and salt (save salt for register step!)\n */\n preorder: (params: PreorderParams) => preorder(client, params),\n\n /**\n * Register a name (step 2 of secure registration).\n * Reveals the name after preorder. Must wait 1 Bitcoin block after preorder.\n * Requires wallet client with account.\n * @param params - Register parameters (must include salt from preorder)\n * @returns Transaction ID\n */\n register: (params: RegisterParams) => register(client, params),\n\n /**\n * Claim a name instantly (fast but snipeable).\n * Burns STX to register the name immediately.\n * Requires wallet client with account.\n * @param params - Registration parameters\n * @returns Transaction ID\n */\n claimFast: (params: ClaimFastParams) => claimFast(client, params),\n\n /**\n * Transfer a name to a new owner.\n * Requires wallet client with account.\n * @param params - Transfer parameters\n * @returns Transaction ID\n */\n transfer: (params: TransferParams) => transfer(client, params),\n\n /**\n * Set a name as your primary name.\n * Requires wallet client with account.\n * @param params - Primary name parameters\n * @returns Transaction ID\n */\n setPrimary: (params: SetPrimaryParams) => setPrimary(client, params),\n\n /**\n * Get the zonefile for a name.\n * Zonefiles contain DNS-like records (up to 8192 bytes).\n * @param name - Fully qualified name\n * @returns Zonefile bytes or null if not set\n */\n getZonefile: (name: string) => getZonefile(client, name),\n\n /**\n * Update or clear the zonefile for a name.\n * Only the name owner can update the zonefile.\n * Requires wallet client with account.\n * @param params - Zonefile update parameters\n * @returns Transaction ID\n */\n updateZonefile: (params: UpdateZonefileParams) =>\n updateZonefile(client, params),\n\n /**\n * Revoke (clear) the zonefile for a name.\n * Requires wallet client with account.\n * @param name - Fully qualified name\n * @returns Transaction ID\n */\n revokeZonefile: (name: string) => revokeZonefile(client, name),\n },\n });\n}\n"
11
11
  ],
12
- "mappings": "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",
13
- "debugId": "3B5D8D19A6967B5564756E2164756E21",
12
+ "mappings": "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",
13
+ "debugId": "5838568A4B2757A664756E2164756E21",
14
14
  "names": []
15
15
  }
@@ -5,7 +5,7 @@ import {
5
5
  mocknet,
6
6
  testnet
7
7
  } from "../../shared/stacks-qt8ehebn.js";
8
- import"../../shared/stacks-8m9byk2j.js";
8
+ import"../../shared/stacks-njvyj3ab.js";
9
9
  export {
10
10
  testnet,
11
11
  mocknet,
@@ -1,3 +1,328 @@
1
+ // src/clarity/index.ts
2
+ var exports_clarity = {};
3
+ __export(exports_clarity, {
4
+ validateArgsArray: () => validateArgsArray,
5
+ validateArgs: () => validateArgs,
6
+ uintCV: () => uintCV,
7
+ tupleCV: () => tupleCV,
8
+ trueCV: () => trueCV,
9
+ toCamelCase: () => toCamelCase,
10
+ stringUtf8CV: () => stringUtf8CV,
11
+ stringAsciiCV: () => stringAsciiCV,
12
+ standardPrincipalCV: () => standardPrincipalCV,
13
+ someCV: () => someCV,
14
+ sip013Abi: () => sip013Abi,
15
+ sip010Abi: () => sip010Abi,
16
+ sip009Abi: () => sip009Abi,
17
+ serializeCVBytes: () => serializeCVBytes,
18
+ serializeCV: () => serializeCV,
19
+ responseOkCV: () => responseOkCV,
20
+ responseErrorCV: () => responseErrorCV,
21
+ prettyPrint: () => prettyPrint,
22
+ prepareArgs: () => prepareArgs,
23
+ noneCV: () => noneCV,
24
+ listCV: () => listCV,
25
+ jsToClarityValue: () => jsToClarityValue,
26
+ jsToClarity: () => jsToClarity,
27
+ isUint8Array: () => isUint8Array,
28
+ isUint128: () => isUint128,
29
+ isTraitReference: () => isTraitReference,
30
+ isString: () => isString,
31
+ isStandardPrincipal: () => isStandardPrincipal,
32
+ isResponse: () => isResponse,
33
+ isPrincipal: () => isPrincipal,
34
+ isOptional: () => isOptional,
35
+ isOkResponse: () => isOkResponse,
36
+ isInt128: () => isInt128,
37
+ isErrResponse: () => isErrResponse,
38
+ isContractPrincipal: () => isContractPrincipal,
39
+ isBool: () => isBool,
40
+ isArray: () => isArray,
41
+ isAbiTuple: () => isAbiTuple,
42
+ isAbiTraitReference: () => isAbiTraitReference,
43
+ isAbiStringUtf8: () => isAbiStringUtf8,
44
+ isAbiStringAscii: () => isAbiStringAscii,
45
+ isAbiResponse: () => isAbiResponse,
46
+ isAbiOptional: () => isAbiOptional,
47
+ isAbiList: () => isAbiList,
48
+ isAbiBuffer: () => isAbiBuffer,
49
+ intCV: () => intCV,
50
+ falseCV: () => falseCV,
51
+ deserializeCVBytes: () => deserializeCVBytes,
52
+ deserializeCV: () => deserializeCV,
53
+ cvToValue: () => cvToValue,
54
+ cvToJSON: () => cvToJSON,
55
+ contractPrincipalCV: () => contractPrincipalCV,
56
+ clarityValueToJS: () => clarityValueToJS,
57
+ clarityTypeFromByte: () => clarityTypeFromByte,
58
+ bufferCV: () => bufferCV,
59
+ boolCV: () => boolCV,
60
+ SIP013_ABI: () => SIP013_ABI,
61
+ SIP010_ABI: () => SIP010_ABI,
62
+ SIP009_ABI: () => SIP009_ABI,
63
+ ClarityWireType: () => ClarityWireType,
64
+ ClarityConversionError: () => ClarityConversionError,
65
+ Cl: () => Cl,
66
+ CONTRACT_NAME_REGEX: () => CONTRACT_NAME_REGEX
67
+ });
68
+ module.exports = __toCommonJS(exports_clarity);
1
69
 
2
- //# debugId=DDDF1E5FDE06A0EC64756E2164756E21
70
+ // src/clarity/prettyPrint.ts
71
+ function prettyPrint(val, encoding = "hex") {
72
+ switch (val.type) {
73
+ case "true":
74
+ return "true";
75
+ case "false":
76
+ return "false";
77
+ case "int":
78
+ return val.value.toString();
79
+ case "uint":
80
+ return `u${val.value.toString()}`;
81
+ case "buffer":
82
+ if (encoding === "tryAscii") {
83
+ const str = bytesToAscii(hexToBytes(val.value));
84
+ if (/^[ -~]*$/.test(str))
85
+ return JSON.stringify(str);
86
+ }
87
+ return `0x${val.value}`;
88
+ case "none":
89
+ return "none";
90
+ case "some":
91
+ return `(some ${prettyPrint(val.value, encoding)})`;
92
+ case "ok":
93
+ return `(ok ${prettyPrint(val.value, encoding)})`;
94
+ case "err":
95
+ return `(err ${prettyPrint(val.value, encoding)})`;
96
+ case "address":
97
+ case "contract":
98
+ return val.value;
99
+ case "list":
100
+ return `(list ${val.value.map((v) => prettyPrint(v, encoding)).join(" ")})`;
101
+ case "tuple":
102
+ return `(tuple ${Object.keys(val.value).map((key) => `(${key} ${prettyPrint(val.value[key], encoding)})`).join(" ")})`;
103
+ case "ascii":
104
+ return `"${val.value}"`;
105
+ case "utf8":
106
+ return `u"${val.value}"`;
107
+ }
108
+ }
109
+ function cvToJSON(val) {
110
+ switch (val.type) {
111
+ case "true":
112
+ return { type: "bool", value: true };
113
+ case "false":
114
+ return { type: "bool", value: false };
115
+ case "int":
116
+ return { type: "int", value: val.value.toString() };
117
+ case "uint":
118
+ return { type: "uint", value: val.value.toString() };
119
+ case "buffer":
120
+ return { type: `(buff ${Math.ceil(val.value.length / 2)})`, value: `0x${val.value}` };
121
+ case "none":
122
+ return { type: "(optional none)", value: null };
123
+ case "some":
124
+ return { type: `(optional)`, value: cvToJSON(val.value) };
125
+ case "ok":
126
+ return { type: "(response)", value: cvToJSON(val.value), success: true };
127
+ case "err":
128
+ return { type: "(response)", value: cvToJSON(val.value), success: false };
129
+ case "address":
130
+ case "contract":
131
+ return { type: "principal", value: val.value };
132
+ case "list":
133
+ return { type: "(list)", value: val.value.map(cvToJSON) };
134
+ case "tuple": {
135
+ const result = {};
136
+ for (const key of Object.keys(val.value)) {
137
+ result[key] = cvToJSON(val.value[key]);
138
+ }
139
+ return { type: "(tuple)", value: result };
140
+ }
141
+ case "ascii":
142
+ return { type: `(string-ascii ${asciiToBytes(val.value).length})`, value: val.value };
143
+ case "utf8":
144
+ return { type: `(string-utf8 ${utf8ToBytes(val.value).length})`, value: val.value };
145
+ }
146
+ }
147
+ function cvToValue(val) {
148
+ switch (val.type) {
149
+ case "true":
150
+ return true;
151
+ case "false":
152
+ return false;
153
+ case "int":
154
+ case "uint":
155
+ return val.value;
156
+ case "buffer":
157
+ return `0x${val.value}`;
158
+ case "none":
159
+ return null;
160
+ case "some":
161
+ return cvToValue(val.value);
162
+ case "ok":
163
+ case "err":
164
+ return cvToValue(val.value);
165
+ case "address":
166
+ case "contract":
167
+ return val.value;
168
+ case "list":
169
+ return val.value.map(cvToValue);
170
+ case "tuple": {
171
+ const result = {};
172
+ for (const key of Object.keys(val.value)) {
173
+ result[key] = cvToValue(val.value[key]);
174
+ }
175
+ return result;
176
+ }
177
+ case "ascii":
178
+ case "utf8":
179
+ return val.value;
180
+ }
181
+ }
182
+ // src/clarity/abi/converters.ts
183
+ class ClarityConversionError extends Error {
184
+ type;
185
+ value;
186
+ constructor(message, type, value) {
187
+ super(message);
188
+ this.type = type;
189
+ this.value = value;
190
+ this.name = "ClarityConversionError";
191
+ }
192
+ }
193
+ function jsToClarity(type, value) {
194
+ if (type === "none")
195
+ return null;
196
+ if (type === "uint128") {
197
+ if (!isUint128(value))
198
+ throw new ClarityConversionError("Invalid uint128 value", type, value);
199
+ return value;
200
+ }
201
+ if (type === "int128") {
202
+ if (!isInt128(value))
203
+ throw new ClarityConversionError("Invalid int128 value", type, value);
204
+ return value;
205
+ }
206
+ if (type === "bool") {
207
+ if (!isBool(value))
208
+ throw new ClarityConversionError("Invalid bool value", type, value);
209
+ return value;
210
+ }
211
+ if (type === "principal") {
212
+ if (!isPrincipal(value))
213
+ throw new ClarityConversionError("Invalid principal value", type, value);
214
+ return value;
215
+ }
216
+ if (type === "trait_reference") {
217
+ if (!isPrincipal(value))
218
+ throw new ClarityConversionError("Invalid trait_reference value", type, value);
219
+ return value;
220
+ }
221
+ if (isAbiStringAscii(type)) {
222
+ if (!isString(value))
223
+ throw new ClarityConversionError("Invalid string-ascii value", type, value);
224
+ const str = value;
225
+ for (let i = 0;i < str.length; i++) {
226
+ if (str.charCodeAt(i) > 127) {
227
+ throw new ClarityConversionError(`Non-ASCII character at position ${i}: '${str[i]}' (code ${str.charCodeAt(i)})`, type, value);
228
+ }
229
+ }
230
+ if (str.length > type["string-ascii"].length) {
231
+ throw new ClarityConversionError(`String length ${str.length} exceeds max ${type["string-ascii"].length}`, type, value);
232
+ }
233
+ return value;
234
+ }
235
+ if (isAbiStringUtf8(type)) {
236
+ if (!isString(value))
237
+ throw new ClarityConversionError("Invalid string-utf8 value", type, value);
238
+ const str = value;
239
+ const byteLength = new TextEncoder().encode(str).length;
240
+ if (byteLength > type["string-utf8"].length) {
241
+ throw new ClarityConversionError(`String byte length ${byteLength} exceeds max ${type["string-utf8"].length}`, type, value);
242
+ }
243
+ return value;
244
+ }
245
+ if (isAbiBuffer(type)) {
246
+ if (!isUint8Array(value))
247
+ throw new ClarityConversionError("Invalid buffer value", type, value);
248
+ const buff = value;
249
+ if (buff.length > type.buff.length) {
250
+ throw new ClarityConversionError(`Buffer length ${buff.length} exceeds max ${type.buff.length}`, type, value);
251
+ }
252
+ return value;
253
+ }
254
+ if (isAbiList(type)) {
255
+ if (!Array.isArray(value))
256
+ throw new ClarityConversionError("Expected array for list type", type, value);
257
+ if (value.length > type.list.length) {
258
+ throw new ClarityConversionError(`List length ${value.length} exceeds max ${type.list.length}`, type, value);
259
+ }
260
+ return value.map((item) => jsToClarity(type.list.type, item));
261
+ }
262
+ if (isAbiTuple(type)) {
263
+ if (typeof value !== "object" || value === null)
264
+ throw new ClarityConversionError("Expected object for tuple type", type, value);
265
+ const result = {};
266
+ for (const field of type.tuple) {
267
+ const camelKey = toCamelCase(field.name);
268
+ const hasOriginal = field.name in value;
269
+ const hasCamel = camelKey in value;
270
+ if (!hasOriginal && !hasCamel) {
271
+ throw new ClarityConversionError(`Missing tuple field: ${field.name}`, type, value);
272
+ }
273
+ const fieldValue = hasOriginal ? value[field.name] : value[camelKey];
274
+ result[field.name] = jsToClarity(field.type, fieldValue);
275
+ }
276
+ return result;
277
+ }
278
+ if (isAbiOptional(type)) {
279
+ if (value === null || value === undefined)
280
+ return null;
281
+ return jsToClarity(type.optional, value);
282
+ }
283
+ if (isAbiResponse(type)) {
284
+ if (typeof value !== "object" || value === null)
285
+ throw new ClarityConversionError("Expected object for response type", type, value);
286
+ const hasOk = "ok" in value;
287
+ const hasErr = "err" in value;
288
+ if (hasOk && !hasErr) {
289
+ return {
290
+ ok: jsToClarity(type.response.ok, value.ok)
291
+ };
292
+ }
293
+ if (hasErr && !hasOk) {
294
+ return {
295
+ err: jsToClarity(type.response.error, value.err)
296
+ };
297
+ }
298
+ throw new ClarityConversionError("Response must have exactly 'ok' or 'err' property", type, value);
299
+ }
300
+ throw new ClarityConversionError(`Unknown Clarity type`, type, value);
301
+ }
302
+ function prepareArgs(func, args) {
303
+ return func.args.map((arg) => {
304
+ if (!(arg.name in args)) {
305
+ throw new ClarityConversionError(`Missing argument: ${arg.name}`, arg.type, undefined);
306
+ }
307
+ return jsToClarity(arg.type, args[arg.name]);
308
+ });
309
+ }
310
+ function validateArgs(func, args) {
311
+ for (const arg of func.args) {
312
+ if (!(arg.name in args)) {
313
+ throw new ClarityConversionError(`Missing argument: ${arg.name}`, arg.type, undefined);
314
+ }
315
+ jsToClarity(arg.type, args[arg.name]);
316
+ }
317
+ }
318
+ function validateArgsArray(func, args) {
319
+ if (args.length !== func.args.length) {
320
+ throw new ClarityConversionError(`Expected ${func.args.length} arguments, got ${args.length}`, func.args[0]?.type ?? "bool", args);
321
+ }
322
+ func.args.forEach((arg, i) => {
323
+ jsToClarity(arg.type, args[i]);
324
+ });
325
+ }
326
+
327
+ //# debugId=2002F9940E8CCE2964756E2164756E21
3
328
  //# sourceMappingURL=index.cjs.map