{"version":3,"file":"updateRecord.cjs","sources":["../../../src/bindings/updateRecord.ts"],"sourcesContent":["import { Address, Instruction } from \"@solana/kit\";\r\n\r\nimport {\r\n  CENTRAL_STATE_DOMAIN_RECORDS,\r\n  NAME_PROGRAM_ADDRESS,\r\n  RECORDS_PROGRAM_ADDRESS,\r\n  SYSTEM_PROGRAM_ADDRESS,\r\n} from \"../constants/addresses\";\r\nimport { getSnsDomainAddress } from \"../domain/getSnsDomainAddress\";\r\nimport { InvalidParentError } from \"../errors\";\r\nimport { UpdateRecordInstruction } from \"../instructions/updateRecordInstruction\";\r\nimport { Record, RecordVersion } from \"../types/record\";\r\nimport { _parseSnsDomain } from \"../utils/parseSnsDomain\";\r\nimport { serializeRecordContent } from \"../utils/serializers/serializeRecordContent\";\r\n\r\n/**\r\n * Parameters for updating a domain record.\r\n *\r\n * @example\r\n * ```ts\r\n * const params: UpdateRecordParams = {\r\n *   domain: \"example.sns\",\r\n *   record: Record.Url,\r\n *   content: \"https://example.com\",\r\n *   owner,\r\n *   payer,\r\n * };\r\n * ```\r\n */\r\nexport interface UpdateRecordParams {\r\n  /** Full `.sns` domain name. */\r\n  domain: string;\r\n  /** Record type. */\r\n  record: Record;\r\n  /** Record content. */\r\n  content: string;\r\n  /** Current domain owner. */\r\n  owner: Address;\r\n  /** Instruction fee payer. */\r\n  payer: Address;\r\n}\r\n\r\n/**\r\n * Builds an instruction to update a V2 record for a `.sns` domain or subdomain.\r\n *\r\n * Record content is serialized according to SNS-IP 1.\r\n *\r\n * @param params Record update parameters\r\n * @param params.domain Full `.sns` domain or subdomain name\r\n * @param params.record Record type\r\n * @param params.content Record content\r\n * @param params.owner Current owner of the domain\r\n * @param params.payer Fee payer for the instruction\r\n * @returns Transaction instruction.\r\n *\r\n * @example\r\n * ```ts\r\n * const instruction = await updateRecord({\r\n *   domain: \"example.sns\",\r\n *   record: Record.Url,\r\n *   content: \"https://example.com\",\r\n *   owner,\r\n *   payer,\r\n * });\r\n * ```\r\n */\r\nexport const updateRecord = async ({\r\n  domain,\r\n  record,\r\n  content,\r\n  owner,\r\n  payer,\r\n}: UpdateRecordParams): Promise<Instruction> => {\r\n  const trimmedDomain = _parseSnsDomain(domain);\r\n\r\n  let { domainAddress, isSub, parentAddress } = await getSnsDomainAddress({\r\n    domain: `${record}.${trimmedDomain}`,\r\n    record: RecordVersion.V2,\r\n  });\r\n\r\n  if (isSub) {\r\n    parentAddress = (await getSnsDomainAddress({ domain: trimmedDomain }))\r\n      .domainAddress;\r\n  }\r\n\r\n  if (!parentAddress) {\r\n    throw new InvalidParentError(\"Parent could not be found\");\r\n  }\r\n\r\n  const ix = new UpdateRecordInstruction({\r\n    record: `\\x02${record}`,\r\n    content: serializeRecordContent({ content, record }),\r\n  }).getInstruction(\r\n    RECORDS_PROGRAM_ADDRESS,\r\n    SYSTEM_PROGRAM_ADDRESS,\r\n    NAME_PROGRAM_ADDRESS,\r\n    payer,\r\n    domainAddress,\r\n    parentAddress,\r\n    owner,\r\n    CENTRAL_STATE_DOMAIN_RECORDS\r\n  );\r\n\r\n  return ix;\r\n};\r\n"],"names":["record","_parseSnsDomain","getSnsDomainAddress","RecordVersion","InvalidParentError","UpdateRecordInstruction","serializeRecordContent","RECORDS_PROGRAM_ADDRESS","SYSTEM_PROGRAM_ADDRESS","NAME_PROGRAM_ADDRESS","CENTRAL_STATE_DOMAIN_RECORDS"],"mappings":";;;;;;;;;;;;AA0CA;;;;;;;;;;;;;;;;;;;;;;;AAuBG;AACU,MAAA,YAAY,GAAG,OAAO,EACjC,MAAM,UACNA,QAAM,EACN,OAAO,EACP,KAAK,EACL,KAAK,GACc,KAA0B;AAC7C,IAAA,MAAM,aAAa,GAAGC,8BAAe,CAAC,MAAM,CAAC;IAE7C,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,MAAMC,uCAAmB,CAAC;AACtE,QAAA,MAAM,EAAE,CAAA,EAAGF,QAAM,CAAA,CAAA,EAAI,aAAa,CAAE,CAAA;QACpC,MAAM,EAAEG,oBAAa,CAAC,EAAE;AACzB,KAAA,CAAC;IAEF,IAAI,KAAK,EAAE;QACT,aAAa,GAAG,CAAC,MAAMD,uCAAmB,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AAClE,aAAA,aAAa;;IAGlB,IAAI,CAAC,aAAa,EAAE;AAClB,QAAA,MAAM,IAAIE,yBAAkB,CAAC,2BAA2B,CAAC;;AAG3D,IAAA,MAAM,EAAE,GAAG,IAAIC,+CAAuB,CAAC;QACrC,MAAM,EAAE,CAAO,IAAA,EAAAL,QAAM,CAAE,CAAA;QACvB,OAAO,EAAEM,6CAAsB,CAAC,EAAE,OAAO,UAAEN,QAAM,EAAE,CAAC;AACrD,KAAA,CAAC,CAAC,cAAc,CACfO,iCAAuB,EACvBC,gCAAsB,EACtBC,8BAAoB,EACpB,KAAK,EACL,aAAa,EACb,aAAa,EACb,KAAK,EACLC,sCAA4B,CAC7B;AAED,IAAA,OAAO,EAAE;AACX;;;;"}