{"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 the SPL Name Service hash prefix plus an input string using SHA-256.\r\n *\r\n * @param str Input string to hash\r\n * @returns Hash bytes.\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 SPL Name Service address from a hash.\r\n *\r\n * @param hash Hash bytes used as the first PDA seed\r\n * @param parentAddress Optional parent address seed\r\n * @param classAddress Optional class address seed\r\n * @returns 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 str Input string to derive the address from\r\n * @param parentAddress Optional parent address seed\r\n * @param classAddress Optional class address seed\r\n * @returns 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":["utf8Codec","addressCodec","getProgramDerivedAddress","NAME_PROGRAM_ADDRESS"],"mappings":";;;;;;;;AASA,MAAM,WAAW,GAAG,kBAAkB;AAEtC;;;;;AAKG;MACU,aAAa,GAAG,OAAO,GAAW,KAAyB;IACtE,MAAM,IAAI,GAAGA,gBAAS,CAAC,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC;AAChD,IAAA,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;AAE9D,IAAA,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC;AACnC;AAEA;;;;;;;AAOG;AACI,MAAM,mBAAmB,GAAG,OACjC,IAAgB,EAChB,aAAuB,EACvB,YAAsB,KACF;AACpB,IAAA,MAAM,KAAK,GAAyB,CAAC,IAAI,CAAC;IAC1C,KAAK,CAAC,IAAI,CACR,YAAY,GAAGC,mBAAY,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CACtE;IACD,KAAK,CAAC,IAAI,CACR,aAAa,GAAGA,mBAAY,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CACxE;AAED,IAAA,MAAM,CAAC,OAAO,CAAC,GAAG,MAAMC,4BAAwB,CAAC;AAC/C,QAAA,cAAc,EAAEC,8BAAoB;QACpC,KAAK;AACN,KAAA,CAAC;AAEF,IAAA,OAAO,OAAO;AAChB;AAEA;;;;;;;;;AASG;AACI,MAAM,cAAc,GAAG,OAC5B,GAAW,EACX,aAAuB,EACvB,YAAsB,KACpB;AACF,IAAA,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,aAAa,EAAE,YAAY,CAAC;AAE5E,IAAA,OAAO,OAAO;AAChB;;;;;;"}