{"version":3,"file":"createNameRegistry.mjs","sources":["../../../src/bindings/createNameRegistry.ts"],"sourcesContent":["import {\r\n  Address,\r\n  GetAccountInfoApi,\r\n  GetMinimumBalanceForRentExemptionApi,\r\n  Instruction,\r\n  Rpc,\r\n} from \"@solana/kit\";\r\n\r\nimport {\r\n  NAME_PROGRAM_ADDRESS,\r\n  SYSTEM_PROGRAM_ADDRESS,\r\n} from \"../constants/addresses\";\r\nimport { CreateNameRegistryInstruction } from \"../instructions/createNameRegistryInstruction\";\r\nimport { RegistryState } from \"../states/registry\";\r\nimport { _generateHash, _getAddressFromHash } from \"../utils/deriveAddress\";\r\n\r\n/**\r\n * Parameters for creating a name registry.\r\n *\r\n * @example\r\n * ```ts\r\n * const params: CreateNameRegistryParams = { rpc, name: \"example\", space: 32, payer, owner };\r\n * ```\r\n */\r\nexport interface CreateNameRegistryParams {\r\n  /** RPC client. */\r\n  rpc: Rpc<GetAccountInfoApi & GetMinimumBalanceForRentExemptionApi>;\r\n  /** Raw registry name. */\r\n  name: string;\r\n  /** Account data size in bytes. */\r\n  space: number;\r\n  /** Account paying for creation. */\r\n  payer: Address;\r\n  /** Owner of the new registry. */\r\n  owner: Address;\r\n  /** Account funding amount. Defaults to the rent-exempt minimum. */\r\n  lamports?: bigint;\r\n  /** Registry class address. */\r\n  classAddress?: Address;\r\n  /** Parent registry address. */\r\n  parentAddress?: Address;\r\n}\r\n\r\n/**\r\n * Creates a raw SPL Name Registry account with the given rent budget,\r\n * allocated space, owner, and class.\r\n *\r\n * This low-level helper accepts a raw registry seed/name and does not parse\r\n * `.sns` or `.sol` suffixes.\r\n *\r\n * @param params Creation parameters\r\n * @param params.rpc RPC client implementing account and rent-exemption APIs\r\n * @param params.name Raw registry seed/name for the new account\r\n * @param params.space Space in bytes allocated to the account\r\n * @param params.payer Account paying for allocation\r\n * @param params.owner Owner of the new name account\r\n * @param params.lamports Optional lamports to fund the account. Defaults to the rent-exempt minimum\r\n * @param params.classAddress Optional class address for the registry\r\n * @param params.parentAddress Optional parent registry address\r\n * @returns Transaction instruction.\r\n *\r\n * @example\r\n * ```ts\r\n * const instruction = await createNameRegistry({ rpc, name: \"example\", space: 32, payer, owner });\r\n * ```\r\n */\r\nexport const createNameRegistry = async ({\r\n  rpc,\r\n  name,\r\n  space,\r\n  payer,\r\n  owner,\r\n  lamports,\r\n  classAddress,\r\n  parentAddress,\r\n}: CreateNameRegistryParams): Promise<Instruction> => {\r\n  const nameHash = await _generateHash(name);\r\n  const domainAddress = await _getAddressFromHash(\r\n    nameHash,\r\n    parentAddress,\r\n    classAddress\r\n  );\r\n\r\n  lamports =\r\n    lamports ||\r\n    (await rpc\r\n      .getMinimumBalanceForRentExemption(\r\n        BigInt(space + RegistryState.HEADER_LEN)\r\n      )\r\n      .send());\r\n\r\n  let parentOwner: Address | undefined;\r\n  if (parentAddress) {\r\n    const parentAccount = await RegistryState.retrieve(rpc, parentAddress);\r\n    parentOwner = parentAccount.owner;\r\n  }\r\n\r\n  const ix = new CreateNameRegistryInstruction({\r\n    nameHash,\r\n    lamports,\r\n    space,\r\n  }).getInstruction(\r\n    NAME_PROGRAM_ADDRESS,\r\n    SYSTEM_PROGRAM_ADDRESS,\r\n    domainAddress,\r\n    owner,\r\n    payer,\r\n    classAddress,\r\n    parentAddress,\r\n    parentOwner\r\n  );\r\n\r\n  return ix;\r\n};\r\n"],"names":[],"mappings":";;;;;AA2CA;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACU,MAAA,kBAAkB,GAAG,OAAO,EACvC,GAAG,EACH,IAAI,EACJ,KAAK,EACL,KAAK,EACL,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,aAAa,GACY,KAA0B;AACnD,IAAA,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC;IAC1C,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAC7C,QAAQ,EACR,aAAa,EACb,YAAY,CACb;IAED,QAAQ;QACN,QAAQ;AACR,aAAC,MAAM;iBACJ,iCAAiC,CAChC,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC,UAAU,CAAC;iBAEzC,IAAI,EAAE,CAAC;AAEZ,IAAA,IAAI,WAAgC;IACpC,IAAI,aAAa,EAAE;QACjB,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;AACtE,QAAA,WAAW,GAAG,aAAa,CAAC,KAAK;;AAGnC,IAAA,MAAM,EAAE,GAAG,IAAI,6BAA6B,CAAC;QAC3C,QAAQ;QACR,QAAQ;QACR,KAAK;AACN,KAAA,CAAC,CAAC,cAAc,CACf,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,KAAK,EACL,KAAK,EACL,YAAY,EACZ,aAAa,EACb,WAAW,CACZ;AAED,IAAA,OAAO,EAAE;AACX;;;;"}