@secondlayer/stacks 0.0.2 → 0.0.3

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.
@@ -353,22 +353,33 @@ async function resolveName(client, nameOrFQN) {
353
353
  }
354
354
  const { name, namespace } = parseFQN(nameOrFQN);
355
355
  const bns = getBnsContract(client);
356
- const owner = await bns.read["get-owner-name"]({
357
- name: stringToBytes(name),
358
- namespace: stringToBytes(namespace)
359
- });
360
- return owner;
356
+ try {
357
+ return await bns.read["get-owner-name"]({
358
+ name: stringToBytes(name),
359
+ namespace: stringToBytes(namespace)
360
+ });
361
+ } catch (e) {
362
+ if (e instanceof ContractResponseError)
363
+ return null;
364
+ throw e;
365
+ }
361
366
  }
362
367
  async function getPrimaryName(client, address) {
363
368
  const bns = getBnsContract(client);
364
- const result = await bns.read["get-primary"]({
365
- owner: address
366
- });
367
- if (result === null)
368
- return null;
369
- const name = new TextDecoder().decode(result.name);
370
- const namespace = new TextDecoder().decode(result.namespace);
371
- return formatFQN(name, namespace);
369
+ try {
370
+ const result = await bns.read["get-primary"]({
371
+ owner: address
372
+ });
373
+ if (result === null)
374
+ return null;
375
+ const name = new TextDecoder().decode(result.name);
376
+ const namespace = new TextDecoder().decode(result.namespace);
377
+ return formatFQN(name, namespace);
378
+ } catch (e) {
379
+ if (e instanceof ContractResponseError)
380
+ return null;
381
+ throw e;
382
+ }
372
383
  }
373
384
  async function canRegister(client, nameOrFQN) {
374
385
  if (!validateFQN(nameOrFQN)) {
@@ -406,10 +417,16 @@ async function getNameId(client, nameOrFQN) {
406
417
  }
407
418
  const { name, namespace } = parseFQN(nameOrFQN);
408
419
  const bns = getBnsContract(client);
409
- return await bns.read["get-id-from-bns"]({
410
- name: stringToBytes(name),
411
- namespace: stringToBytes(namespace)
412
- });
420
+ try {
421
+ return await bns.read["get-id-from-bns"]({
422
+ name: stringToBytes(name),
423
+ namespace: stringToBytes(namespace)
424
+ });
425
+ } catch (e) {
426
+ if (e instanceof ContractResponseError)
427
+ return null;
428
+ throw e;
429
+ }
413
430
  }
414
431
  async function preorder(client, params) {
415
432
  const { name: nameInput, namespace: namespaceInput, salt: providedSalt } = params;
@@ -586,5 +603,5 @@ function bns() {
586
603
  });
587
604
  }
588
605
 
589
- //# debugId=D099C8A7BE697C2764756E2164756E21
606
+ //# debugId=9C7600D547CBAE7264756E2164756E21
590
607
  //# sourceMappingURL=index.cjs.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\";\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 const owner = (await bns.read[\"get-owner-name\"]({\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n })) as string | null;\n\n return owner;\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 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}\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 return (await bns.read[\"get-id-from-bns\"]({\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n })) as bigint | null;\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[\"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",
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": "D099C8A7BE697C2764756E2164756E21",
12
+ "mappings": "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",
13
+ "debugId": "9C7600D547CBAE7264756E2164756E21",
14
14
  "names": []
15
15
  }
@@ -1,6 +1,7 @@
1
1
  import"../../shared/stacks-tjxmrssa.js";
2
2
  import"../../shared/stacks-k58k970n.js";
3
3
  import {
4
+ ContractResponseError,
4
5
  getContract
5
6
  } from "../../shared/stacks-vdfs3e5v.js";
6
7
  import"../../shared/stacks-zm0b3tgy.js";
@@ -362,22 +363,33 @@ async function resolveName(client, nameOrFQN) {
362
363
  }
363
364
  const { name, namespace } = parseFQN(nameOrFQN);
364
365
  const bns = getBnsContract(client);
365
- const owner = await bns.read["get-owner-name"]({
366
- name: stringToBytes(name),
367
- namespace: stringToBytes(namespace)
368
- });
369
- return owner;
366
+ try {
367
+ return await bns.read["get-owner-name"]({
368
+ name: stringToBytes(name),
369
+ namespace: stringToBytes(namespace)
370
+ });
371
+ } catch (e) {
372
+ if (e instanceof ContractResponseError)
373
+ return null;
374
+ throw e;
375
+ }
370
376
  }
371
377
  async function getPrimaryName(client, address) {
372
378
  const bns = getBnsContract(client);
373
- const result = await bns.read["get-primary"]({
374
- owner: address
375
- });
376
- if (result === null)
377
- return null;
378
- const name = new TextDecoder().decode(result.name);
379
- const namespace = new TextDecoder().decode(result.namespace);
380
- return formatFQN(name, namespace);
379
+ try {
380
+ const result = await bns.read["get-primary"]({
381
+ owner: address
382
+ });
383
+ if (result === null)
384
+ return null;
385
+ const name = new TextDecoder().decode(result.name);
386
+ const namespace = new TextDecoder().decode(result.namespace);
387
+ return formatFQN(name, namespace);
388
+ } catch (e) {
389
+ if (e instanceof ContractResponseError)
390
+ return null;
391
+ throw e;
392
+ }
381
393
  }
382
394
  async function canRegister(client, nameOrFQN) {
383
395
  if (!validateFQN(nameOrFQN)) {
@@ -415,10 +427,16 @@ async function getNameId(client, nameOrFQN) {
415
427
  }
416
428
  const { name, namespace } = parseFQN(nameOrFQN);
417
429
  const bns = getBnsContract(client);
418
- return await bns.read["get-id-from-bns"]({
419
- name: stringToBytes(name),
420
- namespace: stringToBytes(namespace)
421
- });
430
+ try {
431
+ return await bns.read["get-id-from-bns"]({
432
+ name: stringToBytes(name),
433
+ namespace: stringToBytes(namespace)
434
+ });
435
+ } catch (e) {
436
+ if (e instanceof ContractResponseError)
437
+ return null;
438
+ throw e;
439
+ }
422
440
  }
423
441
  async function preorder(client, params) {
424
442
  const { name: nameInput, namespace: namespaceInput, salt: providedSalt } = params;
@@ -607,5 +625,5 @@ export {
607
625
  BNS_CONTRACTS
608
626
  };
609
627
 
610
- //# debugId=0D633A7E4933680A64756E2164756E21
628
+ //# debugId=3B5D8D19A6967B5564756E2164756E21
611
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\";\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 const owner = (await bns.read[\"get-owner-name\"]({\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n })) as string | null;\n\n return owner;\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 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}\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 return (await bns.read[\"get-id-from-bns\"]({\n name: stringToBytes(name),\n namespace: stringToBytes(namespace),\n })) as bigint | null;\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[\"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",
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": "0D633A7E4933680A64756E2164756E21",
12
+ "mappings": "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",
13
+ "debugId": "3B5D8D19A6967B5564756E2164756E21",
14
14
  "names": []
15
15
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@secondlayer/stacks",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "A viem-style SDK for the Stacks blockchain",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.cjs",