{
  "version": 3,
  "sources": ["../src/bns/abi.ts", "../src/bns/constants.ts", "../src/bns/utils.ts", "../src/bns/zonefile-abi.ts", "../src/bns/actions.ts", "../src/bns/index.ts"],
  "sourcesContent": [
    "import type { AbiContract } from \"../clarity/abi/contract.ts\";\n\nexport const BNS_ABI = {\n\tfunctions: [\n\t\t// Name resolution (read-only)\n\t\t{\n\t\t\tname: \"get-owner-name\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [\n\t\t\t\t{ name: \"name\", type: { buff: { length: 48 } } },\n\t\t\t\t{ name: \"namespace\", type: { buff: { length: 20 } } },\n\t\t\t],\n\t\t\toutputs: {\n\t\t\t\tresponse: {\n\t\t\t\t\tok: { optional: \"principal\" },\n\t\t\t\t\terror: \"uint128\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"get-id-from-bns\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [\n\t\t\t\t{ name: \"name\", type: { buff: { length: 48 } } },\n\t\t\t\t{ name: \"namespace\", type: { buff: { length: 20 } } },\n\t\t\t],\n\t\t\toutputs: { optional: \"uint128\" },\n\t\t},\n\t\t{\n\t\t\tname: \"get-bns-from-id\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [{ name: \"id\", type: \"uint128\" }],\n\t\t\toutputs: {\n\t\t\t\toptional: {\n\t\t\t\t\ttuple: [\n\t\t\t\t\t\t{ name: \"name\", type: { buff: { length: 48 } } },\n\t\t\t\t\t\t{ name: \"namespace\", type: { buff: { length: 20 } } },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"get-owner\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [{ name: \"id\", type: \"uint128\" }],\n\t\t\toutputs: {\n\t\t\t\tresponse: {\n\t\t\t\t\tok: { optional: \"principal\" },\n\t\t\t\t\terror: \"none\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"get-primary\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [{ name: \"owner\", type: \"principal\" }],\n\t\t\toutputs: {\n\t\t\t\tresponse: {\n\t\t\t\t\tok: {\n\t\t\t\t\t\toptional: {\n\t\t\t\t\t\t\ttuple: [\n\t\t\t\t\t\t\t\t{ name: \"name\", type: { buff: { length: 48 } } },\n\t\t\t\t\t\t\t\t{ name: \"namespace\", type: { buff: { length: 20 } } },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\terror: \"none\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"can-resolve-name\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [\n\t\t\t\t{ name: \"namespace\", type: { buff: { length: 20 } } },\n\t\t\t\t{ name: \"name\", type: { buff: { length: 48 } } },\n\t\t\t],\n\t\t\toutputs: {\n\t\t\t\tresponse: {\n\t\t\t\t\tok: {\n\t\t\t\t\t\ttuple: [\n\t\t\t\t\t\t\t{ name: \"renewal\", type: \"uint128\" },\n\t\t\t\t\t\t\t{ name: \"owner\", type: \"principal\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\terror: \"uint128\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"get-renewal-height\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [{ name: \"id\", type: \"uint128\" }],\n\t\t\toutputs: { response: { ok: \"uint128\", error: \"uint128\" } },\n\t\t},\n\t\t{\n\t\t\tname: \"get-name-price\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [\n\t\t\t\t{ name: \"namespace\", type: { buff: { length: 20 } } },\n\t\t\t\t{ name: \"name\", type: { buff: { length: 48 } } },\n\t\t\t],\n\t\t\toutputs: {\n\t\t\t\tresponse: {\n\t\t\t\t\tok: { response: { ok: \"uint128\", error: \"uint128\" } },\n\t\t\t\t\terror: \"uint128\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"get-bns-info\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [\n\t\t\t\t{ name: \"name\", type: { buff: { length: 48 } } },\n\t\t\t\t{ name: \"namespace\", type: { buff: { length: 20 } } },\n\t\t\t],\n\t\t\toutputs: {\n\t\t\t\toptional: {\n\t\t\t\t\ttuple: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"hashed-salted-fqn-preorder\",\n\t\t\t\t\t\t\ttype: { optional: { buff: { length: 20 } } },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ name: \"imported-at\", type: { optional: \"uint128\" } },\n\t\t\t\t\t\t{ name: \"owner\", type: \"principal\" },\n\t\t\t\t\t\t{ name: \"preordered-by\", type: { optional: \"principal\" } },\n\t\t\t\t\t\t{ name: \"registered-at\", type: { optional: \"uint128\" } },\n\t\t\t\t\t\t{ name: \"renewal-height\", type: \"uint128\" },\n\t\t\t\t\t\t{ name: \"stx-burn\", type: \"uint128\" },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\n\t\t// Name registration (public)\n\t\t{\n\t\t\tname: \"name-preorder\",\n\t\t\taccess: \"public\",\n\t\t\targs: [\n\t\t\t\t{ name: \"hashed-salted-fqn\", type: { buff: { length: 20 } } },\n\t\t\t\t{ name: \"stx-to-burn\", type: \"uint128\" },\n\t\t\t],\n\t\t\toutputs: { response: { ok: \"uint128\", error: \"uint128\" } },\n\t\t},\n\t\t{\n\t\t\tname: \"name-register\",\n\t\t\taccess: \"public\",\n\t\t\targs: [\n\t\t\t\t{ name: \"namespace\", type: { buff: { length: 20 } } },\n\t\t\t\t{ name: \"name\", type: { buff: { length: 48 } } },\n\t\t\t\t{ name: \"salt\", type: { buff: { length: 20 } } },\n\t\t\t],\n\t\t\toutputs: { response: { ok: \"uint128\", error: \"uint128\" } },\n\t\t},\n\t\t{\n\t\t\tname: \"name-claim-fast\",\n\t\t\taccess: \"public\",\n\t\t\targs: [\n\t\t\t\t{ name: \"name\", type: { buff: { length: 48 } } },\n\t\t\t\t{ name: \"namespace\", type: { buff: { length: 20 } } },\n\t\t\t\t{ name: \"send-to\", type: \"principal\" },\n\t\t\t],\n\t\t\toutputs: { response: { ok: \"uint128\", error: \"uint128\" } },\n\t\t},\n\t\t{\n\t\t\tname: \"name-renewal\",\n\t\t\taccess: \"public\",\n\t\t\targs: [\n\t\t\t\t{ name: \"namespace\", type: { buff: { length: 20 } } },\n\t\t\t\t{ name: \"name\", type: { buff: { length: 48 } } },\n\t\t\t],\n\t\t\toutputs: { response: { ok: \"bool\", error: \"uint128\" } },\n\t\t},\n\n\t\t// Name management (public)\n\t\t{\n\t\t\tname: \"transfer\",\n\t\t\taccess: \"public\",\n\t\t\targs: [\n\t\t\t\t{ name: \"id\", type: \"uint128\" },\n\t\t\t\t{ name: \"owner\", type: \"principal\" },\n\t\t\t\t{ name: \"recipient\", type: \"principal\" },\n\t\t\t],\n\t\t\toutputs: { response: { ok: \"bool\", error: \"uint128\" } },\n\t\t},\n\t\t{\n\t\t\tname: \"set-primary-name\",\n\t\t\taccess: \"public\",\n\t\t\targs: [{ name: \"primary-name-id\", type: \"uint128\" }],\n\t\t\toutputs: { response: { ok: \"bool\", error: \"uint128\" } },\n\t\t},\n\t],\n\tnon_fungible_tokens: [{ name: \"BNS-V2\", type: \"uint128\" }],\n} as const satisfies AbiContract;\n",
    "export const BNS_CONTRACTS = {\n\tmainnet: {\n\t\taddress: \"SP2QEZ06AGJ3RKJPBV14SY1V5BBFNAW33D96YPGZF\",\n\t\tname: \"BNS-V2\",\n\t},\n\ttestnet: {\n\t\taddress: \"ST2QEZ06AGJ3RKJPBV14SY1V5BBFNAW33D9SZJQ0M\",\n\t\tname: \"BNS-V2\",\n\t},\n} as const;\n\nexport const ZONEFILE_RESOLVER_CONTRACTS = {\n\tmainnet: {\n\t\taddress: \"SP2QEZ06AGJ3RKJPBV14SY1V5BBFNAW33D96YPGZF\",\n\t\tname: \"zonefile-resolver\",\n\t},\n\ttestnet: {\n\t\taddress: \"ST2QEZ06AGJ3RKJPBV14SY1V5BBFNAW33D9SZJQ0M\",\n\t\tname: \"zonefile-resolver\",\n\t},\n} as const;\n\n// BNS v2 uses .btc namespace primarily\nexport const DEFAULT_NAMESPACE = \"btc\";\n",
    "import { hash160 } from \"../utils/hash.ts\";\nimport { DEFAULT_NAMESPACE } from \"./constants.ts\";\nimport type { FullyQualifiedName } from \"./types.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\tconst parts = fqn.split(\".\");\n\n\tif (parts.length === 1) {\n\t\treturn {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\tname: parts[0]!,\n\t\t\tnamespace: DEFAULT_NAMESPACE,\n\t\t};\n\t}\n\n\tif (parts.length === 2) {\n\t\treturn {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\tname: parts[0]!,\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\tnamespace: parts[1]!,\n\t\t};\n\t}\n\n\tthrow new Error(\n\t\t`Invalid fully qualified name: ${fqn}. Expected format: \"name.namespace\" or \"name\"`,\n\t);\n}\n\n/**\n * Format name components into FQN string.\n */\nexport function formatFQN(name: string, namespace: string): string {\n\treturn `${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\tif (name.length < 1 || name.length > 48) return false;\n\n\tconst regex = /^[a-z0-9]([a-z0-9_-]*[a-z0-9])?$/;\n\treturn 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\tif (namespace.length < 1 || namespace.length > 20) return false;\n\n\tconst regex = /^[a-z0-9]+$/;\n\treturn regex.test(namespace);\n}\n\n/**\n * Validate a fully qualified name.\n */\nexport function validateFQN(fqn: string): boolean {\n\ttry {\n\t\tconst { name, namespace } = parseFQN(fqn);\n\t\treturn validateName(name) && validateNamespace(namespace);\n\t} catch {\n\t\treturn false;\n\t}\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\tconst salt = new Uint8Array(20);\n\tcrypto.getRandomValues(salt);\n\treturn 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\tname: string,\n\tnamespace: string,\n\tsalt: Uint8Array,\n): Uint8Array {\n\tconst nameBytes = new TextEncoder().encode(name);\n\tconst namespaceBytes = new TextEncoder().encode(namespace);\n\n\t// Concatenate: name + namespace + salt\n\tconst combined = new Uint8Array(\n\t\tnameBytes.length + namespaceBytes.length + salt.length,\n\t);\n\tcombined.set(nameBytes, 0);\n\tcombined.set(namespaceBytes, nameBytes.length);\n\tcombined.set(salt, nameBytes.length + namespaceBytes.length);\n\n\treturn hash160(combined);\n}\n",
    "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\tfunctions: [\n\t\t{\n\t\t\tname: \"resolve-name\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [\n\t\t\t\t{ name: \"name\", type: { buff: { length: 48 } } },\n\t\t\t\t{ name: \"namespace\", type: { buff: { length: 20 } } },\n\t\t\t],\n\t\t\toutputs: {\n\t\t\t\tresponse: {\n\t\t\t\t\tok: { optional: { buff: { length: 8192 } } },\n\t\t\t\t\terror: \"uint128\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"update-zonefile\",\n\t\t\taccess: \"public\",\n\t\t\targs: [\n\t\t\t\t{ name: \"name\", type: { buff: { length: 48 } } },\n\t\t\t\t{ name: \"namespace\", type: { buff: { length: 20 } } },\n\t\t\t\t{\n\t\t\t\t\tname: \"new-zonefile\",\n\t\t\t\t\ttype: { optional: { buff: { length: 8192 } } },\n\t\t\t\t},\n\t\t\t],\n\t\t\toutputs: { response: { ok: \"bool\", error: \"uint128\" } },\n\t\t},\n\t\t{\n\t\t\tname: \"revoke-name\",\n\t\t\taccess: \"public\",\n\t\t\targs: [\n\t\t\t\t{ name: \"name\", type: { buff: { length: 48 } } },\n\t\t\t\t{ name: \"namespace\", type: { buff: { length: 20 } } },\n\t\t\t],\n\t\t\toutputs: { response: { ok: \"bool\", error: \"uint128\" } },\n\t\t},\n\t],\n} as const satisfies AbiContract;\n",
    "import { getContract, resolveNetworkContract } from \"../actions/getContract.ts\";\nimport { ContractResponseError } from \"../actions/getContract.ts\";\nimport { Cl } from \"../clarity/index.ts\";\nimport type { Client } from \"../clients/types.ts\";\nimport { Pc } from \"../postconditions/index.ts\";\nimport { BNS_ABI } from \"./abi.ts\";\nimport { BNS_CONTRACTS, ZONEFILE_RESOLVER_CONTRACTS } from \"./constants.ts\";\nimport type {\n\tClaimFastParams,\n\tPreorderParams,\n\tRegisterParams,\n\tSetPrimaryParams,\n\tTransferParams,\n\tUpdateZonefileParams,\n} from \"./types.ts\";\nimport {\n\tformatFQN,\n\tgenerateSalt,\n\thashPreorder,\n\tparseFQN,\n\tvalidateFQN,\n} from \"./utils.ts\";\nimport { ZONEFILE_RESOLVER_ABI } from \"./zonefile-abi.ts\";\n\nfunction getBnsContract(client: Client) {\n\tconst contract = resolveNetworkContract(client, BNS_CONTRACTS);\n\treturn getContract({\n\t\tclient,\n\t\taddress: contract.address,\n\t\tname: contract.name,\n\t\tabi: BNS_ABI,\n\t});\n}\n\nfunction getZonefileContract(client: Client) {\n\tconst contract = resolveNetworkContract(client, ZONEFILE_RESOLVER_CONTRACTS);\n\treturn getContract({\n\t\tclient,\n\t\taddress: contract.address,\n\t\tname: contract.name,\n\t\tabi: ZONEFILE_RESOLVER_ABI,\n\t});\n}\n\nfunction stringToBytes(str: string): Uint8Array {\n\treturn 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\tclient: Client,\n\tnameOrFQN: string,\n): Promise<string | null> {\n\tif (!validateFQN(nameOrFQN)) {\n\t\tthrow new Error(`Invalid name format: ${nameOrFQN}`);\n\t}\n\n\tconst { name, namespace } = parseFQN(nameOrFQN);\n\tconst bns = getBnsContract(client);\n\n\ttry {\n\t\treturn (await bns.read.getOwnerName({\n\t\t\tname: stringToBytes(name),\n\t\t\tnamespace: stringToBytes(namespace),\n\t\t})) as string | null;\n\t} catch (e) {\n\t\tif (e instanceof ContractResponseError) return null;\n\t\tthrow e;\n\t}\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\tclient: Client,\n\taddress: string,\n): Promise<string | null> {\n\tconst bns = getBnsContract(client);\n\n\ttry {\n\t\tconst result = (await bns.read.getPrimary({\n\t\t\towner: address,\n\t\t})) as { name: Uint8Array; namespace: Uint8Array } | null;\n\n\t\tif (result === null) return null;\n\n\t\tconst name = new TextDecoder().decode(result.name);\n\t\tconst namespace = new TextDecoder().decode(result.namespace);\n\n\t\treturn formatFQN(name, namespace);\n\t} catch (e) {\n\t\tif (e instanceof ContractResponseError) return null;\n\t\tthrow e;\n\t}\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\tclient: Client,\n\tnameOrFQN: string,\n): Promise<boolean> {\n\tif (!validateFQN(nameOrFQN)) {\n\t\tthrow new Error(`Invalid name format: ${nameOrFQN}`);\n\t}\n\n\tconst { name, namespace } = parseFQN(nameOrFQN);\n\tconst bns = getBnsContract(client);\n\n\t// No can-register-name function — use can-resolve-name instead.\n\t// If it resolves, the name is taken. If the contract call errors (name\n\t// unknown), it's available. Network/HTTP failures propagate instead of\n\t// being mistaken for \"available\".\n\ttry {\n\t\tawait bns.read.canResolveName({\n\t\t\tnamespace: stringToBytes(namespace),\n\t\t\tname: stringToBytes(name),\n\t\t});\n\t\treturn false; // resolved = taken\n\t} catch (e) {\n\t\tif (e instanceof ContractResponseError) return true; // errored = available\n\t\tthrow e;\n\t}\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\tclient: Client,\n\tnameOrFQN: string,\n): Promise<bigint> {\n\tif (!validateFQN(nameOrFQN)) {\n\t\tthrow new Error(`Invalid name format: ${nameOrFQN}`);\n\t}\n\n\tconst { name, namespace } = parseFQN(nameOrFQN);\n\tconst bns = getBnsContract(client);\n\n\t// get-name-price returns a nested response: (ok (ok uint))\n\tconst result = (await bns.read.getNamePrice({\n\t\tnamespace: stringToBytes(namespace),\n\t\tname: stringToBytes(name),\n\t})) as { ok: bigint } | { err: bigint };\n\n\tif (\"ok\" in result) return result.ok;\n\tthrow 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\tclient: Client,\n\tnameOrFQN: string,\n): Promise<bigint | null> {\n\tif (!validateFQN(nameOrFQN)) {\n\t\tthrow new Error(`Invalid name format: ${nameOrFQN}`);\n\t}\n\n\tconst { name, namespace } = parseFQN(nameOrFQN);\n\tconst bns = getBnsContract(client);\n\n\ttry {\n\t\treturn (await bns.read.getIdFromBns({\n\t\t\tname: stringToBytes(name),\n\t\t\tnamespace: stringToBytes(namespace),\n\t\t})) as bigint | null;\n\t} catch (e) {\n\t\tif (e instanceof ContractResponseError) return null;\n\t\tthrow e;\n\t}\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\tclient: Client,\n\tparams: PreorderParams,\n): Promise<{ txid: string; salt: Uint8Array }> {\n\tconst {\n\t\tname: nameInput,\n\t\tnamespace: namespaceInput,\n\t\tsalt: providedSalt,\n\t} = params;\n\tconst fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n\tif (!validateFQN(fqn)) {\n\t\tthrow new Error(`Invalid name format: ${fqn}`);\n\t}\n\n\tconst { name, namespace } = parseFQN(fqn);\n\n\t// Check availability\n\tconst available = await canRegister(client, fqn);\n\tif (!available) {\n\t\tthrow new Error(`Name ${fqn} is not available for registration`);\n\t}\n\n\t// Get price\n\tconst price = await getNamePrice(client, fqn);\n\n\t// Generate or use provided salt\n\tconst salt = providedSalt ?? generateSalt();\n\n\t// Calculate hash commitment\n\tconst hashedSaltedFqn = hashPreorder(name, namespace, salt);\n\n\tconst bns = getBnsContract(client);\n\n\tconst txid = await bns.call.namePreorder(\n\t\t{\n\t\t\thashedSaltedFqn,\n\t\t\tstxToBurn: price,\n\t\t},\n\t\t{\n\t\t\tpostConditions: client.account?.address\n\t\t\t\t? [Pc.principal(client.account.address).willSendLte(price).ustx()]\n\t\t\t\t: [],\n\t\t},\n\t);\n\n\treturn { 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\tclient: Client,\n\tparams: RegisterParams,\n): Promise<string> {\n\tconst { name: nameInput, namespace: namespaceInput, salt } = params;\n\tconst fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n\tif (!validateFQN(fqn)) {\n\t\tthrow new Error(`Invalid name format: ${fqn}`);\n\t}\n\n\tconst { name, namespace } = parseFQN(fqn);\n\n\tconst bns = getBnsContract(client);\n\n\treturn bns.call.nameRegister({\n\t\tname: stringToBytes(name),\n\t\tnamespace: stringToBytes(namespace),\n\t\tsalt,\n\t});\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\tclient: Client,\n\tparams: ClaimFastParams,\n): Promise<string> {\n\tconst { name: nameInput, namespace: namespaceInput, recipient } = params;\n\tconst fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n\tif (!validateFQN(fqn)) {\n\t\tthrow new Error(`Invalid name format: ${fqn}`);\n\t}\n\n\tconst { name, namespace } = parseFQN(fqn);\n\n\t// Check availability\n\tconst available = await canRegister(client, fqn);\n\tif (!available) {\n\t\tthrow new Error(`Name ${fqn} is not available for registration`);\n\t}\n\n\t// Get price\n\tconst price = await getNamePrice(client, fqn);\n\n\tconst bns = getBnsContract(client);\n\n\treturn bns.call.nameClaimFast(\n\t\t{\n\t\t\tname: stringToBytes(name),\n\t\t\tnamespace: stringToBytes(namespace),\n\t\t\tsendTo: recipient,\n\t\t},\n\t\t{\n\t\t\tpostConditions: [Pc.principal(recipient).willSendLte(price).ustx()],\n\t\t},\n\t);\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\tclient: Client,\n\tparams: TransferParams,\n): Promise<string> {\n\tconst { name: nameInput, namespace: namespaceInput, recipient } = params;\n\tconst fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n\tif (!validateFQN(fqn)) {\n\t\tthrow new Error(`Invalid name format: ${fqn}`);\n\t}\n\n\tconst id = await getNameId(client, fqn);\n\tif (id === null) {\n\t\tthrow new Error(`Name ${fqn} does not exist`);\n\t}\n\n\tconst currentOwner = await resolveName(client, fqn);\n\tif (!currentOwner) {\n\t\tthrow new Error(`Cannot determine owner of ${fqn}`);\n\t}\n\n\tconst bns = getBnsContract(client);\n\tconst contract = resolveNetworkContract(client, BNS_CONTRACTS);\n\n\treturn bns.call.transfer(\n\t\t{\n\t\t\tid,\n\t\t\towner: currentOwner,\n\t\t\trecipient,\n\t\t},\n\t\t{\n\t\t\tpostConditions: [\n\t\t\t\tPc.principal(currentOwner)\n\t\t\t\t\t.willSendAsset()\n\t\t\t\t\t.nft(`${contract.address}.${contract.name}::BNS-V2`, Cl.uint(id)),\n\t\t\t],\n\t\t},\n\t);\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\tclient: Client,\n\tparams: SetPrimaryParams,\n): Promise<string> {\n\tconst { name: nameInput, namespace: namespaceInput } = params;\n\tconst fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n\tif (!validateFQN(fqn)) {\n\t\tthrow new Error(`Invalid name format: ${fqn}`);\n\t}\n\n\tconst id = await getNameId(client, fqn);\n\tif (id === null) {\n\t\tthrow new Error(`Name ${fqn} does not exist`);\n\t}\n\n\tconst bns = getBnsContract(client);\n\n\treturn 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\tclient: Client,\n\tnameOrFQN: string,\n): Promise<Uint8Array | null> {\n\tif (!validateFQN(nameOrFQN)) {\n\t\tthrow new Error(`Invalid name format: ${nameOrFQN}`);\n\t}\n\n\tconst { name, namespace } = parseFQN(nameOrFQN);\n\tconst zonefile = getZonefileContract(client);\n\n\ttry {\n\t\tconst result = (await zonefile.read.resolveName({\n\t\t\tname: stringToBytes(name),\n\t\t\tnamespace: stringToBytes(namespace),\n\t\t})) as Uint8Array | null;\n\n\t\treturn result;\n\t} catch (e) {\n\t\t// Contract returns (err 101) when no zonefile is set. Network/HTTP\n\t\t// failures propagate instead of being mistaken for \"no zonefile\".\n\t\tif (e instanceof ContractResponseError) return null;\n\t\tthrow e;\n\t}\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\tclient: Client,\n\tparams: UpdateZonefileParams,\n): Promise<string> {\n\tconst { name: nameInput, namespace: namespaceInput, zonefile } = params;\n\tconst fqn = namespaceInput ? `${nameInput}.${namespaceInput}` : nameInput;\n\n\tif (!validateFQN(fqn)) {\n\t\tthrow new Error(`Invalid name format: ${fqn}`);\n\t}\n\n\tconst { name, namespace } = parseFQN(fqn);\n\n\t// Verify ownership\n\tconst currentOwner = await resolveName(client, fqn);\n\tif (!currentOwner) {\n\t\tthrow new Error(`Name ${fqn} does not exist`);\n\t}\n\n\tconst zonefileContract = getZonefileContract(client);\n\n\t// Convert zonefile to Uint8Array or null\n\tlet zonefileBytes: Uint8Array | null = null;\n\tif (zonefile !== null) {\n\t\tzonefileBytes =\n\t\t\ttypeof zonefile === \"string\"\n\t\t\t\t? new TextEncoder().encode(zonefile)\n\t\t\t\t: zonefile;\n\n\t\tif (zonefileBytes.length > 8192) {\n\t\t\tthrow new Error(\n\t\t\t\t`Zonefile too large: ${zonefileBytes.length} bytes (max 8192)`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn zonefileContract.call.updateZonefile({\n\t\tname: stringToBytes(name),\n\t\tnamespace: stringToBytes(namespace),\n\t\tnewZonefile: zonefileBytes,\n\t});\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\tclient: Client,\n\tnameOrFQN: string,\n): Promise<string> {\n\tif (!validateFQN(nameOrFQN)) {\n\t\tthrow new Error(`Invalid name format: ${nameOrFQN}`);\n\t}\n\n\tconst { name, namespace } = parseFQN(nameOrFQN);\n\tconst zonefileContract = getZonefileContract(client);\n\n\treturn zonefileContract.call.revokeName({\n\t\tname: stringToBytes(name),\n\t\tnamespace: stringToBytes(namespace),\n\t});\n}\n",
    "import type { Client } from \"../clients/types.ts\";\nimport {\n\tcanRegister,\n\tclaimFast,\n\tgetNameId,\n\tgetNamePrice,\n\tgetPrimaryName,\n\tgetZonefile,\n\tpreorder,\n\tregister,\n\tresolveName,\n\trevokeZonefile,\n\tsetPrimary,\n\ttransfer,\n\tupdateZonefile,\n} from \"./actions.ts\";\nimport type {\n\tClaimFastParams,\n\tPreorderParams,\n\tRegisterParams,\n\tSetPrimaryParams,\n\tTransferParams,\n\tUpdateZonefileParams,\n} from \"./types.ts\";\n\nexport type {\n\tClaimFastParams,\n\tTransferParams,\n\tSetPrimaryParams,\n\tPreorderParams,\n\tRegisterParams,\n\tUpdateZonefileParams,\n};\n\n/** Actions provided by the BNS extension. */\nexport type BnsActions = {\n\tbns: {\n\t\tresolveName: (name: string) => Promise<string | null>;\n\t\tgetPrimaryName: (address: string) => Promise<string | null>;\n\t\tcanRegister: (name: string) => Promise<boolean>;\n\t\tgetNamePrice: (name: string) => Promise<bigint>;\n\t\tgetNameId: (name: string) => Promise<bigint | null>;\n\t\tpreorder: (\n\t\t\tparams: PreorderParams,\n\t\t) => Promise<{ txid: string; salt: Uint8Array }>;\n\t\tregister: (params: RegisterParams) => Promise<string>;\n\t\tclaimFast: (params: ClaimFastParams) => Promise<string>;\n\t\ttransfer: (params: TransferParams) => Promise<string>;\n\t\tsetPrimary: (params: SetPrimaryParams) => Promise<string>;\n\t\tgetZonefile: (name: string) => Promise<Uint8Array | null>;\n\t\tupdateZonefile: (params: UpdateZonefileParams) => Promise<string>;\n\t\trevokeZonefile: (name: string) => Promise<string>;\n\t};\n};\n\nexport { BNS_CONTRACTS, ZONEFILE_RESOLVER_CONTRACTS } from \"./constants.ts\";\nexport {\n\tparseFQN,\n\tformatFQN,\n\tvalidateName,\n\tvalidateNamespace,\n\tvalidateFQN,\n\tgenerateSalt,\n\thashPreorder,\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\treturn (client: Client) => ({\n\t\tbns: {\n\t\t\t/**\n\t\t\t * Resolve a BNS name to its owner address.\n\t\t\t * @param name - Fully qualified name (e.g., \"alice.btc\" or \"alice\")\n\t\t\t * @returns Owner address or null if name doesn't exist\n\t\t\t */\n\t\t\tresolveName: (name: string) => resolveName(client, name),\n\n\t\t\t/**\n\t\t\t * Get the primary name for an address.\n\t\t\t * @param address - Stacks address\n\t\t\t * @returns Primary name or null if no primary set\n\t\t\t */\n\t\t\tgetPrimaryName: (address: string) => getPrimaryName(client, address),\n\n\t\t\t/**\n\t\t\t * Check if a name is available for registration.\n\t\t\t * @param name - Fully qualified name to check\n\t\t\t * @returns True if available, false otherwise\n\t\t\t */\n\t\t\tcanRegister: (name: string) => canRegister(client, name),\n\n\t\t\t/**\n\t\t\t * Get the price to register a name in microSTX.\n\t\t\t * @param name - Fully qualified name\n\t\t\t * @returns Price in microSTX\n\t\t\t */\n\t\t\tgetNamePrice: (name: string) => getNamePrice(client, name),\n\n\t\t\t/**\n\t\t\t * Get the NFT token ID for a name.\n\t\t\t * @param name - Fully qualified name\n\t\t\t * @returns Token ID or null if name doesn't exist\n\t\t\t */\n\t\t\tgetNameId: (name: string) => getNameId(client, name),\n\n\t\t\t/**\n\t\t\t * Preorder a name (step 1 of secure registration).\n\t\t\t * Commits to a name with a salted hash, preventing front-running.\n\t\t\t * Must wait 1 Bitcoin block (~10 min) before calling register().\n\t\t\t * Requires wallet client with account.\n\t\t\t * @param params - Preorder parameters\n\t\t\t * @returns Transaction ID and salt (save salt for register step!)\n\t\t\t */\n\t\t\tpreorder: (params: PreorderParams) => preorder(client, params),\n\n\t\t\t/**\n\t\t\t * Register a name (step 2 of secure registration).\n\t\t\t * Reveals the name after preorder. Must wait 1 Bitcoin block after preorder.\n\t\t\t * Requires wallet client with account.\n\t\t\t * @param params - Register parameters (must include salt from preorder)\n\t\t\t * @returns Transaction ID\n\t\t\t */\n\t\t\tregister: (params: RegisterParams) => register(client, params),\n\n\t\t\t/**\n\t\t\t * Claim a name instantly (fast but snipeable).\n\t\t\t * Burns STX to register the name immediately.\n\t\t\t * Requires wallet client with account.\n\t\t\t * @param params - Registration parameters\n\t\t\t * @returns Transaction ID\n\t\t\t */\n\t\t\tclaimFast: (params: ClaimFastParams) => claimFast(client, params),\n\n\t\t\t/**\n\t\t\t * Transfer a name to a new owner.\n\t\t\t * Requires wallet client with account.\n\t\t\t * @param params - Transfer parameters\n\t\t\t * @returns Transaction ID\n\t\t\t */\n\t\t\ttransfer: (params: TransferParams) => transfer(client, params),\n\n\t\t\t/**\n\t\t\t * Set a name as your primary name.\n\t\t\t * Requires wallet client with account.\n\t\t\t * @param params - Primary name parameters\n\t\t\t * @returns Transaction ID\n\t\t\t */\n\t\t\tsetPrimary: (params: SetPrimaryParams) => setPrimary(client, params),\n\n\t\t\t/**\n\t\t\t * Get the zonefile for a name.\n\t\t\t * Zonefiles contain DNS-like records (up to 8192 bytes).\n\t\t\t * @param name - Fully qualified name\n\t\t\t * @returns Zonefile bytes or null if not set\n\t\t\t */\n\t\t\tgetZonefile: (name: string) => getZonefile(client, name),\n\n\t\t\t/**\n\t\t\t * Update or clear the zonefile for a name.\n\t\t\t * Only the name owner can update the zonefile.\n\t\t\t * Requires wallet client with account.\n\t\t\t * @param params - Zonefile update parameters\n\t\t\t * @returns Transaction ID\n\t\t\t */\n\t\t\tupdateZonefile: (params: UpdateZonefileParams) =>\n\t\t\t\tupdateZonefile(client, params),\n\n\t\t\t/**\n\t\t\t * Revoke (clear) the zonefile for a name.\n\t\t\t * Requires wallet client with account.\n\t\t\t * @param name - Fully qualified name\n\t\t\t * @returns Transaction ID\n\t\t\t */\n\t\t\trevokeZonefile: (name: string) => revokeZonefile(client, name),\n\t\t},\n\t});\n}\n"
  ],
  "mappings": "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",
  "debugId": "9A035D40A860B3C864756E2164756E21",
  "names": []
}