@bonfida/spl-name-service 1.0.0 → 1.0.2
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/bindings.d.ts +0 -1
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/nft/name-tokenizer.d.ts +38 -0
- package/dist/utils.d.ts +1 -4
- package/package.json +2 -3
- /package/dist/{nft.d.ts → nft/index.d.ts} +0 -0
package/dist/bindings.d.ts
CHANGED
|
@@ -33,7 +33,6 @@ export declare function updateNameRegistryData(connection: Connection, name: str
|
|
|
33
33
|
* @param connection The solana connection object to the RPC node
|
|
34
34
|
* @param name The name of the name account
|
|
35
35
|
* @param newOwner The new owner to be set
|
|
36
|
-
* @param curentNameOwner the current name Owner
|
|
37
36
|
* @param nameClass The class of this name, if it exsists
|
|
38
37
|
* @param nameParent The parent name of this name, if it exists
|
|
39
38
|
* @param parentOwner Parent name owner
|
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"),o=require("borsh"),s=require("@bonfida/name-tokenizer"),n=require("@ethersproject/sha2"),a=require("@pythnetwork/client"),c=require("bech32-buffer"),u=require("tweetnacl"),p=require("bs58"),d=require("ipaddr.js"),l=require("punycode");function f(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 y,w=f(u);exports.ErrorType=void 0,(y=exports.ErrorType||(exports.ErrorType={})).SymbolNotFound="SymbolNotFound",y.InvalidSubdomain="InvalidSubdomain",y.FavouriteDomainNotFound="FavouriteDomainNotFound",y.MissingParentOwner="MissingParentOwner",y.U32Overflow="U32Overflow",y.InvalidBufferLength="InvalidBufferLength",y.U64Overflow="U64Overflow",y.NoRecordData="NoRecordData",y.InvalidRecordData="InvalidRecordData",y.UnsupportedRecord="UnsupportedRecord",y.InvalidEvmAddress="InvalidEvmAddress",y.InvalidInjectiveAddress="InvalidInjectiveAddress",y.InvalidARecord="InvalidARecord",y.InvalidAAAARecord="InvalidAAAARecord",y.InvalidRecordInput="InvalidRecordInput",y.InvalidSignature="InvalidSignature",y.AccountDoesNotExist="AccountDoesNotExist",y.MultipleRegistries="MultipleRegistries",y.InvalidReverseTwitter="InvalidReverseTwitter",y.NoAccountData="NoAccountData",y.InvalidInput="InvalidInput";class g extends Error{constructor(e,t){super(t),this.name="SNSError",this.type=e,Error.captureStackTrace&&Error.captureStackTrace(this,g)}}class m 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 g(exports.ErrorType.U32Overflow);const i=t.Buffer.alloc(4);return r.copy(i),i}static fromBuffer(e){if(4!==e.length)throw new g(exports.ErrorType.InvalidBufferLength,`Invalid buffer length: ${e.length}`);return new i([...e].reverse().map((e=>`00${e.toString(16)}`.slice(-2))).join(""),16)}}class b 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 g(exports.ErrorType.U64Overflow);const i=t.Buffer.alloc(8);return r.copy(i),i}static fromBuffer(e){if(8!==e.length)throw new g(exports.ErrorType.U64Overflow,`Invalid buffer length: ${e.length}`);return new i([...e].reverse().map((e=>`00${e.toString(16)}`.slice(-2))).join(""),16)}}function x(r,i,o,s,n,a,c,u,p,d,l){const f=[t.Buffer.from(Int8Array.from([0])),new m(a.length).toBuffer(),a,c.toBuffer(),u.toBuffer()],y=t.Buffer.concat(f),w=[{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1}];return p?w.push({pubkey:p,isSigner:!0,isWritable:!1}):w.push({pubkey:new e.PublicKey(t.Buffer.alloc(32)),isSigner:!1,isWritable:!1}),d?w.push({pubkey:d,isSigner:!1,isWritable:!1}):w.push({pubkey:new e.PublicKey(t.Buffer.alloc(32)),isSigner:!1,isWritable:!1}),l&&w.push({pubkey:l,isSigner:!0,isWritable:!1}),new e.TransactionInstruction({keys:w,programId:r,data:y})}function h(r,i,o,s,n){const a=[t.Buffer.from(Int8Array.from([1])),o.toBuffer(),new m(s.length).toBuffer(),s],c=t.Buffer.concat(a),u=[{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1}];return new e.TransactionInstruction({keys:u,programId:r,data:c})}function R(r,i,o,s,n,a,c){const u=[t.Buffer.from(Int8Array.from([2])),o.toBuffer()],p=t.Buffer.concat(u),d=[{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:c||s,isSigner:!0,isWritable:!1}];return n&&d.push({pubkey:n,isSigner:!0,isWritable:!1}),c&&a&&(n||d.push({pubkey:e.PublicKey.default,isSigner:!1,isWritable:!1}),d.push({pubkey:a,isSigner:!1,isWritable:!1})),new e.TransactionInstruction({keys:d,programId:r,data:p})}function S(r,i,o,s){const n=[t.Buffer.from(Int8Array.from([3]))],a=t.Buffer.concat(n),c=[{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0}];return new e.TransactionInstruction({keys:c,programId:r,data:a})}class v{constructor(e){this.tag=9,this.name=e.name,this.space=e.space}serialize(){return o.serialize(v.schema,this)}getInstruction(i,o,s,n,a,c,u,p,d,l,f){const y=t.Buffer.from(this.serialize()),w=[{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:a,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:d,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:r.TOKEN_PROGRAM_ID,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1}];return new e.TransactionInstruction({keys:w,programId:i,data:y})}}v.schema=new Map([[v,{kind:"struct",fields:[["tag","u8"],["name","string"],["space","u32"]]}]]);class A{constructor(e){this.tag=5,this.name=e.name}serialize(){return o.serialize(A.schema,this)}getInstruction(r,i,o,s,n,a,c,u,p){const d=t.Buffer.from(this.serialize());let l=[{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,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:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!0,isWritable:!0}];if(u){if(!p)throw new g(exports.ErrorType.MissingParentOwner);l.push({pubkey:u,isSigner:!1,isWritable:!0}),l.push({pubkey:p,isSigner:!0,isWritable:!1})}return new e.TransactionInstruction({keys:l,programId:r,data:d})}}A.schema=new Map([[A,{kind:"struct",fields:[["tag","u8"],["name","string"]]}]]);class E{constructor(e){this.tag=13,this.name=e.name,this.space=e.space,this.referrerIdxOpt=e.referrerIdxOpt}serialize(){return o.serialize(E.schema,this)}getInstruction(r,i,o,s,n,a,c,u,p,d,l,f,y,w,g,m,b){const x=t.Buffer.from(this.serialize());let h=[];return h.push({pubkey:i,isSigner:!1,isWritable:!1}),h.push({pubkey:o,isSigner:!1,isWritable:!1}),h.push({pubkey:s,isSigner:!1,isWritable:!0}),h.push({pubkey:n,isSigner:!1,isWritable:!0}),h.push({pubkey:a,isSigner:!1,isWritable:!1}),h.push({pubkey:c,isSigner:!1,isWritable:!1}),h.push({pubkey:u,isSigner:!0,isWritable:!0}),h.push({pubkey:p,isSigner:!1,isWritable:!0}),h.push({pubkey:d,isSigner:!1,isWritable:!1}),h.push({pubkey:l,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!1}),h.push({pubkey:y,isSigner:!1,isWritable:!0}),h.push({pubkey:w,isSigner:!1,isWritable:!1}),h.push({pubkey:g,isSigner:!1,isWritable:!1}),h.push({pubkey:m,isSigner:!1,isWritable:!1}),b&&h.push({pubkey:b,isSigner:!1,isWritable:!0}),new e.TransactionInstruction({keys:h,programId:r,data:x})}}E.schema=new Map([[E,{kind:"struct",fields:[["tag","u8"],["name","string"],["space","u32"],["referrerIdxOpt",{kind:"option",type:"u16"}]]}]]);const B=new e.PublicKey("namesLPneVptA9Z5rqUDD9tMTWEJwofgaYwp8cawRkX"),I="SPL Name Service",k=new e.PublicKey("58PwtjSDuFHuUkYjH9BYnnQKHfwo9reZhC2zMJv9JPkx"),T=new e.PublicKey("jCebN34bUfdeUYJT13J1yG16XWQpt5PDx6Mse9GUqhR"),P=new e.PublicKey("ETp9eKXVv1dWwHSpsXRUuXHmw24PwRkttCGVgpZEY9zF"),N=new e.PublicKey("AUoZ3YAhV3b2rZeEH93UMZHXUZcTramBvb4d9YEVySkc"),D=new e.PublicKey("33m47vH6Eav6jr5Ry86XjhRft2jRBLDnDgPSHoquXi2Z"),K=new e.PublicKey("FvPH7PrVrLGKPfqaf3xJodFTjZriqrAXXLTVWEorTFBi"),W=new e.PublicKey("4YcexoW3r78zz16J2aqmukBLRwGq6rAvWzJpkYAXqebv"),O=new e.PublicKey("DmSyHDSM9eSLyvoLsPvDr5fRRFZ7Bfr3h3ULvWpgQaq7"),_=new e.PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),M=[new e.PublicKey("3ogYncmMM5CmytsGCqKHydmXmKUZ6sGWvizkzqwT7zb1"),new e.PublicKey("DM1jJCkZZEwY5tmWbgvKRxsDFzXCdbfrYCCH1CtwguEs"),new e.PublicKey("ADCp4QXFajHrhy4f43pD6GJFtQLkdBY2mjS9DfCk7tNW")],L=new Map([["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","USDC"],["Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB","USDT"],["So11111111111111111111111111111111111111112","SOL"],["EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp","FIDA"],["FeGn77dhg1KXRRFeSwwMiykZnZPw5JXW6naf2aQgZDQf","ETH"],["7i5KKsX2weiTkry7jA4ZwSuXGhs5eJBEjY8vVxR4pfRx","GMT"],["AFbX8oGjGpmVFywbVouvhQSRmiW2aR1mohfahi4Y2AdB","GST"],["mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So","MSOL"],["DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263","BONK"],["EPeUFDgHRxs9xxEPVaL6kfGQvCon7jmAWKVUHuux1Tpz","BAT"]]),F=new e.PublicKey("AHtgzX45WTKfkPG53L6WYhGEXwQkN1BVknET3sVsLL8J"),H=new e.PublicKey("GcWEQ9K78FV7LEHteFVciYApERk5YvQuFDQPk1yYJVXi"),z=e=>{const r=I+e,i=n.sha256(t.Buffer.from(r,"utf8")).slice(2);return t.Buffer.from(i,"hex")},C=(r,i,o)=>{const s=[r];i?s.push(i.toBuffer()):s.push(t.Buffer.alloc(32)),o?s.push(o.toBuffer()):s.push(t.Buffer.alloc(32));const[n]=e.PublicKey.findProgramAddressSync(s,B);return n};async function U(e,t){const r=z(t.toBase58()),o=C(r,D),{registry:s}=await J.retrieve(e,o);if(!s.data)throw new g(exports.ErrorType.NoAccountData);const n=new i(s.data.slice(0,4),"le").toNumber();return s.data.slice(4,4+n).toString()}async function j(e,t){let r=[];for(let e of t){const t=z(e.toBase58()),i=C(t,D);r.push(i)}return(await J.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 G=(e,t=k)=>{let r=z(e);return{pubkey:C(r,void 0,t),hashed:r}},Y=(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:o}=G(i[1]);return{...G(e,o),isSub:!0,parent:o}}if(3===i.length&&r){const{pubkey:e}=G(i[2]),{pubkey:r}=G("\0".concat(i[1]),e),o=t.Buffer.from([1]).toString();return{...G(o.concat(i[0]),r),isSub:!0,parent:e,isSubRecord:!0}}if(i.length>=3)throw new g(exports.ErrorType.InvalidInput);return{...G(e,k),isSub:!1,parent:void 0}};const q=(e,t)=>{if(!e)throw new g(t)},V=async(t,i)=>{try{const[o]=await e.PublicKey.findProgramAddress([s.MINT_PREFIX,i.toBuffer()],s.NAME_TOKENIZER_ID);if("0"===(await r.getMint(t,o)).supply.toString())return;const n=[{memcmp:{offset:0,bytes:o.toBase58()}},{memcmp:{offset:64,bytes:"2"}},{dataSize:165}],a=await t.getProgramAccounts(r.TOKEN_PROGRAM_ID,{filters:n});if(1!=a.length)return;return new e.PublicKey(a[0].account.data.slice(32,64))}catch{return}},X=e=>[{memcmp:{offset:32,bytes:e}},{memcmp:{offset:64,bytes:"2"}}],Z=async(e,t)=>{const i=[...X(t.toBase58()),{dataSize:165}],o=(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(o)).filter((e=>void 0!==e))};class J{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 g(exports.ErrorType.AccountDoesNotExist);let s=o.deserializeUnchecked(this.schema,J,i.data);s.data=null===(r=i.data)||void 0===r?void 0:r.slice(this.HEADER_LEN);return{registry:s,nftOwner:await V(e,t)}}static async _retrieveBatch(e,t){const r=await e.getMultipleAccountsInfo(t),i=e=>{if(!e)return;const t=o.deserializeUnchecked(this.schema,J,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}}J.HEADER_LEN=96,J.schema=new Map([[J,{kind:"struct",fields:[["parentName",[32]],["owner",[32]],["class",[32]]]}]]);class Q{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 o.serialize(Q.schema,this)}static deserialize(e){return o.deserializeUnchecked(Q.schema,Q,e)}}Q.schema=new Map([[Q,{kind:"struct",fields:[["name","string"],["ticker","string"],["mint",[32]],["decimals","u8"],["website",{kind:"option",type:"string"}],["logoUri",{kind:"option",type:"string"}]]}]]);class ${constructor(e){this.mint=e.mint}serialize(){return o.serialize($.schema,this)}static deserialize(e){return o.deserializeUnchecked($.schema,$,e)}}async function ee(e,t){if(!await e.getAccountInfo(t))throw new g(exports.ErrorType.AccountDoesNotExist);return J.retrieve(e,t)}async function te(e){const r=I+e,i=n.sha256(t.Buffer.from(r,"utf8")).slice(2);return t.Buffer.from(i,"hex")}async function re(r,i,o){const s=[r];i?s.push(i.toBuffer()):s.push(t.Buffer.alloc(32)),o?s.push(o.toBuffer()):s.push(t.Buffer.alloc(32));const[n]=await e.PublicKey.findProgramAddress(s,B);return n}$.schema=new Map([[$,{kind:"struct",fields:[["mint",[32]]]}]]);const ie=async(e,t=k)=>{let r=await te(e);return{pubkey:await re(r,void 0,t),hashed:r}},oe=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:o}=await ie(i[1]);return{...await ie(e,o),isSub:!0,parent:o}}if(3===i.length&&r){const{pubkey:e}=await ie(i[2]),{pubkey:r}=await ie("\0".concat(i[1]),e),o=t.Buffer.from([1]).toString();return{...await ie(o.concat(i[0]),r),isSub:!0,parent:e,isSubRecord:!0}}if(i.length>=3)throw new g(exports.ErrorType.InvalidInput);return{...await ie(e,k),isSub:!1,parent:void 0}};var se;exports.Record=void 0,(se=exports.Record||(exports.Record={})).IPFS="IPFS",se.ARWV="ARWV",se.SOL="SOL",se.ETH="ETH",se.BTC="BTC",se.LTC="LTC",se.DOGE="DOGE",se.Email="email",se.Url="url",se.Discord="discord",se.Github="github",se.Reddit="reddit",se.Twitter="twitter",se.Telegram="telegram",se.Pic="pic",se.SHDW="SHDW",se.POINT="POINT",se.BSC="BSC",se.Injective="INJ",se.Backpack="backpack",se.A="A",se.AAAA="AAAA",se.CNAME="CNAME",se.TXT="TXT";const ne=new Map([[exports.Record.SOL,96],[exports.Record.ETH,20],[exports.Record.BSC,20],[exports.Record.Injective,20],[exports.Record.A,4],[exports.Record.AAAA,16]]),ae=(e,t,r)=>w.sign.detached.verify(e,t,r.toBytes()),ce=(e,t)=>{const{pubkey:r}=Y(t+"."+e,!0);return r};async function ue(e,t,r,i){const o=ce(t,r);let{registry:s}=await J.retrieve(e,o);if(!s.data)throw new g(exports.ErrorType.NoRecordData);if(i)return de(s,r,o);const n=ne.get(r);return s.data=s.data.slice(0,n),s}const pe=async(e,t)=>await ue(e,t,exports.Record.SOL),de=(e,r,i)=>{const o=null==e?void 0:e.data;if(!o)return;const s=ne.get(r),n=(e=>{const t=Array.from(e);return t.length-1-t.reverse().findIndex((e=>0!==e))+1})(o);if(!s)return o.slice(0,n).toString("utf-8");if(s&&n!==s){const e=o.slice(0,n).toString("utf-8");if(r===exports.Record.Injective){const t=c.decode(e);if("inj"===t.prefix&&20===t.data.length)return e}else if(r===exports.Record.BSC||r===exports.Record.ETH){const r=e.slice(0,2),i=e.slice(2);if("0x"===r&&20===t.Buffer.from(i,"hex").length)return e}else if((r===exports.Record.A||r===exports.Record.AAAA)&&d.isValid(e))return e;throw new g(exports.ErrorType.InvalidRecordData)}if(r===exports.Record.SOL){const r=new TextEncoder,s=t.Buffer.concat([o.slice(0,32),i.toBuffer()]),n=r.encode(s.toString("hex"));if(ae(n,o.slice(32),e.owner))return p.encode(o.slice(0,32))}else{if(r===exports.Record.ETH||r===exports.Record.BSC)return"0x"+o.toString("hex");if(r===exports.Record.Injective)return c.encode("inj",o,"bech32");if(r===exports.Record.A||r===exports.Record.AAAA)return d.fromByteArray([...o.slice(0,s)]).toString()}throw new g(exports.ErrorType.InvalidRecordData)},le=(e,r)=>{if(!ne.get(r))return r!==exports.Record.CNAME&&r!==exports.Record.TXT||(e=l.encode(e)),t.Buffer.from(e,"utf-8");if(r===exports.Record.SOL)throw new g(exports.ErrorType.UnsupportedRecord,"Use `serializeSolRecord` for SOL record");if(r===exports.Record.ETH||r===exports.Record.BSC)return q("0x"===e.slice(0,2),exports.ErrorType.InvalidEvmAddress),t.Buffer.from(e.slice(2),"hex");if(r===exports.Record.Injective){const r=c.decode(e);return q("inj"===r.prefix,exports.ErrorType.InvalidInjectiveAddress),q(20===r.data.length,exports.ErrorType.InvalidInjectiveAddress),t.Buffer.from(r.data)}if(r===exports.Record.A){const r=d.parse(e).toByteArray();return q(4===r.length,exports.ErrorType.InvalidARecord),t.Buffer.from(r)}if(r===exports.Record.AAAA){const r=d.parse(e).toByteArray();return q(16===r.length,exports.ErrorType.InvalidAAAARecord),t.Buffer.from(r)}throw new g(exports.ErrorType.InvalidRecordInput)},fe=(e,r,i,o)=>{const s=t.Buffer.concat([e.toBuffer(),r.toBuffer()]),n=ae(s,o,i);return q(n,exports.ErrorType.InvalidSignature),t.Buffer.concat([e.toBuffer(),o])};async function ye(t,r,i,o,s,n,a,c){const u=await te(r),p=await re(u,a,c),d=n||await t.getMinimumBalanceForRentExemption(i);let l;if(c){const{registry:e}=await ee(t,c);l=e.owner}return x(B,e.SystemProgram.programId,p,s,o,u,new b(d),new m(i),a,c,l)}async function we(e,t,r,i,o){const s=await te(t),n=await re(s,i,o);let a;a=i||(await J.retrieve(e,n)).registry.owner;return S(B,n,r,a)}const ge=async(t,r,i,o,s)=>{let[n]=await e.PublicKey.findProgramAddress([T.toBuffer()],T),a=await te(t.toBase58()),c=await re(a,n,o);return[[],[new A({name:r}).getInstruction(T,e.SYSVAR_RENT_PUBKEY,B,k,c,n,i,o,s)]]},me=async(t,r,i,o,s,n)=>{q(i!==exports.Record.SOL,exports.ErrorType.UnsupportedRecord);const{pubkey:a,hashed:c,parent:u}=Y(`${i}.${r}`,!0),p=le(o,i).length,d=await t.getMinimumBalanceForRentExemption(p+J.HEADER_LEN);return x(B,e.SystemProgram.programId,a,s,n,c,new b(d),new m(p),void 0,u,s)},be=async(t,r,i,o,s,n)=>{const{pubkey:a,hashed:c,parent:u}=Y(`${exports.Record.SOL}.${r}`,!0),p=fe(i,a,o,s).length,d=await t.getMinimumBalanceForRentExemption(p+J.HEADER_LEN);return[x(B,e.SystemProgram.programId,a,o,n,c,new b(d),new m(p),void 0,u,o)]};class xe{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 g(exports.ErrorType.InvalidReverseTwitter);return o.deserializeUnchecked(this.schema,xe,r.data.slice(J.HEADER_LEN))}}async function he(r,i,s,n,a){const c=await te(n.toString()),u=await re(c,K,W);let p=o.serialize(xe.schema,new xe({twitterRegistryKey:s.toBytes(),twitterHandle:i}));return[x(B,e.SystemProgram.programId,u,n,a,c,new b(await r.getMinimumBalanceForRentExemption(p.length+J.HEADER_LEN)),new m(p.length),K,W,K),h(B,u,new m(0),t.Buffer.from(p),K)]}xe.schema=new Map([[xe,{kind:"struct",fields:[["twitterRegistryKey",[32]],["twitterHandle","string"]]}]]);const Re=new e.PublicKey("6NSu2tci4apRKQtt257bAVcvqYjB3zV2H1dWo56vgpa6"),Se=async(e,t)=>{const r=await re(await te(t.toBase58()),void 0,Re),{registry:i}=await J.retrieve(e,r);if(!i.data)throw new g(exports.ErrorType.NoAccountData);return Q.deserialize(i.data)},ve=new e.PublicKey("85iDfUvr3HJyLM2zcq5BXSiDvUWfw6cSE1FfNBo8Ap29");class Ae{constructor(t){this.tag=t.tag,this.nameAccount=new e.PublicKey(t.nameAccount)}static deserialize(e){return o.deserialize(this.schema,Ae,e)}static async retrieve(e,t){const r=await e.getAccountInfo(t);if(!r||!r.data)throw new g(exports.ErrorType.FavouriteDomainNotFound);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)}}Ae.schema=new Map([[Ae,{kind:"struct",fields:[["tag","u8"],["nameAccount",[32]]]}]]);exports.BONFIDA_FIDA_BNB=N,exports.BONFIDA_USDC_BNB=O,exports.FavouriteDomain=Ae,exports.HASH_PREFIX=I,exports.Mint=$,exports.NAME_OFFERS_ID=ve,exports.NAME_PROGRAM_ID=B,exports.NameRegistryState=J,exports.Numberu32=m,exports.Numberu64=b,exports.PYTH_FIDA_PRICE_ACC=P,exports.PYTH_MAPPING_ACC=F,exports.RECORD_V1_SIZE=ne,exports.REFERRERS=M,exports.REGISTER_PROGRAM_ID=T,exports.REVERSE_LOOKUP_CLASS=D,exports.ROOT_DOMAIN_ACCOUNT=k,exports.ReverseTwitterRegistryState=xe,exports.SNSError=g,exports.SOL_RECORD_SIG_LEN=96,exports.TOKENS_SYM_MINT=L,exports.TOKEN_TLD=Re,exports.TWITTER_ROOT_PARENT_REGISTRY_KEY=W,exports.TWITTER_VERIFICATION_AUTHORITY=K,exports.TokenData=Q,exports.USDC_MINT=_,exports.VAULT_OWNER=H,exports.changeTwitterRegistryData=async function(e,t,r,i){const o=await te(e),s=await re(o,void 0,W);return[h(B,s,new m(r),i,t)]},exports.changeVerifiedPubkey=async function(e,t,r,i,o){const s=await te(t),n=await re(s,void 0,W);let a=[R(B,n,i,r,void 0)];const c=await te(r.toString());return await re(c,K,void 0),a.push(await we(e,r.toString(),o,K,W)),a=a.concat(await he(e,t,n,i,o)),a},exports.check=q,exports.checkSolRecord=ae,exports.createInstruction=x,exports.createInstructionV3=E,exports.createNameRegistry=ye,exports.createRecordInstruction=me,exports.createReverseInstruction=A,exports.createReverseName=ge,exports.createReverseTwitterRegistry=he,exports.createSolRecordInstruction=be,exports.createSubdomain=async(e,t,r,i=2e3)=>{const o=[],s=t.split(".")[0];if(!s)throw new g(exports.ErrorType.InvalidSubdomain);const{parent:n,pubkey:a}=Y(t),c=await e.getMinimumBalanceForRentExemption(i+J.HEADER_LEN),u=await ye(e,"\0".concat(s),i,r,r,c,void 0,n);o.push(u);const[,p]=await ge(a,"\0".concat(s),r,n,r);return o.push(...p),[[],o]},exports.createV2Instruction=v,exports.createVerifiedTwitterRegistry=async function(t,r,i,o,s){const n=await te(r),a=await re(n,void 0,W),c=await t.getMinimumBalanceForRentExemption(o+J.HEADER_LEN);let u=[x(B,e.SystemProgram.programId,a,i,s,n,new b(c),new m(o),void 0,W,K)];return u=u.concat(await he(t,r,a,i,s)),u},exports.deleteInstruction=S,exports.deleteNameRegistry=we,exports.deleteTwitterRegistry=async function(e,t){const r=await te(e),i=await re(r,void 0,W),o=await te(t.toString()),s=await re(o,K,W);return[S(B,i,t,t),S(B,s,t,t)]},exports.deserializeRecord=de,exports.findSubdomains=async(e,t)=>{const r=[{memcmp:{offset:0,bytes:t.toBase58()}},{memcmp:{offset:64,bytes:D.toBase58()}}],i=await e.getProgramAccounts(B,{filters:r}),o=await U(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=>Y(e+"."+o).pubkey)),a=await e.getMultipleAccountsInfo(n);return s.filter(((e,t)=>!!a[t]))},exports.getAllDomains=async function(e,t){const r=[{memcmp:{offset:32,bytes:t.toBase58()}},{memcmp:{offset:0,bytes:k.toBase58()}}];return(await e.getProgramAccounts(B,{filters:r})).map((e=>e.pubkey))},exports.getAllRegisteredDomains=async e=>{const t=[{memcmp:{offset:0,bytes:k.toBase58()}}];return await e.getProgramAccounts(B,{dataSlice:{offset:32,length:32},filters:t})},exports.getArweaveRecord=async(e,t)=>await ue(e,t,exports.Record.ARWV,!0),exports.getBackpackRecord=async(e,t)=>await ue(e,t,exports.Record.Backpack,!0),exports.getBscRecord=async(e,t)=>await ue(e,t,exports.Record.BSC,!0),exports.getBtcRecord=async(e,t)=>await ue(e,t,exports.Record.BTC,!0),exports.getDiscordRecord=async(e,t)=>await ue(e,t,exports.Record.Discord,!0),exports.getDogeRecord=async(e,t)=>await ue(e,t,exports.Record.DOGE,!0),exports.getDomainKey=oe,exports.getDomainKeySync=Y,exports.getEmailRecord=async(e,t)=>await ue(e,t,exports.Record.Email,!0),exports.getEthRecord=async(e,t)=>await ue(e,t,exports.Record.ETH,!0),exports.getFavoriteDomain=async(t,r)=>{const[i]=Ae.getKeySync(ve,new e.PublicKey(r)),o=await Ae.retrieve(t,i),s=await U(t,o.nameAccount);return{domain:o.nameAccount,reverse:s}},exports.getGithubRecord=async(e,t)=>await ue(e,t,exports.Record.Github,!0),exports.getHandleAndRegistryKey=async function(t,r){const i=await te(r.toString()),o=await re(i,K,W);let s=await xe.retrieve(t,o);return[s.twitterHandle,new e.PublicKey(s.twitterRegistryKey)]},exports.getHashedName=te,exports.getHashedNameSync=z,exports.getInjectiveRecord=async(e,t)=>await ue(e,t,exports.Record.Injective,!0),exports.getIpfsRecord=async(e,t)=>await ue(e,t,exports.Record.IPFS,!0),exports.getLtcRecord=async(e,t)=>await ue(e,t,exports.Record.LTC,!0),exports.getNameAccountKey=re,exports.getNameAccountKeySync=C,exports.getNameOwner=ee,exports.getPicRecord=async(e,t)=>await ue(e,t,exports.Record.Pic,!0),exports.getPointRecord=async(e,t)=>await ue(e,t,exports.Record.POINT,!0),exports.getRecord=ue,exports.getRecordKeySync=ce,exports.getRecords=async function(e,t,r,i){const o=r.map((e=>ce(t,e))),s=await J.retrieveBatch(e,o);return i?s.map(((e,i)=>{if(e)return de(e,r[i],ce(t,r[i]))})):s},exports.getRedditRecord=async(e,t)=>await ue(e,t,exports.Record.Reddit,!0),exports.getReverseKey=async(e,t)=>{const{pubkey:r,parent:i}=await oe(e),o=await te(r.toBase58());return await re(o,D,t?i:void 0)},exports.getReverseKeySync=(e,t)=>{const{pubkey:r,parent:i}=Y(e),o=z(r.toBase58());return C(o,D,t?i:void 0)},exports.getShdwRecord=async(e,t)=>await ue(e,t,exports.Record.SHDW,!0),exports.getSolRecord=pe,exports.getTelegramRecord=async(e,t)=>await ue(e,t,exports.Record.Telegram,!0),exports.getTokenInfoFromMint=Se,exports.getTokenInfoFromName=async(t,r)=>{const i=await re(await te(r),void 0,Re),{registry:o}=await J.retrieve(t,i);if(!o.data)throw new g(exports.ErrorType.NoAccountData);const s=new e.PublicKey($.deserialize(o.data).mint);return await Se(t,s)},exports.getTokenizedDomains=async(e,t)=>{const r=await Z(e,t);return(await j(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:W.toBase58()}},{memcmp:{offset:32,bytes:r.toBase58()}},{memcmp:{offset:64,bytes:K.toBase58()}}],s=await t.getProgramAccounts(B,{filters:i});for(const t of s)if(t.account.data.length>J.HEADER_LEN+32){let r=t.account.data.slice(J.HEADER_LEN),i=o.deserializeUnchecked(xe.schema,xe,r);return[i.twitterHandle,new e.PublicKey(i.twitterRegistryKey)]}throw new g(exports.ErrorType.AccountDoesNotExist)},exports.getTwitterRecord=async(e,t)=>await ue(e,t,exports.Record.Twitter,!0),exports.getTwitterRegistry=async function(e,t){const r=await te(t),i=await re(r,void 0,W),{registry:o}=await J.retrieve(e,i);return o},exports.getTwitterRegistryData=async function(r,i){const o=[{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(B,{filters:o});if(s.length>1)throw new g(exports.ErrorType.MultipleRegistries);return s[0].account.data.slice(J.HEADER_LEN)},exports.getTwitterRegistryKey=async function(e){const t=await te(e);return await re(t,void 0,W)},exports.getUrlRecord=async(e,t)=>await ue(e,t,exports.Record.Url,!0),exports.performReverseLookup=async function(e,t){const r=await te(t.toBase58()),o=await re(r,D),{registry:s}=await J.retrieve(e,o);if(!s.data)throw new g(exports.ErrorType.NoAccountData);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 te(e.toBase58()),i=await re(t,D);r.push(i)}return(await J.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,o,s,n,c=_,u)=>{const[p]=e.PublicKey.findProgramAddressSync([T.toBuffer()],T),d=z(i),l=C(d,void 0,k),f=z(l.toBase58()),y=C(f,p),[w]=e.PublicKey.findProgramAddressSync([l.toBuffer()],T),m=M.findIndex((e=>null==u?void 0:u.equals(e)));let b;const x=[];if(-1!==m&&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);x.push(e)}}const h=new a.PythHttpClient(t,a.getPythProgramKeyForCluster("mainnet-beta")),R=await h.getData(),S=L.get(c.toBase58());if(!S)throw new g(exports.ErrorType.SymbolNotFound,`No symbol found for mint ${c.toBase58()}`);const v=R.productPrice.get("Crypto."+S+"/USD"),A=R.productFromSymbol.get("Crypto."+S+"/USD"),I=r.getAssociatedTokenAddressSync(c,H),P=new E({name:i,space:o,referrerIdxOpt:-1!=m?m:null}).getInstruction(T,B,k,l,y,e.SystemProgram.programId,p,s,n,F,v.productAccountKey,new e.PublicKey(A.price_account),I,r.TOKEN_PROGRAM_ID,e.SYSVAR_RENT_PUBKEY,w,b);return x.push(P),[[],x]},exports.resolve=async(r,i)=>{const{pubkey:o}=Y(i),{registry:s,nftOwner:n}=await J.retrieve(r,o);if(n)return n;try{const o=ce(i,exports.Record.SOL),n=await pe(r,i);if(!(null==n?void 0:n.data))throw new g(exports.ErrorType.NoRecordData);const a=new TextEncoder,c=t.Buffer.concat([n.data.slice(0,32),o.toBuffer()]),u=a.encode(c.toString("hex"));if(!ae(u,n.data.slice(32),s.owner))throw new g(exports.ErrorType.InvalidSignature);return new e.PublicKey(n.data.slice(0,32))}catch(e){if(e instanceof Error&&"FetchError"===e.name)throw e}return s.owner},exports.retrieveNftOwner=V,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=U,exports.reverseLookupBatch=j,exports.serializeRecord=le,exports.serializeSolRecord=fe,exports.transferInstruction=R,exports.transferNameOwnership=async function(e,t,r,i,o,s){const n=await te(t),a=await re(n,i,o);let c;return c=i||(await J.retrieve(e,a)).registry.owner,R(B,a,r,c,i,o,s)},exports.updateInstruction=h,exports.updateNameRegistryData=async function(e,t,r,i,o,s){const n=await te(t),a=await re(n,o,s);let c;return c=o||(await J.retrieve(e,a)).registry.owner,h(B,a,new m(r),i,c)},exports.updateRecordInstruction=async(e,t,r,i,o,s)=>{q(r!==exports.Record.SOL,exports.ErrorType.UnsupportedRecord);const{pubkey:n}=Y(`${r}.${t}`,!0),a=await e.getAccountInfo(n);q(!!(null==a?void 0:a.data),exports.ErrorType.AccountDoesNotExist);const c=le(i,r);if((null==a?void 0:a.data.slice(96).length)!==c.length)return[S(B,n,s,o),await me(e,t,r,i,o,s)];return[h(B,n,new m(0),c,o)]},exports.updateSolRecordInstruction=async(e,t,r,i,o,s)=>{const{pubkey:n}=Y(`${exports.Record.SOL}.${t}`,!0),a=await e.getAccountInfo(n);if(q(!!(null==a?void 0:a.data),exports.ErrorType.AccountDoesNotExist),96!==(null==a?void 0:a.data.length))return[S(B,n,s,i),await be(e,t,r,i,o,s)];const c=fe(r,n,i,o);return[h(B,n,new m(0),c,i)]};
|
|
1
|
+
"use strict";var e=require("@solana/web3.js"),t=require("buffer"),r=require("@solana/spl-token"),i=require("bn.js"),n=require("borsh"),o=require("@ethersproject/sha2"),s=require("@pythnetwork/client"),a=require("bech32-buffer"),c=require("tweetnacl"),u=require("bs58"),p=require("ipaddr.js"),d=require("punycode");function l(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 f,y=l(c);exports.ErrorType=void 0,(f=exports.ErrorType||(exports.ErrorType={})).SymbolNotFound="SymbolNotFound",f.InvalidSubdomain="InvalidSubdomain",f.FavouriteDomainNotFound="FavouriteDomainNotFound",f.MissingParentOwner="MissingParentOwner",f.U32Overflow="U32Overflow",f.InvalidBufferLength="InvalidBufferLength",f.U64Overflow="U64Overflow",f.NoRecordData="NoRecordData",f.InvalidRecordData="InvalidRecordData",f.UnsupportedRecord="UnsupportedRecord",f.InvalidEvmAddress="InvalidEvmAddress",f.InvalidInjectiveAddress="InvalidInjectiveAddress",f.InvalidARecord="InvalidARecord",f.InvalidAAAARecord="InvalidAAAARecord",f.InvalidRecordInput="InvalidRecordInput",f.InvalidSignature="InvalidSignature",f.AccountDoesNotExist="AccountDoesNotExist",f.MultipleRegistries="MultipleRegistries",f.InvalidReverseTwitter="InvalidReverseTwitter",f.NoAccountData="NoAccountData",f.InvalidInput="InvalidInput";class w extends Error{constructor(e,t){super(t),this.name="SNSError",this.type=e,Error.captureStackTrace&&Error.captureStackTrace(this,w)}}class g 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 w(exports.ErrorType.U32Overflow);const i=t.Buffer.alloc(4);return r.copy(i),i}static fromBuffer(e){if(4!==e.length)throw new w(exports.ErrorType.InvalidBufferLength,`Invalid buffer length: ${e.length}`);return new i([...e].reverse().map((e=>`00${e.toString(16)}`.slice(-2))).join(""),16)}}class m 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 w(exports.ErrorType.U64Overflow);const i=t.Buffer.alloc(8);return r.copy(i),i}static fromBuffer(e){if(8!==e.length)throw new w(exports.ErrorType.U64Overflow,`Invalid buffer length: ${e.length}`);return new i([...e].reverse().map((e=>`00${e.toString(16)}`.slice(-2))).join(""),16)}}function b(r,i,n,o,s,a,c,u,p,d,l){const f=[t.Buffer.from(Int8Array.from([0])),new g(a.length).toBuffer(),a,c.toBuffer(),u.toBuffer()],y=t.Buffer.concat(f),w=[{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1}];return p?w.push({pubkey:p,isSigner:!0,isWritable:!1}):w.push({pubkey:new e.PublicKey(t.Buffer.alloc(32)),isSigner:!1,isWritable:!1}),d?w.push({pubkey:d,isSigner:!1,isWritable:!1}):w.push({pubkey:new e.PublicKey(t.Buffer.alloc(32)),isSigner:!1,isWritable:!1}),l&&w.push({pubkey:l,isSigner:!0,isWritable:!1}),new e.TransactionInstruction({keys:w,programId:r,data:y})}function h(r,i,n,o,s){const a=[t.Buffer.from(Int8Array.from([1])),n.toBuffer(),new g(o.length).toBuffer(),o],c=t.Buffer.concat(a),u=[{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!0,isWritable:!1}];return new e.TransactionInstruction({keys:u,programId:r,data:c})}function x(r,i,n,o,s,a,c){const u=[t.Buffer.from(Int8Array.from([2])),n.toBuffer()],p=t.Buffer.concat(u),d=[{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:c||o,isSigner:!0,isWritable:!1}];return s&&d.push({pubkey:s,isSigner:!0,isWritable:!1}),c&&a&&(s||d.push({pubkey:e.PublicKey.default,isSigner:!1,isWritable:!1}),d.push({pubkey:a,isSigner:!1,isWritable:!1})),new e.TransactionInstruction({keys:d,programId:r,data:p})}function R(r,i,n,o){const s=[t.Buffer.from(Int8Array.from([3]))],a=t.Buffer.concat(s),c=[{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0}];return new e.TransactionInstruction({keys:c,programId:r,data:a})}class S{constructor(e){this.tag=9,this.name=e.name,this.space=e.space}serialize(){return n.serialize(S.schema,this)}getInstruction(i,n,o,s,a,c,u,p,d,l,f){const y=t.Buffer.from(this.serialize()),w=[{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,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:d,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:r.TOKEN_PROGRAM_ID,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1}];return new e.TransactionInstruction({keys:w,programId:i,data:y})}}S.schema=new Map([[S,{kind:"struct",fields:[["tag","u8"],["name","string"],["space","u32"]]}]]);class v{constructor(e){this.tag=5,this.name=e.name}serialize(){return n.serialize(v.schema,this)}getInstruction(r,i,n,o,s,a,c,u,p){const d=t.Buffer.from(this.serialize());let l=[{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:e.PublicKey.default,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!0,isWritable:!0}];if(u){if(!p)throw new w(exports.ErrorType.MissingParentOwner);l.push({pubkey:u,isSigner:!1,isWritable:!0}),l.push({pubkey:p,isSigner:!0,isWritable:!1})}return new e.TransactionInstruction({keys:l,programId:r,data:d})}}v.schema=new Map([[v,{kind:"struct",fields:[["tag","u8"],["name","string"]]}]]);class A{constructor(e){this.tag=13,this.name=e.name,this.space=e.space,this.referrerIdxOpt=e.referrerIdxOpt}serialize(){return n.serialize(A.schema,this)}getInstruction(r,i,n,o,s,a,c,u,p,d,l,f,y,w,g,m,b){const h=t.Buffer.from(this.serialize());let x=[];return x.push({pubkey:i,isSigner:!1,isWritable:!1}),x.push({pubkey:n,isSigner:!1,isWritable:!1}),x.push({pubkey:o,isSigner:!1,isWritable:!0}),x.push({pubkey:s,isSigner:!1,isWritable:!0}),x.push({pubkey:a,isSigner:!1,isWritable:!1}),x.push({pubkey:c,isSigner:!1,isWritable:!1}),x.push({pubkey:u,isSigner:!0,isWritable:!0}),x.push({pubkey:p,isSigner:!1,isWritable:!0}),x.push({pubkey:d,isSigner:!1,isWritable:!1}),x.push({pubkey:l,isSigner:!1,isWritable:!1}),x.push({pubkey:f,isSigner:!1,isWritable:!1}),x.push({pubkey:y,isSigner:!1,isWritable:!0}),x.push({pubkey:w,isSigner:!1,isWritable:!1}),x.push({pubkey:g,isSigner:!1,isWritable:!1}),x.push({pubkey:m,isSigner:!1,isWritable:!1}),b&&x.push({pubkey:b,isSigner:!1,isWritable:!0}),new e.TransactionInstruction({keys:x,programId:r,data:h})}}A.schema=new Map([[A,{kind:"struct",fields:[["tag","u8"],["name","string"],["space","u32"],["referrerIdxOpt",{kind:"option",type:"u16"}]]}]]);const E=new e.PublicKey("nftD3vbNkNqfj2Sd3HZwbpw4BxxKWr4AjGb9X38JeZk"),B=t.Buffer.from("tokenized_name");var k;!function(e){e[e.Uninitialized=0]="Uninitialized",e[e.CentralState=1]="CentralState",e[e.ActiveRecord=2]="ActiveRecord",e[e.InactiveRecord=3]="InactiveRecord"}(k||(k={}));class I{constructor(t){this.tag=t.tag,this.nonce=t.nonce,this.nameAccount=new e.PublicKey(t.nameAccount),this.owner=new e.PublicKey(t.owner),this.nftMint=new e.PublicKey(t.nftMint)}static deserialize(e){return n.deserialize(this.schema,I,e)}static async retrieve(e,t){const r=await e.getAccountInfo(t);if(!r||!r.data)throw new Error("NFT record not found");return this.deserialize(r.data)}static async findKey(r,i){return await e.PublicKey.findProgramAddress([t.Buffer.from("nft_record"),r.toBuffer()],i)}}I.schema=new Map([[I,{kind:"struct",fields:[["tag","u8"],["nonce","u8"],["nameAccount",[32]],["owner",[32]],["nftMint",[32]]]}]]);const T=new e.PublicKey("namesLPneVptA9Z5rqUDD9tMTWEJwofgaYwp8cawRkX"),P="SPL Name Service",N=new e.PublicKey("58PwtjSDuFHuUkYjH9BYnnQKHfwo9reZhC2zMJv9JPkx"),D=new e.PublicKey("jCebN34bUfdeUYJT13J1yG16XWQpt5PDx6Mse9GUqhR"),K=new e.PublicKey("ETp9eKXVv1dWwHSpsXRUuXHmw24PwRkttCGVgpZEY9zF"),W=new e.PublicKey("AUoZ3YAhV3b2rZeEH93UMZHXUZcTramBvb4d9YEVySkc"),O=new e.PublicKey("33m47vH6Eav6jr5Ry86XjhRft2jRBLDnDgPSHoquXi2Z"),_=new e.PublicKey("FvPH7PrVrLGKPfqaf3xJodFTjZriqrAXXLTVWEorTFBi"),M=new e.PublicKey("4YcexoW3r78zz16J2aqmukBLRwGq6rAvWzJpkYAXqebv"),z=new e.PublicKey("DmSyHDSM9eSLyvoLsPvDr5fRRFZ7Bfr3h3ULvWpgQaq7"),L=new e.PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),H=[new e.PublicKey("3ogYncmMM5CmytsGCqKHydmXmKUZ6sGWvizkzqwT7zb1"),new e.PublicKey("DM1jJCkZZEwY5tmWbgvKRxsDFzXCdbfrYCCH1CtwguEs"),new e.PublicKey("ADCp4QXFajHrhy4f43pD6GJFtQLkdBY2mjS9DfCk7tNW")],F=new Map([["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","USDC"],["Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB","USDT"],["So11111111111111111111111111111111111111112","SOL"],["EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp","FIDA"],["FeGn77dhg1KXRRFeSwwMiykZnZPw5JXW6naf2aQgZDQf","ETH"],["7i5KKsX2weiTkry7jA4ZwSuXGhs5eJBEjY8vVxR4pfRx","GMT"],["AFbX8oGjGpmVFywbVouvhQSRmiW2aR1mohfahi4Y2AdB","GST"],["mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So","MSOL"],["DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263","BONK"],["EPeUFDgHRxs9xxEPVaL6kfGQvCon7jmAWKVUHuux1Tpz","BAT"]]),C=new e.PublicKey("AHtgzX45WTKfkPG53L6WYhGEXwQkN1BVknET3sVsLL8J"),U=new e.PublicKey("GcWEQ9K78FV7LEHteFVciYApERk5YvQuFDQPk1yYJVXi"),j=e=>{const r=P+e,i=o.sha256(t.Buffer.from(r,"utf8")).slice(2);return t.Buffer.from(i,"hex")},G=(r,i,n)=>{const o=[r];i?o.push(i.toBuffer()):o.push(t.Buffer.alloc(32)),n?o.push(n.toBuffer()):o.push(t.Buffer.alloc(32));const[s]=e.PublicKey.findProgramAddressSync(o,T);return s};async function Y(e,t){const r=j(t.toBase58()),n=G(r,O),{registry:o}=await ee.retrieve(e,n);if(!o.data)throw new w(exports.ErrorType.NoAccountData);const s=new i(o.data.slice(0,4),"le").toNumber();return o.data.slice(4,4+s).toString()}async function q(e,t){let r=[];for(let e of t){const t=j(e.toBase58()),i=G(t,O);r.push(i)}return(await ee.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 V=(e,t=N)=>{let r=j(e);return{pubkey:G(r,void 0,t),hashed:r}},X=(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:n}=V(i[1]);return{...V(e,n),isSub:!0,parent:n}}if(3===i.length&&r){const{pubkey:e}=V(i[2]),{pubkey:r}=V("\0".concat(i[1]),e),n=t.Buffer.from([1]).toString();return{...V(n.concat(i[0]),r),isSub:!0,parent:e,isSubRecord:!0}}if(i.length>=3)throw new w(exports.ErrorType.InvalidInput);return{...V(e,N),isSub:!1,parent:void 0}};const Z=(e,t)=>{if(!e)throw new w(t)},J=async(t,i)=>{try{const[n]=await e.PublicKey.findProgramAddress([B,i.toBuffer()],E);if("0"===(await r.getMint(t,n)).supply.toString())return;const o=[{memcmp:{offset:0,bytes:n.toBase58()}},{memcmp:{offset:64,bytes:"2"}},{dataSize:165}],s=await t.getProgramAccounts(r.TOKEN_PROGRAM_ID,{filters:o});if(1!=s.length)return;return new e.PublicKey(s[0].account.data.slice(32,64))}catch{return}},Q=e=>[{memcmp:{offset:32,bytes:e}},{memcmp:{offset:64,bytes:"2"}}],$=async(e,t)=>{const r=await(async(e,t)=>{const r=[{memcmp:{offset:0,bytes:"3"}},{memcmp:{offset:66,bytes:t.toBase58()}}];return await e.getProgramAccounts(E,{filters:r})})(e,t.mint);if(1===r.length)return I.deserialize(r[0].account.data)};class ee{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 w(exports.ErrorType.AccountDoesNotExist);let o=n.deserializeUnchecked(this.schema,ee,i.data);o.data=null===(r=i.data)||void 0===r?void 0:r.slice(this.HEADER_LEN);return{registry:o,nftOwner:await J(e,t)}}static async _retrieveBatch(e,t){const r=await e.getMultipleAccountsInfo(t),i=e=>{if(!e)return;const t=n.deserializeUnchecked(this.schema,ee,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}}ee.HEADER_LEN=96,ee.schema=new Map([[ee,{kind:"struct",fields:[["parentName",[32]],["owner",[32]],["class",[32]]]}]]);class te{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 n.serialize(te.schema,this)}static deserialize(e){return n.deserializeUnchecked(te.schema,te,e)}}te.schema=new Map([[te,{kind:"struct",fields:[["name","string"],["ticker","string"],["mint",[32]],["decimals","u8"],["website",{kind:"option",type:"string"}],["logoUri",{kind:"option",type:"string"}]]}]]);class re{constructor(e){this.mint=e.mint}serialize(){return n.serialize(re.schema,this)}static deserialize(e){return n.deserializeUnchecked(re.schema,re,e)}}async function ie(e,t){if(!await e.getAccountInfo(t))throw new w(exports.ErrorType.AccountDoesNotExist);return ee.retrieve(e,t)}async function ne(e){const r=P+e,i=o.sha256(t.Buffer.from(r,"utf8")).slice(2);return t.Buffer.from(i,"hex")}async function oe(r,i,n){const o=[r];i?o.push(i.toBuffer()):o.push(t.Buffer.alloc(32)),n?o.push(n.toBuffer()):o.push(t.Buffer.alloc(32));const[s]=await e.PublicKey.findProgramAddress(o,T);return s}re.schema=new Map([[re,{kind:"struct",fields:[["mint",[32]]]}]]);const se=async(e,t=N)=>{let r=await ne(e);return{pubkey:await oe(r,void 0,t),hashed:r}},ae=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:n}=await se(i[1]);return{...await se(e,n),isSub:!0,parent:n}}if(3===i.length&&r){const{pubkey:e}=await se(i[2]),{pubkey:r}=await se("\0".concat(i[1]),e),n=t.Buffer.from([1]).toString();return{...await se(n.concat(i[0]),r),isSub:!0,parent:e,isSubRecord:!0}}if(i.length>=3)throw new w(exports.ErrorType.InvalidInput);return{...await se(e,N),isSub:!1,parent:void 0}};var ce;exports.Record=void 0,(ce=exports.Record||(exports.Record={})).IPFS="IPFS",ce.ARWV="ARWV",ce.SOL="SOL",ce.ETH="ETH",ce.BTC="BTC",ce.LTC="LTC",ce.DOGE="DOGE",ce.Email="email",ce.Url="url",ce.Discord="discord",ce.Github="github",ce.Reddit="reddit",ce.Twitter="twitter",ce.Telegram="telegram",ce.Pic="pic",ce.SHDW="SHDW",ce.POINT="POINT",ce.BSC="BSC",ce.Injective="INJ",ce.Backpack="backpack",ce.A="A",ce.AAAA="AAAA",ce.CNAME="CNAME",ce.TXT="TXT";const ue=new Map([[exports.Record.SOL,96],[exports.Record.ETH,20],[exports.Record.BSC,20],[exports.Record.Injective,20],[exports.Record.A,4],[exports.Record.AAAA,16]]),pe=(e,t,r)=>y.sign.detached.verify(e,t,r.toBytes()),de=(e,t)=>{const{pubkey:r}=X(t+"."+e,!0);return r};async function le(e,t,r,i){const n=de(t,r);let{registry:o}=await ee.retrieve(e,n);if(!o.data)throw new w(exports.ErrorType.NoRecordData);if(i)return ye(o,r,n);const s=ue.get(r);return o.data=o.data.slice(0,s),o}const fe=async(e,t)=>await le(e,t,exports.Record.SOL),ye=(e,r,i)=>{const n=null==e?void 0:e.data;if(!n)return;const o=ue.get(r),s=(e=>{const t=Array.from(e);return t.length-1-t.reverse().findIndex((e=>0!==e))+1})(n);if(!o)return n.slice(0,s).toString("utf-8");if(o&&s!==o){const e=n.slice(0,s).toString("utf-8");if(r===exports.Record.Injective){const t=a.decode(e);if("inj"===t.prefix&&20===t.data.length)return e}else if(r===exports.Record.BSC||r===exports.Record.ETH){const r=e.slice(0,2),i=e.slice(2);if("0x"===r&&20===t.Buffer.from(i,"hex").length)return e}else if((r===exports.Record.A||r===exports.Record.AAAA)&&p.isValid(e))return e;throw new w(exports.ErrorType.InvalidRecordData)}if(r===exports.Record.SOL){const r=new TextEncoder,o=t.Buffer.concat([n.slice(0,32),i.toBuffer()]),s=r.encode(o.toString("hex"));if(pe(s,n.slice(32),e.owner))return u.encode(n.slice(0,32))}else{if(r===exports.Record.ETH||r===exports.Record.BSC)return"0x"+n.toString("hex");if(r===exports.Record.Injective)return a.encode("inj",n,"bech32");if(r===exports.Record.A||r===exports.Record.AAAA)return p.fromByteArray([...n.slice(0,o)]).toString()}throw new w(exports.ErrorType.InvalidRecordData)},we=(e,r)=>{if(!ue.get(r))return r!==exports.Record.CNAME&&r!==exports.Record.TXT||(e=d.encode(e)),t.Buffer.from(e,"utf-8");if(r===exports.Record.SOL)throw new w(exports.ErrorType.UnsupportedRecord,"Use `serializeSolRecord` for SOL record");if(r===exports.Record.ETH||r===exports.Record.BSC)return Z("0x"===e.slice(0,2),exports.ErrorType.InvalidEvmAddress),t.Buffer.from(e.slice(2),"hex");if(r===exports.Record.Injective){const r=a.decode(e);return Z("inj"===r.prefix,exports.ErrorType.InvalidInjectiveAddress),Z(20===r.data.length,exports.ErrorType.InvalidInjectiveAddress),t.Buffer.from(r.data)}if(r===exports.Record.A){const r=p.parse(e).toByteArray();return Z(4===r.length,exports.ErrorType.InvalidARecord),t.Buffer.from(r)}if(r===exports.Record.AAAA){const r=p.parse(e).toByteArray();return Z(16===r.length,exports.ErrorType.InvalidAAAARecord),t.Buffer.from(r)}throw new w(exports.ErrorType.InvalidRecordInput)},ge=(e,r,i,n)=>{const o=t.Buffer.concat([e.toBuffer(),r.toBuffer()]),s=(new TextEncoder).encode(o.toString("hex")),a=pe(s,n,i);return Z(a,exports.ErrorType.InvalidSignature),t.Buffer.concat([e.toBuffer(),n])};async function me(t,r,i,n,o,s,a,c){const u=await ne(r),p=await oe(u,a,c),d=s||await t.getMinimumBalanceForRentExemption(i);let l;if(c){const{registry:e}=await ie(t,c);l=e.owner}return b(T,e.SystemProgram.programId,p,o,n,u,new m(d),new g(i),a,c,l)}async function be(e,t,r,i,n){const o=await ne(t),s=await oe(o,i,n);let a;a=i||(await ee.retrieve(e,s)).registry.owner;return R(T,s,r,a)}const he=async(t,r,i,n,o)=>{let[s]=await e.PublicKey.findProgramAddress([D.toBuffer()],D),a=await ne(t.toBase58()),c=await oe(a,s,n);return[[],[new v({name:r}).getInstruction(D,e.SYSVAR_RENT_PUBKEY,T,N,c,s,i,n,o)]]},xe=async(t,r,i,n,o,s)=>{Z(i!==exports.Record.SOL,exports.ErrorType.UnsupportedRecord);const{pubkey:a,hashed:c,parent:u}=X(`${i}.${r}`,!0),p=we(n,i).length,d=await t.getMinimumBalanceForRentExemption(p+ee.HEADER_LEN);return b(T,e.SystemProgram.programId,a,o,s,c,new m(d),new g(p),void 0,u,o)},Re=async(t,r,i,n,o,s)=>{const{pubkey:a,hashed:c,parent:u}=X(`${exports.Record.SOL}.${r}`,!0),p=ge(i,a,n,o).length,d=await t.getMinimumBalanceForRentExemption(p+ee.HEADER_LEN);return[b(T,e.SystemProgram.programId,a,n,s,c,new m(d),new g(p),void 0,u,n)]};class Se{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 w(exports.ErrorType.InvalidReverseTwitter);return n.deserializeUnchecked(this.schema,Se,r.data.slice(ee.HEADER_LEN))}}async function ve(r,i,o,s,a){const c=await ne(s.toString()),u=await oe(c,_,M);let p=n.serialize(Se.schema,new Se({twitterRegistryKey:o.toBytes(),twitterHandle:i}));return[b(T,e.SystemProgram.programId,u,s,a,c,new m(await r.getMinimumBalanceForRentExemption(p.length+ee.HEADER_LEN)),new g(p.length),_,M,_),h(T,u,new g(0),t.Buffer.from(p),_)]}Se.schema=new Map([[Se,{kind:"struct",fields:[["twitterRegistryKey",[32]],["twitterHandle","string"]]}]]);const Ae=new e.PublicKey("6NSu2tci4apRKQtt257bAVcvqYjB3zV2H1dWo56vgpa6"),Ee=async(e,t)=>{const r=await oe(await ne(t.toBase58()),void 0,Ae),{registry:i}=await ee.retrieve(e,r);if(!i.data)throw new w(exports.ErrorType.NoAccountData);return te.deserialize(i.data)},Be=new e.PublicKey("85iDfUvr3HJyLM2zcq5BXSiDvUWfw6cSE1FfNBo8Ap29");class ke{constructor(t){this.tag=t.tag,this.nameAccount=new e.PublicKey(t.nameAccount)}static deserialize(e){return n.deserialize(this.schema,ke,e)}static async retrieve(e,t){const r=await e.getAccountInfo(t);if(!r||!r.data)throw new w(exports.ErrorType.FavouriteDomainNotFound);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)}}ke.schema=new Map([[ke,{kind:"struct",fields:[["tag","u8"],["nameAccount",[32]]]}]]);exports.BONFIDA_FIDA_BNB=W,exports.BONFIDA_USDC_BNB=z,exports.FavouriteDomain=ke,exports.HASH_PREFIX=P,exports.Mint=re,exports.NAME_OFFERS_ID=Be,exports.NAME_PROGRAM_ID=T,exports.NameRegistryState=ee,exports.Numberu32=g,exports.Numberu64=m,exports.PYTH_FIDA_PRICE_ACC=K,exports.PYTH_MAPPING_ACC=C,exports.RECORD_V1_SIZE=ue,exports.REFERRERS=H,exports.REGISTER_PROGRAM_ID=D,exports.REVERSE_LOOKUP_CLASS=O,exports.ROOT_DOMAIN_ACCOUNT=N,exports.ReverseTwitterRegistryState=Se,exports.SNSError=w,exports.SOL_RECORD_SIG_LEN=96,exports.TOKENS_SYM_MINT=F,exports.TOKEN_TLD=Ae,exports.TWITTER_ROOT_PARENT_REGISTRY_KEY=M,exports.TWITTER_VERIFICATION_AUTHORITY=_,exports.TokenData=te,exports.USDC_MINT=L,exports.VAULT_OWNER=U,exports.changeTwitterRegistryData=async function(e,t,r,i){const n=await ne(e),o=await oe(n,void 0,M);return[h(T,o,new g(r),i,t)]},exports.changeVerifiedPubkey=async function(e,t,r,i,n){const o=await ne(t),s=await oe(o,void 0,M);let a=[x(T,s,i,r,void 0)];const c=await ne(r.toString());return await oe(c,_,void 0),a.push(await be(e,r.toString(),n,_,M)),a=a.concat(await ve(e,t,s,i,n)),a},exports.check=Z,exports.checkSolRecord=pe,exports.createInstruction=b,exports.createInstructionV3=A,exports.createNameRegistry=me,exports.createRecordInstruction=xe,exports.createReverseInstruction=v,exports.createReverseName=he,exports.createReverseTwitterRegistry=ve,exports.createSolRecordInstruction=Re,exports.createSubdomain=async(e,t,r,i=2e3)=>{const n=[],o=t.split(".")[0];if(!o)throw new w(exports.ErrorType.InvalidSubdomain);const{parent:s,pubkey:a}=X(t),c=await e.getMinimumBalanceForRentExemption(i+ee.HEADER_LEN),u=await me(e,"\0".concat(o),i,r,r,c,void 0,s);n.push(u);const[,p]=await he(a,"\0".concat(o),r,s,r);return n.push(...p),[[],n]},exports.createV2Instruction=S,exports.createVerifiedTwitterRegistry=async function(t,r,i,n,o){const s=await ne(r),a=await oe(s,void 0,M),c=await t.getMinimumBalanceForRentExemption(n+ee.HEADER_LEN);let u=[b(T,e.SystemProgram.programId,a,i,o,s,new m(c),new g(n),void 0,M,_)];return u=u.concat(await ve(t,r,a,i,o)),u},exports.deleteInstruction=R,exports.deleteNameRegistry=be,exports.deleteTwitterRegistry=async function(e,t){const r=await ne(e),i=await oe(r,void 0,M),n=await ne(t.toString()),o=await oe(n,_,M);return[R(T,i,t,t),R(T,o,t,t)]},exports.deserializeRecord=ye,exports.findSubdomains=async(e,t)=>{const r=[{memcmp:{offset:0,bytes:t.toBase58()}},{memcmp:{offset:64,bytes:O.toBase58()}}],i=await e.getProgramAccounts(T,{filters:r}),n=await Y(e,t),o=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("")})),s=o.map((e=>X(e+"."+n).pubkey)),a=await e.getMultipleAccountsInfo(s);return o.filter(((e,t)=>!!a[t]))},exports.getAllDomains=async function(e,t){const r=[{memcmp:{offset:32,bytes:t.toBase58()}},{memcmp:{offset:0,bytes:N.toBase58()}}];return(await e.getProgramAccounts(T,{filters:r})).map((e=>e.pubkey))},exports.getAllRegisteredDomains=async e=>{const t=[{memcmp:{offset:0,bytes:N.toBase58()}}];return await e.getProgramAccounts(T,{dataSlice:{offset:32,length:32},filters:t})},exports.getArweaveRecord=async(e,t)=>await le(e,t,exports.Record.ARWV,!0),exports.getBackpackRecord=async(e,t)=>await le(e,t,exports.Record.Backpack,!0),exports.getBscRecord=async(e,t)=>await le(e,t,exports.Record.BSC,!0),exports.getBtcRecord=async(e,t)=>await le(e,t,exports.Record.BTC,!0),exports.getDiscordRecord=async(e,t)=>await le(e,t,exports.Record.Discord,!0),exports.getDogeRecord=async(e,t)=>await le(e,t,exports.Record.DOGE,!0),exports.getDomainKey=ae,exports.getDomainKeySync=X,exports.getEmailRecord=async(e,t)=>await le(e,t,exports.Record.Email,!0),exports.getEthRecord=async(e,t)=>await le(e,t,exports.Record.ETH,!0),exports.getFavoriteDomain=async(t,r)=>{const[i]=ke.getKeySync(Be,new e.PublicKey(r)),n=await ke.retrieve(t,i),o=await Y(t,n.nameAccount);return{domain:n.nameAccount,reverse:o}},exports.getGithubRecord=async(e,t)=>await le(e,t,exports.Record.Github,!0),exports.getHandleAndRegistryKey=async function(t,r){const i=await ne(r.toString()),n=await oe(i,_,M);let o=await Se.retrieve(t,n);return[o.twitterHandle,new e.PublicKey(o.twitterRegistryKey)]},exports.getHashedName=ne,exports.getHashedNameSync=j,exports.getInjectiveRecord=async(e,t)=>await le(e,t,exports.Record.Injective,!0),exports.getIpfsRecord=async(e,t)=>await le(e,t,exports.Record.IPFS,!0),exports.getLtcRecord=async(e,t)=>await le(e,t,exports.Record.LTC,!0),exports.getNameAccountKey=oe,exports.getNameAccountKeySync=G,exports.getNameOwner=ie,exports.getPicRecord=async(e,t)=>await le(e,t,exports.Record.Pic,!0),exports.getPointRecord=async(e,t)=>await le(e,t,exports.Record.POINT,!0),exports.getRecord=le,exports.getRecordKeySync=de,exports.getRecords=async function(e,t,r,i){const n=r.map((e=>de(t,e))),o=await ee.retrieveBatch(e,n);return i?o.map(((e,i)=>{if(e)return ye(e,r[i],de(t,r[i]))})):o},exports.getRedditRecord=async(e,t)=>await le(e,t,exports.Record.Reddit,!0),exports.getReverseKey=async(e,t)=>{const{pubkey:r,parent:i}=await ae(e),n=await ne(r.toBase58());return await oe(n,O,t?i:void 0)},exports.getReverseKeySync=(e,t)=>{const{pubkey:r,parent:i}=X(e),n=j(r.toBase58());return G(n,O,t?i:void 0)},exports.getShdwRecord=async(e,t)=>await le(e,t,exports.Record.SHDW,!0),exports.getSolRecord=fe,exports.getTelegramRecord=async(e,t)=>await le(e,t,exports.Record.Telegram,!0),exports.getTokenInfoFromMint=Ee,exports.getTokenInfoFromName=async(t,r)=>{const i=await oe(await ne(r),void 0,Ae),{registry:n}=await ee.retrieve(t,i);if(!n.data)throw new w(exports.ErrorType.NoAccountData);const o=new e.PublicKey(re.deserialize(n.data).mint);return await Ee(t,o)},exports.getTokenizedDomains=async(e,t)=>{const i=await(async(e,t)=>{const i=[...Q(t.toBase58()),{dataSize:165}],n=(await e.getProgramAccounts(r.TOKEN_PROGRAM_ID,{filters:i})).map((e=>r.AccountLayout.decode(e.account.data))).map((t=>$(e,t)));return(await Promise.all(n)).filter((e=>void 0!==e))})(e,t);return(await q(e,i.map((e=>e.nameAccount)))).map(((e,t)=>({key:i[t].nameAccount,mint:i[t].nftMint,reverse:e}))).filter((e=>!!e.reverse))},exports.getTwitterHandleandRegistryKeyViaFilters=async function(t,r){const i=[{memcmp:{offset:0,bytes:M.toBase58()}},{memcmp:{offset:32,bytes:r.toBase58()}},{memcmp:{offset:64,bytes:_.toBase58()}}],o=await t.getProgramAccounts(T,{filters:i});for(const t of o)if(t.account.data.length>ee.HEADER_LEN+32){let r=t.account.data.slice(ee.HEADER_LEN),i=n.deserializeUnchecked(Se.schema,Se,r);return[i.twitterHandle,new e.PublicKey(i.twitterRegistryKey)]}throw new w(exports.ErrorType.AccountDoesNotExist)},exports.getTwitterRecord=async(e,t)=>await le(e,t,exports.Record.Twitter,!0),exports.getTwitterRegistry=async function(e,t){const r=await ne(t),i=await oe(r,void 0,M),{registry:n}=await ee.retrieve(e,i);return n},exports.getTwitterRegistryData=async function(r,i){const n=[{memcmp:{offset:0,bytes:M.toBase58()}},{memcmp:{offset:32,bytes:i.toBase58()}},{memcmp:{offset:64,bytes:new e.PublicKey(t.Buffer.alloc(32,0)).toBase58()}}],o=await r.getProgramAccounts(T,{filters:n});if(o.length>1)throw new w(exports.ErrorType.MultipleRegistries);return o[0].account.data.slice(ee.HEADER_LEN)},exports.getTwitterRegistryKey=async function(e){const t=await ne(e);return await oe(t,void 0,M)},exports.getUrlRecord=async(e,t)=>await le(e,t,exports.Record.Url,!0),exports.performReverseLookup=async function(e,t){const r=await ne(t.toBase58()),n=await oe(r,O),{registry:o}=await ee.retrieve(e,n);if(!o.data)throw new w(exports.ErrorType.NoAccountData);const s=new i(o.data.slice(0,4),"le").toNumber();return o.data.slice(4,4+s).toString()},exports.performReverseLookupBatch=async function(e,t){let r=[];for(let e of t){const t=await ne(e.toBase58()),i=await oe(t,O);r.push(i)}return(await ee.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,n,o,a,c=L,u)=>{const[p]=e.PublicKey.findProgramAddressSync([D.toBuffer()],D),d=j(i),l=G(d,void 0,N),f=j(l.toBase58()),y=G(f,p),[g]=e.PublicKey.findProgramAddressSync([l.toBuffer()],D),m=H.findIndex((e=>null==u?void 0:u.equals(e)));let b;const h=[];if(-1!==m&&u){b=r.getAssociatedTokenAddressSync(c,u,!0);const e=await t.getAccountInfo(b);if(!(null==e?void 0:e.data)){const e=r.createAssociatedTokenAccountInstruction(o,b,u,c);h.push(e)}}const x=new s.PythHttpClient(t,s.getPythProgramKeyForCluster("mainnet-beta")),R=await x.getData(),S=F.get(c.toBase58());if(!S)throw new w(exports.ErrorType.SymbolNotFound,`No symbol found for mint ${c.toBase58()}`);const v=R.productPrice.get("Crypto."+S+"/USD"),E=R.productFromSymbol.get("Crypto."+S+"/USD"),B=r.getAssociatedTokenAddressSync(c,U),k=new A({name:i,space:n,referrerIdxOpt:-1!=m?m:null}).getInstruction(D,T,N,l,y,e.SystemProgram.programId,p,o,a,C,v.productAccountKey,new e.PublicKey(E.price_account),B,r.TOKEN_PROGRAM_ID,e.SYSVAR_RENT_PUBKEY,g,b);return h.push(k),[[],h]},exports.resolve=async(r,i)=>{const{pubkey:n}=X(i),{registry:o,nftOwner:s}=await ee.retrieve(r,n);if(s)return s;try{const n=de(i,exports.Record.SOL),s=await fe(r,i);if(!(null==s?void 0:s.data))throw new w(exports.ErrorType.NoRecordData);const a=new TextEncoder,c=t.Buffer.concat([s.data.slice(0,32),n.toBuffer()]),u=a.encode(c.toString("hex"));if(!pe(u,s.data.slice(32),o.owner))throw new w(exports.ErrorType.InvalidSignature);return new e.PublicKey(s.data.slice(0,32))}catch(e){if(e instanceof Error&&"FetchError"===e.name)throw e}return o.owner},exports.retrieveNftOwner=J,exports.retrieveNfts=async t=>{const r=await t.getProgramAccounts(E,{filters:[{memcmp:{offset:0,bytes:"3"}}]});return r.map((t=>new e.PublicKey(t.account.data.slice(66,98))))},exports.reverseLookup=Y,exports.reverseLookupBatch=q,exports.serializeRecord=we,exports.serializeSolRecord=ge,exports.transferInstruction=x,exports.transferNameOwnership=async function(e,t,r,i,n,o){const s=await ne(t),a=await oe(s,i,n);let c;return c=i||(await ee.retrieve(e,a)).registry.owner,x(T,a,r,c,i,n,o)},exports.updateInstruction=h,exports.updateNameRegistryData=async function(e,t,r,i,n,o){const s=await ne(t),a=await oe(s,n,o);let c;return c=n||(await ee.retrieve(e,a)).registry.owner,h(T,a,new g(r),i,c)},exports.updateRecordInstruction=async(e,t,r,i,n,o)=>{Z(r!==exports.Record.SOL,exports.ErrorType.UnsupportedRecord);const{pubkey:s}=X(`${r}.${t}`,!0),a=await e.getAccountInfo(s);Z(!!(null==a?void 0:a.data),exports.ErrorType.AccountDoesNotExist);const c=we(i,r);if((null==a?void 0:a.data.slice(96).length)!==c.length)return[R(T,s,o,n),await xe(e,t,r,i,n,o)];return[h(T,s,new g(0),c,n)]},exports.updateSolRecordInstruction=async(e,t,r,i,n,o)=>{const{pubkey:s}=X(`${exports.Record.SOL}.${t}`,!0),a=await e.getAccountInfo(s);if(Z(!!(null==a?void 0:a.data),exports.ErrorType.AccountDoesNotExist),96!==(null==a?void 0:a.data.length))return[R(T,s,o,i),await Re(e,t,r,i,n,o)];const c=ge(r,s,i,n);return[h(T,s,new g(0),c,i)]};
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{PublicKey as t,TransactionInstruction as e,SystemProgram as i,SYSVAR_RENT_PUBKEY as r}from"@solana/web3.js";import{Buffer as n}from"buffer";import{TOKEN_PROGRAM_ID as a,getMint as s,AccountLayout as o,getAssociatedTokenAddressSync as c,createAssociatedTokenAccountInstruction as u}from"@solana/spl-token";import l from"bn.js";import{serialize as f,deserializeUnchecked as w,deserialize as d}from"borsh";import{MINT_PREFIX as p,NAME_TOKENIZER_ID as m,getRecordFromMint as y,NftRecord as g}from"@bonfida/name-tokenizer";import{sha256 as h}from"@ethersproject/sha2";import{PythHttpClient as b,getPythProgramKeyForCluster as v}from"@pythnetwork/client";import{decode as S,encode as A}from"bech32-buffer";import*as k from"tweetnacl";import B from"bs58";import I from"ipaddr.js";import{encode as E}from"punycode";var R;!function(t){t.SymbolNotFound="SymbolNotFound",t.InvalidSubdomain="InvalidSubdomain",t.FavouriteDomainNotFound="FavouriteDomainNotFound",t.MissingParentOwner="MissingParentOwner",t.U32Overflow="U32Overflow",t.InvalidBufferLength="InvalidBufferLength",t.U64Overflow="U64Overflow",t.NoRecordData="NoRecordData",t.InvalidRecordData="InvalidRecordData",t.UnsupportedRecord="UnsupportedRecord",t.InvalidEvmAddress="InvalidEvmAddress",t.InvalidInjectiveAddress="InvalidInjectiveAddress",t.InvalidARecord="InvalidARecord",t.InvalidAAAARecord="InvalidAAAARecord",t.InvalidRecordInput="InvalidRecordInput",t.InvalidSignature="InvalidSignature",t.AccountDoesNotExist="AccountDoesNotExist",t.MultipleRegistries="MultipleRegistries",t.InvalidReverseTwitter="InvalidReverseTwitter",t.NoAccountData="NoAccountData",t.InvalidInput="InvalidInput"}(R||(R={}));class W extends Error{constructor(t,e){super(e),this.name="SNSError",this.type=t,Error.captureStackTrace&&Error.captureStackTrace(this,W)}}class D extends l{toBuffer(){const t=super.toArray().reverse(),e=n.from(t);if(4===e.length)return e;if(e.length>4)throw new W(R.U32Overflow);const i=n.alloc(4);return e.copy(i),i}static fromBuffer(t){if(4!==t.length)throw new W(R.InvalidBufferLength,`Invalid buffer length: ${t.length}`);return new l([...t].reverse().map((t=>`00${t.toString(16)}`.slice(-2))).join(""),16)}}class N extends l{toBuffer(){const t=super.toArray().reverse(),e=n.from(t);if(8===e.length)return e;if(e.length>8)throw new W(R.U64Overflow);const i=n.alloc(8);return e.copy(i),i}static fromBuffer(t){if(8!==t.length)throw new W(R.U64Overflow,`Invalid buffer length: ${t.length}`);return new l([...t].reverse().map((t=>`00${t.toString(16)}`.slice(-2))).join(""),16)}}function x(i,r,a,s,o,c,u,l,f,w,d){const p=[n.from(Int8Array.from([0])),new D(c.length).toBuffer(),c,u.toBuffer(),l.toBuffer()],m=n.concat(p),y=[{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1}];return f?y.push({pubkey:f,isSigner:!0,isWritable:!1}):y.push({pubkey:new t(n.alloc(32)),isSigner:!1,isWritable:!1}),w?y.push({pubkey:w,isSigner:!1,isWritable:!1}):y.push({pubkey:new t(n.alloc(32)),isSigner:!1,isWritable:!1}),d&&y.push({pubkey:d,isSigner:!0,isWritable:!1}),new e({keys:y,programId:i,data:m})}function T(t,i,r,a,s){const o=[n.from(Int8Array.from([1])),r.toBuffer(),new D(a.length).toBuffer(),a],c=n.concat(o);return new e({keys:[{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!0,isWritable:!1}],programId:t,data:c})}function H(i,r,a,s,o,c,u){const l=[n.from(Int8Array.from([2])),a.toBuffer()],f=n.concat(l),w=[{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:u||s,isSigner:!0,isWritable:!1}];return o&&w.push({pubkey:o,isSigner:!0,isWritable:!1}),u&&c&&(o||w.push({pubkey:t.default,isSigner:!1,isWritable:!1}),w.push({pubkey:c,isSigner:!1,isWritable:!1})),new e({keys:w,programId:i,data:f})}function L(t,i,r,a){const s=[n.from(Int8Array.from([3]))],o=n.concat(s);return new e({keys:[{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0}],programId:t,data:o})}class P{constructor(t){this.tag=9,this.name=t.name,this.space=t.space}serialize(){return f(P.schema,this)}getInstruction(t,r,s,o,c,u,l,f,w,d,p){const m=n.from(this.serialize()),y=[{pubkey:r,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:i.programId,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!0,isWritable:!0},{pubkey:w,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1}];return new e({keys:y,programId:t,data:m})}}P.schema=new Map([[P,{kind:"struct",fields:[["tag","u8"],["name","string"],["space","u32"]]}]]);class F{constructor(t){this.tag=5,this.name=t.name}serialize(){return f(F.schema,this)}getInstruction(i,r,a,s,o,c,u,l,f){const w=n.from(this.serialize());let d=[{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,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(l){if(!f)throw new W(R.MissingParentOwner);d.push({pubkey:l,isSigner:!1,isWritable:!0}),d.push({pubkey:f,isSigner:!0,isWritable:!1})}return new e({keys:d,programId:i,data:w})}}F.schema=new Map([[F,{kind:"struct",fields:[["tag","u8"],["name","string"]]}]]);class M{constructor(t){this.tag=13,this.name=t.name,this.space=t.space,this.referrerIdxOpt=t.referrerIdxOpt}serialize(){return f(M.schema,this)}getInstruction(t,i,r,a,s,o,c,u,l,f,w,d,p,m,y,g,h){const b=n.from(this.serialize());let v=[];return v.push({pubkey:i,isSigner:!1,isWritable:!1}),v.push({pubkey:r,isSigner:!1,isWritable:!1}),v.push({pubkey:a,isSigner:!1,isWritable:!0}),v.push({pubkey:s,isSigner:!1,isWritable:!0}),v.push({pubkey:o,isSigner:!1,isWritable:!1}),v.push({pubkey:c,isSigner:!1,isWritable:!1}),v.push({pubkey:u,isSigner:!0,isWritable:!0}),v.push({pubkey:l,isSigner:!1,isWritable:!0}),v.push({pubkey:f,isSigner:!1,isWritable:!1}),v.push({pubkey:w,isSigner:!1,isWritable:!1}),v.push({pubkey:d,isSigner:!1,isWritable:!1}),v.push({pubkey:p,isSigner:!1,isWritable:!0}),v.push({pubkey:m,isSigner:!1,isWritable:!1}),v.push({pubkey:y,isSigner:!1,isWritable:!1}),v.push({pubkey:g,isSigner:!1,isWritable:!1}),h&&v.push({pubkey:h,isSigner:!1,isWritable:!0}),new e({keys:v,programId:t,data:b})}}M.schema=new Map([[M,{kind:"struct",fields:[["tag","u8"],["name","string"],["space","u32"],["referrerIdxOpt",{kind:"option",type:"u16"}]]}]]);const z=new t("namesLPneVptA9Z5rqUDD9tMTWEJwofgaYwp8cawRkX"),C="SPL Name Service",j=new t("58PwtjSDuFHuUkYjH9BYnnQKHfwo9reZhC2zMJv9JPkx"),U=new t("jCebN34bUfdeUYJT13J1yG16XWQpt5PDx6Mse9GUqhR"),O=new t("ETp9eKXVv1dWwHSpsXRUuXHmw24PwRkttCGVgpZEY9zF"),G=new t("AUoZ3YAhV3b2rZeEH93UMZHXUZcTramBvb4d9YEVySkc"),K=new t("33m47vH6Eav6jr5Ry86XjhRft2jRBLDnDgPSHoquXi2Z"),X=new t("FvPH7PrVrLGKPfqaf3xJodFTjZriqrAXXLTVWEorTFBi"),Y=new t("4YcexoW3r78zz16J2aqmukBLRwGq6rAvWzJpkYAXqebv"),V=96,Z=new t("DmSyHDSM9eSLyvoLsPvDr5fRRFZ7Bfr3h3ULvWpgQaq7"),q=new t("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),J=[new t("3ogYncmMM5CmytsGCqKHydmXmKUZ6sGWvizkzqwT7zb1"),new t("DM1jJCkZZEwY5tmWbgvKRxsDFzXCdbfrYCCH1CtwguEs"),new t("ADCp4QXFajHrhy4f43pD6GJFtQLkdBY2mjS9DfCk7tNW")],_=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"),$=new t("GcWEQ9K78FV7LEHteFVciYApERk5YvQuFDQPk1yYJVXi"),tt=t=>{const e=C+t,i=h(n.from(e,"utf8")).slice(2);return n.from(i,"hex")},et=(e,i,r)=>{const a=[e];i?a.push(i.toBuffer()):a.push(n.alloc(32)),r?a.push(r.toBuffer()):a.push(n.alloc(32));const[s]=t.findProgramAddressSync(a,z);return s};async function it(t,e){const i=tt(e.toBase58()),r=et(i,K),{registry:n}=await yt.retrieve(t,r);if(!n.data)throw new W(R.NoAccountData);const a=new l(n.data.slice(0,4),"le").toNumber();return n.data.slice(4,4+a).toString()}async function rt(t,e){let i=[];for(let t of e){const e=tt(t.toBase58()),r=et(e,K);i.push(r)}return(await yt.retrieveBatch(t,i)).map((t=>{if(void 0===t||void 0===t.data)return;let e=new l(t.data.slice(0,4),"le").toNumber();return t.data.slice(4,4+e).toString()}))}const nt=async(t,e)=>{const i=[{memcmp:{offset:0,bytes:e.toBase58()}},{memcmp:{offset:64,bytes:K.toBase58()}}],r=await t.getProgramAccounts(z,{filters:i}),n=await it(t,e),a=r.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=a.map((t=>st(t+"."+n).pubkey)),o=await t.getMultipleAccountsInfo(s);return a.filter(((t,e)=>!!o[e]))},at=(t,e=j)=>{let i=tt(t);return{pubkey:et(i,void 0,e),hashed:i}},st=(t,e=!1)=>{t.endsWith(".sol")&&(t=t.slice(0,-4));const i=t.split(".");if(2===i.length){const t=n.from([e?1:0]).toString().concat(i[0]),{pubkey:r}=at(i[1]);return{...at(t,r),isSub:!0,parent:r}}if(3===i.length&&e){const{pubkey:t}=at(i[2]),{pubkey:e}=at("\0".concat(i[1]),t),r=n.from([1]).toString();return{...at(r.concat(i[0]),e),isSub:!0,parent:t,isSubRecord:!0}}if(i.length>=3)throw new W(R.InvalidInput);return{...at(t,j),isSub:!1,parent:void 0}};async function ot(t,e){const i=[{memcmp:{offset:32,bytes:e.toBase58()}},{memcmp:{offset:0,bytes:j.toBase58()}}];return(await t.getProgramAccounts(z,{filters:i})).map((t=>t.pubkey))}const ct=async t=>{const e=[{memcmp:{offset:0,bytes:j.toBase58()}}];return await t.getProgramAccounts(z,{dataSlice:{offset:32,length:32},filters:e})},ut=(t,e)=>{const{pubkey:i,parent:r}=st(t),n=tt(i.toBase58());return et(n,K,e?r:void 0)},lt=(t,e)=>{if(!t)throw new W(e)},ft=async(e,i)=>{try{const[r]=await t.findProgramAddress([p,i.toBuffer()],m);if("0"===(await s(e,r)).supply.toString())return;const n=[{memcmp:{offset:0,bytes:r.toBase58()}},{memcmp:{offset:64,bytes:"2"}},{dataSize:165}],o=await e.getProgramAccounts(a,{filters:n});if(1!=o.length)return;return new t(o[0].account.data.slice(32,64))}catch{return}},wt=async e=>{const i=await e.getProgramAccounts(m,{filters:[{memcmp:{offset:0,bytes:"3"}}]});return i.map((e=>new t(e.account.data.slice(66,98))))},dt=t=>[{memcmp:{offset:32,bytes:t}},{memcmp:{offset:64,bytes:"2"}}],pt=async(t,e)=>{const i=[...dt(e.toBase58()),{dataSize:165}],r=(await t.getProgramAccounts(a,{filters:i})).map((t=>o.decode(t.account.data))).map((e=>(async(t,e)=>{const i=await y(t,e.mint);if(1===i.length)return g.deserialize(i[0].account.data)})(t,e)));return(await Promise.all(r)).filter((t=>void 0!==t))},mt=async(t,e)=>{const i=await pt(t,e);return(await rt(t,i.map((t=>t.nameAccount)))).map(((t,e)=>({key:i[e].nameAccount,mint:i[e].nftMint,reverse:t}))).filter((t=>!!t.reverse))};class yt{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 i;const r=await t.getAccountInfo(e);if(!r)throw new W(R.AccountDoesNotExist);let n=w(this.schema,yt,r.data);n.data=null===(i=r.data)||void 0===i?void 0:i.slice(this.HEADER_LEN);return{registry:n,nftOwner:await ft(t,e)}}static async _retrieveBatch(t,e){const i=await t.getMultipleAccountsInfo(e),r=t=>{if(!t)return;const e=w(this.schema,yt,t);return e.data=null==t?void 0:t.slice(this.HEADER_LEN),e};return i.map((t=>r(null==t?void 0:t.data)))}static async retrieveBatch(t,e){let i=[];const r=[...e];for(;r.length>0;)i.push(...await this._retrieveBatch(t,r.splice(0,100)));return i}}yt.HEADER_LEN=96,yt.schema=new Map([[yt,{kind:"struct",fields:[["parentName",[32]],["owner",[32]],["class",[32]]]}]]);class gt{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 f(gt.schema,this)}static deserialize(t){return w(gt.schema,gt,t)}}gt.schema=new Map([[gt,{kind:"struct",fields:[["name","string"],["ticker","string"],["mint",[32]],["decimals","u8"],["website",{kind:"option",type:"string"}],["logoUri",{kind:"option",type:"string"}]]}]]);class ht{constructor(t){this.mint=t.mint}serialize(){return f(ht.schema,this)}static deserialize(t){return w(ht.schema,ht,t)}}async function bt(t,e){if(!await t.getAccountInfo(e))throw new W(R.AccountDoesNotExist);return yt.retrieve(t,e)}async function vt(t){const e=C+t,i=h(n.from(e,"utf8")).slice(2);return n.from(i,"hex")}async function St(e,i,r){const a=[e];i?a.push(i.toBuffer()):a.push(n.alloc(32)),r?a.push(r.toBuffer()):a.push(n.alloc(32));const[s]=await t.findProgramAddress(a,z);return s}async function At(t,e){const i=await vt(e.toBase58()),r=await St(i,K),{registry:n}=await yt.retrieve(t,r);if(!n.data)throw new W(R.NoAccountData);const a=new l(n.data.slice(0,4),"le").toNumber();return n.data.slice(4,4+a).toString()}async function kt(t,e){let i=[];for(let t of e){const e=await vt(t.toBase58()),r=await St(e,K);i.push(r)}return(await yt.retrieveBatch(t,i)).map((t=>{if(void 0===t||void 0===t.data)return;let e=new l(t.data.slice(0,4),"le").toNumber();return t.data.slice(4,4+e).toString()}))}ht.schema=new Map([[ht,{kind:"struct",fields:[["mint",[32]]]}]]);const Bt=async(t,e=j)=>{let i=await vt(t);return{pubkey:await St(i,void 0,e),hashed:i}},It=async(t,e=!1)=>{t.endsWith(".sol")&&(t=t.slice(0,-4));const i=t.split(".");if(2===i.length){const t=n.from([e?1:0]).toString().concat(i[0]),{pubkey:r}=await Bt(i[1]);return{...await Bt(t,r),isSub:!0,parent:r}}if(3===i.length&&e){const{pubkey:t}=await Bt(i[2]),{pubkey:e}=await Bt("\0".concat(i[1]),t),r=n.from([1]).toString();return{...await Bt(r.concat(i[0]),e),isSub:!0,parent:t,isSubRecord:!0}}if(i.length>=3)throw new W(R.InvalidInput);return{...await Bt(t,j),isSub:!1,parent:void 0}},Et=async(t,e)=>{const{pubkey:i,parent:r}=await It(t),n=await vt(i.toBase58());return await St(n,K,e?r:void 0)};var Rt;!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",t.A="A",t.AAAA="AAAA",t.CNAME="CNAME",t.TXT="TXT"}(Rt||(Rt={}));const Wt=new Map([[Rt.SOL,96],[Rt.ETH,20],[Rt.BSC,20],[Rt.Injective,20],[Rt.A,4],[Rt.AAAA,16]]),Dt=(t,e,i)=>k.sign.detached.verify(t,e,i.toBytes()),Nt=async(e,i)=>{const{pubkey:r}=st(i),{registry:a,nftOwner:s}=await yt.retrieve(e,r);if(s)return s;try{const r=xt(i,Rt.SOL),s=await qt(e,i);if(!(null==s?void 0:s.data))throw new W(R.NoRecordData);const o=new TextEncoder,c=n.concat([s.data.slice(0,32),r.toBuffer()]),u=o.encode(c.toString("hex"));if(!Dt(u,s.data.slice(32),a.owner))throw new W(R.InvalidSignature);return new t(s.data.slice(0,32))}catch(t){if(t instanceof Error&&"FetchError"===t.name)throw t}return a.owner},xt=(t,e)=>{const{pubkey:i}=st(e+"."+t,!0);return i};async function Tt(t,e,i,r){const n=xt(e,i);let{registry:a}=await yt.retrieve(t,n);if(!a.data)throw new W(R.NoRecordData);if(r)return te(a,i,n);const s=Wt.get(i);return a.data=a.data.slice(0,s),a}async function Ht(t,e,i,r){const n=i.map((t=>xt(e,t))),a=await yt.retrieveBatch(t,n);return r?a.map(((t,r)=>{if(t)return te(t,i[r],xt(e,i[r]))})):a}const Lt=async(t,e)=>await Tt(t,e,Rt.IPFS,!0),Pt=async(t,e)=>await Tt(t,e,Rt.ARWV,!0),Ft=async(t,e)=>await Tt(t,e,Rt.ETH,!0),Mt=async(t,e)=>await Tt(t,e,Rt.BTC,!0),zt=async(t,e)=>await Tt(t,e,Rt.LTC,!0),Ct=async(t,e)=>await Tt(t,e,Rt.DOGE,!0),jt=async(t,e)=>await Tt(t,e,Rt.Email,!0),Ut=async(t,e)=>await Tt(t,e,Rt.Url,!0),Ot=async(t,e)=>await Tt(t,e,Rt.Discord,!0),Gt=async(t,e)=>await Tt(t,e,Rt.Github,!0),Kt=async(t,e)=>await Tt(t,e,Rt.Reddit,!0),Xt=async(t,e)=>await Tt(t,e,Rt.Twitter,!0),Yt=async(t,e)=>await Tt(t,e,Rt.Telegram,!0),Vt=async(t,e)=>await Tt(t,e,Rt.Pic,!0),Zt=async(t,e)=>await Tt(t,e,Rt.SHDW,!0),qt=async(t,e)=>await Tt(t,e,Rt.SOL),Jt=async(t,e)=>await Tt(t,e,Rt.POINT,!0),_t=async(t,e)=>await Tt(t,e,Rt.BSC,!0),Qt=async(t,e)=>await Tt(t,e,Rt.Injective,!0),$t=async(t,e)=>await Tt(t,e,Rt.Backpack,!0),te=(t,e,i)=>{const r=null==t?void 0:t.data;if(!r)return;const a=Wt.get(e),s=(t=>{const e=Array.from(t);return e.length-1-e.reverse().findIndex((t=>0!==t))+1})(r);if(!a)return r.slice(0,s).toString("utf-8");if(a&&s!==a){const t=r.slice(0,s).toString("utf-8");if(e===Rt.Injective){const e=S(t);if("inj"===e.prefix&&20===e.data.length)return t}else if(e===Rt.BSC||e===Rt.ETH){const e=t.slice(0,2),i=t.slice(2);if("0x"===e&&20===n.from(i,"hex").length)return t}else if((e===Rt.A||e===Rt.AAAA)&&I.isValid(t))return t;throw new W(R.InvalidRecordData)}if(e===Rt.SOL){const e=new TextEncoder,a=n.concat([r.slice(0,32),i.toBuffer()]),s=e.encode(a.toString("hex"));if(Dt(s,r.slice(32),t.owner))return B.encode(r.slice(0,32))}else{if(e===Rt.ETH||e===Rt.BSC)return"0x"+r.toString("hex");if(e===Rt.Injective)return A("inj",r,"bech32");if(e===Rt.A||e===Rt.AAAA)return I.fromByteArray([...r.slice(0,a)]).toString()}throw new W(R.InvalidRecordData)},ee=(t,e)=>{if(!Wt.get(e))return e!==Rt.CNAME&&e!==Rt.TXT||(t=E(t)),n.from(t,"utf-8");if(e===Rt.SOL)throw new W(R.UnsupportedRecord,"Use `serializeSolRecord` for SOL record");if(e===Rt.ETH||e===Rt.BSC)return lt("0x"===t.slice(0,2),R.InvalidEvmAddress),n.from(t.slice(2),"hex");if(e===Rt.Injective){const e=S(t);return lt("inj"===e.prefix,R.InvalidInjectiveAddress),lt(20===e.data.length,R.InvalidInjectiveAddress),n.from(e.data)}if(e===Rt.A){const e=I.parse(t).toByteArray();return lt(4===e.length,R.InvalidARecord),n.from(e)}if(e===Rt.AAAA){const e=I.parse(t).toByteArray();return lt(16===e.length,R.InvalidAAAARecord),n.from(e)}throw new W(R.InvalidRecordInput)},ie=(t,e,i,r)=>{const a=n.concat([t.toBuffer(),e.toBuffer()]),s=Dt(a,r,i);return lt(s,R.InvalidSignature),n.concat([t.toBuffer(),r])};async function re(t,e,r,n,a,s,o,c){const u=await vt(e),l=await St(u,o,c),f=s||await t.getMinimumBalanceForRentExemption(r);let w;if(c){const{registry:e}=await bt(t,c);w=e.owner}return x(z,i.programId,l,a,n,u,new N(f),new D(r),o,c,w)}async function ne(t,e,i,r,n,a){const s=await vt(e),o=await St(s,n,a);let c;c=n||(await yt.retrieve(t,o)).registry.owner;return T(z,o,new D(i),r,c)}async function ae(t,e,i,r,n,a){const s=await vt(e),o=await St(s,r,n);let c;c=r||(await yt.retrieve(t,o)).registry.owner;return H(z,o,i,c,r,n,a)}async function se(t,e,i,r,n){const a=await vt(e),s=await St(a,r,n);let o;o=r||(await yt.retrieve(t,s)).registry.owner;return L(z,s,i,o)}const oe=async(e,n,s,o,l,f=q,w)=>{const[d]=t.findProgramAddressSync([U.toBuffer()],U),p=tt(n),m=et(p,void 0,j),y=tt(m.toBase58()),g=et(y,d),[h]=t.findProgramAddressSync([m.toBuffer()],U),S=J.findIndex((t=>null==w?void 0:w.equals(t)));let A;const k=[];if(-1!==S&&w){A=c(f,w,!0);const t=await e.getAccountInfo(A);if(!(null==t?void 0:t.data)){const t=u(o,A,w,f);k.push(t)}}const B=new b(e,v("mainnet-beta")),I=await B.getData(),E=_.get(f.toBase58());if(!E)throw new W(R.SymbolNotFound,`No symbol found for mint ${f.toBase58()}`);const D=I.productPrice.get("Crypto."+E+"/USD"),N=I.productFromSymbol.get("Crypto."+E+"/USD"),x=c(f,$),T=new M({name:n,space:s,referrerIdxOpt:-1!=S?S:null}).getInstruction(U,z,j,m,g,i.programId,d,o,l,Q,D.productAccountKey,new t(N.price_account),x,a,r,h,A);return k.push(T),[[],k]},ce=async(e,i,n,a,s)=>{let[o]=await t.findProgramAddress([U.toBuffer()],U),c=await vt(e.toBase58()),u=await St(c,o,a);return[[],[new F({name:i}).getInstruction(U,r,z,j,u,o,n,a,s)]]},ue=async(t,e,i,r=2e3)=>{const n=[],a=e.split(".")[0];if(!a)throw new W(R.InvalidSubdomain);const{parent:s,pubkey:o}=st(e),c=await t.getMinimumBalanceForRentExemption(r+yt.HEADER_LEN),u=await re(t,"\0".concat(a),r,i,i,c,void 0,s);n.push(u);const[,l]=await ce(o,"\0".concat(a),i,s,i);return n.push(...l),[[],n]},le=async(t,e,r,n,a,s)=>{lt(r!==Rt.SOL,R.UnsupportedRecord);const{pubkey:o,hashed:c,parent:u}=st(`${r}.${e}`,!0),l=ee(n,r).length,f=await t.getMinimumBalanceForRentExemption(l+yt.HEADER_LEN);return x(z,i.programId,o,a,s,c,new N(f),new D(l),void 0,u,a)},fe=async(t,e,i,r,n,a)=>{lt(i!==Rt.SOL,R.UnsupportedRecord);const{pubkey:s}=st(`${i}.${e}`,!0),o=await t.getAccountInfo(s);lt(!!(null==o?void 0:o.data),R.AccountDoesNotExist);const c=ee(r,i);if((null==o?void 0:o.data.slice(96).length)!==c.length)return[L(z,s,a,n),await le(t,e,i,r,n,a)];return[T(z,s,new D(0),c,n)]},we=async(t,e,r,n,a,s)=>{const{pubkey:o,hashed:c,parent:u}=st(`${Rt.SOL}.${e}`,!0),l=ie(r,o,n,a).length,f=await t.getMinimumBalanceForRentExemption(l+yt.HEADER_LEN);return[x(z,i.programId,o,n,s,c,new N(f),new D(l),void 0,u,n)]},de=async(t,e,i,r,n,a)=>{const{pubkey:s}=st(`${Rt.SOL}.${e}`,!0),o=await t.getAccountInfo(s);if(lt(!!(null==o?void 0:o.data),R.AccountDoesNotExist),96!==(null==o?void 0:o.data.length))return[L(z,s,a,r),await we(t,e,i,r,n,a)];const c=ie(i,s,r,n);return[T(z,s,new D(0),c,r)]};async function pe(t,e,r,n,a){const s=await vt(e),o=await St(s,void 0,Y),c=await t.getMinimumBalanceForRentExemption(n+yt.HEADER_LEN);let u=[x(z,i.programId,o,r,a,s,new N(c),new D(n),void 0,Y,X)];return u=u.concat(await Be(t,e,o,r,a)),u}async function me(t,e,i,r){const n=await vt(t),a=await St(n,void 0,Y);return[T(z,a,new D(i),r,e)]}async function ye(t,e,i,r,n){const a=await vt(e),s=await St(a,void 0,Y);let o=[H(z,s,r,i,void 0)];const c=await vt(i.toString());return await St(c,X,void 0),o.push(await se(t,i.toString(),n,X,Y)),o=o.concat(await Be(t,e,s,r,n)),o}async function ge(t,e){const i=await vt(t),r=await St(i,void 0,Y),n=await vt(e.toString()),a=await St(n,X,Y);return[L(z,r,e,e),L(z,a,e,e)]}async function he(t){const e=await vt(t);return await St(e,void 0,Y)}async function be(t,e){const i=await vt(e),r=await St(i,void 0,Y),{registry:n}=await yt.retrieve(t,r);return n}async function ve(e,i){const r=await vt(i.toString()),n=await St(r,X,Y);let a=await ke.retrieve(e,n);return[a.twitterHandle,new t(a.twitterRegistryKey)]}async function Se(e,i){const r=[{memcmp:{offset:0,bytes:Y.toBase58()}},{memcmp:{offset:32,bytes:i.toBase58()}},{memcmp:{offset:64,bytes:X.toBase58()}}],n=await e.getProgramAccounts(z,{filters:r});for(const e of n)if(e.account.data.length>yt.HEADER_LEN+32){let i=e.account.data.slice(yt.HEADER_LEN),r=w(ke.schema,ke,i);return[r.twitterHandle,new t(r.twitterRegistryKey)]}throw new W(R.AccountDoesNotExist)}async function Ae(e,i){const r=[{memcmp:{offset:0,bytes:Y.toBase58()}},{memcmp:{offset:32,bytes:i.toBase58()}},{memcmp:{offset:64,bytes:new t(n.alloc(32,0)).toBase58()}}],a=await e.getProgramAccounts(z,{filters:r});if(a.length>1)throw new W(R.MultipleRegistries);return a[0].account.data.slice(yt.HEADER_LEN)}class ke{constructor(t){this.twitterRegistryKey=t.twitterRegistryKey,this.twitterHandle=t.twitterHandle}static async retrieve(t,e){let i=await t.getAccountInfo(e,"processed");if(!i)throw new W(R.InvalidReverseTwitter);return w(this.schema,ke,i.data.slice(yt.HEADER_LEN))}}async function Be(t,e,r,a,s){const o=await vt(a.toString()),c=await St(o,X,Y);let u=f(ke.schema,new ke({twitterRegistryKey:r.toBytes(),twitterHandle:e}));return[x(z,i.programId,c,a,s,o,new N(await t.getMinimumBalanceForRentExemption(u.length+yt.HEADER_LEN)),new D(u.length),X,Y,X),T(z,c,new D(0),n.from(u),X)]}ke.schema=new Map([[ke,{kind:"struct",fields:[["twitterRegistryKey",[32]],["twitterHandle","string"]]}]]);const Ie=new t("6NSu2tci4apRKQtt257bAVcvqYjB3zV2H1dWo56vgpa6"),Ee=async(t,e)=>{const i=await St(await vt(e.toBase58()),void 0,Ie),{registry:r}=await yt.retrieve(t,i);if(!r.data)throw new W(R.NoAccountData);return gt.deserialize(r.data)},Re=async(e,i)=>{const r=await St(await vt(i),void 0,Ie),{registry:n}=await yt.retrieve(e,r);if(!n.data)throw new W(R.NoAccountData);const a=new t(ht.deserialize(n.data).mint);return await Ee(e,a)},We=new t("85iDfUvr3HJyLM2zcq5BXSiDvUWfw6cSE1FfNBo8Ap29");class De{constructor(e){this.tag=e.tag,this.nameAccount=new t(e.nameAccount)}static deserialize(t){return d(this.schema,De,t)}static async retrieve(t,e){const i=await t.getAccountInfo(e);if(!i||!i.data)throw new W(R.FavouriteDomainNotFound);return this.deserialize(i.data)}static async getKey(e,i){return await t.findProgramAddress([n.from("favourite_domain"),i.toBuffer()],e)}static getKeySync(e,i){return t.findProgramAddressSync([n.from("favourite_domain"),i.toBuffer()],e)}}De.schema=new Map([[De,{kind:"struct",fields:[["tag","u8"],["nameAccount",[32]]]}]]);const Ne=async(e,i)=>{const[r]=De.getKeySync(We,new t(i)),n=await De.retrieve(e,r),a=await it(e,n.nameAccount);return{domain:n.nameAccount,reverse:a}};export{G as BONFIDA_FIDA_BNB,Z as BONFIDA_USDC_BNB,R as ErrorType,De as FavouriteDomain,C as HASH_PREFIX,ht as Mint,We as NAME_OFFERS_ID,z as NAME_PROGRAM_ID,yt as NameRegistryState,D as Numberu32,N as Numberu64,O as PYTH_FIDA_PRICE_ACC,Q as PYTH_MAPPING_ACC,Wt as RECORD_V1_SIZE,J as REFERRERS,U as REGISTER_PROGRAM_ID,K as REVERSE_LOOKUP_CLASS,j as ROOT_DOMAIN_ACCOUNT,Rt as Record,ke as ReverseTwitterRegistryState,W as SNSError,V as SOL_RECORD_SIG_LEN,_ as TOKENS_SYM_MINT,Ie as TOKEN_TLD,Y as TWITTER_ROOT_PARENT_REGISTRY_KEY,X as TWITTER_VERIFICATION_AUTHORITY,gt as TokenData,q as USDC_MINT,$ as VAULT_OWNER,me as changeTwitterRegistryData,ye as changeVerifiedPubkey,lt as check,Dt as checkSolRecord,x as createInstruction,M as createInstructionV3,re as createNameRegistry,le as createRecordInstruction,F as createReverseInstruction,ce as createReverseName,Be as createReverseTwitterRegistry,we as createSolRecordInstruction,ue as createSubdomain,P as createV2Instruction,pe as createVerifiedTwitterRegistry,L as deleteInstruction,se as deleteNameRegistry,ge as deleteTwitterRegistry,te as deserializeRecord,nt as findSubdomains,ot as getAllDomains,ct as getAllRegisteredDomains,Pt as getArweaveRecord,$t as getBackpackRecord,_t as getBscRecord,Mt as getBtcRecord,Ot as getDiscordRecord,Ct as getDogeRecord,It as getDomainKey,st as getDomainKeySync,jt as getEmailRecord,Ft as getEthRecord,Ne as getFavoriteDomain,Gt as getGithubRecord,ve as getHandleAndRegistryKey,vt as getHashedName,tt as getHashedNameSync,Qt as getInjectiveRecord,Lt as getIpfsRecord,zt as getLtcRecord,St as getNameAccountKey,et as getNameAccountKeySync,bt as getNameOwner,Vt as getPicRecord,Jt as getPointRecord,Tt as getRecord,xt as getRecordKeySync,Ht as getRecords,Kt as getRedditRecord,Et as getReverseKey,ut as getReverseKeySync,Zt as getShdwRecord,qt as getSolRecord,Yt as getTelegramRecord,Ee as getTokenInfoFromMint,Re as getTokenInfoFromName,mt as getTokenizedDomains,Se as getTwitterHandleandRegistryKeyViaFilters,Xt as getTwitterRecord,be as getTwitterRegistry,Ae as getTwitterRegistryData,he as getTwitterRegistryKey,Ut as getUrlRecord,At as performReverseLookup,kt as performReverseLookupBatch,oe as registerDomainName,Nt as resolve,ft as retrieveNftOwner,wt as retrieveNfts,it as reverseLookup,rt as reverseLookupBatch,ee as serializeRecord,ie as serializeSolRecord,H as transferInstruction,ae as transferNameOwnership,T as updateInstruction,ne as updateNameRegistryData,fe as updateRecordInstruction,de as updateSolRecordInstruction};
|
|
1
|
+
import{PublicKey as t,TransactionInstruction as e,SystemProgram as n,SYSVAR_RENT_PUBKEY as i}from"@solana/web3.js";import{Buffer as r}from"buffer";import{TOKEN_PROGRAM_ID as a,getMint as s,AccountLayout as o,getAssociatedTokenAddressSync as c,createAssociatedTokenAccountInstruction as u}from"@solana/spl-token";import l from"bn.js";import{serialize as f,deserialize as d,deserializeUnchecked as w}from"borsh";import{sha256 as p}from"@ethersproject/sha2";import{PythHttpClient as m,getPythProgramKeyForCluster as y}from"@pythnetwork/client";import{decode as g,encode as h}from"bech32-buffer";import*as b from"tweetnacl";import v from"bs58";import S from"ipaddr.js";import{encode as A}from"punycode";var k;!function(t){t.SymbolNotFound="SymbolNotFound",t.InvalidSubdomain="InvalidSubdomain",t.FavouriteDomainNotFound="FavouriteDomainNotFound",t.MissingParentOwner="MissingParentOwner",t.U32Overflow="U32Overflow",t.InvalidBufferLength="InvalidBufferLength",t.U64Overflow="U64Overflow",t.NoRecordData="NoRecordData",t.InvalidRecordData="InvalidRecordData",t.UnsupportedRecord="UnsupportedRecord",t.InvalidEvmAddress="InvalidEvmAddress",t.InvalidInjectiveAddress="InvalidInjectiveAddress",t.InvalidARecord="InvalidARecord",t.InvalidAAAARecord="InvalidAAAARecord",t.InvalidRecordInput="InvalidRecordInput",t.InvalidSignature="InvalidSignature",t.AccountDoesNotExist="AccountDoesNotExist",t.MultipleRegistries="MultipleRegistries",t.InvalidReverseTwitter="InvalidReverseTwitter",t.NoAccountData="NoAccountData",t.InvalidInput="InvalidInput"}(k||(k={}));class B extends Error{constructor(t,e){super(e),this.name="SNSError",this.type=t,Error.captureStackTrace&&Error.captureStackTrace(this,B)}}class I extends l{toBuffer(){const t=super.toArray().reverse(),e=r.from(t);if(4===e.length)return e;if(e.length>4)throw new B(k.U32Overflow);const n=r.alloc(4);return e.copy(n),n}static fromBuffer(t){if(4!==t.length)throw new B(k.InvalidBufferLength,`Invalid buffer length: ${t.length}`);return new l([...t].reverse().map((t=>`00${t.toString(16)}`.slice(-2))).join(""),16)}}class E extends l{toBuffer(){const t=super.toArray().reverse(),e=r.from(t);if(8===e.length)return e;if(e.length>8)throw new B(k.U64Overflow);const n=r.alloc(8);return e.copy(n),n}static fromBuffer(t){if(8!==t.length)throw new B(k.U64Overflow,`Invalid buffer length: ${t.length}`);return new l([...t].reverse().map((t=>`00${t.toString(16)}`.slice(-2))).join(""),16)}}function R(n,i,a,s,o,c,u,l,f,d,w){const p=[r.from(Int8Array.from([0])),new I(c.length).toBuffer(),c,u.toBuffer(),l.toBuffer()],m=r.concat(p),y=[{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1}];return f?y.push({pubkey:f,isSigner:!0,isWritable:!1}):y.push({pubkey:new t(r.alloc(32)),isSigner:!1,isWritable:!1}),d?y.push({pubkey:d,isSigner:!1,isWritable:!1}):y.push({pubkey:new t(r.alloc(32)),isSigner:!1,isWritable:!1}),w&&y.push({pubkey:w,isSigner:!0,isWritable:!1}),new e({keys:y,programId:n,data:m})}function W(t,n,i,a,s){const o=[r.from(Int8Array.from([1])),i.toBuffer(),new I(a.length).toBuffer(),a],c=r.concat(o);return new e({keys:[{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!0,isWritable:!1}],programId:t,data:c})}function D(n,i,a,s,o,c,u){const l=[r.from(Int8Array.from([2])),a.toBuffer()],f=r.concat(l),d=[{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:u||s,isSigner:!0,isWritable:!1}];return o&&d.push({pubkey:o,isSigner:!0,isWritable:!1}),u&&c&&(o||d.push({pubkey:t.default,isSigner:!1,isWritable:!1}),d.push({pubkey:c,isSigner:!1,isWritable:!1})),new e({keys:d,programId:n,data:f})}function N(t,n,i,a){const s=[r.from(Int8Array.from([3]))],o=r.concat(s);return new e({keys:[{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0}],programId:t,data:o})}class x{constructor(t){this.tag=9,this.name=t.name,this.space=t.space}serialize(){return f(x.schema,this)}getInstruction(t,i,s,o,c,u,l,f,d,w,p){const m=r.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:n.programId,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!0,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:w,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1}];return new e({keys:y,programId:t,data:m})}}x.schema=new Map([[x,{kind:"struct",fields:[["tag","u8"],["name","string"],["space","u32"]]}]]);class T{constructor(t){this.tag=5,this.name=t.name}serialize(){return f(T.schema,this)}getInstruction(n,i,a,s,o,c,u,l,f){const d=r.from(this.serialize());let w=[{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:a,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(l){if(!f)throw new B(k.MissingParentOwner);w.push({pubkey:l,isSigner:!1,isWritable:!0}),w.push({pubkey:f,isSigner:!0,isWritable:!1})}return new e({keys:w,programId:n,data:d})}}T.schema=new Map([[T,{kind:"struct",fields:[["tag","u8"],["name","string"]]}]]);class H{constructor(t){this.tag=13,this.name=t.name,this.space=t.space,this.referrerIdxOpt=t.referrerIdxOpt}serialize(){return f(H.schema,this)}getInstruction(t,n,i,a,s,o,c,u,l,f,d,w,p,m,y,g,h){const b=r.from(this.serialize());let v=[];return v.push({pubkey:n,isSigner:!1,isWritable:!1}),v.push({pubkey:i,isSigner:!1,isWritable:!1}),v.push({pubkey:a,isSigner:!1,isWritable:!0}),v.push({pubkey:s,isSigner:!1,isWritable:!0}),v.push({pubkey:o,isSigner:!1,isWritable:!1}),v.push({pubkey:c,isSigner:!1,isWritable:!1}),v.push({pubkey:u,isSigner:!0,isWritable:!0}),v.push({pubkey:l,isSigner:!1,isWritable:!0}),v.push({pubkey:f,isSigner:!1,isWritable:!1}),v.push({pubkey:d,isSigner:!1,isWritable:!1}),v.push({pubkey:w,isSigner:!1,isWritable:!1}),v.push({pubkey:p,isSigner:!1,isWritable:!0}),v.push({pubkey:m,isSigner:!1,isWritable:!1}),v.push({pubkey:y,isSigner:!1,isWritable:!1}),v.push({pubkey:g,isSigner:!1,isWritable:!1}),h&&v.push({pubkey:h,isSigner:!1,isWritable:!0}),new e({keys:v,programId:t,data:b})}}H.schema=new Map([[H,{kind:"struct",fields:[["tag","u8"],["name","string"],["space","u32"],["referrerIdxOpt",{kind:"option",type:"u16"}]]}]]);const P=new t("nftD3vbNkNqfj2Sd3HZwbpw4BxxKWr4AjGb9X38JeZk"),L=r.from("tokenized_name");var M;!function(t){t[t.Uninitialized=0]="Uninitialized",t[t.CentralState=1]="CentralState",t[t.ActiveRecord=2]="ActiveRecord",t[t.InactiveRecord=3]="InactiveRecord"}(M||(M={}));class F{constructor(e){this.tag=e.tag,this.nonce=e.nonce,this.nameAccount=new t(e.nameAccount),this.owner=new t(e.owner),this.nftMint=new t(e.nftMint)}static deserialize(t){return d(this.schema,F,t)}static async retrieve(t,e){const n=await t.getAccountInfo(e);if(!n||!n.data)throw new Error("NFT record not found");return this.deserialize(n.data)}static async findKey(e,n){return await t.findProgramAddress([r.from("nft_record"),e.toBuffer()],n)}}F.schema=new Map([[F,{kind:"struct",fields:[["tag","u8"],["nonce","u8"],["nameAccount",[32]],["owner",[32]],["nftMint",[32]]]}]]);const z=new t("namesLPneVptA9Z5rqUDD9tMTWEJwofgaYwp8cawRkX"),C="SPL Name Service",j=new t("58PwtjSDuFHuUkYjH9BYnnQKHfwo9reZhC2zMJv9JPkx"),U=new t("jCebN34bUfdeUYJT13J1yG16XWQpt5PDx6Mse9GUqhR"),O=new t("ETp9eKXVv1dWwHSpsXRUuXHmw24PwRkttCGVgpZEY9zF"),G=new t("AUoZ3YAhV3b2rZeEH93UMZHXUZcTramBvb4d9YEVySkc"),K=new t("33m47vH6Eav6jr5Ry86XjhRft2jRBLDnDgPSHoquXi2Z"),X=new t("FvPH7PrVrLGKPfqaf3xJodFTjZriqrAXXLTVWEorTFBi"),Y=new t("4YcexoW3r78zz16J2aqmukBLRwGq6rAvWzJpkYAXqebv"),Z=96,q=new t("DmSyHDSM9eSLyvoLsPvDr5fRRFZ7Bfr3h3ULvWpgQaq7"),V=new t("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),J=[new t("3ogYncmMM5CmytsGCqKHydmXmKUZ6sGWvizkzqwT7zb1"),new t("DM1jJCkZZEwY5tmWbgvKRxsDFzXCdbfrYCCH1CtwguEs"),new t("ADCp4QXFajHrhy4f43pD6GJFtQLkdBY2mjS9DfCk7tNW")],_=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"),$=new t("GcWEQ9K78FV7LEHteFVciYApERk5YvQuFDQPk1yYJVXi"),tt=t=>{const e=C+t,n=p(r.from(e,"utf8")).slice(2);return r.from(n,"hex")},et=(e,n,i)=>{const a=[e];n?a.push(n.toBuffer()):a.push(r.alloc(32)),i?a.push(i.toBuffer()):a.push(r.alloc(32));const[s]=t.findProgramAddressSync(a,z);return s};async function nt(t,e){const n=tt(e.toBase58()),i=et(n,K),{registry:r}=await yt.retrieve(t,i);if(!r.data)throw new B(k.NoAccountData);const a=new l(r.data.slice(0,4),"le").toNumber();return r.data.slice(4,4+a).toString()}async function it(t,e){let n=[];for(let t of e){const e=tt(t.toBase58()),i=et(e,K);n.push(i)}return(await yt.retrieveBatch(t,n)).map((t=>{if(void 0===t||void 0===t.data)return;let e=new l(t.data.slice(0,4),"le").toNumber();return t.data.slice(4,4+e).toString()}))}const rt=async(t,e)=>{const n=[{memcmp:{offset:0,bytes:e.toBase58()}},{memcmp:{offset:64,bytes:K.toBase58()}}],i=await t.getProgramAccounts(z,{filters:n}),r=await nt(t,e),a=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=a.map((t=>st(t+"."+r).pubkey)),o=await t.getMultipleAccountsInfo(s);return a.filter(((t,e)=>!!o[e]))},at=(t,e=j)=>{let n=tt(t);return{pubkey:et(n,void 0,e),hashed:n}},st=(t,e=!1)=>{t.endsWith(".sol")&&(t=t.slice(0,-4));const n=t.split(".");if(2===n.length){const t=r.from([e?1:0]).toString().concat(n[0]),{pubkey:i}=at(n[1]);return{...at(t,i),isSub:!0,parent:i}}if(3===n.length&&e){const{pubkey:t}=at(n[2]),{pubkey:e}=at("\0".concat(n[1]),t),i=r.from([1]).toString();return{...at(i.concat(n[0]),e),isSub:!0,parent:t,isSubRecord:!0}}if(n.length>=3)throw new B(k.InvalidInput);return{...at(t,j),isSub:!1,parent:void 0}};async function ot(t,e){const n=[{memcmp:{offset:32,bytes:e.toBase58()}},{memcmp:{offset:0,bytes:j.toBase58()}}];return(await t.getProgramAccounts(z,{filters:n})).map((t=>t.pubkey))}const ct=async t=>{const e=[{memcmp:{offset:0,bytes:j.toBase58()}}];return await t.getProgramAccounts(z,{dataSlice:{offset:32,length:32},filters:e})},ut=(t,e)=>{const{pubkey:n,parent:i}=st(t),r=tt(n.toBase58());return et(r,K,e?i:void 0)},lt=(t,e)=>{if(!t)throw new B(e)},ft=async(e,n)=>{try{const[i]=await t.findProgramAddress([L,n.toBuffer()],P);if("0"===(await s(e,i)).supply.toString())return;const r=[{memcmp:{offset:0,bytes:i.toBase58()}},{memcmp:{offset:64,bytes:"2"}},{dataSize:165}],o=await e.getProgramAccounts(a,{filters:r});if(1!=o.length)return;return new t(o[0].account.data.slice(32,64))}catch{return}},dt=async e=>{const n=await e.getProgramAccounts(P,{filters:[{memcmp:{offset:0,bytes:"3"}}]});return n.map((e=>new t(e.account.data.slice(66,98))))},wt=t=>[{memcmp:{offset:32,bytes:t}},{memcmp:{offset:64,bytes:"2"}}],pt=async(t,e)=>{const n=await(async(t,e)=>{const n=[{memcmp:{offset:0,bytes:"3"}},{memcmp:{offset:66,bytes:e.toBase58()}}];return await t.getProgramAccounts(P,{filters:n})})(t,e.mint);if(1===n.length)return F.deserialize(n[0].account.data)},mt=async(t,e)=>{const n=await(async(t,e)=>{const n=[...wt(e.toBase58()),{dataSize:165}],i=(await t.getProgramAccounts(a,{filters:n})).map((t=>o.decode(t.account.data))).map((e=>pt(t,e)));return(await Promise.all(i)).filter((t=>void 0!==t))})(t,e);return(await it(t,n.map((t=>t.nameAccount)))).map(((t,e)=>({key:n[e].nameAccount,mint:n[e].nftMint,reverse:t}))).filter((t=>!!t.reverse))};class yt{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 n;const i=await t.getAccountInfo(e);if(!i)throw new B(k.AccountDoesNotExist);let r=w(this.schema,yt,i.data);r.data=null===(n=i.data)||void 0===n?void 0:n.slice(this.HEADER_LEN);return{registry:r,nftOwner:await ft(t,e)}}static async _retrieveBatch(t,e){const n=await t.getMultipleAccountsInfo(e),i=t=>{if(!t)return;const e=w(this.schema,yt,t);return e.data=null==t?void 0:t.slice(this.HEADER_LEN),e};return n.map((t=>i(null==t?void 0:t.data)))}static async retrieveBatch(t,e){let n=[];const i=[...e];for(;i.length>0;)n.push(...await this._retrieveBatch(t,i.splice(0,100)));return n}}yt.HEADER_LEN=96,yt.schema=new Map([[yt,{kind:"struct",fields:[["parentName",[32]],["owner",[32]],["class",[32]]]}]]);class gt{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 f(gt.schema,this)}static deserialize(t){return w(gt.schema,gt,t)}}gt.schema=new Map([[gt,{kind:"struct",fields:[["name","string"],["ticker","string"],["mint",[32]],["decimals","u8"],["website",{kind:"option",type:"string"}],["logoUri",{kind:"option",type:"string"}]]}]]);class ht{constructor(t){this.mint=t.mint}serialize(){return f(ht.schema,this)}static deserialize(t){return w(ht.schema,ht,t)}}async function bt(t,e){if(!await t.getAccountInfo(e))throw new B(k.AccountDoesNotExist);return yt.retrieve(t,e)}async function vt(t){const e=C+t,n=p(r.from(e,"utf8")).slice(2);return r.from(n,"hex")}async function St(e,n,i){const a=[e];n?a.push(n.toBuffer()):a.push(r.alloc(32)),i?a.push(i.toBuffer()):a.push(r.alloc(32));const[s]=await t.findProgramAddress(a,z);return s}async function At(t,e){const n=await vt(e.toBase58()),i=await St(n,K),{registry:r}=await yt.retrieve(t,i);if(!r.data)throw new B(k.NoAccountData);const a=new l(r.data.slice(0,4),"le").toNumber();return r.data.slice(4,4+a).toString()}async function kt(t,e){let n=[];for(let t of e){const e=await vt(t.toBase58()),i=await St(e,K);n.push(i)}return(await yt.retrieveBatch(t,n)).map((t=>{if(void 0===t||void 0===t.data)return;let e=new l(t.data.slice(0,4),"le").toNumber();return t.data.slice(4,4+e).toString()}))}ht.schema=new Map([[ht,{kind:"struct",fields:[["mint",[32]]]}]]);const Bt=async(t,e=j)=>{let n=await vt(t);return{pubkey:await St(n,void 0,e),hashed:n}},It=async(t,e=!1)=>{t.endsWith(".sol")&&(t=t.slice(0,-4));const n=t.split(".");if(2===n.length){const t=r.from([e?1:0]).toString().concat(n[0]),{pubkey:i}=await Bt(n[1]);return{...await Bt(t,i),isSub:!0,parent:i}}if(3===n.length&&e){const{pubkey:t}=await Bt(n[2]),{pubkey:e}=await Bt("\0".concat(n[1]),t),i=r.from([1]).toString();return{...await Bt(i.concat(n[0]),e),isSub:!0,parent:t,isSubRecord:!0}}if(n.length>=3)throw new B(k.InvalidInput);return{...await Bt(t,j),isSub:!1,parent:void 0}},Et=async(t,e)=>{const{pubkey:n,parent:i}=await It(t),r=await vt(n.toBase58());return await St(r,K,e?i:void 0)};var Rt;!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",t.A="A",t.AAAA="AAAA",t.CNAME="CNAME",t.TXT="TXT"}(Rt||(Rt={}));const Wt=new Map([[Rt.SOL,96],[Rt.ETH,20],[Rt.BSC,20],[Rt.Injective,20],[Rt.A,4],[Rt.AAAA,16]]),Dt=(t,e,n)=>b.sign.detached.verify(t,e,n.toBytes()),Nt=async(e,n)=>{const{pubkey:i}=st(n),{registry:a,nftOwner:s}=await yt.retrieve(e,i);if(s)return s;try{const i=xt(n,Rt.SOL),s=await Vt(e,n);if(!(null==s?void 0:s.data))throw new B(k.NoRecordData);const o=new TextEncoder,c=r.concat([s.data.slice(0,32),i.toBuffer()]),u=o.encode(c.toString("hex"));if(!Dt(u,s.data.slice(32),a.owner))throw new B(k.InvalidSignature);return new t(s.data.slice(0,32))}catch(t){if(t instanceof Error&&"FetchError"===t.name)throw t}return a.owner},xt=(t,e)=>{const{pubkey:n}=st(e+"."+t,!0);return n};async function Tt(t,e,n,i){const r=xt(e,n);let{registry:a}=await yt.retrieve(t,r);if(!a.data)throw new B(k.NoRecordData);if(i)return te(a,n,r);const s=Wt.get(n);return a.data=a.data.slice(0,s),a}async function Ht(t,e,n,i){const r=n.map((t=>xt(e,t))),a=await yt.retrieveBatch(t,r);return i?a.map(((t,i)=>{if(t)return te(t,n[i],xt(e,n[i]))})):a}const Pt=async(t,e)=>await Tt(t,e,Rt.IPFS,!0),Lt=async(t,e)=>await Tt(t,e,Rt.ARWV,!0),Mt=async(t,e)=>await Tt(t,e,Rt.ETH,!0),Ft=async(t,e)=>await Tt(t,e,Rt.BTC,!0),zt=async(t,e)=>await Tt(t,e,Rt.LTC,!0),Ct=async(t,e)=>await Tt(t,e,Rt.DOGE,!0),jt=async(t,e)=>await Tt(t,e,Rt.Email,!0),Ut=async(t,e)=>await Tt(t,e,Rt.Url,!0),Ot=async(t,e)=>await Tt(t,e,Rt.Discord,!0),Gt=async(t,e)=>await Tt(t,e,Rt.Github,!0),Kt=async(t,e)=>await Tt(t,e,Rt.Reddit,!0),Xt=async(t,e)=>await Tt(t,e,Rt.Twitter,!0),Yt=async(t,e)=>await Tt(t,e,Rt.Telegram,!0),Zt=async(t,e)=>await Tt(t,e,Rt.Pic,!0),qt=async(t,e)=>await Tt(t,e,Rt.SHDW,!0),Vt=async(t,e)=>await Tt(t,e,Rt.SOL),Jt=async(t,e)=>await Tt(t,e,Rt.POINT,!0),_t=async(t,e)=>await Tt(t,e,Rt.BSC,!0),Qt=async(t,e)=>await Tt(t,e,Rt.Injective,!0),$t=async(t,e)=>await Tt(t,e,Rt.Backpack,!0),te=(t,e,n)=>{const i=null==t?void 0:t.data;if(!i)return;const a=Wt.get(e),s=(t=>{const e=Array.from(t);return e.length-1-e.reverse().findIndex((t=>0!==t))+1})(i);if(!a)return i.slice(0,s).toString("utf-8");if(a&&s!==a){const t=i.slice(0,s).toString("utf-8");if(e===Rt.Injective){const e=g(t);if("inj"===e.prefix&&20===e.data.length)return t}else if(e===Rt.BSC||e===Rt.ETH){const e=t.slice(0,2),n=t.slice(2);if("0x"===e&&20===r.from(n,"hex").length)return t}else if((e===Rt.A||e===Rt.AAAA)&&S.isValid(t))return t;throw new B(k.InvalidRecordData)}if(e===Rt.SOL){const e=new TextEncoder,a=r.concat([i.slice(0,32),n.toBuffer()]),s=e.encode(a.toString("hex"));if(Dt(s,i.slice(32),t.owner))return v.encode(i.slice(0,32))}else{if(e===Rt.ETH||e===Rt.BSC)return"0x"+i.toString("hex");if(e===Rt.Injective)return h("inj",i,"bech32");if(e===Rt.A||e===Rt.AAAA)return S.fromByteArray([...i.slice(0,a)]).toString()}throw new B(k.InvalidRecordData)},ee=(t,e)=>{if(!Wt.get(e))return e!==Rt.CNAME&&e!==Rt.TXT||(t=A(t)),r.from(t,"utf-8");if(e===Rt.SOL)throw new B(k.UnsupportedRecord,"Use `serializeSolRecord` for SOL record");if(e===Rt.ETH||e===Rt.BSC)return lt("0x"===t.slice(0,2),k.InvalidEvmAddress),r.from(t.slice(2),"hex");if(e===Rt.Injective){const e=g(t);return lt("inj"===e.prefix,k.InvalidInjectiveAddress),lt(20===e.data.length,k.InvalidInjectiveAddress),r.from(e.data)}if(e===Rt.A){const e=S.parse(t).toByteArray();return lt(4===e.length,k.InvalidARecord),r.from(e)}if(e===Rt.AAAA){const e=S.parse(t).toByteArray();return lt(16===e.length,k.InvalidAAAARecord),r.from(e)}throw new B(k.InvalidRecordInput)},ne=(t,e,n,i)=>{const a=r.concat([t.toBuffer(),e.toBuffer()]),s=(new TextEncoder).encode(a.toString("hex")),o=Dt(s,i,n);return lt(o,k.InvalidSignature),r.concat([t.toBuffer(),i])};async function ie(t,e,i,r,a,s,o,c){const u=await vt(e),l=await St(u,o,c),f=s||await t.getMinimumBalanceForRentExemption(i);let d;if(c){const{registry:e}=await bt(t,c);d=e.owner}return R(z,n.programId,l,a,r,u,new E(f),new I(i),o,c,d)}async function re(t,e,n,i,r,a){const s=await vt(e),o=await St(s,r,a);let c;c=r||(await yt.retrieve(t,o)).registry.owner;return W(z,o,new I(n),i,c)}async function ae(t,e,n,i,r,a){const s=await vt(e),o=await St(s,i,r);let c;c=i||(await yt.retrieve(t,o)).registry.owner;return D(z,o,n,c,i,r,a)}async function se(t,e,n,i,r){const a=await vt(e),s=await St(a,i,r);let o;o=i||(await yt.retrieve(t,s)).registry.owner;return N(z,s,n,o)}const oe=async(e,r,s,o,l,f=V,d)=>{const[w]=t.findProgramAddressSync([U.toBuffer()],U),p=tt(r),g=et(p,void 0,j),h=tt(g.toBase58()),b=et(h,w),[v]=t.findProgramAddressSync([g.toBuffer()],U),S=J.findIndex((t=>null==d?void 0:d.equals(t)));let A;const I=[];if(-1!==S&&d){A=c(f,d,!0);const t=await e.getAccountInfo(A);if(!(null==t?void 0:t.data)){const t=u(o,A,d,f);I.push(t)}}const E=new m(e,y("mainnet-beta")),R=await E.getData(),W=_.get(f.toBase58());if(!W)throw new B(k.SymbolNotFound,`No symbol found for mint ${f.toBase58()}`);const D=R.productPrice.get("Crypto."+W+"/USD"),N=R.productFromSymbol.get("Crypto."+W+"/USD"),x=c(f,$),T=new H({name:r,space:s,referrerIdxOpt:-1!=S?S:null}).getInstruction(U,z,j,g,b,n.programId,w,o,l,Q,D.productAccountKey,new t(N.price_account),x,a,i,v,A);return I.push(T),[[],I]},ce=async(e,n,r,a,s)=>{let[o]=await t.findProgramAddress([U.toBuffer()],U),c=await vt(e.toBase58()),u=await St(c,o,a);return[[],[new T({name:n}).getInstruction(U,i,z,j,u,o,r,a,s)]]},ue=async(t,e,n,i=2e3)=>{const r=[],a=e.split(".")[0];if(!a)throw new B(k.InvalidSubdomain);const{parent:s,pubkey:o}=st(e),c=await t.getMinimumBalanceForRentExemption(i+yt.HEADER_LEN),u=await ie(t,"\0".concat(a),i,n,n,c,void 0,s);r.push(u);const[,l]=await ce(o,"\0".concat(a),n,s,n);return r.push(...l),[[],r]},le=async(t,e,i,r,a,s)=>{lt(i!==Rt.SOL,k.UnsupportedRecord);const{pubkey:o,hashed:c,parent:u}=st(`${i}.${e}`,!0),l=ee(r,i).length,f=await t.getMinimumBalanceForRentExemption(l+yt.HEADER_LEN);return R(z,n.programId,o,a,s,c,new E(f),new I(l),void 0,u,a)},fe=async(t,e,n,i,r,a)=>{lt(n!==Rt.SOL,k.UnsupportedRecord);const{pubkey:s}=st(`${n}.${e}`,!0),o=await t.getAccountInfo(s);lt(!!(null==o?void 0:o.data),k.AccountDoesNotExist);const c=ee(i,n);if((null==o?void 0:o.data.slice(96).length)!==c.length)return[N(z,s,a,r),await le(t,e,n,i,r,a)];return[W(z,s,new I(0),c,r)]},de=async(t,e,i,r,a,s)=>{const{pubkey:o,hashed:c,parent:u}=st(`${Rt.SOL}.${e}`,!0),l=ne(i,o,r,a).length,f=await t.getMinimumBalanceForRentExemption(l+yt.HEADER_LEN);return[R(z,n.programId,o,r,s,c,new E(f),new I(l),void 0,u,r)]},we=async(t,e,n,i,r,a)=>{const{pubkey:s}=st(`${Rt.SOL}.${e}`,!0),o=await t.getAccountInfo(s);if(lt(!!(null==o?void 0:o.data),k.AccountDoesNotExist),96!==(null==o?void 0:o.data.length))return[N(z,s,a,i),await de(t,e,n,i,r,a)];const c=ne(n,s,i,r);return[W(z,s,new I(0),c,i)]};async function pe(t,e,i,r,a){const s=await vt(e),o=await St(s,void 0,Y),c=await t.getMinimumBalanceForRentExemption(r+yt.HEADER_LEN);let u=[R(z,n.programId,o,i,a,s,new E(c),new I(r),void 0,Y,X)];return u=u.concat(await Be(t,e,o,i,a)),u}async function me(t,e,n,i){const r=await vt(t),a=await St(r,void 0,Y);return[W(z,a,new I(n),i,e)]}async function ye(t,e,n,i,r){const a=await vt(e),s=await St(a,void 0,Y);let o=[D(z,s,i,n,void 0)];const c=await vt(n.toString());return await St(c,X,void 0),o.push(await se(t,n.toString(),r,X,Y)),o=o.concat(await Be(t,e,s,i,r)),o}async function ge(t,e){const n=await vt(t),i=await St(n,void 0,Y),r=await vt(e.toString()),a=await St(r,X,Y);return[N(z,i,e,e),N(z,a,e,e)]}async function he(t){const e=await vt(t);return await St(e,void 0,Y)}async function be(t,e){const n=await vt(e),i=await St(n,void 0,Y),{registry:r}=await yt.retrieve(t,i);return r}async function ve(e,n){const i=await vt(n.toString()),r=await St(i,X,Y);let a=await ke.retrieve(e,r);return[a.twitterHandle,new t(a.twitterRegistryKey)]}async function Se(e,n){const i=[{memcmp:{offset:0,bytes:Y.toBase58()}},{memcmp:{offset:32,bytes:n.toBase58()}},{memcmp:{offset:64,bytes:X.toBase58()}}],r=await e.getProgramAccounts(z,{filters:i});for(const e of r)if(e.account.data.length>yt.HEADER_LEN+32){let n=e.account.data.slice(yt.HEADER_LEN),i=w(ke.schema,ke,n);return[i.twitterHandle,new t(i.twitterRegistryKey)]}throw new B(k.AccountDoesNotExist)}async function Ae(e,n){const i=[{memcmp:{offset:0,bytes:Y.toBase58()}},{memcmp:{offset:32,bytes:n.toBase58()}},{memcmp:{offset:64,bytes:new t(r.alloc(32,0)).toBase58()}}],a=await e.getProgramAccounts(z,{filters:i});if(a.length>1)throw new B(k.MultipleRegistries);return a[0].account.data.slice(yt.HEADER_LEN)}class ke{constructor(t){this.twitterRegistryKey=t.twitterRegistryKey,this.twitterHandle=t.twitterHandle}static async retrieve(t,e){let n=await t.getAccountInfo(e,"processed");if(!n)throw new B(k.InvalidReverseTwitter);return w(this.schema,ke,n.data.slice(yt.HEADER_LEN))}}async function Be(t,e,i,a,s){const o=await vt(a.toString()),c=await St(o,X,Y);let u=f(ke.schema,new ke({twitterRegistryKey:i.toBytes(),twitterHandle:e}));return[R(z,n.programId,c,a,s,o,new E(await t.getMinimumBalanceForRentExemption(u.length+yt.HEADER_LEN)),new I(u.length),X,Y,X),W(z,c,new I(0),r.from(u),X)]}ke.schema=new Map([[ke,{kind:"struct",fields:[["twitterRegistryKey",[32]],["twitterHandle","string"]]}]]);const Ie=new t("6NSu2tci4apRKQtt257bAVcvqYjB3zV2H1dWo56vgpa6"),Ee=async(t,e)=>{const n=await St(await vt(e.toBase58()),void 0,Ie),{registry:i}=await yt.retrieve(t,n);if(!i.data)throw new B(k.NoAccountData);return gt.deserialize(i.data)},Re=async(e,n)=>{const i=await St(await vt(n),void 0,Ie),{registry:r}=await yt.retrieve(e,i);if(!r.data)throw new B(k.NoAccountData);const a=new t(ht.deserialize(r.data).mint);return await Ee(e,a)},We=new t("85iDfUvr3HJyLM2zcq5BXSiDvUWfw6cSE1FfNBo8Ap29");class De{constructor(e){this.tag=e.tag,this.nameAccount=new t(e.nameAccount)}static deserialize(t){return d(this.schema,De,t)}static async retrieve(t,e){const n=await t.getAccountInfo(e);if(!n||!n.data)throw new B(k.FavouriteDomainNotFound);return this.deserialize(n.data)}static async getKey(e,n){return await t.findProgramAddress([r.from("favourite_domain"),n.toBuffer()],e)}static getKeySync(e,n){return t.findProgramAddressSync([r.from("favourite_domain"),n.toBuffer()],e)}}De.schema=new Map([[De,{kind:"struct",fields:[["tag","u8"],["nameAccount",[32]]]}]]);const Ne=async(e,n)=>{const[i]=De.getKeySync(We,new t(n)),r=await De.retrieve(e,i),a=await nt(e,r.nameAccount);return{domain:r.nameAccount,reverse:a}};export{G as BONFIDA_FIDA_BNB,q as BONFIDA_USDC_BNB,k as ErrorType,De as FavouriteDomain,C as HASH_PREFIX,ht as Mint,We as NAME_OFFERS_ID,z as NAME_PROGRAM_ID,yt as NameRegistryState,I as Numberu32,E as Numberu64,O as PYTH_FIDA_PRICE_ACC,Q as PYTH_MAPPING_ACC,Wt as RECORD_V1_SIZE,J as REFERRERS,U as REGISTER_PROGRAM_ID,K as REVERSE_LOOKUP_CLASS,j as ROOT_DOMAIN_ACCOUNT,Rt as Record,ke as ReverseTwitterRegistryState,B as SNSError,Z as SOL_RECORD_SIG_LEN,_ as TOKENS_SYM_MINT,Ie as TOKEN_TLD,Y as TWITTER_ROOT_PARENT_REGISTRY_KEY,X as TWITTER_VERIFICATION_AUTHORITY,gt as TokenData,V as USDC_MINT,$ as VAULT_OWNER,me as changeTwitterRegistryData,ye as changeVerifiedPubkey,lt as check,Dt as checkSolRecord,R as createInstruction,H as createInstructionV3,ie as createNameRegistry,le as createRecordInstruction,T as createReverseInstruction,ce as createReverseName,Be as createReverseTwitterRegistry,de as createSolRecordInstruction,ue as createSubdomain,x as createV2Instruction,pe as createVerifiedTwitterRegistry,N as deleteInstruction,se as deleteNameRegistry,ge as deleteTwitterRegistry,te as deserializeRecord,rt as findSubdomains,ot as getAllDomains,ct as getAllRegisteredDomains,Lt as getArweaveRecord,$t as getBackpackRecord,_t as getBscRecord,Ft as getBtcRecord,Ot as getDiscordRecord,Ct as getDogeRecord,It as getDomainKey,st as getDomainKeySync,jt as getEmailRecord,Mt as getEthRecord,Ne as getFavoriteDomain,Gt as getGithubRecord,ve as getHandleAndRegistryKey,vt as getHashedName,tt as getHashedNameSync,Qt as getInjectiveRecord,Pt as getIpfsRecord,zt as getLtcRecord,St as getNameAccountKey,et as getNameAccountKeySync,bt as getNameOwner,Zt as getPicRecord,Jt as getPointRecord,Tt as getRecord,xt as getRecordKeySync,Ht as getRecords,Kt as getRedditRecord,Et as getReverseKey,ut as getReverseKeySync,qt as getShdwRecord,Vt as getSolRecord,Yt as getTelegramRecord,Ee as getTokenInfoFromMint,Re as getTokenInfoFromName,mt as getTokenizedDomains,Se as getTwitterHandleandRegistryKeyViaFilters,Xt as getTwitterRecord,be as getTwitterRegistry,Ae as getTwitterRegistryData,he as getTwitterRegistryKey,Ut as getUrlRecord,At as performReverseLookup,kt as performReverseLookupBatch,oe as registerDomainName,Nt as resolve,ft as retrieveNftOwner,dt as retrieveNfts,nt as reverseLookup,it as reverseLookupBatch,ee as serializeRecord,ne as serializeSolRecord,D as transferInstruction,ae as transferNameOwnership,W as updateInstruction,re as updateNameRegistryData,fe as updateRecordInstruction,we as updateSolRecordInstruction};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Schema } from "borsh";
|
|
3
|
+
import { Connection, PublicKey } from "@solana/web3.js";
|
|
4
|
+
import { Buffer } from "buffer";
|
|
5
|
+
export declare const NAME_TOKENIZER_ID: PublicKey;
|
|
6
|
+
export declare const MINT_PREFIX: Buffer;
|
|
7
|
+
export declare enum Tag {
|
|
8
|
+
Uninitialized = 0,
|
|
9
|
+
CentralState = 1,
|
|
10
|
+
ActiveRecord = 2,
|
|
11
|
+
InactiveRecord = 3
|
|
12
|
+
}
|
|
13
|
+
export declare class NftRecord {
|
|
14
|
+
tag: Tag;
|
|
15
|
+
nonce: number;
|
|
16
|
+
nameAccount: PublicKey;
|
|
17
|
+
owner: PublicKey;
|
|
18
|
+
nftMint: PublicKey;
|
|
19
|
+
static schema: Schema;
|
|
20
|
+
constructor(obj: {
|
|
21
|
+
tag: number;
|
|
22
|
+
nonce: number;
|
|
23
|
+
nameAccount: Uint8Array;
|
|
24
|
+
owner: Uint8Array;
|
|
25
|
+
nftMint: Uint8Array;
|
|
26
|
+
});
|
|
27
|
+
static deserialize(data: Buffer): NftRecord;
|
|
28
|
+
static retrieve(connection: Connection, key: PublicKey): Promise<NftRecord>;
|
|
29
|
+
static findKey(nameAccount: PublicKey, programId: PublicKey): Promise<[PublicKey, number]>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* This function can be used to retrieve a NFT Record given a mint
|
|
33
|
+
*
|
|
34
|
+
* @param connection A solana RPC connection
|
|
35
|
+
* @param mint The mint of the NFT Record
|
|
36
|
+
* @returns
|
|
37
|
+
*/
|
|
38
|
+
export declare const getRecordFromMint: (connection: Connection, mint: PublicKey) => Promise<import("@solana/web3.js").GetProgramAccountsResponse>;
|
package/dist/utils.d.ts
CHANGED
|
@@ -61,10 +61,7 @@ export declare function getAllDomains(connection: Connection, wallet: PublicKey)
|
|
|
61
61
|
* @param connection The Solana RPC connection object
|
|
62
62
|
* @returns
|
|
63
63
|
*/
|
|
64
|
-
export declare const getAllRegisteredDomains: (connection: Connection) => Promise<
|
|
65
|
-
pubkey: PublicKey;
|
|
66
|
-
account: import("@solana/web3.js").AccountInfo<Buffer>;
|
|
67
|
-
}[]>;
|
|
64
|
+
export declare const getAllRegisteredDomains: (connection: Connection) => Promise<import("@solana/web3.js").GetProgramAccountsResponse>;
|
|
68
65
|
/**
|
|
69
66
|
* This function can be used to get the key of the reverse account
|
|
70
67
|
* @param domain The domain to compute the reverse for
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bonfida/spl-name-service",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist"
|
|
@@ -58,9 +58,8 @@
|
|
|
58
58
|
"typescript": "^5.0.4"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@bonfida/name-tokenizer": "0.0.9",
|
|
62
61
|
"@ethersproject/sha2": "^5.7.0",
|
|
63
|
-
"@pythnetwork/client": "2.
|
|
62
|
+
"@pythnetwork/client": "^2.19.0",
|
|
64
63
|
"@solana/buffer-layout": "^4.0.1",
|
|
65
64
|
"@solana/spl-token": "0.3.7 ",
|
|
66
65
|
"bech32-buffer": "^0.2.1",
|
|
File without changes
|