@bonfida/spl-name-service 0.2.5 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("@solana/web3.js"),t=require("buffer"),r=require("@solana/spl-token"),i=require("bn.js"),a=require("borsh"),s=require("@ethersproject/sha2"),n=require("@pythnetwork/client");function o(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var i=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var c=o(require("tweetnacl"));class u extends i{toBuffer(){const e=super.toArray().reverse(),r=t.Buffer.from(e);if(4===r.length)return r;if(r.length>4)throw new Error("Numberu32 too large");const i=t.Buffer.alloc(4);return r.copy(i),i}static fromBuffer(e){if(4!==e.length)throw new Error(`Invalid buffer length: ${e.length}`);return new i([...e].reverse().map((e=>`00${e.toString(16)}`.slice(-2))).join(""),16)}}class p extends i{toBuffer(){const e=super.toArray().reverse(),r=t.Buffer.from(e);if(8===r.length)return r;if(r.length>8)throw new Error("Numberu64 too large");const i=t.Buffer.alloc(8);return r.copy(i),i}static fromBuffer(e){if(8!==e.length)throw new Error(`Invalid buffer length: ${e.length}`);return new i([...e].reverse().map((e=>`00${e.toString(16)}`.slice(-2))).join(""),16)}}function l(r,i,a,s,n,o,c,p,l,f,d){const y=[t.Buffer.from(Int8Array.from([0])),new u(o.length).toBuffer(),o,c.toBuffer(),p.toBuffer()],w=t.Buffer.concat(y),g=[{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1}];return l?g.push({pubkey:l,isSigner:!0,isWritable:!1}):g.push({pubkey:new e.PublicKey(t.Buffer.alloc(32)),isSigner:!1,isWritable:!1}),f?g.push({pubkey:f,isSigner:!1,isWritable:!1}):g.push({pubkey:new e.PublicKey(t.Buffer.alloc(32)),isSigner:!1,isWritable:!1}),d&&g.push({pubkey:d,isSigner:!0,isWritable:!1}),new e.TransactionInstruction({keys:g,programId:r,data:w})}function f(r,i,a,s,n){const o=[t.Buffer.from(Int8Array.from([1])),a.toBuffer(),new u(s.length).toBuffer(),s],c=t.Buffer.concat(o),p=[{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1}];return new e.TransactionInstruction({keys:p,programId:r,data:c})}function d(r,i,a,s,n,o,c){const u=[t.Buffer.from(Int8Array.from([2])),a.toBuffer()],p=t.Buffer.concat(u),l=[{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:c||s,isSigner:!0,isWritable:!1}];return n&&l.push({pubkey:n,isSigner:!0,isWritable:!1}),c&&o&&(n||l.push({pubkey:e.PublicKey.default,isSigner:!1,isWritable:!1}),l.push({pubkey:o,isSigner:!1,isWritable:!1})),new e.TransactionInstruction({keys:l,programId:r,data:p})}function y(r,i,a,s){const n=[t.Buffer.from(Int8Array.from([3]))],o=t.Buffer.concat(n),c=[{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0}];return new e.TransactionInstruction({keys:c,programId:r,data:o})}class w{constructor(e){this.tag=9,this.name=e.name,this.space=e.space}serialize(){return a.serialize(w.schema,this)}getInstruction(i,a,s,n,o,c,u,p,l,f,d){const y=t.Buffer.from(this.serialize()),w=[{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:e.SystemProgram.programId,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!0,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:r.TOKEN_PROGRAM_ID,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1}];return new e.TransactionInstruction({keys:w,programId:i,data:y})}}w.schema=new Map([[w,{kind:"struct",fields:[["tag","u8"],["name","string"],["space","u32"]]}]]);class g{constructor(e){this.tag=5,this.name=e.name}serialize(){return a.serialize(g.schema,this)}getInstruction(r,i,a,s,n,o,c,u,p){const l=t.Buffer.from(this.serialize());let f=[{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:e.PublicKey.default,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!0,isWritable:!0}];if(u){if(!p)throw new Error("Missing parent name owner");f.push({pubkey:u,isSigner:!1,isWritable:!0}),f.push({pubkey:p,isSigner:!0,isWritable:!1})}return new e.TransactionInstruction({keys:f,programId:r,data:l})}}g.schema=new Map([[g,{kind:"struct",fields:[["tag","u8"],["name","string"]]}]]);class m{constructor(e){this.tag=13,this.name=e.name,this.space=e.space,this.referrerIdxOpt=e.referrerIdxOpt}serialize(){return a.serialize(m.schema,this)}getInstruction(r,i,a,s,n,o,c,u,p,l,f,d,y,w,g,m,b){const h=t.Buffer.from(this.serialize());let S=[];return S.push({pubkey:i,isSigner:!1,isWritable:!1}),S.push({pubkey:a,isSigner:!1,isWritable:!1}),S.push({pubkey:s,isSigner:!1,isWritable:!0}),S.push({pubkey:n,isSigner:!1,isWritable:!0}),S.push({pubkey:o,isSigner:!1,isWritable:!1}),S.push({pubkey:c,isSigner:!1,isWritable:!1}),S.push({pubkey:u,isSigner:!0,isWritable:!0}),S.push({pubkey:p,isSigner:!1,isWritable:!0}),S.push({pubkey:l,isSigner:!1,isWritable:!1}),S.push({pubkey:f,isSigner:!1,isWritable:!1}),S.push({pubkey:d,isSigner:!1,isWritable:!1}),S.push({pubkey:y,isSigner:!1,isWritable:!0}),S.push({pubkey:w,isSigner:!1,isWritable:!1}),S.push({pubkey:g,isSigner:!1,isWritable:!1}),S.push({pubkey:m,isSigner:!1,isWritable:!1}),b&&S.push({pubkey:b,isSigner:!1,isWritable:!0}),new e.TransactionInstruction({keys:S,programId:r,data:h})}}m.schema=new Map([[m,{kind:"struct",fields:[["tag","u8"],["name","string"],["space","u32"],["referrerIdxOpt",{kind:"option",type:"u16"}]]}]]);const b=new e.PublicKey("nftD3vbNkNqfj2Sd3HZwbpw4BxxKWr4AjGb9X38JeZk"),h=t.Buffer.from("tokenized_name"),S=async(t,i)=>{try{const[a]=await e.PublicKey.findProgramAddress([h,i.toBuffer()],b);if("0"===(await r.getMint(t,a)).supply.toString())return;const s=[{memcmp:{offset:0,bytes:a.toBase58()}},{memcmp:{offset:64,bytes:"2"}},{dataSize:165}],n=await t.getProgramAccounts(r.TOKEN_PROGRAM_ID,{filters:s});if(1!=n.length)return;return new e.PublicKey(n[0].account.data.slice(32,64))}catch{return}};class R{constructor(t){this.parentName=new e.PublicKey(t.parentName),this.owner=new e.PublicKey(t.owner),this.class=new e.PublicKey(t.class)}static async retrieve(e,t){var r;const i=await e.getAccountInfo(t);if(!i)throw new Error("Invalid name account provided");let s=a.deserializeUnchecked(this.schema,R,i.data);s.data=null===(r=i.data)||void 0===r?void 0:r.slice(this.HEADER_LEN);return{registry:s,nftOwner:await S(e,t)}}static async _retrieveBatch(e,t){const r=await e.getMultipleAccountsInfo(t),i=e=>{if(!e)return;const t=a.deserializeUnchecked(this.schema,R,e);return t.data=null==e?void 0:e.slice(this.HEADER_LEN),t};return r.map((e=>i(null==e?void 0:e.data)))}static async retrieveBatch(e,t){let r=[];const i=[...t];for(;i.length>0;)r.push(...await this._retrieveBatch(e,i.splice(0,100)));return r}}R.HEADER_LEN=96,R.schema=new Map([[R,{kind:"struct",fields:[["parentName",[32]],["owner",[32]],["class",[32]]]}]]);class x{constructor(e){this.name=e.name,this.ticker=e.ticker,this.mint=e.mint,this.decimals=e.decimals,this.website=null==e?void 0:e.website,this.logoUri=null==e?void 0:e.logoUri}serialize(){return a.serialize(x.schema,this)}static deserialize(e){return a.deserializeUnchecked(x.schema,x,e)}}x.schema=new Map([[x,{kind:"struct",fields:[["name","string"],["ticker","string"],["mint",[32]],["decimals","u8"],["website",{kind:"option",type:"string"}],["logoUri",{kind:"option",type:"string"}]]}]]);class v{constructor(e){this.mint=e.mint}serialize(){return a.serialize(v.schema,this)}static deserialize(e){return a.deserializeUnchecked(v.schema,v,e)}}v.schema=new Map([[v,{kind:"struct",fields:[["mint",[32]]]}]]);const k=new e.PublicKey("namesLPneVptA9Z5rqUDD9tMTWEJwofgaYwp8cawRkX"),E="SPL Name Service",B=new e.PublicKey("58PwtjSDuFHuUkYjH9BYnnQKHfwo9reZhC2zMJv9JPkx"),P=new e.PublicKey("jCebN34bUfdeUYJT13J1yG16XWQpt5PDx6Mse9GUqhR"),A=new e.PublicKey("ETp9eKXVv1dWwHSpsXRUuXHmw24PwRkttCGVgpZEY9zF"),I=new e.PublicKey("AUoZ3YAhV3b2rZeEH93UMZHXUZcTramBvb4d9YEVySkc"),K=new e.PublicKey("33m47vH6Eav6jr5Ry86XjhRft2jRBLDnDgPSHoquXi2Z"),T=new e.PublicKey("FvPH7PrVrLGKPfqaf3xJodFTjZriqrAXXLTVWEorTFBi"),W=new e.PublicKey("4YcexoW3r78zz16J2aqmukBLRwGq6rAvWzJpkYAXqebv"),N=new e.PublicKey("DmSyHDSM9eSLyvoLsPvDr5fRRFZ7Bfr3h3ULvWpgQaq7"),D=new e.PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),_=[new e.PublicKey("3ogYncmMM5CmytsGCqKHydmXmKUZ6sGWvizkzqwT7zb1"),new e.PublicKey("DM1jJCkZZEwY5tmWbgvKRxsDFzXCdbfrYCCH1CtwguEs")],O=new Map([["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","USDC"],["Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB","USDT"],["So11111111111111111111111111111111111111112","SOL"],["EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp","FIDA"],["FeGn77dhg1KXRRFeSwwMiykZnZPw5JXW6naf2aQgZDQf","ETH"],["7i5KKsX2weiTkry7jA4ZwSuXGhs5eJBEjY8vVxR4pfRx","GMT"],["AFbX8oGjGpmVFywbVouvhQSRmiW2aR1mohfahi4Y2AdB","GST"],["mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So","MSOL"],["DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263","BONK"],["EPeUFDgHRxs9xxEPVaL6kfGQvCon7jmAWKVUHuux1Tpz","BAT"]]),H=new e.PublicKey("AHtgzX45WTKfkPG53L6WYhGEXwQkN1BVknET3sVsLL8J"),z=new e.PublicKey("GcWEQ9K78FV7LEHteFVciYApERk5YvQuFDQPk1yYJVXi");async function F(e,t){if(!await e.getAccountInfo(t))throw new Error("Unable to find the given account.");return R.retrieve(e,t)}async function L(e){const r=E+e,i=s.sha256(t.Buffer.from(r,"utf8")).slice(2);return t.Buffer.from(i,"hex")}async function M(r,i,a){const s=[r];i?s.push(i.toBuffer()):s.push(t.Buffer.alloc(32)),a?s.push(a.toBuffer()):s.push(t.Buffer.alloc(32));const[n]=await e.PublicKey.findProgramAddress(s,k);return n}const C=async(e,t=B)=>{let r=await L(e);return{pubkey:await M(r,void 0,t),hashed:r}},U=async(e,r=!1)=>{e.endsWith(".sol")&&(e=e.slice(0,-4));const i=e.split(".");if(2===i.length){const e=t.Buffer.from([r?1:0]).toString().concat(i[0]),{pubkey:a}=await C(i[1]);return{...await C(e,a),isSub:!0,parent:a}}if(3===i.length&&r){const{pubkey:e}=await C(i[2]),{pubkey:r}=await C("\0".concat(i[1]),e),a=t.Buffer.from([1]).toString();return{...await C(a.concat(i[0]),r),isSub:!0,parent:e,isSubRecord:!0}}if(i.length>=3)throw new Error("Invalid derivation input");return{...await C(e,B),isSub:!1,parent:void 0}},G=e=>{const r=E+e,i=s.sha256(t.Buffer.from(r,"utf8")).slice(2);return t.Buffer.from(i,"hex")},Y=(r,i,a)=>{const s=[r];i?s.push(i.toBuffer()):s.push(t.Buffer.alloc(32)),a?s.push(a.toBuffer()):s.push(t.Buffer.alloc(32));const[n]=e.PublicKey.findProgramAddressSync(s,k);return n};async function j(e,t){const r=G(t.toBase58()),a=Y(r,K),{registry:s}=await R.retrieve(e,a);if(!s.data)throw new Error("Could not retrieve name data");const n=new i(s.data.slice(0,4),"le").toNumber();return s.data.slice(4,4+n).toString()}const V=(e,t=B)=>{let r=G(e);return{pubkey:Y(r,void 0,t),hashed:r}},q=(e,r=!1)=>{e.endsWith(".sol")&&(e=e.slice(0,-4));const i=e.split(".");if(2===i.length){const e=t.Buffer.from([r?1:0]).toString().concat(i[0]),{pubkey:a}=V(i[1]);return{...V(e,a),isSub:!0,parent:a}}if(3===i.length&&r){const{pubkey:e}=V(i[2]),{pubkey:r}=V("\0".concat(i[1]),e),a=t.Buffer.from([1]).toString();return{...V(a.concat(i[0]),r),isSub:!0,parent:e,isSubRecord:!0}}if(i.length>=3)throw new Error("Invalid derivation input");return{...V(e,B),isSub:!1,parent:void 0}};async function X(t,r,i,a,s,n,o,c){const f=await L(r),d=await M(f,o,c),y=n||await t.getMinimumBalanceForRentExemption(i);let w;if(c){const{registry:e}=await F(t,c);w=e.owner}return l(k,e.SystemProgram.programId,d,s,a,f,new p(y),new u(i),o,c,w)}async function Z(e,t,r,i,a){const s=await L(t),n=await M(s,i,a);let o;o=i||(await R.retrieve(e,n)).registry.owner;return y(k,n,r,o)}const J=async(t,r,i,a,s)=>{let[n]=await e.PublicKey.findProgramAddress([P.toBuffer()],P),o=await L(t.toBase58()),c=await M(o,n,a);return[[],[new g({name:r}).getInstruction(P,e.SYSVAR_RENT_PUBKEY,k,B,c,n,i,a,s)]]};class Q{constructor(e){this.twitterRegistryKey=e.twitterRegistryKey,this.twitterHandle=e.twitterHandle}static async retrieve(e,t){let r=await e.getAccountInfo(t,"processed");if(!r)throw new Error("Invalid reverse Twitter account provided");return a.deserializeUnchecked(this.schema,Q,r.data.slice(R.HEADER_LEN))}}async function $(r,i,s,n,o){const c=await L(n.toString()),d=await M(c,T,W);let y=a.serialize(Q.schema,new Q({twitterRegistryKey:s.toBytes(),twitterHandle:i}));return[l(k,e.SystemProgram.programId,d,n,o,c,new p(await r.getMinimumBalanceForRentExemption(y.length+R.HEADER_LEN)),new u(y.length),T,W,T),f(k,d,new u(0),t.Buffer.from(y),T)]}Q.schema=new Map([[Q,{kind:"struct",fields:[["twitterRegistryKey",[32]],["twitterHandle","string"]]}]]);const ee=new e.PublicKey("6NSu2tci4apRKQtt257bAVcvqYjB3zV2H1dWo56vgpa6"),te=async(e,t)=>{const r=await M(await L(t.toBase58()),void 0,ee),{registry:i}=await R.retrieve(e,r);if(!i.data)throw new Error("Invalid account data");return x.deserialize(i.data)},re=new e.PublicKey("85iDfUvr3HJyLM2zcq5BXSiDvUWfw6cSE1FfNBo8Ap29");class ie{constructor(t){this.tag=t.tag,this.nameAccount=new e.PublicKey(t.nameAccount)}static deserialize(e){return a.deserialize(this.schema,ie,e)}static async retrieve(e,t){const r=await e.getAccountInfo(t);if(!r||!r.data)throw new Error("Favourite domain not found");return this.deserialize(r.data)}static async getKey(r,i){return await e.PublicKey.findProgramAddress([t.Buffer.from("favourite_domain"),i.toBuffer()],r)}static getKeySync(r,i){return e.PublicKey.findProgramAddressSync([t.Buffer.from("favourite_domain"),i.toBuffer()],r)}}ie.schema=new Map([[ie,{kind:"struct",fields:[["tag","u8"],["nameAccount",[32]]]}]]);var ae;exports.Record=void 0,(ae=exports.Record||(exports.Record={})).IPFS="IPFS",ae.ARWV="ARWV",ae.SOL="SOL",ae.ETH="ETH",ae.BTC="BTC",ae.LTC="LTC",ae.DOGE="DOGE",ae.Email="email",ae.Url="url",ae.Discord="discord",ae.Github="github",ae.Reddit="reddit",ae.Twitter="twitter",ae.Telegram="telegram",ae.Pic="pic",ae.SHDW="SHDW",ae.POINT="POINT",ae.BSC="BSC",ae.Injective="INJECT";const se=(e,t)=>{const{pubkey:r}=q(t+"."+e,!0);return r},ne=async(e,t,r)=>{var i,a;const s=se(t,r);let{registry:n}=await R.retrieve(e,s);const o=r===exports.Record.SOL?96:null===(i=n.data)||void 0===i?void 0:i.indexOf(0);return n.data=null===(a=n.data)||void 0===a?void 0:a.slice(0,o),n},oe=async(e,t)=>await ne(e,t,exports.Record.SOL),ce=(e,t,r)=>c.sign.detached.verify(e,t,r.toBytes());exports.BONFIDA_FIDA_BNB=I,exports.BONFIDA_USDC_BNB=N,exports.FavouriteDomain=ie,exports.HASH_PREFIX=E,exports.MINT_PREFIX=h,exports.Mint=v,exports.NAME_OFFERS_ID=re,exports.NAME_PROGRAM_ID=k,exports.NAME_TOKENIZER_ID=b,exports.NameRegistryState=R,exports.Numberu32=u,exports.Numberu64=p,exports.PYTH_FIDA_PRICE_ACC=A,exports.PYTH_MAPPING_ACC=H,exports.REFERRERS=_,exports.REGISTER_PROGRAM_ID=P,exports.REVERSE_LOOKUP_CLASS=K,exports.ROOT_DOMAIN_ACCOUNT=B,exports.ReverseTwitterRegistryState=Q,exports.SOL_RECORD_SIG_LEN=96,exports.TOKENS_SYM_MINT=O,exports.TOKEN_TLD=ee,exports.TWITTER_ROOT_PARENT_REGISTRY_KEY=W,exports.TWITTER_VERIFICATION_AUTHORITY=T,exports.TokenData=x,exports.USDC_MINT=D,exports.VAULT_OWNER=z,exports.changeTwitterRegistryData=async function(e,t,r,i){const a=await L(e),s=await M(a,void 0,W);return[f(k,s,new u(r),i,t)]},exports.changeVerifiedPubkey=async function(e,t,r,i,a){const s=await L(t),n=await M(s,void 0,W);let o=[d(k,n,i,r,void 0)];const c=await L(r.toString());return await M(c,T,void 0),o.push(await Z(e,r.toString(),a,T,W)),o=o.concat(await $(e,t,n,i,a)),o},exports.checkSolRecord=ce,exports.createInstruction=l,exports.createInstructionV3=m,exports.createNameRegistry=X,exports.createReverseInstruction=g,exports.createReverseName=J,exports.createReverseTwitterRegistry=$,exports.createSubdomain=async(e,t,r,i=2e3)=>{const a=[],s=t.split(".")[0];if(!s)throw new Error("Invalid subdomain input");const{parent:n,pubkey:o}=q(t),c=await e.getMinimumBalanceForRentExemption(i+R.HEADER_LEN),u=await X(e,"\0".concat(s),i,r,r,c,void 0,n);a.push(u);const[,p]=await J(o,"\0".concat(s),r,n,r);return a.push(...p),[[],a]},exports.createV2Instruction=w,exports.createVerifiedTwitterRegistry=async function(t,r,i,a,s){const n=await L(r),o=await M(n,void 0,W),c=await t.getMinimumBalanceForRentExemption(a+R.HEADER_LEN);let f=[l(k,e.SystemProgram.programId,o,i,s,n,new p(c),new u(a),void 0,W,T)];return f=f.concat(await $(t,r,o,i,s)),f},exports.deleteInstruction=y,exports.deleteNameRegistry=Z,exports.deleteTwitterRegistry=async function(e,t){const r=await L(e),i=await M(r,void 0,W),a=await L(t.toString()),s=await M(a,T,W);return[y(k,i,t,t),y(k,s,t,t)]},exports.findSubdomains=async(e,t)=>{const r=[{memcmp:{offset:0,bytes:t.toBase58()}},{memcmp:{offset:64,bytes:K.toBase58()}}],i=await e.getProgramAccounts(k,{filters:r}),a=await j(e,t),s=i.map((e=>{var t;return null===(t=e.account.data.slice(97).toString("utf-8"))||void 0===t?void 0:t.split("\0").join("")})),n=s.map((e=>q(e+"."+a).pubkey)),o=await e.getMultipleAccountsInfo(n);return s.filter(((e,t)=>!!o[t]))},exports.getAllDomains=async function(e,t){const r=[{memcmp:{offset:32,bytes:t.toBase58()}},{memcmp:{offset:0,bytes:B.toBase58()}}];return(await e.getProgramAccounts(k,{filters:r})).map((e=>e.pubkey))},exports.getAllRegisteredDomains=async e=>{const t=[{memcmp:{offset:0,bytes:B.toBase58()}}];return await e.getProgramAccounts(k,{dataSlice:{offset:32,length:32},filters:t})},exports.getArweaveRecord=async(e,t)=>await ne(e,t,exports.Record.ARWV),exports.getBscRecord=async(e,t)=>await ne(e,t,exports.Record.BSC),exports.getBtcRecord=async(e,t)=>await ne(e,t,exports.Record.BTC),exports.getDiscordRecord=async(e,t)=>await ne(e,t,exports.Record.Discord),exports.getDogeRecord=async(e,t)=>await ne(e,t,exports.Record.DOGE),exports.getDomainKey=U,exports.getDomainKeySync=q,exports.getEmailRecord=async(e,t)=>await ne(e,t,exports.Record.Email),exports.getEthRecord=async(e,t)=>await ne(e,t,exports.Record.ETH),exports.getFavoriteDomain=async(t,r)=>{const[i]=ie.getKeySync(re,new e.PublicKey(r)),a=await ie.retrieve(t,i),s=await j(t,a.nameAccount);return{domain:a.nameAccount,reverse:s}},exports.getGithubRecord=async(e,t)=>await ne(e,t,exports.Record.Github),exports.getHandleAndRegistryKey=async function(t,r){const i=await L(r.toString()),a=await M(i,T,W);let s=await Q.retrieve(t,a);return[s.twitterHandle,new e.PublicKey(s.twitterRegistryKey)]},exports.getHashedName=L,exports.getHashedNameSync=G,exports.getInjectiveRecord=async(e,t)=>await ne(e,t,exports.Record.Injective),exports.getIpfsRecord=async(e,t)=>await ne(e,t,exports.Record.IPFS),exports.getLtcRecord=async(e,t)=>await ne(e,t,exports.Record.LTC),exports.getNameAccountKey=M,exports.getNameAccountKeySync=Y,exports.getNameOwner=F,exports.getPicRecord=async(e,t)=>await ne(e,t,exports.Record.Pic),exports.getPointRecord=async(e,t)=>await ne(e,t,exports.Record.POINT),exports.getRecord=ne,exports.getRecordKeySync=se,exports.getRedditRecord=async(e,t)=>await ne(e,t,exports.Record.Reddit),exports.getReverseKey=async(e,t)=>{const{pubkey:r,parent:i}=await U(e),a=await L(r.toBase58());return await M(a,K,t?i:void 0)},exports.getReverseKeySync=(e,t)=>{const{pubkey:r,parent:i}=q(e),a=G(r.toBase58());return Y(a,K,t?i:void 0)},exports.getShdwRecord=async(e,t)=>await ne(e,t,exports.Record.SHDW),exports.getSolRecord=oe,exports.getTelegramRecord=async(e,t)=>await ne(e,t,exports.Record.Telegram),exports.getTokenInfoFromMint=te,exports.getTokenInfoFromName=async(t,r)=>{const i=await M(await L(r),void 0,ee),{registry:a}=await R.retrieve(t,i);if(!a.data)throw new Error("Invalid account data");const s=new e.PublicKey(v.deserialize(a.data).mint);return await te(t,s)},exports.getTwitterHandleandRegistryKeyViaFilters=async function(t,r){const i=[{memcmp:{offset:0,bytes:W.toBase58()}},{memcmp:{offset:32,bytes:r.toBase58()}},{memcmp:{offset:64,bytes:T.toBase58()}}],s=await t.getProgramAccounts(k,{filters:i});for(const t of s)if(t.account.data.length>R.HEADER_LEN+32){let r=t.account.data.slice(R.HEADER_LEN),i=a.deserializeUnchecked(Q.schema,Q,r);return[i.twitterHandle,new e.PublicKey(i.twitterRegistryKey)]}throw new Error("Registry not found.")},exports.getTwitterRecord=async(e,t)=>await ne(e,t,exports.Record.Twitter),exports.getTwitterRegistry=async function(e,t){const r=await L(t),i=await M(r,void 0,W),{registry:a}=await R.retrieve(e,i);return a},exports.getTwitterRegistryData=async function(r,i){const a=[{memcmp:{offset:0,bytes:W.toBase58()}},{memcmp:{offset:32,bytes:i.toBase58()}},{memcmp:{offset:64,bytes:new e.PublicKey(t.Buffer.alloc(32,0)).toBase58()}}],s=await r.getProgramAccounts(k,{filters:a});if(s.length>1)throw new Error("Found more than one registry.");return s[0].account.data.slice(R.HEADER_LEN)},exports.getTwitterRegistryKey=async function(e){const t=await L(e);return await M(t,void 0,W)},exports.getUrlRecord=async(e,t)=>await ne(e,t,exports.Record.Url),exports.performReverseLookup=async function(e,t){const r=await L(t.toBase58()),a=await M(r,K),{registry:s}=await R.retrieve(e,a);if(!s.data)throw new Error("Could not retrieve name data");const n=new i(s.data.slice(0,4),"le").toNumber();return s.data.slice(4,4+n).toString()},exports.performReverseLookupBatch=async function(e,t){let r=[];for(let e of t){const t=await L(e.toBase58()),i=await M(t,K);r.push(i)}return(await R.retrieveBatch(e,r)).map((e=>{if(void 0===e||void 0===e.data)return;let t=new i(e.data.slice(0,4),"le").toNumber();return e.data.slice(4,4+t).toString()}))},exports.registerDomainName=async(t,i,a,s,o,c=D,u)=>{const[p]=e.PublicKey.findProgramAddressSync([P.toBuffer()],P),l=G(i),f=Y(l,void 0,B),d=G(f.toBase58()),y=Y(d,p),[w]=e.PublicKey.findProgramAddressSync([f.toBuffer()],P),g=_.findIndex((e=>null==u?void 0:u.equals(e)));let b;const h=[];if(-1!==g&&u){b=r.getAssociatedTokenAddressSync(c,u,!0);const e=await t.getAccountInfo(b);if(!(null==e?void 0:e.data)){const e=r.createAssociatedTokenAccountInstruction(s,b,u,c);h.push(e)}}const S=new n.PythHttpClient(t,n.getPythProgramKeyForCluster("mainnet-beta")),R=await S.getData(),x=O.get(c.toBase58());if(!x)throw new Error("Symbol not found");const v=R.productPrice.get("Crypto."+x+"/USD"),E=R.productFromSymbol.get("Crypto."+x+"/USD"),A=r.getAssociatedTokenAddressSync(c,z),I=new m({name:i,space:a,referrerIdxOpt:-1!=g?g:null}).getInstruction(P,k,B,f,y,e.SystemProgram.programId,p,s,o,H,v.productAccountKey,new e.PublicKey(E.price_account),A,r.TOKEN_PROGRAM_ID,e.SYSVAR_RENT_PUBKEY,w,b);return h.push(I),[[],h]},exports.resolve=async(r,i)=>{const{pubkey:a}=q(i),{registry:s,nftOwner:n}=await R.retrieve(r,a);if(n)return n;try{const a=q(exports.Record.SOL+"."+i,!0),n=await oe(r,i);if(!n.data)throw new Error("Invalid SOL record data");const o=new TextEncoder,c=t.Buffer.concat([n.data.slice(0,32),a.pubkey.toBuffer()]),u=o.encode(c.toString("hex"));if(!ce(u,n.data.slice(32),s.owner))throw new Error("Signature invalid");return new e.PublicKey(n.data.slice(0,32))}catch(e){if(e instanceof Error&&"FetchError"===e.name)throw e;console.log(e)}return s.owner},exports.retrieveNftOwner=S,exports.retrieveNfts=async t=>{const r=await t.getProgramAccounts(b,{filters:[{memcmp:{offset:0,bytes:"3"}}]});return r.map((t=>new e.PublicKey(t.account.data.slice(66,98))))},exports.reverseLookup=j,exports.reverseLookupBatch=async function(e,t){let r=[];for(let e of t){const t=G(e.toBase58()),i=Y(t,K);r.push(i)}return(await R.retrieveBatch(e,r)).map((e=>{if(void 0===e||void 0===e.data)return;let t=new i(e.data.slice(0,4),"le").toNumber();return e.data.slice(4,4+t).toString()}))},exports.transferInstruction=d,exports.transferNameOwnership=async function(e,t,r,i,a,s){const n=await L(t),o=await M(n,i,a);let c;return c=i||(await R.retrieve(e,o)).registry.owner,d(k,o,r,c,i,a,s)},exports.updateInstruction=f,exports.updateNameRegistryData=async function(e,t,r,i,a,s){const n=await L(t),o=await M(n,a,s);let c;return c=a||(await R.retrieve(e,o)).registry.owner,f(k,o,new u(r),i,c)};
1
+ "use strict";var e=require("@solana/web3.js"),t=require("buffer"),r=require("@solana/spl-token"),i=require("bn.js"),a=require("borsh"),s=require("@bonfida/name-tokenizer"),n=require("@ethersproject/sha2"),o=require("@pythnetwork/client");function c(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var i=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var u=c(require("tweetnacl"));class p extends i{toBuffer(){const e=super.toArray().reverse(),r=t.Buffer.from(e);if(4===r.length)return r;if(r.length>4)throw new Error("Numberu32 too large");const i=t.Buffer.alloc(4);return r.copy(i),i}static fromBuffer(e){if(4!==e.length)throw new Error(`Invalid buffer length: ${e.length}`);return new i([...e].reverse().map((e=>`00${e.toString(16)}`.slice(-2))).join(""),16)}}class l extends i{toBuffer(){const e=super.toArray().reverse(),r=t.Buffer.from(e);if(8===r.length)return r;if(r.length>8)throw new Error("Numberu64 too large");const i=t.Buffer.alloc(8);return r.copy(i),i}static fromBuffer(e){if(8!==e.length)throw new Error(`Invalid buffer length: ${e.length}`);return new i([...e].reverse().map((e=>`00${e.toString(16)}`.slice(-2))).join(""),16)}}function f(r,i,a,s,n,o,c,u,l,f,d){const y=[t.Buffer.from(Int8Array.from([0])),new p(o.length).toBuffer(),o,c.toBuffer(),u.toBuffer()],w=t.Buffer.concat(y),g=[{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1}];return l?g.push({pubkey:l,isSigner:!0,isWritable:!1}):g.push({pubkey:new e.PublicKey(t.Buffer.alloc(32)),isSigner:!1,isWritable:!1}),f?g.push({pubkey:f,isSigner:!1,isWritable:!1}):g.push({pubkey:new e.PublicKey(t.Buffer.alloc(32)),isSigner:!1,isWritable:!1}),d&&g.push({pubkey:d,isSigner:!0,isWritable:!1}),new e.TransactionInstruction({keys:g,programId:r,data:w})}function d(r,i,a,s,n){const o=[t.Buffer.from(Int8Array.from([1])),a.toBuffer(),new p(s.length).toBuffer(),s],c=t.Buffer.concat(o),u=[{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1}];return new e.TransactionInstruction({keys:u,programId:r,data:c})}function y(r,i,a,s,n,o,c){const u=[t.Buffer.from(Int8Array.from([2])),a.toBuffer()],p=t.Buffer.concat(u),l=[{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:c||s,isSigner:!0,isWritable:!1}];return n&&l.push({pubkey:n,isSigner:!0,isWritable:!1}),c&&o&&(n||l.push({pubkey:e.PublicKey.default,isSigner:!1,isWritable:!1}),l.push({pubkey:o,isSigner:!1,isWritable:!1})),new e.TransactionInstruction({keys:l,programId:r,data:p})}function w(r,i,a,s){const n=[t.Buffer.from(Int8Array.from([3]))],o=t.Buffer.concat(n),c=[{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0}];return new e.TransactionInstruction({keys:c,programId:r,data:o})}class g{constructor(e){this.tag=9,this.name=e.name,this.space=e.space}serialize(){return a.serialize(g.schema,this)}getInstruction(i,a,s,n,o,c,u,p,l,f,d){const y=t.Buffer.from(this.serialize()),w=[{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:e.SystemProgram.programId,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!0,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:r.TOKEN_PROGRAM_ID,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1}];return new e.TransactionInstruction({keys:w,programId:i,data:y})}}g.schema=new Map([[g,{kind:"struct",fields:[["tag","u8"],["name","string"],["space","u32"]]}]]);class m{constructor(e){this.tag=5,this.name=e.name}serialize(){return a.serialize(m.schema,this)}getInstruction(r,i,a,s,n,o,c,u,p){const l=t.Buffer.from(this.serialize());let f=[{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:e.PublicKey.default,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!0,isWritable:!0}];if(u){if(!p)throw new Error("Missing parent name owner");f.push({pubkey:u,isSigner:!1,isWritable:!0}),f.push({pubkey:p,isSigner:!0,isWritable:!1})}return new e.TransactionInstruction({keys:f,programId:r,data:l})}}m.schema=new Map([[m,{kind:"struct",fields:[["tag","u8"],["name","string"]]}]]);class b{constructor(e){this.tag=13,this.name=e.name,this.space=e.space,this.referrerIdxOpt=e.referrerIdxOpt}serialize(){return a.serialize(b.schema,this)}getInstruction(r,i,a,s,n,o,c,u,p,l,f,d,y,w,g,m,b){const h=t.Buffer.from(this.serialize());let S=[];return S.push({pubkey:i,isSigner:!1,isWritable:!1}),S.push({pubkey:a,isSigner:!1,isWritable:!1}),S.push({pubkey:s,isSigner:!1,isWritable:!0}),S.push({pubkey:n,isSigner:!1,isWritable:!0}),S.push({pubkey:o,isSigner:!1,isWritable:!1}),S.push({pubkey:c,isSigner:!1,isWritable:!1}),S.push({pubkey:u,isSigner:!0,isWritable:!0}),S.push({pubkey:p,isSigner:!1,isWritable:!0}),S.push({pubkey:l,isSigner:!1,isWritable:!1}),S.push({pubkey:f,isSigner:!1,isWritable:!1}),S.push({pubkey:d,isSigner:!1,isWritable:!1}),S.push({pubkey:y,isSigner:!1,isWritable:!0}),S.push({pubkey:w,isSigner:!1,isWritable:!1}),S.push({pubkey:g,isSigner:!1,isWritable:!1}),S.push({pubkey:m,isSigner:!1,isWritable:!1}),b&&S.push({pubkey:b,isSigner:!1,isWritable:!0}),new e.TransactionInstruction({keys:S,programId:r,data:h})}}b.schema=new Map([[b,{kind:"struct",fields:[["tag","u8"],["name","string"],["space","u32"],["referrerIdxOpt",{kind:"option",type:"u16"}]]}]]);const h=new e.PublicKey("namesLPneVptA9Z5rqUDD9tMTWEJwofgaYwp8cawRkX"),S="SPL Name Service",R=new e.PublicKey("58PwtjSDuFHuUkYjH9BYnnQKHfwo9reZhC2zMJv9JPkx"),x=new e.PublicKey("jCebN34bUfdeUYJT13J1yG16XWQpt5PDx6Mse9GUqhR"),k=new e.PublicKey("ETp9eKXVv1dWwHSpsXRUuXHmw24PwRkttCGVgpZEY9zF"),v=new e.PublicKey("AUoZ3YAhV3b2rZeEH93UMZHXUZcTramBvb4d9YEVySkc"),E=new e.PublicKey("33m47vH6Eav6jr5Ry86XjhRft2jRBLDnDgPSHoquXi2Z"),B=new e.PublicKey("FvPH7PrVrLGKPfqaf3xJodFTjZriqrAXXLTVWEorTFBi"),P=new e.PublicKey("4YcexoW3r78zz16J2aqmukBLRwGq6rAvWzJpkYAXqebv"),A=new e.PublicKey("DmSyHDSM9eSLyvoLsPvDr5fRRFZ7Bfr3h3ULvWpgQaq7"),I=new e.PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),T=[new e.PublicKey("3ogYncmMM5CmytsGCqKHydmXmKUZ6sGWvizkzqwT7zb1"),new e.PublicKey("DM1jJCkZZEwY5tmWbgvKRxsDFzXCdbfrYCCH1CtwguEs")],K=new Map([["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","USDC"],["Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB","USDT"],["So11111111111111111111111111111111111111112","SOL"],["EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp","FIDA"],["FeGn77dhg1KXRRFeSwwMiykZnZPw5JXW6naf2aQgZDQf","ETH"],["7i5KKsX2weiTkry7jA4ZwSuXGhs5eJBEjY8vVxR4pfRx","GMT"],["AFbX8oGjGpmVFywbVouvhQSRmiW2aR1mohfahi4Y2AdB","GST"],["mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So","MSOL"],["DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263","BONK"],["EPeUFDgHRxs9xxEPVaL6kfGQvCon7jmAWKVUHuux1Tpz","BAT"]]),W=new e.PublicKey("AHtgzX45WTKfkPG53L6WYhGEXwQkN1BVknET3sVsLL8J"),N=new e.PublicKey("GcWEQ9K78FV7LEHteFVciYApERk5YvQuFDQPk1yYJVXi"),D=e=>{const r=S+e,i=n.sha256(t.Buffer.from(r,"utf8")).slice(2);return t.Buffer.from(i,"hex")},_=(r,i,a)=>{const s=[r];i?s.push(i.toBuffer()):s.push(t.Buffer.alloc(32)),a?s.push(a.toBuffer()):s.push(t.Buffer.alloc(32));const[n]=e.PublicKey.findProgramAddressSync(s,h);return n};async function O(e,t){const r=D(t.toBase58()),a=_(r,E),{registry:s}=await U.retrieve(e,a);if(!s.data)throw new Error("Could not retrieve name data");const n=new i(s.data.slice(0,4),"le").toNumber();return s.data.slice(4,4+n).toString()}async function z(e,t){let r=[];for(let e of t){const t=D(e.toBase58()),i=_(t,E);r.push(i)}return(await U.retrieveBatch(e,r)).map((e=>{if(void 0===e||void 0===e.data)return;let t=new i(e.data.slice(0,4),"le").toNumber();return e.data.slice(4,4+t).toString()}))}const H=(e,t=R)=>{let r=D(e);return{pubkey:_(r,void 0,t),hashed:r}},M=(e,r=!1)=>{e.endsWith(".sol")&&(e=e.slice(0,-4));const i=e.split(".");if(2===i.length){const e=t.Buffer.from([r?1:0]).toString().concat(i[0]),{pubkey:a}=H(i[1]);return{...H(e,a),isSub:!0,parent:a}}if(3===i.length&&r){const{pubkey:e}=H(i[2]),{pubkey:r}=H("\0".concat(i[1]),e),a=t.Buffer.from([1]).toString();return{...H(a.concat(i[0]),r),isSub:!0,parent:e,isSubRecord:!0}}if(i.length>=3)throw new Error("Invalid derivation input");return{...H(e,R),isSub:!1,parent:void 0}};const F=async(t,i)=>{try{const[a]=await e.PublicKey.findProgramAddress([s.MINT_PREFIX,i.toBuffer()],s.NAME_TOKENIZER_ID);if("0"===(await r.getMint(t,a)).supply.toString())return;const n=[{memcmp:{offset:0,bytes:a.toBase58()}},{memcmp:{offset:64,bytes:"2"}},{dataSize:165}],o=await t.getProgramAccounts(r.TOKEN_PROGRAM_ID,{filters:n});if(1!=o.length)return;return new e.PublicKey(o[0].account.data.slice(32,64))}catch{return}},L=e=>[{memcmp:{offset:32,bytes:e}},{memcmp:{offset:64,bytes:"2"}}],C=async(e,t)=>{const i=[...L(t.toBase58()),{dataSize:165}],a=(await e.getProgramAccounts(r.TOKEN_PROGRAM_ID,{filters:i})).map((e=>r.AccountLayout.decode(e.account.data))).map((t=>(async(e,t)=>{const r=await s.getRecordFromMint(e,t.mint);if(1===r.length)return s.NftRecord.deserialize(r[0].account.data)})(e,t)));return(await Promise.all(a)).filter((e=>void 0!==e))};class U{constructor(t){this.parentName=new e.PublicKey(t.parentName),this.owner=new e.PublicKey(t.owner),this.class=new e.PublicKey(t.class)}static async retrieve(e,t){var r;const i=await e.getAccountInfo(t);if(!i)throw new Error("Invalid name account provided");let s=a.deserializeUnchecked(this.schema,U,i.data);s.data=null===(r=i.data)||void 0===r?void 0:r.slice(this.HEADER_LEN);return{registry:s,nftOwner:await F(e,t)}}static async _retrieveBatch(e,t){const r=await e.getMultipleAccountsInfo(t),i=e=>{if(!e)return;const t=a.deserializeUnchecked(this.schema,U,e);return t.data=null==e?void 0:e.slice(this.HEADER_LEN),t};return r.map((e=>i(null==e?void 0:e.data)))}static async retrieveBatch(e,t){let r=[];const i=[...t];for(;i.length>0;)r.push(...await this._retrieveBatch(e,i.splice(0,100)));return r}}U.HEADER_LEN=96,U.schema=new Map([[U,{kind:"struct",fields:[["parentName",[32]],["owner",[32]],["class",[32]]]}]]);class G{constructor(e){this.name=e.name,this.ticker=e.ticker,this.mint=e.mint,this.decimals=e.decimals,this.website=null==e?void 0:e.website,this.logoUri=null==e?void 0:e.logoUri}serialize(){return a.serialize(G.schema,this)}static deserialize(e){return a.deserializeUnchecked(G.schema,G,e)}}G.schema=new Map([[G,{kind:"struct",fields:[["name","string"],["ticker","string"],["mint",[32]],["decimals","u8"],["website",{kind:"option",type:"string"}],["logoUri",{kind:"option",type:"string"}]]}]]);class Y{constructor(e){this.mint=e.mint}serialize(){return a.serialize(Y.schema,this)}static deserialize(e){return a.deserializeUnchecked(Y.schema,Y,e)}}async function V(e,t){if(!await e.getAccountInfo(t))throw new Error("Unable to find the given account.");return U.retrieve(e,t)}async function j(e){const r=S+e,i=n.sha256(t.Buffer.from(r,"utf8")).slice(2);return t.Buffer.from(i,"hex")}async function q(r,i,a){const s=[r];i?s.push(i.toBuffer()):s.push(t.Buffer.alloc(32)),a?s.push(a.toBuffer()):s.push(t.Buffer.alloc(32));const[n]=await e.PublicKey.findProgramAddress(s,h);return n}Y.schema=new Map([[Y,{kind:"struct",fields:[["mint",[32]]]}]]);const X=async(e,t=R)=>{let r=await j(e);return{pubkey:await q(r,void 0,t),hashed:r}},Z=async(e,r=!1)=>{e.endsWith(".sol")&&(e=e.slice(0,-4));const i=e.split(".");if(2===i.length){const e=t.Buffer.from([r?1:0]).toString().concat(i[0]),{pubkey:a}=await X(i[1]);return{...await X(e,a),isSub:!0,parent:a}}if(3===i.length&&r){const{pubkey:e}=await X(i[2]),{pubkey:r}=await X("\0".concat(i[1]),e),a=t.Buffer.from([1]).toString();return{...await X(a.concat(i[0]),r),isSub:!0,parent:e,isSubRecord:!0}}if(i.length>=3)throw new Error("Invalid derivation input");return{...await X(e,R),isSub:!1,parent:void 0}};async function J(t,r,i,a,s,n,o,c){const u=await j(r),d=await q(u,o,c),y=n||await t.getMinimumBalanceForRentExemption(i);let w;if(c){const{registry:e}=await V(t,c);w=e.owner}return f(h,e.SystemProgram.programId,d,s,a,u,new l(y),new p(i),o,c,w)}async function Q(e,t,r,i,a){const s=await j(t),n=await q(s,i,a);let o;o=i||(await U.retrieve(e,n)).registry.owner;return w(h,n,r,o)}const $=async(t,r,i,a,s)=>{let[n]=await e.PublicKey.findProgramAddress([x.toBuffer()],x),o=await j(t.toBase58()),c=await q(o,n,a);return[[],[new m({name:r}).getInstruction(x,e.SYSVAR_RENT_PUBKEY,h,R,c,n,i,a,s)]]};class ee{constructor(e){this.twitterRegistryKey=e.twitterRegistryKey,this.twitterHandle=e.twitterHandle}static async retrieve(e,t){let r=await e.getAccountInfo(t,"processed");if(!r)throw new Error("Invalid reverse Twitter account provided");return a.deserializeUnchecked(this.schema,ee,r.data.slice(U.HEADER_LEN))}}async function te(r,i,s,n,o){const c=await j(n.toString()),u=await q(c,B,P);let y=a.serialize(ee.schema,new ee({twitterRegistryKey:s.toBytes(),twitterHandle:i}));return[f(h,e.SystemProgram.programId,u,n,o,c,new l(await r.getMinimumBalanceForRentExemption(y.length+U.HEADER_LEN)),new p(y.length),B,P,B),d(h,u,new p(0),t.Buffer.from(y),B)]}ee.schema=new Map([[ee,{kind:"struct",fields:[["twitterRegistryKey",[32]],["twitterHandle","string"]]}]]);const re=new e.PublicKey("6NSu2tci4apRKQtt257bAVcvqYjB3zV2H1dWo56vgpa6"),ie=async(e,t)=>{const r=await q(await j(t.toBase58()),void 0,re),{registry:i}=await U.retrieve(e,r);if(!i.data)throw new Error("Invalid account data");return G.deserialize(i.data)},ae=new e.PublicKey("85iDfUvr3HJyLM2zcq5BXSiDvUWfw6cSE1FfNBo8Ap29");class se{constructor(t){this.tag=t.tag,this.nameAccount=new e.PublicKey(t.nameAccount)}static deserialize(e){return a.deserialize(this.schema,se,e)}static async retrieve(e,t){const r=await e.getAccountInfo(t);if(!r||!r.data)throw new Error("Favourite domain not found");return this.deserialize(r.data)}static async getKey(r,i){return await e.PublicKey.findProgramAddress([t.Buffer.from("favourite_domain"),i.toBuffer()],r)}static getKeySync(r,i){return e.PublicKey.findProgramAddressSync([t.Buffer.from("favourite_domain"),i.toBuffer()],r)}}se.schema=new Map([[se,{kind:"struct",fields:[["tag","u8"],["nameAccount",[32]]]}]]);var ne;exports.Record=void 0,(ne=exports.Record||(exports.Record={})).IPFS="IPFS",ne.ARWV="ARWV",ne.SOL="SOL",ne.ETH="ETH",ne.BTC="BTC",ne.LTC="LTC",ne.DOGE="DOGE",ne.Email="email",ne.Url="url",ne.Discord="discord",ne.Github="github",ne.Reddit="reddit",ne.Twitter="twitter",ne.Telegram="telegram",ne.Pic="pic",ne.SHDW="SHDW",ne.POINT="POINT",ne.BSC="BSC",ne.Injective="INJ",ne.Backpack="backpack";const oe=(e,t)=>{const{pubkey:r}=M(t+"."+e,!0);return r},ce=async(e,t,r)=>{var i,a;const s=oe(t,r);let{registry:n}=await U.retrieve(e,s);const o=r===exports.Record.SOL?96:null===(i=n.data)||void 0===i?void 0:i.indexOf(0);return n.data=null===(a=n.data)||void 0===a?void 0:a.slice(0,o),n},ue=async(e,t)=>await ce(e,t,exports.Record.SOL),pe=(e,t,r)=>u.sign.detached.verify(e,t,r.toBytes());exports.BONFIDA_FIDA_BNB=v,exports.BONFIDA_USDC_BNB=A,exports.FavouriteDomain=se,exports.HASH_PREFIX=S,exports.Mint=Y,exports.NAME_OFFERS_ID=ae,exports.NAME_PROGRAM_ID=h,exports.NameRegistryState=U,exports.Numberu32=p,exports.Numberu64=l,exports.PYTH_FIDA_PRICE_ACC=k,exports.PYTH_MAPPING_ACC=W,exports.REFERRERS=T,exports.REGISTER_PROGRAM_ID=x,exports.REVERSE_LOOKUP_CLASS=E,exports.ROOT_DOMAIN_ACCOUNT=R,exports.ReverseTwitterRegistryState=ee,exports.SOL_RECORD_SIG_LEN=96,exports.TOKENS_SYM_MINT=K,exports.TOKEN_TLD=re,exports.TWITTER_ROOT_PARENT_REGISTRY_KEY=P,exports.TWITTER_VERIFICATION_AUTHORITY=B,exports.TokenData=G,exports.USDC_MINT=I,exports.VAULT_OWNER=N,exports.changeTwitterRegistryData=async function(e,t,r,i){const a=await j(e),s=await q(a,void 0,P);return[d(h,s,new p(r),i,t)]},exports.changeVerifiedPubkey=async function(e,t,r,i,a){const s=await j(t),n=await q(s,void 0,P);let o=[y(h,n,i,r,void 0)];const c=await j(r.toString());return await q(c,B,void 0),o.push(await Q(e,r.toString(),a,B,P)),o=o.concat(await te(e,t,n,i,a)),o},exports.checkSolRecord=pe,exports.createInstruction=f,exports.createInstructionV3=b,exports.createNameRegistry=J,exports.createReverseInstruction=m,exports.createReverseName=$,exports.createReverseTwitterRegistry=te,exports.createSubdomain=async(e,t,r,i=2e3)=>{const a=[],s=t.split(".")[0];if(!s)throw new Error("Invalid subdomain input");const{parent:n,pubkey:o}=M(t),c=await e.getMinimumBalanceForRentExemption(i+U.HEADER_LEN),u=await J(e,"\0".concat(s),i,r,r,c,void 0,n);a.push(u);const[,p]=await $(o,"\0".concat(s),r,n,r);return a.push(...p),[[],a]},exports.createV2Instruction=g,exports.createVerifiedTwitterRegistry=async function(t,r,i,a,s){const n=await j(r),o=await q(n,void 0,P),c=await t.getMinimumBalanceForRentExemption(a+U.HEADER_LEN);let u=[f(h,e.SystemProgram.programId,o,i,s,n,new l(c),new p(a),void 0,P,B)];return u=u.concat(await te(t,r,o,i,s)),u},exports.deleteInstruction=w,exports.deleteNameRegistry=Q,exports.deleteTwitterRegistry=async function(e,t){const r=await j(e),i=await q(r,void 0,P),a=await j(t.toString()),s=await q(a,B,P);return[w(h,i,t,t),w(h,s,t,t)]},exports.findSubdomains=async(e,t)=>{const r=[{memcmp:{offset:0,bytes:t.toBase58()}},{memcmp:{offset:64,bytes:E.toBase58()}}],i=await e.getProgramAccounts(h,{filters:r}),a=await O(e,t),s=i.map((e=>{var t;return null===(t=e.account.data.slice(97).toString("utf-8"))||void 0===t?void 0:t.split("\0").join("")})),n=s.map((e=>M(e+"."+a).pubkey)),o=await e.getMultipleAccountsInfo(n);return s.filter(((e,t)=>!!o[t]))},exports.getAllDomains=async function(e,t){const r=[{memcmp:{offset:32,bytes:t.toBase58()}},{memcmp:{offset:0,bytes:R.toBase58()}}];return(await e.getProgramAccounts(h,{filters:r})).map((e=>e.pubkey))},exports.getAllRegisteredDomains=async e=>{const t=[{memcmp:{offset:0,bytes:R.toBase58()}}];return await e.getProgramAccounts(h,{dataSlice:{offset:32,length:32},filters:t})},exports.getArweaveRecord=async(e,t)=>await ce(e,t,exports.Record.ARWV),exports.getBackpackRecord=async(e,t)=>await ce(e,t,exports.Record.Backpack),exports.getBscRecord=async(e,t)=>await ce(e,t,exports.Record.BSC),exports.getBtcRecord=async(e,t)=>await ce(e,t,exports.Record.BTC),exports.getDiscordRecord=async(e,t)=>await ce(e,t,exports.Record.Discord),exports.getDogeRecord=async(e,t)=>await ce(e,t,exports.Record.DOGE),exports.getDomainKey=Z,exports.getDomainKeySync=M,exports.getEmailRecord=async(e,t)=>await ce(e,t,exports.Record.Email),exports.getEthRecord=async(e,t)=>await ce(e,t,exports.Record.ETH),exports.getFavoriteDomain=async(t,r)=>{const[i]=se.getKeySync(ae,new e.PublicKey(r)),a=await se.retrieve(t,i),s=await O(t,a.nameAccount);return{domain:a.nameAccount,reverse:s}},exports.getGithubRecord=async(e,t)=>await ce(e,t,exports.Record.Github),exports.getHandleAndRegistryKey=async function(t,r){const i=await j(r.toString()),a=await q(i,B,P);let s=await ee.retrieve(t,a);return[s.twitterHandle,new e.PublicKey(s.twitterRegistryKey)]},exports.getHashedName=j,exports.getHashedNameSync=D,exports.getInjectiveRecord=async(e,t)=>await ce(e,t,exports.Record.Injective),exports.getIpfsRecord=async(e,t)=>await ce(e,t,exports.Record.IPFS),exports.getLtcRecord=async(e,t)=>await ce(e,t,exports.Record.LTC),exports.getNameAccountKey=q,exports.getNameAccountKeySync=_,exports.getNameOwner=V,exports.getPicRecord=async(e,t)=>await ce(e,t,exports.Record.Pic),exports.getPointRecord=async(e,t)=>await ce(e,t,exports.Record.POINT),exports.getRecord=ce,exports.getRecordKeySync=oe,exports.getRedditRecord=async(e,t)=>await ce(e,t,exports.Record.Reddit),exports.getReverseKey=async(e,t)=>{const{pubkey:r,parent:i}=await Z(e),a=await j(r.toBase58());return await q(a,E,t?i:void 0)},exports.getReverseKeySync=(e,t)=>{const{pubkey:r,parent:i}=M(e),a=D(r.toBase58());return _(a,E,t?i:void 0)},exports.getShdwRecord=async(e,t)=>await ce(e,t,exports.Record.SHDW),exports.getSolRecord=ue,exports.getTelegramRecord=async(e,t)=>await ce(e,t,exports.Record.Telegram),exports.getTokenInfoFromMint=ie,exports.getTokenInfoFromName=async(t,r)=>{const i=await q(await j(r),void 0,re),{registry:a}=await U.retrieve(t,i);if(!a.data)throw new Error("Invalid account data");const s=new e.PublicKey(Y.deserialize(a.data).mint);return await ie(t,s)},exports.getTokenizedDomains=async(e,t)=>{const r=await C(e,t);return(await z(e,r.map((e=>e.nameAccount)))).map(((e,t)=>({key:r[t].nameAccount,mint:r[t].nftMint,reverse:e}))).filter((e=>!!e.reverse))},exports.getTwitterHandleandRegistryKeyViaFilters=async function(t,r){const i=[{memcmp:{offset:0,bytes:P.toBase58()}},{memcmp:{offset:32,bytes:r.toBase58()}},{memcmp:{offset:64,bytes:B.toBase58()}}],s=await t.getProgramAccounts(h,{filters:i});for(const t of s)if(t.account.data.length>U.HEADER_LEN+32){let r=t.account.data.slice(U.HEADER_LEN),i=a.deserializeUnchecked(ee.schema,ee,r);return[i.twitterHandle,new e.PublicKey(i.twitterRegistryKey)]}throw new Error("Registry not found.")},exports.getTwitterRecord=async(e,t)=>await ce(e,t,exports.Record.Twitter),exports.getTwitterRegistry=async function(e,t){const r=await j(t),i=await q(r,void 0,P),{registry:a}=await U.retrieve(e,i);return a},exports.getTwitterRegistryData=async function(r,i){const a=[{memcmp:{offset:0,bytes:P.toBase58()}},{memcmp:{offset:32,bytes:i.toBase58()}},{memcmp:{offset:64,bytes:new e.PublicKey(t.Buffer.alloc(32,0)).toBase58()}}],s=await r.getProgramAccounts(h,{filters:a});if(s.length>1)throw new Error("Found more than one registry.");return s[0].account.data.slice(U.HEADER_LEN)},exports.getTwitterRegistryKey=async function(e){const t=await j(e);return await q(t,void 0,P)},exports.getUrlRecord=async(e,t)=>await ce(e,t,exports.Record.Url),exports.performReverseLookup=async function(e,t){const r=await j(t.toBase58()),a=await q(r,E),{registry:s}=await U.retrieve(e,a);if(!s.data)throw new Error("Could not retrieve name data");const n=new i(s.data.slice(0,4),"le").toNumber();return s.data.slice(4,4+n).toString()},exports.performReverseLookupBatch=async function(e,t){let r=[];for(let e of t){const t=await j(e.toBase58()),i=await q(t,E);r.push(i)}return(await U.retrieveBatch(e,r)).map((e=>{if(void 0===e||void 0===e.data)return;let t=new i(e.data.slice(0,4),"le").toNumber();return e.data.slice(4,4+t).toString()}))},exports.registerDomainName=async(t,i,a,s,n,c=I,u)=>{const[p]=e.PublicKey.findProgramAddressSync([x.toBuffer()],x),l=D(i),f=_(l,void 0,R),d=D(f.toBase58()),y=_(d,p),[w]=e.PublicKey.findProgramAddressSync([f.toBuffer()],x),g=T.findIndex((e=>null==u?void 0:u.equals(e)));let m;const S=[];if(-1!==g&&u){m=r.getAssociatedTokenAddressSync(c,u,!0);const e=await t.getAccountInfo(m);if(!(null==e?void 0:e.data)){const e=r.createAssociatedTokenAccountInstruction(s,m,u,c);S.push(e)}}const k=new o.PythHttpClient(t,o.getPythProgramKeyForCluster("mainnet-beta")),v=await k.getData(),E=K.get(c.toBase58());if(!E)throw new Error("Symbol not found");const B=v.productPrice.get("Crypto."+E+"/USD"),P=v.productFromSymbol.get("Crypto."+E+"/USD"),A=r.getAssociatedTokenAddressSync(c,N),O=new b({name:i,space:a,referrerIdxOpt:-1!=g?g:null}).getInstruction(x,h,R,f,y,e.SystemProgram.programId,p,s,n,W,B.productAccountKey,new e.PublicKey(P.price_account),A,r.TOKEN_PROGRAM_ID,e.SYSVAR_RENT_PUBKEY,w,m);return S.push(O),[[],S]},exports.resolve=async(r,i)=>{const{pubkey:a}=M(i),{registry:s,nftOwner:n}=await U.retrieve(r,a);if(n)return n;try{const a=M(exports.Record.SOL+"."+i,!0),n=await ue(r,i);if(!n.data)throw new Error("Invalid SOL record data");const o=new TextEncoder,c=t.Buffer.concat([n.data.slice(0,32),a.pubkey.toBuffer()]),u=o.encode(c.toString("hex"));if(!pe(u,n.data.slice(32),s.owner))throw new Error("Signature invalid");return new e.PublicKey(n.data.slice(0,32))}catch(e){if(e instanceof Error&&"FetchError"===e.name)throw e;console.log(e)}return s.owner},exports.retrieveNftOwner=F,exports.retrieveNfts=async t=>{const r=await t.getProgramAccounts(s.NAME_TOKENIZER_ID,{filters:[{memcmp:{offset:0,bytes:"3"}}]});return r.map((t=>new e.PublicKey(t.account.data.slice(66,98))))},exports.reverseLookup=O,exports.reverseLookupBatch=z,exports.transferInstruction=y,exports.transferNameOwnership=async function(e,t,r,i,a,s){const n=await j(t),o=await q(n,i,a);let c;return c=i||(await U.retrieve(e,o)).registry.owner,y(h,o,r,c,i,a,s)},exports.updateInstruction=d,exports.updateNameRegistryData=async function(e,t,r,i,a,s){const n=await j(t),o=await q(n,a,s);let c;return c=a||(await U.retrieve(e,o)).registry.owner,d(h,o,new p(r),i,c)};
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{PublicKey as t,TransactionInstruction as e,SystemProgram as r,SYSVAR_RENT_PUBKEY as i}from"@solana/web3.js";import{Buffer as a}from"buffer";import{TOKEN_PROGRAM_ID as n,getMint as s,getAssociatedTokenAddressSync as o,createAssociatedTokenAccountInstruction as c}from"@solana/spl-token";import u from"bn.js";import{serialize as w,deserializeUnchecked as l,deserialize as f}from"borsh";import{sha256 as p}from"@ethersproject/sha2";import{PythHttpClient as d,getPythProgramKeyForCluster as y}from"@pythnetwork/client";import*as m from"tweetnacl";class g extends u{toBuffer(){const t=super.toArray().reverse(),e=a.from(t);if(4===e.length)return e;if(e.length>4)throw new Error("Numberu32 too large");const r=a.alloc(4);return e.copy(r),r}static fromBuffer(t){if(4!==t.length)throw new Error(`Invalid buffer length: ${t.length}`);return new u([...t].reverse().map((t=>`00${t.toString(16)}`.slice(-2))).join(""),16)}}class b extends u{toBuffer(){const t=super.toArray().reverse(),e=a.from(t);if(8===e.length)return e;if(e.length>8)throw new Error("Numberu64 too large");const r=a.alloc(8);return e.copy(r),r}static fromBuffer(t){if(8!==t.length)throw new Error(`Invalid buffer length: ${t.length}`);return new u([...t].reverse().map((t=>`00${t.toString(16)}`.slice(-2))).join(""),16)}}function h(r,i,n,s,o,c,u,w,l,f,p){const d=[a.from(Int8Array.from([0])),new g(c.length).toBuffer(),c,u.toBuffer(),w.toBuffer()],y=a.concat(d),m=[{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1}];return l?m.push({pubkey:l,isSigner:!0,isWritable:!1}):m.push({pubkey:new t(a.alloc(32)),isSigner:!1,isWritable:!1}),f?m.push({pubkey:f,isSigner:!1,isWritable:!1}):m.push({pubkey:new t(a.alloc(32)),isSigner:!1,isWritable:!1}),p&&m.push({pubkey:p,isSigner:!0,isWritable:!1}),new e({keys:m,programId:r,data:y})}function S(t,r,i,n,s){const o=[a.from(Int8Array.from([1])),i.toBuffer(),new g(n.length).toBuffer(),n],c=a.concat(o);return new e({keys:[{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!0,isWritable:!1}],programId:t,data:c})}function v(r,i,n,s,o,c,u){const w=[a.from(Int8Array.from([2])),n.toBuffer()],l=a.concat(w),f=[{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:u||s,isSigner:!0,isWritable:!1}];return o&&f.push({pubkey:o,isSigner:!0,isWritable:!1}),u&&c&&(o||f.push({pubkey:t.default,isSigner:!1,isWritable:!1}),f.push({pubkey:c,isSigner:!1,isWritable:!1})),new e({keys:f,programId:r,data:l})}function k(t,r,i,n){const s=[a.from(Int8Array.from([3]))],o=a.concat(s);return new e({keys:[{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0}],programId:t,data:o})}class E{constructor(t){this.tag=9,this.name=t.name,this.space=t.space}serialize(){return w(E.schema,this)}getInstruction(t,i,s,o,c,u,w,l,f,p,d){const y=a.from(this.serialize()),m=[{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:r.programId,isSigner:!1,isWritable:!1},{pubkey:w,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1}];return new e({keys:m,programId:t,data:y})}}E.schema=new Map([[E,{kind:"struct",fields:[["tag","u8"],["name","string"],["space","u32"]]}]]);class W{constructor(t){this.tag=5,this.name=t.name}serialize(){return w(W.schema,this)}getInstruction(r,i,n,s,o,c,u,w,l){const f=a.from(this.serialize());let p=[{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:t.default,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!0,isWritable:!0}];if(w){if(!l)throw new Error("Missing parent name owner");p.push({pubkey:w,isSigner:!1,isWritable:!0}),p.push({pubkey:l,isSigner:!0,isWritable:!1})}return new e({keys:p,programId:r,data:f})}}W.schema=new Map([[W,{kind:"struct",fields:[["tag","u8"],["name","string"]]}]]);class B{constructor(t){this.tag=13,this.name=t.name,this.space=t.space,this.referrerIdxOpt=t.referrerIdxOpt}serialize(){return w(B.schema,this)}getInstruction(t,r,i,n,s,o,c,u,w,l,f,p,d,y,m,g,b){const h=a.from(this.serialize());let S=[];return S.push({pubkey:r,isSigner:!1,isWritable:!1}),S.push({pubkey:i,isSigner:!1,isWritable:!1}),S.push({pubkey:n,isSigner:!1,isWritable:!0}),S.push({pubkey:s,isSigner:!1,isWritable:!0}),S.push({pubkey:o,isSigner:!1,isWritable:!1}),S.push({pubkey:c,isSigner:!1,isWritable:!1}),S.push({pubkey:u,isSigner:!0,isWritable:!0}),S.push({pubkey:w,isSigner:!1,isWritable:!0}),S.push({pubkey:l,isSigner:!1,isWritable:!1}),S.push({pubkey:f,isSigner:!1,isWritable:!1}),S.push({pubkey:p,isSigner:!1,isWritable:!1}),S.push({pubkey:d,isSigner:!1,isWritable:!0}),S.push({pubkey:y,isSigner:!1,isWritable:!1}),S.push({pubkey:m,isSigner:!1,isWritable:!1}),S.push({pubkey:g,isSigner:!1,isWritable:!1}),b&&S.push({pubkey:b,isSigner:!1,isWritable:!0}),new e({keys:S,programId:t,data:h})}}B.schema=new Map([[B,{kind:"struct",fields:[["tag","u8"],["name","string"],["space","u32"],["referrerIdxOpt",{kind:"option",type:"u16"}]]}]]);const A=new t("nftD3vbNkNqfj2Sd3HZwbpw4BxxKWr4AjGb9X38JeZk"),I=a.from("tokenized_name"),R=async(e,r)=>{try{const[i]=await t.findProgramAddress([I,r.toBuffer()],A);if("0"===(await s(e,i)).supply.toString())return;const a=[{memcmp:{offset:0,bytes:i.toBase58()}},{memcmp:{offset:64,bytes:"2"}},{dataSize:165}],o=await e.getProgramAccounts(n,{filters:a});if(1!=o.length)return;return new t(o[0].account.data.slice(32,64))}catch{return}},D=async e=>{const r=await e.getProgramAccounts(A,{filters:[{memcmp:{offset:0,bytes:"3"}}]});return r.map((e=>new t(e.account.data.slice(66,98))))};class H{constructor(e){this.parentName=new t(e.parentName),this.owner=new t(e.owner),this.class=new t(e.class)}static async retrieve(t,e){var r;const i=await t.getAccountInfo(e);if(!i)throw new Error("Invalid name account provided");let a=l(this.schema,H,i.data);a.data=null===(r=i.data)||void 0===r?void 0:r.slice(this.HEADER_LEN);return{registry:a,nftOwner:await R(t,e)}}static async _retrieveBatch(t,e){const r=await t.getMultipleAccountsInfo(e),i=t=>{if(!t)return;const e=l(this.schema,H,t);return e.data=null==t?void 0:t.slice(this.HEADER_LEN),e};return r.map((t=>i(null==t?void 0:t.data)))}static async retrieveBatch(t,e){let r=[];const i=[...e];for(;i.length>0;)r.push(...await this._retrieveBatch(t,i.splice(0,100)));return r}}H.HEADER_LEN=96,H.schema=new Map([[H,{kind:"struct",fields:[["parentName",[32]],["owner",[32]],["class",[32]]]}]]);class P{constructor(t){this.name=t.name,this.ticker=t.ticker,this.mint=t.mint,this.decimals=t.decimals,this.website=null==t?void 0:t.website,this.logoUri=null==t?void 0:t.logoUri}serialize(){return w(P.schema,this)}static deserialize(t){return l(P.schema,P,t)}}P.schema=new Map([[P,{kind:"struct",fields:[["name","string"],["ticker","string"],["mint",[32]],["decimals","u8"],["website",{kind:"option",type:"string"}],["logoUri",{kind:"option",type:"string"}]]}]]);class L{constructor(t){this.mint=t.mint}serialize(){return w(L.schema,this)}static deserialize(t){return l(L.schema,L,t)}}L.schema=new Map([[L,{kind:"struct",fields:[["mint",[32]]]}]]);const z=new t("namesLPneVptA9Z5rqUDD9tMTWEJwofgaYwp8cawRkX"),T="SPL Name Service",N=new t("58PwtjSDuFHuUkYjH9BYnnQKHfwo9reZhC2zMJv9JPkx"),x=new t("jCebN34bUfdeUYJT13J1yG16XWQpt5PDx6Mse9GUqhR"),C=new t("ETp9eKXVv1dWwHSpsXRUuXHmw24PwRkttCGVgpZEY9zF"),F=new t("AUoZ3YAhV3b2rZeEH93UMZHXUZcTramBvb4d9YEVySkc"),M=new t("33m47vH6Eav6jr5Ry86XjhRft2jRBLDnDgPSHoquXi2Z"),G=new t("FvPH7PrVrLGKPfqaf3xJodFTjZriqrAXXLTVWEorTFBi"),K=new t("4YcexoW3r78zz16J2aqmukBLRwGq6rAvWzJpkYAXqebv"),j=96,U=new t("DmSyHDSM9eSLyvoLsPvDr5fRRFZ7Bfr3h3ULvWpgQaq7"),X=new t("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Y=[new t("3ogYncmMM5CmytsGCqKHydmXmKUZ6sGWvizkzqwT7zb1"),new t("DM1jJCkZZEwY5tmWbgvKRxsDFzXCdbfrYCCH1CtwguEs")],Z=new Map([["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","USDC"],["Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB","USDT"],["So11111111111111111111111111111111111111112","SOL"],["EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp","FIDA"],["FeGn77dhg1KXRRFeSwwMiykZnZPw5JXW6naf2aQgZDQf","ETH"],["7i5KKsX2weiTkry7jA4ZwSuXGhs5eJBEjY8vVxR4pfRx","GMT"],["AFbX8oGjGpmVFywbVouvhQSRmiW2aR1mohfahi4Y2AdB","GST"],["mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So","MSOL"],["DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263","BONK"],["EPeUFDgHRxs9xxEPVaL6kfGQvCon7jmAWKVUHuux1Tpz","BAT"]]),q=new t("AHtgzX45WTKfkPG53L6WYhGEXwQkN1BVknET3sVsLL8J"),O=new t("GcWEQ9K78FV7LEHteFVciYApERk5YvQuFDQPk1yYJVXi");async function V(t,e){if(!await t.getAccountInfo(e))throw new Error("Unable to find the given account.");return H.retrieve(t,e)}async function J(t){const e=T+t,r=p(a.from(e,"utf8")).slice(2);return a.from(r,"hex")}async function _(e,r,i){const n=[e];r?n.push(r.toBuffer()):n.push(a.alloc(32)),i?n.push(i.toBuffer()):n.push(a.alloc(32));const[s]=await t.findProgramAddress(n,z);return s}async function Q(t,e){const r=await J(e.toBase58()),i=await _(r,M),{registry:a}=await H.retrieve(t,i);if(!a.data)throw new Error("Could not retrieve name data");const n=new u(a.data.slice(0,4),"le").toNumber();return a.data.slice(4,4+n).toString()}async function $(t,e){let r=[];for(let t of e){const e=await J(t.toBase58()),i=await _(e,M);r.push(i)}return(await H.retrieveBatch(t,r)).map((t=>{if(void 0===t||void 0===t.data)return;let e=new u(t.data.slice(0,4),"le").toNumber();return t.data.slice(4,4+e).toString()}))}const tt=async(t,e=N)=>{let r=await J(t);return{pubkey:await _(r,void 0,e),hashed:r}},et=async(t,e=!1)=>{t.endsWith(".sol")&&(t=t.slice(0,-4));const r=t.split(".");if(2===r.length){const t=a.from([e?1:0]).toString().concat(r[0]),{pubkey:i}=await tt(r[1]);return{...await tt(t,i),isSub:!0,parent:i}}if(3===r.length&&e){const{pubkey:t}=await tt(r[2]),{pubkey:e}=await tt("\0".concat(r[1]),t),i=a.from([1]).toString();return{...await tt(i.concat(r[0]),e),isSub:!0,parent:t,isSubRecord:!0}}if(r.length>=3)throw new Error("Invalid derivation input");return{...await tt(t,N),isSub:!1,parent:void 0}},rt=async(t,e)=>{const{pubkey:r,parent:i}=await et(t),a=await J(r.toBase58());return await _(a,M,e?i:void 0)},it=t=>{const e=T+t,r=p(a.from(e,"utf8")).slice(2);return a.from(r,"hex")},at=(e,r,i)=>{const n=[e];r?n.push(r.toBuffer()):n.push(a.alloc(32)),i?n.push(i.toBuffer()):n.push(a.alloc(32));const[s]=t.findProgramAddressSync(n,z);return s};async function nt(t,e){const r=it(e.toBase58()),i=at(r,M),{registry:a}=await H.retrieve(t,i);if(!a.data)throw new Error("Could not retrieve name data");const n=new u(a.data.slice(0,4),"le").toNumber();return a.data.slice(4,4+n).toString()}async function st(t,e){let r=[];for(let t of e){const e=it(t.toBase58()),i=at(e,M);r.push(i)}return(await H.retrieveBatch(t,r)).map((t=>{if(void 0===t||void 0===t.data)return;let e=new u(t.data.slice(0,4),"le").toNumber();return t.data.slice(4,4+e).toString()}))}const ot=async(t,e)=>{const r=[{memcmp:{offset:0,bytes:e.toBase58()}},{memcmp:{offset:64,bytes:M.toBase58()}}],i=await t.getProgramAccounts(z,{filters:r}),a=await nt(t,e),n=i.map((t=>{var e;return null===(e=t.account.data.slice(97).toString("utf-8"))||void 0===e?void 0:e.split("\0").join("")})),s=n.map((t=>ut(t+"."+a).pubkey)),o=await t.getMultipleAccountsInfo(s);return n.filter(((t,e)=>!!o[e]))},ct=(t,e=N)=>{let r=it(t);return{pubkey:at(r,void 0,e),hashed:r}},ut=(t,e=!1)=>{t.endsWith(".sol")&&(t=t.slice(0,-4));const r=t.split(".");if(2===r.length){const t=a.from([e?1:0]).toString().concat(r[0]),{pubkey:i}=ct(r[1]);return{...ct(t,i),isSub:!0,parent:i}}if(3===r.length&&e){const{pubkey:t}=ct(r[2]),{pubkey:e}=ct("\0".concat(r[1]),t),i=a.from([1]).toString();return{...ct(i.concat(r[0]),e),isSub:!0,parent:t,isSubRecord:!0}}if(r.length>=3)throw new Error("Invalid derivation input");return{...ct(t,N),isSub:!1,parent:void 0}};async function wt(t,e){const r=[{memcmp:{offset:32,bytes:e.toBase58()}},{memcmp:{offset:0,bytes:N.toBase58()}}];return(await t.getProgramAccounts(z,{filters:r})).map((t=>t.pubkey))}const lt=async t=>{const e=[{memcmp:{offset:0,bytes:N.toBase58()}}];return await t.getProgramAccounts(z,{dataSlice:{offset:32,length:32},filters:e})},ft=(t,e)=>{const{pubkey:r,parent:i}=ut(t),a=it(r.toBase58());return at(a,M,e?i:void 0)};async function pt(t,e,i,a,n,s,o,c){const u=await J(e),w=await _(u,o,c),l=s||await t.getMinimumBalanceForRentExemption(i);let f;if(c){const{registry:e}=await V(t,c);f=e.owner}return h(z,r.programId,w,n,a,u,new b(l),new g(i),o,c,f)}async function dt(t,e,r,i,a,n){const s=await J(e),o=await _(s,a,n);let c;c=a||(await H.retrieve(t,o)).registry.owner;return S(z,o,new g(r),i,c)}async function yt(t,e,r,i,a,n){const s=await J(e),o=await _(s,i,a);let c;c=i||(await H.retrieve(t,o)).registry.owner;return v(z,o,r,c,i,a,n)}async function mt(t,e,r,i,a){const n=await J(e),s=await _(n,i,a);let o;o=i||(await H.retrieve(t,s)).registry.owner;return k(z,s,r,o)}const gt=async(e,a,s,u,w,l=X,f)=>{const[p]=t.findProgramAddressSync([x.toBuffer()],x),m=it(a),g=at(m,void 0,N),b=it(g.toBase58()),h=at(b,p),[S]=t.findProgramAddressSync([g.toBuffer()],x),v=Y.findIndex((t=>null==f?void 0:f.equals(t)));let k;const E=[];if(-1!==v&&f){k=o(l,f,!0);const t=await e.getAccountInfo(k);if(!(null==t?void 0:t.data)){const t=c(u,k,f,l);E.push(t)}}const W=new d(e,y("mainnet-beta")),A=await W.getData(),I=Z.get(l.toBase58());if(!I)throw new Error("Symbol not found");const R=A.productPrice.get("Crypto."+I+"/USD"),D=A.productFromSymbol.get("Crypto."+I+"/USD"),H=o(l,O),P=new B({name:a,space:s,referrerIdxOpt:-1!=v?v:null}).getInstruction(x,z,N,g,h,r.programId,p,u,w,q,R.productAccountKey,new t(D.price_account),H,n,i,S,k);return E.push(P),[[],E]},bt=async(e,r,a,n,s)=>{let[o]=await t.findProgramAddress([x.toBuffer()],x),c=await J(e.toBase58()),u=await _(c,o,n);return[[],[new W({name:r}).getInstruction(x,i,z,N,u,o,a,n,s)]]},ht=async(t,e,r,i=2e3)=>{const a=[],n=e.split(".")[0];if(!n)throw new Error("Invalid subdomain input");const{parent:s,pubkey:o}=ut(e),c=await t.getMinimumBalanceForRentExemption(i+H.HEADER_LEN),u=await pt(t,"\0".concat(n),i,r,r,c,void 0,s);a.push(u);const[,w]=await bt(o,"\0".concat(n),r,s,r);return a.push(...w),[[],a]};async function St(t,e,i,a,n){const s=await J(e),o=await _(s,void 0,K),c=await t.getMinimumBalanceForRentExemption(a+H.HEADER_LEN);let u=[h(z,r.programId,o,i,n,s,new b(c),new g(a),void 0,K,G)];return u=u.concat(await Ht(t,e,o,i,n)),u}async function vt(t,e,r,i){const a=await J(t),n=await _(a,void 0,K);return[S(z,n,new g(r),i,e)]}async function kt(t,e,r,i,a){const n=await J(e),s=await _(n,void 0,K);let o=[v(z,s,i,r,void 0)];const c=await J(r.toString());return await _(c,G,void 0),o.push(await mt(t,r.toString(),a,G,K)),o=o.concat(await Ht(t,e,s,i,a)),o}async function Et(t,e){const r=await J(t),i=await _(r,void 0,K),a=await J(e.toString()),n=await _(a,G,K);return[k(z,i,e,e),k(z,n,e,e)]}async function Wt(t){const e=await J(t);return await _(e,void 0,K)}async function Bt(t,e){const r=await J(e),i=await _(r,void 0,K),{registry:a}=await H.retrieve(t,i);return a}async function At(e,r){const i=await J(r.toString()),a=await _(i,G,K);let n=await Dt.retrieve(e,a);return[n.twitterHandle,new t(n.twitterRegistryKey)]}async function It(e,r){const i=[{memcmp:{offset:0,bytes:K.toBase58()}},{memcmp:{offset:32,bytes:r.toBase58()}},{memcmp:{offset:64,bytes:G.toBase58()}}],a=await e.getProgramAccounts(z,{filters:i});for(const e of a)if(e.account.data.length>H.HEADER_LEN+32){let r=e.account.data.slice(H.HEADER_LEN),i=l(Dt.schema,Dt,r);return[i.twitterHandle,new t(i.twitterRegistryKey)]}throw new Error("Registry not found.")}async function Rt(e,r){const i=[{memcmp:{offset:0,bytes:K.toBase58()}},{memcmp:{offset:32,bytes:r.toBase58()}},{memcmp:{offset:64,bytes:new t(a.alloc(32,0)).toBase58()}}],n=await e.getProgramAccounts(z,{filters:i});if(n.length>1)throw new Error("Found more than one registry.");return n[0].account.data.slice(H.HEADER_LEN)}class Dt{constructor(t){this.twitterRegistryKey=t.twitterRegistryKey,this.twitterHandle=t.twitterHandle}static async retrieve(t,e){let r=await t.getAccountInfo(e,"processed");if(!r)throw new Error("Invalid reverse Twitter account provided");return l(this.schema,Dt,r.data.slice(H.HEADER_LEN))}}async function Ht(t,e,i,n,s){const o=await J(n.toString()),c=await _(o,G,K);let u=w(Dt.schema,new Dt({twitterRegistryKey:i.toBytes(),twitterHandle:e}));return[h(z,r.programId,c,n,s,o,new b(await t.getMinimumBalanceForRentExemption(u.length+H.HEADER_LEN)),new g(u.length),G,K,G),S(z,c,new g(0),a.from(u),G)]}Dt.schema=new Map([[Dt,{kind:"struct",fields:[["twitterRegistryKey",[32]],["twitterHandle","string"]]}]]);const Pt=new t("6NSu2tci4apRKQtt257bAVcvqYjB3zV2H1dWo56vgpa6"),Lt=async(t,e)=>{const r=await _(await J(e.toBase58()),void 0,Pt),{registry:i}=await H.retrieve(t,r);if(!i.data)throw new Error("Invalid account data");return P.deserialize(i.data)},zt=async(e,r)=>{const i=await _(await J(r),void 0,Pt),{registry:a}=await H.retrieve(e,i);if(!a.data)throw new Error("Invalid account data");const n=new t(L.deserialize(a.data).mint);return await Lt(e,n)},Tt=new t("85iDfUvr3HJyLM2zcq5BXSiDvUWfw6cSE1FfNBo8Ap29");class Nt{constructor(e){this.tag=e.tag,this.nameAccount=new t(e.nameAccount)}static deserialize(t){return f(this.schema,Nt,t)}static async retrieve(t,e){const r=await t.getAccountInfo(e);if(!r||!r.data)throw new Error("Favourite domain not found");return this.deserialize(r.data)}static async getKey(e,r){return await t.findProgramAddress([a.from("favourite_domain"),r.toBuffer()],e)}static getKeySync(e,r){return t.findProgramAddressSync([a.from("favourite_domain"),r.toBuffer()],e)}}Nt.schema=new Map([[Nt,{kind:"struct",fields:[["tag","u8"],["nameAccount",[32]]]}]]);const xt=async(e,r)=>{const[i]=Nt.getKeySync(Tt,new t(r)),a=await Nt.retrieve(e,i),n=await nt(e,a.nameAccount);return{domain:a.nameAccount,reverse:n}};var Ct;!function(t){t.IPFS="IPFS",t.ARWV="ARWV",t.SOL="SOL",t.ETH="ETH",t.BTC="BTC",t.LTC="LTC",t.DOGE="DOGE",t.Email="email",t.Url="url",t.Discord="discord",t.Github="github",t.Reddit="reddit",t.Twitter="twitter",t.Telegram="telegram",t.Pic="pic",t.SHDW="SHDW",t.POINT="POINT",t.BSC="BSC",t.Injective="INJECT"}(Ct||(Ct={}));const Ft=(t,e)=>{const{pubkey:r}=ut(e+"."+t,!0);return r},Mt=async(t,e,r)=>{var i,a;const n=Ft(e,r);let{registry:s}=await H.retrieve(t,n);const o=r===Ct.SOL?96:null===(i=s.data)||void 0===i?void 0:i.indexOf(0);return s.data=null===(a=s.data)||void 0===a?void 0:a.slice(0,o),s},Gt=async(t,e)=>await Mt(t,e,Ct.IPFS),Kt=async(t,e)=>await Mt(t,e,Ct.ARWV),jt=async(t,e)=>await Mt(t,e,Ct.ETH),Ut=async(t,e)=>await Mt(t,e,Ct.BTC),Xt=async(t,e)=>await Mt(t,e,Ct.LTC),Yt=async(t,e)=>await Mt(t,e,Ct.DOGE),Zt=async(t,e)=>await Mt(t,e,Ct.Email),qt=async(t,e)=>await Mt(t,e,Ct.Url),Ot=async(t,e)=>await Mt(t,e,Ct.Discord),Vt=async(t,e)=>await Mt(t,e,Ct.Github),Jt=async(t,e)=>await Mt(t,e,Ct.Reddit),_t=async(t,e)=>await Mt(t,e,Ct.Twitter),Qt=async(t,e)=>await Mt(t,e,Ct.Telegram),$t=async(t,e)=>await Mt(t,e,Ct.Pic),te=async(t,e)=>await Mt(t,e,Ct.SHDW),ee=async(t,e)=>await Mt(t,e,Ct.SOL),re=async(t,e)=>await Mt(t,e,Ct.POINT),ie=async(t,e)=>await Mt(t,e,Ct.BSC),ae=async(t,e)=>await Mt(t,e,Ct.Injective),ne=(t,e,r)=>m.sign.detached.verify(t,e,r.toBytes()),se=async(e,r)=>{const{pubkey:i}=ut(r),{registry:n,nftOwner:s}=await H.retrieve(e,i);if(s)return s;try{const i=ut(Ct.SOL+"."+r,!0),s=await ee(e,r);if(!s.data)throw new Error("Invalid SOL record data");const o=new TextEncoder,c=a.concat([s.data.slice(0,32),i.pubkey.toBuffer()]),u=o.encode(c.toString("hex"));if(!ne(u,s.data.slice(32),n.owner))throw new Error("Signature invalid");return new t(s.data.slice(0,32))}catch(t){if(t instanceof Error&&"FetchError"===t.name)throw t;console.log(t)}return n.owner};export{F as BONFIDA_FIDA_BNB,U as BONFIDA_USDC_BNB,Nt as FavouriteDomain,T as HASH_PREFIX,I as MINT_PREFIX,L as Mint,Tt as NAME_OFFERS_ID,z as NAME_PROGRAM_ID,A as NAME_TOKENIZER_ID,H as NameRegistryState,g as Numberu32,b as Numberu64,C as PYTH_FIDA_PRICE_ACC,q as PYTH_MAPPING_ACC,Y as REFERRERS,x as REGISTER_PROGRAM_ID,M as REVERSE_LOOKUP_CLASS,N as ROOT_DOMAIN_ACCOUNT,Ct as Record,Dt as ReverseTwitterRegistryState,j as SOL_RECORD_SIG_LEN,Z as TOKENS_SYM_MINT,Pt as TOKEN_TLD,K as TWITTER_ROOT_PARENT_REGISTRY_KEY,G as TWITTER_VERIFICATION_AUTHORITY,P as TokenData,X as USDC_MINT,O as VAULT_OWNER,vt as changeTwitterRegistryData,kt as changeVerifiedPubkey,ne as checkSolRecord,h as createInstruction,B as createInstructionV3,pt as createNameRegistry,W as createReverseInstruction,bt as createReverseName,Ht as createReverseTwitterRegistry,ht as createSubdomain,E as createV2Instruction,St as createVerifiedTwitterRegistry,k as deleteInstruction,mt as deleteNameRegistry,Et as deleteTwitterRegistry,ot as findSubdomains,wt as getAllDomains,lt as getAllRegisteredDomains,Kt as getArweaveRecord,ie as getBscRecord,Ut as getBtcRecord,Ot as getDiscordRecord,Yt as getDogeRecord,et as getDomainKey,ut as getDomainKeySync,Zt as getEmailRecord,jt as getEthRecord,xt as getFavoriteDomain,Vt as getGithubRecord,At as getHandleAndRegistryKey,J as getHashedName,it as getHashedNameSync,ae as getInjectiveRecord,Gt as getIpfsRecord,Xt as getLtcRecord,_ as getNameAccountKey,at as getNameAccountKeySync,V as getNameOwner,$t as getPicRecord,re as getPointRecord,Mt as getRecord,Ft as getRecordKeySync,Jt as getRedditRecord,rt as getReverseKey,ft as getReverseKeySync,te as getShdwRecord,ee as getSolRecord,Qt as getTelegramRecord,Lt as getTokenInfoFromMint,zt as getTokenInfoFromName,It as getTwitterHandleandRegistryKeyViaFilters,_t as getTwitterRecord,Bt as getTwitterRegistry,Rt as getTwitterRegistryData,Wt as getTwitterRegistryKey,qt as getUrlRecord,Q as performReverseLookup,$ as performReverseLookupBatch,gt as registerDomainName,se as resolve,R as retrieveNftOwner,D as retrieveNfts,nt as reverseLookup,st as reverseLookupBatch,v as transferInstruction,yt as transferNameOwnership,S as updateInstruction,dt as updateNameRegistryData};
1
+ import{PublicKey as t,TransactionInstruction as e,SystemProgram as r,SYSVAR_RENT_PUBKEY as i}from"@solana/web3.js";import{Buffer as a}from"buffer";import{TOKEN_PROGRAM_ID as n,getMint as s,AccountLayout as o,getAssociatedTokenAddressSync as c,createAssociatedTokenAccountInstruction as u}from"@solana/spl-token";import w from"bn.js";import{serialize as l,deserializeUnchecked as f,deserialize as p}from"borsh";import{MINT_PREFIX as m,NAME_TOKENIZER_ID as d,getRecordFromMint as y,NftRecord as g}from"@bonfida/name-tokenizer";import{sha256 as b}from"@ethersproject/sha2";import{PythHttpClient as h,getPythProgramKeyForCluster as S}from"@pythnetwork/client";import*as k from"tweetnacl";class v extends w{toBuffer(){const t=super.toArray().reverse(),e=a.from(t);if(4===e.length)return e;if(e.length>4)throw new Error("Numberu32 too large");const r=a.alloc(4);return e.copy(r),r}static fromBuffer(t){if(4!==t.length)throw new Error(`Invalid buffer length: ${t.length}`);return new w([...t].reverse().map((t=>`00${t.toString(16)}`.slice(-2))).join(""),16)}}class E extends w{toBuffer(){const t=super.toArray().reverse(),e=a.from(t);if(8===e.length)return e;if(e.length>8)throw new Error("Numberu64 too large");const r=a.alloc(8);return e.copy(r),r}static fromBuffer(t){if(8!==t.length)throw new Error(`Invalid buffer length: ${t.length}`);return new w([...t].reverse().map((t=>`00${t.toString(16)}`.slice(-2))).join(""),16)}}function B(r,i,n,s,o,c,u,w,l,f,p){const m=[a.from(Int8Array.from([0])),new v(c.length).toBuffer(),c,u.toBuffer(),w.toBuffer()],d=a.concat(m),y=[{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1}];return l?y.push({pubkey:l,isSigner:!0,isWritable:!1}):y.push({pubkey:new t(a.alloc(32)),isSigner:!1,isWritable:!1}),f?y.push({pubkey:f,isSigner:!1,isWritable:!1}):y.push({pubkey:new t(a.alloc(32)),isSigner:!1,isWritable:!1}),p&&y.push({pubkey:p,isSigner:!0,isWritable:!1}),new e({keys:y,programId:r,data:d})}function W(t,r,i,n,s){const o=[a.from(Int8Array.from([1])),i.toBuffer(),new v(n.length).toBuffer(),n],c=a.concat(o);return new e({keys:[{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!0,isWritable:!1}],programId:t,data:c})}function A(r,i,n,s,o,c,u){const w=[a.from(Int8Array.from([2])),n.toBuffer()],l=a.concat(w),f=[{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:u||s,isSigner:!0,isWritable:!1}];return o&&f.push({pubkey:o,isSigner:!0,isWritable:!1}),u&&c&&(o||f.push({pubkey:t.default,isSigner:!1,isWritable:!1}),f.push({pubkey:c,isSigner:!1,isWritable:!1})),new e({keys:f,programId:r,data:l})}function I(t,r,i,n){const s=[a.from(Int8Array.from([3]))],o=a.concat(s);return new e({keys:[{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0}],programId:t,data:o})}class R{constructor(t){this.tag=9,this.name=t.name,this.space=t.space}serialize(){return l(R.schema,this)}getInstruction(t,i,s,o,c,u,w,l,f,p,m){const d=a.from(this.serialize()),y=[{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:r.programId,isSigner:!1,isWritable:!1},{pubkey:w,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1}];return new e({keys:y,programId:t,data:d})}}R.schema=new Map([[R,{kind:"struct",fields:[["tag","u8"],["name","string"],["space","u32"]]}]]);class P{constructor(t){this.tag=5,this.name=t.name}serialize(){return l(P.schema,this)}getInstruction(r,i,n,s,o,c,u,w,l){const f=a.from(this.serialize());let p=[{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:t.default,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!0,isWritable:!0}];if(w){if(!l)throw new Error("Missing parent name owner");p.push({pubkey:w,isSigner:!1,isWritable:!0}),p.push({pubkey:l,isSigner:!0,isWritable:!1})}return new e({keys:p,programId:r,data:f})}}P.schema=new Map([[P,{kind:"struct",fields:[["tag","u8"],["name","string"]]}]]);class D{constructor(t){this.tag=13,this.name=t.name,this.space=t.space,this.referrerIdxOpt=t.referrerIdxOpt}serialize(){return l(D.schema,this)}getInstruction(t,r,i,n,s,o,c,u,w,l,f,p,m,d,y,g,b){const h=a.from(this.serialize());let S=[];return S.push({pubkey:r,isSigner:!1,isWritable:!1}),S.push({pubkey:i,isSigner:!1,isWritable:!1}),S.push({pubkey:n,isSigner:!1,isWritable:!0}),S.push({pubkey:s,isSigner:!1,isWritable:!0}),S.push({pubkey:o,isSigner:!1,isWritable:!1}),S.push({pubkey:c,isSigner:!1,isWritable:!1}),S.push({pubkey:u,isSigner:!0,isWritable:!0}),S.push({pubkey:w,isSigner:!1,isWritable:!0}),S.push({pubkey:l,isSigner:!1,isWritable:!1}),S.push({pubkey:f,isSigner:!1,isWritable:!1}),S.push({pubkey:p,isSigner:!1,isWritable:!1}),S.push({pubkey:m,isSigner:!1,isWritable:!0}),S.push({pubkey:d,isSigner:!1,isWritable:!1}),S.push({pubkey:y,isSigner:!1,isWritable:!1}),S.push({pubkey:g,isSigner:!1,isWritable:!1}),b&&S.push({pubkey:b,isSigner:!1,isWritable:!0}),new e({keys:S,programId:t,data:h})}}D.schema=new Map([[D,{kind:"struct",fields:[["tag","u8"],["name","string"],["space","u32"],["referrerIdxOpt",{kind:"option",type:"u16"}]]}]]);const H=new t("namesLPneVptA9Z5rqUDD9tMTWEJwofgaYwp8cawRkX"),z="SPL Name Service",L=new t("58PwtjSDuFHuUkYjH9BYnnQKHfwo9reZhC2zMJv9JPkx"),T=new t("jCebN34bUfdeUYJT13J1yG16XWQpt5PDx6Mse9GUqhR"),C=new t("ETp9eKXVv1dWwHSpsXRUuXHmw24PwRkttCGVgpZEY9zF"),F=new t("AUoZ3YAhV3b2rZeEH93UMZHXUZcTramBvb4d9YEVySkc"),M=new t("33m47vH6Eav6jr5Ry86XjhRft2jRBLDnDgPSHoquXi2Z"),N=new t("FvPH7PrVrLGKPfqaf3xJodFTjZriqrAXXLTVWEorTFBi"),x=new t("4YcexoW3r78zz16J2aqmukBLRwGq6rAvWzJpkYAXqebv"),G=96,K=new t("DmSyHDSM9eSLyvoLsPvDr5fRRFZ7Bfr3h3ULvWpgQaq7"),U=new t("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),j=[new t("3ogYncmMM5CmytsGCqKHydmXmKUZ6sGWvizkzqwT7zb1"),new t("DM1jJCkZZEwY5tmWbgvKRxsDFzXCdbfrYCCH1CtwguEs")],X=new Map([["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","USDC"],["Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB","USDT"],["So11111111111111111111111111111111111111112","SOL"],["EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp","FIDA"],["FeGn77dhg1KXRRFeSwwMiykZnZPw5JXW6naf2aQgZDQf","ETH"],["7i5KKsX2weiTkry7jA4ZwSuXGhs5eJBEjY8vVxR4pfRx","GMT"],["AFbX8oGjGpmVFywbVouvhQSRmiW2aR1mohfahi4Y2AdB","GST"],["mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So","MSOL"],["DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263","BONK"],["EPeUFDgHRxs9xxEPVaL6kfGQvCon7jmAWKVUHuux1Tpz","BAT"]]),Y=new t("AHtgzX45WTKfkPG53L6WYhGEXwQkN1BVknET3sVsLL8J"),Z=new t("GcWEQ9K78FV7LEHteFVciYApERk5YvQuFDQPk1yYJVXi"),q=t=>{const e=z+t,r=b(a.from(e,"utf8")).slice(2);return a.from(r,"hex")},O=(e,r,i)=>{const n=[e];r?n.push(r.toBuffer()):n.push(a.alloc(32)),i?n.push(i.toBuffer()):n.push(a.alloc(32));const[s]=t.findProgramAddressSync(n,H);return s};async function V(t,e){const r=q(e.toBase58()),i=O(r,M),{registry:a}=await ct.retrieve(t,i);if(!a.data)throw new Error("Could not retrieve name data");const n=new w(a.data.slice(0,4),"le").toNumber();return a.data.slice(4,4+n).toString()}async function J(t,e){let r=[];for(let t of e){const e=q(t.toBase58()),i=O(e,M);r.push(i)}return(await ct.retrieveBatch(t,r)).map((t=>{if(void 0===t||void 0===t.data)return;let e=new w(t.data.slice(0,4),"le").toNumber();return t.data.slice(4,4+e).toString()}))}const _=async(t,e)=>{const r=[{memcmp:{offset:0,bytes:e.toBase58()}},{memcmp:{offset:64,bytes:M.toBase58()}}],i=await t.getProgramAccounts(H,{filters:r}),a=await V(t,e),n=i.map((t=>{var e;return null===(e=t.account.data.slice(97).toString("utf-8"))||void 0===e?void 0:e.split("\0").join("")})),s=n.map((t=>$(t+"."+a).pubkey)),o=await t.getMultipleAccountsInfo(s);return n.filter(((t,e)=>!!o[e]))},Q=(t,e=L)=>{let r=q(t);return{pubkey:O(r,void 0,e),hashed:r}},$=(t,e=!1)=>{t.endsWith(".sol")&&(t=t.slice(0,-4));const r=t.split(".");if(2===r.length){const t=a.from([e?1:0]).toString().concat(r[0]),{pubkey:i}=Q(r[1]);return{...Q(t,i),isSub:!0,parent:i}}if(3===r.length&&e){const{pubkey:t}=Q(r[2]),{pubkey:e}=Q("\0".concat(r[1]),t),i=a.from([1]).toString();return{...Q(i.concat(r[0]),e),isSub:!0,parent:t,isSubRecord:!0}}if(r.length>=3)throw new Error("Invalid derivation input");return{...Q(t,L),isSub:!1,parent:void 0}};async function tt(t,e){const r=[{memcmp:{offset:32,bytes:e.toBase58()}},{memcmp:{offset:0,bytes:L.toBase58()}}];return(await t.getProgramAccounts(H,{filters:r})).map((t=>t.pubkey))}const et=async t=>{const e=[{memcmp:{offset:0,bytes:L.toBase58()}}];return await t.getProgramAccounts(H,{dataSlice:{offset:32,length:32},filters:e})},rt=(t,e)=>{const{pubkey:r,parent:i}=$(t),a=q(r.toBase58());return O(a,M,e?i:void 0)},it=async(e,r)=>{try{const[i]=await t.findProgramAddress([m,r.toBuffer()],d);if("0"===(await s(e,i)).supply.toString())return;const a=[{memcmp:{offset:0,bytes:i.toBase58()}},{memcmp:{offset:64,bytes:"2"}},{dataSize:165}],o=await e.getProgramAccounts(n,{filters:a});if(1!=o.length)return;return new t(o[0].account.data.slice(32,64))}catch{return}},at=async e=>{const r=await e.getProgramAccounts(d,{filters:[{memcmp:{offset:0,bytes:"3"}}]});return r.map((e=>new t(e.account.data.slice(66,98))))},nt=t=>[{memcmp:{offset:32,bytes:t}},{memcmp:{offset:64,bytes:"2"}}],st=async(t,e)=>{const r=[...nt(e.toBase58()),{dataSize:165}],i=(await t.getProgramAccounts(n,{filters:r})).map((t=>o.decode(t.account.data))).map((e=>(async(t,e)=>{const r=await y(t,e.mint);if(1===r.length)return g.deserialize(r[0].account.data)})(t,e)));return(await Promise.all(i)).filter((t=>void 0!==t))},ot=async(t,e)=>{const r=await st(t,e);return(await J(t,r.map((t=>t.nameAccount)))).map(((t,e)=>({key:r[e].nameAccount,mint:r[e].nftMint,reverse:t}))).filter((t=>!!t.reverse))};class ct{constructor(e){this.parentName=new t(e.parentName),this.owner=new t(e.owner),this.class=new t(e.class)}static async retrieve(t,e){var r;const i=await t.getAccountInfo(e);if(!i)throw new Error("Invalid name account provided");let a=f(this.schema,ct,i.data);a.data=null===(r=i.data)||void 0===r?void 0:r.slice(this.HEADER_LEN);return{registry:a,nftOwner:await it(t,e)}}static async _retrieveBatch(t,e){const r=await t.getMultipleAccountsInfo(e),i=t=>{if(!t)return;const e=f(this.schema,ct,t);return e.data=null==t?void 0:t.slice(this.HEADER_LEN),e};return r.map((t=>i(null==t?void 0:t.data)))}static async retrieveBatch(t,e){let r=[];const i=[...e];for(;i.length>0;)r.push(...await this._retrieveBatch(t,i.splice(0,100)));return r}}ct.HEADER_LEN=96,ct.schema=new Map([[ct,{kind:"struct",fields:[["parentName",[32]],["owner",[32]],["class",[32]]]}]]);class ut{constructor(t){this.name=t.name,this.ticker=t.ticker,this.mint=t.mint,this.decimals=t.decimals,this.website=null==t?void 0:t.website,this.logoUri=null==t?void 0:t.logoUri}serialize(){return l(ut.schema,this)}static deserialize(t){return f(ut.schema,ut,t)}}ut.schema=new Map([[ut,{kind:"struct",fields:[["name","string"],["ticker","string"],["mint",[32]],["decimals","u8"],["website",{kind:"option",type:"string"}],["logoUri",{kind:"option",type:"string"}]]}]]);class wt{constructor(t){this.mint=t.mint}serialize(){return l(wt.schema,this)}static deserialize(t){return f(wt.schema,wt,t)}}async function lt(t,e){if(!await t.getAccountInfo(e))throw new Error("Unable to find the given account.");return ct.retrieve(t,e)}async function ft(t){const e=z+t,r=b(a.from(e,"utf8")).slice(2);return a.from(r,"hex")}async function pt(e,r,i){const n=[e];r?n.push(r.toBuffer()):n.push(a.alloc(32)),i?n.push(i.toBuffer()):n.push(a.alloc(32));const[s]=await t.findProgramAddress(n,H);return s}async function mt(t,e){const r=await ft(e.toBase58()),i=await pt(r,M),{registry:a}=await ct.retrieve(t,i);if(!a.data)throw new Error("Could not retrieve name data");const n=new w(a.data.slice(0,4),"le").toNumber();return a.data.slice(4,4+n).toString()}async function dt(t,e){let r=[];for(let t of e){const e=await ft(t.toBase58()),i=await pt(e,M);r.push(i)}return(await ct.retrieveBatch(t,r)).map((t=>{if(void 0===t||void 0===t.data)return;let e=new w(t.data.slice(0,4),"le").toNumber();return t.data.slice(4,4+e).toString()}))}wt.schema=new Map([[wt,{kind:"struct",fields:[["mint",[32]]]}]]);const yt=async(t,e=L)=>{let r=await ft(t);return{pubkey:await pt(r,void 0,e),hashed:r}},gt=async(t,e=!1)=>{t.endsWith(".sol")&&(t=t.slice(0,-4));const r=t.split(".");if(2===r.length){const t=a.from([e?1:0]).toString().concat(r[0]),{pubkey:i}=await yt(r[1]);return{...await yt(t,i),isSub:!0,parent:i}}if(3===r.length&&e){const{pubkey:t}=await yt(r[2]),{pubkey:e}=await yt("\0".concat(r[1]),t),i=a.from([1]).toString();return{...await yt(i.concat(r[0]),e),isSub:!0,parent:t,isSubRecord:!0}}if(r.length>=3)throw new Error("Invalid derivation input");return{...await yt(t,L),isSub:!1,parent:void 0}},bt=async(t,e)=>{const{pubkey:r,parent:i}=await gt(t),a=await ft(r.toBase58());return await pt(a,M,e?i:void 0)};async function ht(t,e,i,a,n,s,o,c){const u=await ft(e),w=await pt(u,o,c),l=s||await t.getMinimumBalanceForRentExemption(i);let f;if(c){const{registry:e}=await lt(t,c);f=e.owner}return B(H,r.programId,w,n,a,u,new E(l),new v(i),o,c,f)}async function St(t,e,r,i,a,n){const s=await ft(e),o=await pt(s,a,n);let c;c=a||(await ct.retrieve(t,o)).registry.owner;return W(H,o,new v(r),i,c)}async function kt(t,e,r,i,a,n){const s=await ft(e),o=await pt(s,i,a);let c;c=i||(await ct.retrieve(t,o)).registry.owner;return A(H,o,r,c,i,a,n)}async function vt(t,e,r,i,a){const n=await ft(e),s=await pt(n,i,a);let o;o=i||(await ct.retrieve(t,s)).registry.owner;return I(H,s,r,o)}const Et=async(e,a,s,o,w,l=U,f)=>{const[p]=t.findProgramAddressSync([T.toBuffer()],T),m=q(a),d=O(m,void 0,L),y=q(d.toBase58()),g=O(y,p),[b]=t.findProgramAddressSync([d.toBuffer()],T),k=j.findIndex((t=>null==f?void 0:f.equals(t)));let v;const E=[];if(-1!==k&&f){v=c(l,f,!0);const t=await e.getAccountInfo(v);if(!(null==t?void 0:t.data)){const t=u(o,v,f,l);E.push(t)}}const B=new h(e,S("mainnet-beta")),W=await B.getData(),A=X.get(l.toBase58());if(!A)throw new Error("Symbol not found");const I=W.productPrice.get("Crypto."+A+"/USD"),R=W.productFromSymbol.get("Crypto."+A+"/USD"),P=c(l,Z),z=new D({name:a,space:s,referrerIdxOpt:-1!=k?k:null}).getInstruction(T,H,L,d,g,r.programId,p,o,w,Y,I.productAccountKey,new t(R.price_account),P,n,i,b,v);return E.push(z),[[],E]},Bt=async(e,r,a,n,s)=>{let[o]=await t.findProgramAddress([T.toBuffer()],T),c=await ft(e.toBase58()),u=await pt(c,o,n);return[[],[new P({name:r}).getInstruction(T,i,H,L,u,o,a,n,s)]]},Wt=async(t,e,r,i=2e3)=>{const a=[],n=e.split(".")[0];if(!n)throw new Error("Invalid subdomain input");const{parent:s,pubkey:o}=$(e),c=await t.getMinimumBalanceForRentExemption(i+ct.HEADER_LEN),u=await ht(t,"\0".concat(n),i,r,r,c,void 0,s);a.push(u);const[,w]=await Bt(o,"\0".concat(n),r,s,r);return a.push(...w),[[],a]};async function At(t,e,i,a,n){const s=await ft(e),o=await pt(s,void 0,x),c=await t.getMinimumBalanceForRentExemption(a+ct.HEADER_LEN);let u=[B(H,r.programId,o,i,n,s,new E(c),new v(a),void 0,x,N)];return u=u.concat(await Ft(t,e,o,i,n)),u}async function It(t,e,r,i){const a=await ft(t),n=await pt(a,void 0,x);return[W(H,n,new v(r),i,e)]}async function Rt(t,e,r,i,a){const n=await ft(e),s=await pt(n,void 0,x);let o=[A(H,s,i,r,void 0)];const c=await ft(r.toString());return await pt(c,N,void 0),o.push(await vt(t,r.toString(),a,N,x)),o=o.concat(await Ft(t,e,s,i,a)),o}async function Pt(t,e){const r=await ft(t),i=await pt(r,void 0,x),a=await ft(e.toString()),n=await pt(a,N,x);return[I(H,i,e,e),I(H,n,e,e)]}async function Dt(t){const e=await ft(t);return await pt(e,void 0,x)}async function Ht(t,e){const r=await ft(e),i=await pt(r,void 0,x),{registry:a}=await ct.retrieve(t,i);return a}async function zt(e,r){const i=await ft(r.toString()),a=await pt(i,N,x);let n=await Ct.retrieve(e,a);return[n.twitterHandle,new t(n.twitterRegistryKey)]}async function Lt(e,r){const i=[{memcmp:{offset:0,bytes:x.toBase58()}},{memcmp:{offset:32,bytes:r.toBase58()}},{memcmp:{offset:64,bytes:N.toBase58()}}],a=await e.getProgramAccounts(H,{filters:i});for(const e of a)if(e.account.data.length>ct.HEADER_LEN+32){let r=e.account.data.slice(ct.HEADER_LEN),i=f(Ct.schema,Ct,r);return[i.twitterHandle,new t(i.twitterRegistryKey)]}throw new Error("Registry not found.")}async function Tt(e,r){const i=[{memcmp:{offset:0,bytes:x.toBase58()}},{memcmp:{offset:32,bytes:r.toBase58()}},{memcmp:{offset:64,bytes:new t(a.alloc(32,0)).toBase58()}}],n=await e.getProgramAccounts(H,{filters:i});if(n.length>1)throw new Error("Found more than one registry.");return n[0].account.data.slice(ct.HEADER_LEN)}class Ct{constructor(t){this.twitterRegistryKey=t.twitterRegistryKey,this.twitterHandle=t.twitterHandle}static async retrieve(t,e){let r=await t.getAccountInfo(e,"processed");if(!r)throw new Error("Invalid reverse Twitter account provided");return f(this.schema,Ct,r.data.slice(ct.HEADER_LEN))}}async function Ft(t,e,i,n,s){const o=await ft(n.toString()),c=await pt(o,N,x);let u=l(Ct.schema,new Ct({twitterRegistryKey:i.toBytes(),twitterHandle:e}));return[B(H,r.programId,c,n,s,o,new E(await t.getMinimumBalanceForRentExemption(u.length+ct.HEADER_LEN)),new v(u.length),N,x,N),W(H,c,new v(0),a.from(u),N)]}Ct.schema=new Map([[Ct,{kind:"struct",fields:[["twitterRegistryKey",[32]],["twitterHandle","string"]]}]]);const Mt=new t("6NSu2tci4apRKQtt257bAVcvqYjB3zV2H1dWo56vgpa6"),Nt=async(t,e)=>{const r=await pt(await ft(e.toBase58()),void 0,Mt),{registry:i}=await ct.retrieve(t,r);if(!i.data)throw new Error("Invalid account data");return ut.deserialize(i.data)},xt=async(e,r)=>{const i=await pt(await ft(r),void 0,Mt),{registry:a}=await ct.retrieve(e,i);if(!a.data)throw new Error("Invalid account data");const n=new t(wt.deserialize(a.data).mint);return await Nt(e,n)},Gt=new t("85iDfUvr3HJyLM2zcq5BXSiDvUWfw6cSE1FfNBo8Ap29");class Kt{constructor(e){this.tag=e.tag,this.nameAccount=new t(e.nameAccount)}static deserialize(t){return p(this.schema,Kt,t)}static async retrieve(t,e){const r=await t.getAccountInfo(e);if(!r||!r.data)throw new Error("Favourite domain not found");return this.deserialize(r.data)}static async getKey(e,r){return await t.findProgramAddress([a.from("favourite_domain"),r.toBuffer()],e)}static getKeySync(e,r){return t.findProgramAddressSync([a.from("favourite_domain"),r.toBuffer()],e)}}Kt.schema=new Map([[Kt,{kind:"struct",fields:[["tag","u8"],["nameAccount",[32]]]}]]);const Ut=async(e,r)=>{const[i]=Kt.getKeySync(Gt,new t(r)),a=await Kt.retrieve(e,i),n=await V(e,a.nameAccount);return{domain:a.nameAccount,reverse:n}};var jt;!function(t){t.IPFS="IPFS",t.ARWV="ARWV",t.SOL="SOL",t.ETH="ETH",t.BTC="BTC",t.LTC="LTC",t.DOGE="DOGE",t.Email="email",t.Url="url",t.Discord="discord",t.Github="github",t.Reddit="reddit",t.Twitter="twitter",t.Telegram="telegram",t.Pic="pic",t.SHDW="SHDW",t.POINT="POINT",t.BSC="BSC",t.Injective="INJ",t.Backpack="backpack"}(jt||(jt={}));const Xt=(t,e)=>{const{pubkey:r}=$(e+"."+t,!0);return r},Yt=async(t,e,r)=>{var i,a;const n=Xt(e,r);let{registry:s}=await ct.retrieve(t,n);const o=r===jt.SOL?96:null===(i=s.data)||void 0===i?void 0:i.indexOf(0);return s.data=null===(a=s.data)||void 0===a?void 0:a.slice(0,o),s},Zt=async(t,e)=>await Yt(t,e,jt.IPFS),qt=async(t,e)=>await Yt(t,e,jt.ARWV),Ot=async(t,e)=>await Yt(t,e,jt.ETH),Vt=async(t,e)=>await Yt(t,e,jt.BTC),Jt=async(t,e)=>await Yt(t,e,jt.LTC),_t=async(t,e)=>await Yt(t,e,jt.DOGE),Qt=async(t,e)=>await Yt(t,e,jt.Email),$t=async(t,e)=>await Yt(t,e,jt.Url),te=async(t,e)=>await Yt(t,e,jt.Discord),ee=async(t,e)=>await Yt(t,e,jt.Github),re=async(t,e)=>await Yt(t,e,jt.Reddit),ie=async(t,e)=>await Yt(t,e,jt.Twitter),ae=async(t,e)=>await Yt(t,e,jt.Telegram),ne=async(t,e)=>await Yt(t,e,jt.Pic),se=async(t,e)=>await Yt(t,e,jt.SHDW),oe=async(t,e)=>await Yt(t,e,jt.SOL),ce=async(t,e)=>await Yt(t,e,jt.POINT),ue=async(t,e)=>await Yt(t,e,jt.BSC),we=async(t,e)=>await Yt(t,e,jt.Injective),le=async(t,e)=>await Yt(t,e,jt.Backpack),fe=(t,e,r)=>k.sign.detached.verify(t,e,r.toBytes()),pe=async(e,r)=>{const{pubkey:i}=$(r),{registry:n,nftOwner:s}=await ct.retrieve(e,i);if(s)return s;try{const i=$(jt.SOL+"."+r,!0),s=await oe(e,r);if(!s.data)throw new Error("Invalid SOL record data");const o=new TextEncoder,c=a.concat([s.data.slice(0,32),i.pubkey.toBuffer()]),u=o.encode(c.toString("hex"));if(!fe(u,s.data.slice(32),n.owner))throw new Error("Signature invalid");return new t(s.data.slice(0,32))}catch(t){if(t instanceof Error&&"FetchError"===t.name)throw t;console.log(t)}return n.owner};export{F as BONFIDA_FIDA_BNB,K as BONFIDA_USDC_BNB,Kt as FavouriteDomain,z as HASH_PREFIX,wt as Mint,Gt as NAME_OFFERS_ID,H as NAME_PROGRAM_ID,ct as NameRegistryState,v as Numberu32,E as Numberu64,C as PYTH_FIDA_PRICE_ACC,Y as PYTH_MAPPING_ACC,j as REFERRERS,T as REGISTER_PROGRAM_ID,M as REVERSE_LOOKUP_CLASS,L as ROOT_DOMAIN_ACCOUNT,jt as Record,Ct as ReverseTwitterRegistryState,G as SOL_RECORD_SIG_LEN,X as TOKENS_SYM_MINT,Mt as TOKEN_TLD,x as TWITTER_ROOT_PARENT_REGISTRY_KEY,N as TWITTER_VERIFICATION_AUTHORITY,ut as TokenData,U as USDC_MINT,Z as VAULT_OWNER,It as changeTwitterRegistryData,Rt as changeVerifiedPubkey,fe as checkSolRecord,B as createInstruction,D as createInstructionV3,ht as createNameRegistry,P as createReverseInstruction,Bt as createReverseName,Ft as createReverseTwitterRegistry,Wt as createSubdomain,R as createV2Instruction,At as createVerifiedTwitterRegistry,I as deleteInstruction,vt as deleteNameRegistry,Pt as deleteTwitterRegistry,_ as findSubdomains,tt as getAllDomains,et as getAllRegisteredDomains,qt as getArweaveRecord,le as getBackpackRecord,ue as getBscRecord,Vt as getBtcRecord,te as getDiscordRecord,_t as getDogeRecord,gt as getDomainKey,$ as getDomainKeySync,Qt as getEmailRecord,Ot as getEthRecord,Ut as getFavoriteDomain,ee as getGithubRecord,zt as getHandleAndRegistryKey,ft as getHashedName,q as getHashedNameSync,we as getInjectiveRecord,Zt as getIpfsRecord,Jt as getLtcRecord,pt as getNameAccountKey,O as getNameAccountKeySync,lt as getNameOwner,ne as getPicRecord,ce as getPointRecord,Yt as getRecord,Xt as getRecordKeySync,re as getRedditRecord,bt as getReverseKey,rt as getReverseKeySync,se as getShdwRecord,oe as getSolRecord,ae as getTelegramRecord,Nt as getTokenInfoFromMint,xt as getTokenInfoFromName,ot as getTokenizedDomains,Lt as getTwitterHandleandRegistryKeyViaFilters,ie as getTwitterRecord,Ht as getTwitterRegistry,Tt as getTwitterRegistryData,Dt as getTwitterRegistryKey,$t as getUrlRecord,mt as performReverseLookup,dt as performReverseLookupBatch,Et as registerDomainName,pe as resolve,it as retrieveNftOwner,at as retrieveNfts,V as reverseLookup,J as reverseLookupBatch,A as transferInstruction,kt as transferNameOwnership,W as updateInstruction,St as updateNameRegistryData};
package/dist/nft.d.ts CHANGED
@@ -1,14 +1,4 @@
1
- /// <reference types="node" />
2
- import { Buffer } from "buffer";
3
1
  import { PublicKey, Connection } from "@solana/web3.js";
4
- /**
5
- * Mainnet program ID
6
- */
7
- export declare const NAME_TOKENIZER_ID: PublicKey;
8
- /**
9
- * PDA prefix
10
- */
11
- export declare const MINT_PREFIX: Buffer;
12
2
  /**
13
3
  * This function can be used to retrieve the owner of a tokenized domain name
14
4
  *
@@ -24,3 +14,14 @@ export declare const retrieveNftOwner: (connection: Connection, nameAccount: Pub
24
14
  * @returns
25
15
  */
26
16
  export declare const retrieveNfts: (connection: Connection) => Promise<PublicKey[]>;
17
+ /**
18
+ * This function can be used to retrieve all the tokenized domains of an owner
19
+ * @param connection The Solana RPC connection object
20
+ * @param owner The owner of the tokenized domains
21
+ * @returns
22
+ */
23
+ export declare const getTokenizedDomains: (connection: Connection, owner: PublicKey) => Promise<{
24
+ key: PublicKey;
25
+ mint: PublicKey;
26
+ reverse: string | undefined;
27
+ }[]>;
package/dist/record.d.ts CHANGED
@@ -149,3 +149,10 @@ export declare const getBscRecord: (connection: Connection, domain: string) => P
149
149
  * @returns
150
150
  */
151
151
  export declare const getInjectiveRecord: (connection: Connection, domain: string) => Promise<NameRegistryState>;
152
+ /**
153
+ * This function can be used to retrieve the Backpack record of a domain name
154
+ * @param connection The Solana RPC connection object
155
+ * @param domain The .sol domain name
156
+ * @returns
157
+ */
158
+ export declare const getBackpackRecord: (connection: Connection, domain: string) => Promise<NameRegistryState>;
@@ -20,5 +20,6 @@ export declare enum Record {
20
20
  SHDW = "SHDW",
21
21
  POINT = "POINT",
22
22
  BSC = "BSC",
23
- Injective = "INJECT"
23
+ Injective = "INJ",
24
+ Backpack = "backpack"
24
25
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bonfida/spl-name-service",
3
- "version": "0.2.5",
3
+ "version": "0.2.7",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "dist"
@@ -58,6 +58,7 @@
58
58
  "typescript": "^5.0.4"
59
59
  },
60
60
  "dependencies": {
61
+ "@bonfida/name-tokenizer": "0.0.5",
61
62
  "@ethersproject/sha2": "^5.7.0",
62
63
  "@pythnetwork/client": "2.17.0",
63
64
  "@solana/buffer-layout": "^4.0.1",