{"version":3,"file":"deserializeRecordContent.cjs","sources":["../../../../src/utils/deserializers/deserializeRecordContent.ts"],"sourcesContent":["import { bech32 } from \"@scure/base\";\r\nimport { ReadonlyUint8Array } from \"@solana/kit\";\r\nimport ipaddr from \"ipaddr.js\";\r\nimport punycode from \"punycode/punycode.js\";\r\n\r\nimport { addressCodec, utf8Codec } from \"../../codecs\";\r\nimport { EVM_RECORDS, UTF8_ENCODED_RECORDS } from \"../../constants/records\";\r\nimport { InvalidRecordDataError } from \"../../errors\";\r\nimport { Record } from \"../../types/record\";\r\nimport { uint8ArrayToHex } from \"../uint8Array/uint8ArrayToHex\";\r\n\r\n/**\r\n * Parameters for deserializing record content.\r\n *\r\n * @example\r\n * ```ts\r\n * const params: DeserializeRecordContentParams = { content, record: Record.Url };\r\n * ```\r\n */\r\nexport interface DeserializeRecordContentParams {\r\n  /** Serialized record content. */\r\n  content: ReadonlyUint8Array;\r\n  /** Record type. */\r\n  record: Record;\r\n}\r\n\r\n/**\r\n * Deserializes record content according to SNS-IP 1.\r\n *\r\n * `CNAME` and `TXT` content is punycode-decoded after UTF-8 deserialization.\r\n *\r\n * @param params Record deserialization parameters\r\n * @param params.content Serialized record content\r\n * @param params.record Record type\r\n * @returns Deserialized record content.\r\n * @throws InvalidRecordDataError If the record type or content is unsupported.\r\n *\r\n * @example\r\n * ```ts\r\n * const result = await getDomainRecord({\r\n *   rpc,\r\n *   domain: \"example.sns\",\r\n *   record: Record.Url,\r\n * });\r\n * const content = deserializeRecordContent({\r\n *   content: result.retrievedRecord.getContent(),\r\n *   record: Record.Url,\r\n * });\r\n * ```\r\n */\r\nexport const deserializeRecordContent = ({\r\n  content,\r\n  record,\r\n}: DeserializeRecordContentParams): string => {\r\n  const isUtf8Encoded = UTF8_ENCODED_RECORDS.has(record);\r\n\r\n  if (isUtf8Encoded) {\r\n    const decoded = utf8Codec.decode(content);\r\n    if (record === Record.CNAME || record === Record.TXT) {\r\n      return punycode.decode(decoded);\r\n    }\r\n    return decoded;\r\n  } else if (record === Record.SOL) {\r\n    return addressCodec.decode(content);\r\n  } else if (EVM_RECORDS.has(record)) {\r\n    return `0x${uint8ArrayToHex(content)}`;\r\n  } else if (record === Record.Injective) {\r\n    return bech32.encode(\"inj\", bech32.toWords(content as Uint8Array));\r\n  } else if (record === Record.A || record === Record.AAAA) {\r\n    return ipaddr.fromByteArray(Array.from(content)).toString();\r\n  } else {\r\n    throw new InvalidRecordDataError(\"The record content is malformed\");\r\n  }\r\n};\r\n"],"names":["record","UTF8_ENCODED_RECORDS","utf8Codec","Record","addressCodec","EVM_RECORDS","uint8ArrayToHex","bech32","InvalidRecordDataError"],"mappings":";;;;;;;;;;;;;AA0BA;;;;;;;;;;;;;;;;;;;;;;;AAuBG;AACU,MAAA,wBAAwB,GAAG,CAAC,EACvC,OAAO,UACPA,QAAM,GACyB,KAAY;IAC3C,MAAM,aAAa,GAAGC,4BAAoB,CAAC,GAAG,CAACD,QAAM,CAAC;IAEtD,IAAI,aAAa,EAAE;QACjB,MAAM,OAAO,GAAGE,gBAAS,CAAC,MAAM,CAAC,OAAO,CAAC;AACzC,QAAA,IAAIF,QAAM,KAAKG,aAAM,CAAC,KAAK,IAAIH,QAAM,KAAKG,aAAM,CAAC,GAAG,EAAE;AACpD,YAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;;AAEjC,QAAA,OAAO,OAAO;;AACT,SAAA,IAAIH,QAAM,KAAKG,aAAM,CAAC,GAAG,EAAE;AAChC,QAAA,OAAOC,mBAAY,CAAC,MAAM,CAAC,OAAO,CAAC;;AAC9B,SAAA,IAAIC,mBAAW,CAAC,GAAG,CAACL,QAAM,CAAC,EAAE;AAClC,QAAA,OAAO,KAAKM,+BAAe,CAAC,OAAO,CAAC,EAAE;;AACjC,SAAA,IAAIN,QAAM,KAAKG,aAAM,CAAC,SAAS,EAAE;AACtC,QAAA,OAAOI,WAAM,CAAC,MAAM,CAAC,KAAK,EAAEA,WAAM,CAAC,OAAO,CAAC,OAAqB,CAAC,CAAC;;AAC7D,SAAA,IAAIP,QAAM,KAAKG,aAAM,CAAC,CAAC,IAAIH,QAAM,KAAKG,aAAM,CAAC,IAAI,EAAE;AACxD,QAAA,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;;SACtD;AACL,QAAA,MAAM,IAAIK,6BAAsB,CAAC,iCAAiC,CAAC;;AAEvE;;;;"}