{"version":3,"file":"createNameRegistry.cjs","sources":["../../../src/bindings/createNameRegistry.ts"],"sourcesContent":["import {\r\n  Address,\r\n  GetAccountInfoApi,\r\n  GetMinimumBalanceForRentExemptionApi,\r\n  IInstruction,\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\ninterface CreateNameRegistryParams {\r\n  rpc: Rpc<GetAccountInfoApi & GetMinimumBalanceForRentExemptionApi>;\r\n  name: string;\r\n  space: number;\r\n  payer: Address;\r\n  owner: Address;\r\n  lamports?: bigint;\r\n  classAddress?: Address;\r\n  parentAddress?: Address;\r\n}\r\n\r\n/**\r\n * Creates a name registry with the given rent budget, allocated space, owner, and class.\r\n *\r\n * @param params - An object containing the following properties:\r\n *   - `rpc`: An RPC interface implementing GetAccountInfoApi and GetMinimumBalanceForRentExemptionApi.\r\n *   - `name`: The name of the new account.\r\n *   - `space`: The space in bytes allocated to the account.\r\n *   - `payer`: The allocation cost payer.\r\n *   - `owner`: The address to be set as the owner of the new name account.\r\n *   - `lamports`: (Optional) The budget to be set for the name account. If not specified,\r\n *                 it'll be the minimum for rent exemption.\r\n *   - `classAddress`: (Optional) The address of the class associated with the registry.\r\n *   - `parentAddress`: (Optional) The address of the parent registry.\r\n * @returns A promise which resolves to the create name registry instruction.\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<IInstruction> => {\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.getMinimumBalanceForRentExemption(BigInt(space)).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":["async","rpc","name","space","payer","owner","lamports","classAddress","parentAddress","nameHash","_generateHash","domainAddress","_getAddressFromHash","parentOwner","getMinimumBalanceForRentExemption","BigInt","send","RegistryState","retrieve","createNameRegistryInstruction","getInstruction","NAME_PROGRAM_ADDRESS","SYSTEM_PROGRAM_ADDRESS"],"mappings":"+NA0CkCA,OAChCC,MACAC,OACAC,QACAC,QACAC,QACAC,WACAC,eACAC,oBAEA,MAAMC,QAAiBC,EAAaA,cAACR,GAC/BS,QAAsBC,EAAAA,oBAC1BH,EACAD,EACAD,GAOF,IAAIM,EACJ,GALAP,EACEA,SACOL,EAAIa,kCAAkCC,OAAOZ,IAAQa,OAG1DR,EAAe,CAEjBK,SAD4BI,EAAAA,cAAcC,SAASjB,EAAKO,IAC5BH,MAkB9B,OAfW,IAAIc,gCAA8B,CAC3CV,WACAH,WACAH,UACCiB,eACDC,EAAoBA,qBACpBC,yBACAX,EACAN,EACAD,EACAG,EACAC,EACAK,EAGO"}