{"version":3,"file":"deriveAddress.cjs","sources":["../../../src/utils/deriveAddress.ts"],"sourcesContent":["import {\r\n  Address,\r\n  ReadonlyUint8Array,\r\n  getProgramDerivedAddress,\r\n} from \"@solana/kit\";\r\n\r\nimport { addressCodec, utf8Codec } from \"../codecs\";\r\nimport { NAME_PROGRAM_ADDRESS } from \"../constants/addresses\";\r\n\r\nconst HASH_PREFIX = \"SPL Name Service\";\r\n\r\n/**\r\n * Hashes a string using SHA-256.\r\n *\r\n * @param {string} str - The string to be hashed.\r\n * @returns {Promise<Uint8Array>} A promise that resolves to the hashed value as a Uint8Array.\r\n */\r\nexport const _generateHash = async (str: string): Promise<Uint8Array> => {\r\n  const data = utf8Codec.encode(HASH_PREFIX + str);\r\n  const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\r\n\r\n  return new Uint8Array(hashBuffer);\r\n};\r\n\r\n/**\r\n * Derives an address from a hash.\r\n *\r\n * @param {Uint8Array} hash - The hash to derive the address from.\r\n * @param {Address} [parentAddress] - The optional parent address.\r\n * @param {Address} [classAddress] - The optional class address.\r\n * @returns {Promise<Address>} A promise that resolves to the derived address.\r\n */\r\nexport const _getAddressFromHash = async (\r\n  hash: Uint8Array,\r\n  parentAddress?: Address,\r\n  classAddress?: Address\r\n): Promise<Address> => {\r\n  const seeds: ReadonlyUint8Array[] = [hash];\r\n  seeds.push(\r\n    classAddress ? addressCodec.encode(classAddress) : new Uint8Array(32)\r\n  );\r\n  seeds.push(\r\n    parentAddress ? addressCodec.encode(parentAddress) : new Uint8Array(32)\r\n  );\r\n\r\n  const [address] = await getProgramDerivedAddress({\r\n    programAddress: NAME_PROGRAM_ADDRESS,\r\n    seeds,\r\n  });\r\n\r\n  return address;\r\n};\r\n\r\n/**\r\n * Derives an address from an input string, with optional parent address and\r\n * optional class address. These addresses form part of the seeds for Program\r\n * Derived Address (PDA) derivation.\r\n *\r\n * @param {string} str - The input string to derive the address from.\r\n * @param {Address} [parentAddress] - The optional parent address.\r\n * @param {Address} [classAddress] - The optional class address.\r\n * @returns {Promise<Address>} A promise that resolves to the derived address.\r\n */\r\nexport const deriveAddress = async (\r\n  str: string,\r\n  parentAddress?: Address,\r\n  classAddress?: Address\r\n) => {\r\n  const hash = await _generateHash(str);\r\n  const address = await _getAddressFromHash(hash, parentAddress, classAddress);\r\n\r\n  return address;\r\n};\r\n"],"names":["_generateHash","async","str","data","utf8Codec","encode","hashBuffer","crypto","subtle","digest","Uint8Array","_getAddressFromHash","hash","parentAddress","classAddress","seeds","push","addressCodec","address","getProgramDerivedAddress","programAddress","NAME_PROGRAM_ADDRESS"],"mappings":"6GASA,MAQaA,EAAgBC,MAAOC,IAClC,MAAMC,EAAOC,EAASA,UAACC,OATL,mBAS0BH,GACtCI,QAAmBC,OAAOC,OAAOC,OAAO,UAAWN,GAEzD,OAAO,IAAIO,WAAWJ,EAAW,EAWtBK,EAAsBV,MACjCW,EACAC,EACAC,KAEA,MAAMC,EAA8B,CAACH,GACrCG,EAAMC,KACJF,EAAeG,eAAaZ,OAAOS,GAAgB,IAAIJ,WAAW,KAEpEK,EAAMC,KACJH,EAAgBI,eAAaZ,OAAOQ,GAAiB,IAAIH,WAAW,KAGtE,MAAOQ,SAAiBC,2BAAyB,CAC/CC,eAAgBC,EAAoBA,qBACpCN,UAGF,OAAOG,CAAO,8EAaajB,MAC3BC,EACAW,EACAC,KAEA,MAAMF,QAAaZ,EAAcE,GAGjC,aAFsBS,EAAoBC,EAAMC,EAAeC,EAEjD"}