{"version":3,"file":"registerDomainWithNft.mjs","sources":["../../../src/bindings/registerDomainWithNft.ts"],"sourcesContent":["import { Address, Instruction, getProgramDerivedAddress } from \"@solana/kit\";\r\n\r\nimport { addressCodec, utf8Codec } from \"../codecs\";\r\nimport {\r\n  CENTRAL_STATE,\r\n  METAPLEX_PROGRAM_ADDRESS,\r\n  NAME_PROGRAM_ADDRESS,\r\n  REGISTRY_PROGRAM_ADDRESS,\r\n  REVERSE_LOOKUP_CLASS,\r\n  SNS_ROOT_DOMAIN_ACCOUNT,\r\n  SYSTEM_PROGRAM_ADDRESS,\r\n  SYSVAR_RENT_ADDRESS,\r\n  TOKEN_PROGRAM_ADDRESS,\r\n  WOLVES_COLLECTION_METADATA,\r\n} from \"../constants/addresses\";\r\nimport { CreateWithNftInstruction } from \"../instructions/createWithNftInstruction\";\r\nimport { _deriveAddress } from \"../utils/deriveAddress\";\r\nimport { _parseSnsTopLevelDomain } from \"../utils/parseSnsDomain\";\r\n\r\n/**\r\n * Parameters for registering an SNS domain with an NFT.\r\n *\r\n * @example\r\n * ```ts\r\n * const params: RegisterDomainWithNftParams = {\r\n *   domain: \"example.sns\",\r\n *   space: 1_000,\r\n *   buyer,\r\n *   nftSource,\r\n *   nftMint,\r\n * };\r\n * ```\r\n */\r\nexport interface RegisterDomainWithNftParams {\r\n  /** Full `.sns` domain name. */\r\n  domain: string;\r\n  /** Domain registry size in bytes. */\r\n  space: number;\r\n  /** Account registering the domain. */\r\n  buyer: Address;\r\n  /** Source token account for the NFT. */\r\n  nftSource: Address;\r\n  /** Bonfida Wolves NFT mint. */\r\n  nftMint: Address;\r\n}\r\n\r\n/**\r\n * Builds an instruction to register a top-level `.sns` domain using a Bonfida Wolves NFT.\r\n *\r\n * @param params Registration parameters\r\n * @param params.domain Full `.sns` domain name\r\n * @param params.space Number of bytes to allocate for the domain registry\r\n * @param params.buyer Buyer paying for the registration\r\n * @param params.nftSource NFT source account\r\n * @param params.nftMint NFT mint used for registration\r\n * @returns Transaction instruction.\r\n *\r\n * @example\r\n * ```ts\r\n * const instruction = await registerDomainWithNft({\r\n *   domain: \"example.sns\",\r\n *   space: 1_000,\r\n *   buyer,\r\n *   nftSource,\r\n *   nftMint,\r\n * });\r\n * ```\r\n */\r\nexport const registerDomainWithNft = async ({\r\n  domain,\r\n  space,\r\n  buyer,\r\n  nftSource,\r\n  nftMint,\r\n}: RegisterDomainWithNftParams): Promise<Instruction> => {\r\n  domain = _parseSnsTopLevelDomain(domain);\r\n\r\n  const domainAddress = await _deriveAddress(domain, SNS_ROOT_DOMAIN_ACCOUNT);\r\n  const reverseLookupAccount = await _deriveAddress(\r\n    domainAddress,\r\n    undefined,\r\n    CENTRAL_STATE\r\n  );\r\n\r\n  const [state] = await getProgramDerivedAddress({\r\n    programAddress: REGISTRY_PROGRAM_ADDRESS,\r\n    seeds: [addressCodec.encode(domainAddress)],\r\n  });\r\n  const [nftMetadata] = await getProgramDerivedAddress({\r\n    programAddress: METAPLEX_PROGRAM_ADDRESS,\r\n    seeds: [\r\n      utf8Codec.encode(\"metadata\"),\r\n      addressCodec.encode(METAPLEX_PROGRAM_ADDRESS),\r\n      addressCodec.encode(nftMint),\r\n    ],\r\n  });\r\n  const [masterEdition] = await getProgramDerivedAddress({\r\n    programAddress: METAPLEX_PROGRAM_ADDRESS,\r\n    seeds: [\r\n      utf8Codec.encode(\"metadata\"),\r\n      addressCodec.encode(METAPLEX_PROGRAM_ADDRESS),\r\n      addressCodec.encode(nftMint),\r\n      utf8Codec.encode(\"edition\"),\r\n    ],\r\n  });\r\n\r\n  const ix = new CreateWithNftInstruction({\r\n    space,\r\n    name: domain,\r\n  }).getInstruction(\r\n    REGISTRY_PROGRAM_ADDRESS,\r\n    NAME_PROGRAM_ADDRESS,\r\n    SNS_ROOT_DOMAIN_ACCOUNT,\r\n    domainAddress,\r\n    reverseLookupAccount,\r\n    SYSTEM_PROGRAM_ADDRESS,\r\n    REVERSE_LOOKUP_CLASS,\r\n    buyer,\r\n    nftSource,\r\n    nftMetadata,\r\n    nftMint,\r\n    masterEdition,\r\n    WOLVES_COLLECTION_METADATA,\r\n    TOKEN_PROGRAM_ADDRESS,\r\n    SYSVAR_RENT_ADDRESS,\r\n    state,\r\n    METAPLEX_PROGRAM_ADDRESS\r\n  );\r\n  return ix;\r\n};\r\n"],"names":[],"mappings":";;;;;;;AA8CA;;;;;;;;;;;;;;;;;;;;;AAqBG;AACU,MAAA,qBAAqB,GAAG,OAAO,EAC1C,MAAM,EACN,KAAK,EACL,KAAK,EACL,SAAS,EACT,OAAO,GACqB,KAA0B;AACtD,IAAA,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC;IAExC,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,uBAAuB,CAAC;IAC3E,MAAM,oBAAoB,GAAG,MAAM,cAAc,CAC/C,aAAa,EACb,SAAS,EACT,aAAa,CACd;AAED,IAAA,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,wBAAwB,CAAC;AAC7C,QAAA,cAAc,EAAE,wBAAwB;QACxC,KAAK,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAC5C,KAAA,CAAC;AACF,IAAA,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,wBAAwB,CAAC;AACnD,QAAA,cAAc,EAAE,wBAAwB;AACxC,QAAA,KAAK,EAAE;AACL,YAAA,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;AAC5B,YAAA,YAAY,CAAC,MAAM,CAAC,wBAAwB,CAAC;AAC7C,YAAA,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7B,SAAA;AACF,KAAA,CAAC;AACF,IAAA,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,wBAAwB,CAAC;AACrD,QAAA,cAAc,EAAE,wBAAwB;AACxC,QAAA,KAAK,EAAE;AACL,YAAA,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;AAC5B,YAAA,YAAY,CAAC,MAAM,CAAC,wBAAwB,CAAC;AAC7C,YAAA,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;AAC5B,YAAA,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;AAC5B,SAAA;AACF,KAAA,CAAC;AAEF,IAAA,MAAM,EAAE,GAAG,IAAI,wBAAwB,CAAC;QACtC,KAAK;AACL,QAAA,IAAI,EAAE,MAAM;AACb,KAAA,CAAC,CAAC,cAAc,CACf,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,EACL,SAAS,EACT,WAAW,EACX,OAAO,EACP,aAAa,EACb,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,EACL,wBAAwB,CACzB;AACD,IAAA,OAAO,EAAE;AACX;;;;"}