forked from metaplex-foundation/js
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNft.ts
More file actions
Latest commit
111 lines (96 loc) · 3.48 KB
/
Copy pathNft.ts
File metadata and controls
111 lines (96 loc) · 3.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import{PublicKey}from'@solana/web3.js';
import{
TokenStandard,
Collection,
Uses,
Creator,
MasterEditionV2Args,
EditionArgs,
}from'@metaplex-foundation/mpl-token-metadata';
import{Metaplex}from'@/Metaplex';
import{
isOriginalEditionAccount,
isPrintEditionAccount,
MetadataAccount,
OriginalEditionAccount,
OriginalOrPrintEditionAccount,
PrintEditionAccount,
}from'@/programs';
import{Model}from'@/types';
import{removeEmptyChars}from'@/utils';
import{JsonMetadata}from'./JsonMetadata';
import{useJsonMetadataTask,JsonMetadataTask}from'./useJsonMetadataTask';
import{useEditionTask,EditionTask}from'./useEditionTask';
exportclassNftextendsModel{
/** The Metadata PDA account defining the NFT. */
publicreadonlymetadataAccount: MetadataAccount;
/** Tasks. */
publicreadonlymetadataTask: JsonMetadataTask;
publicreadonlyeditionTask: EditionTask;
/** Data from the Metadata account. */
publicreadonlyupdateAuthority: PublicKey;
publicreadonlymint: PublicKey;
publicreadonlyname: string;
publicreadonlysymbol: string;
publicreadonlyuri: string;
publicreadonlysellerFeeBasisPoints: number;
publicreadonlycreators: Creator[]|null;
publicreadonlyprimarySaleHappened: boolean;
publicreadonlyisMutable: boolean;
publicreadonlyeditionNonce: number|null;
publicreadonlytokenStandard: TokenStandard|null;
publicreadonlycollection: Collection|null;
publicreadonlyuses: Uses|null;
constructor(metadataAccount: MetadataAccount,metaplex: Metaplex){
super();
this.metadataAccount=metadataAccount;
this.metadataTask=useJsonMetadataTask(metaplex,this);
this.editionTask=useEditionTask(metaplex,this);
this.updateAuthority=metadataAccount.data.updateAuthority;
this.mint=metadataAccount.data.mint;
this.name=removeEmptyChars(metadataAccount.data.data.name);
this.symbol=removeEmptyChars(metadataAccount.data.data.symbol);
this.uri=removeEmptyChars(metadataAccount.data.data.uri);
this.sellerFeeBasisPoints=metadataAccount.data.data.sellerFeeBasisPoints;
this.creators=metadataAccount.data.data.creators;
this.primarySaleHappened=metadataAccount.data.primarySaleHappened;
this.isMutable=metadataAccount.data.isMutable;
this.editionNonce=metadataAccount.data.editionNonce;
this.tokenStandard=metadataAccount.data.tokenStandard;
this.collection=metadataAccount.data.collection;
this.uses=metadataAccount.data.uses;
}
getmetadata(): JsonMetadata{
returnthis.metadataTask.getResult()??{};
}
geteditionAccount(): OriginalOrPrintEditionAccount|null{
returnthis.editionTask.getResult()??null;
}
getoriginalEdition(): MasterEditionV2Args|null{
if(!this.isOriginal()){
returnnull;
}
returnthis.editionAccount.data;
}
getprintEdition(): EditionArgs|null{
if(!this.isPrint()){
returnnull;
}
returnthis.editionAccount.data;
}
publicequals(other: Nft|PublicKey): boolean{
constmint=otherinstanceofNft ? other.mint : other;
returnthis.mint.equals(mint);
}
publicisOriginal(): this is {editionAccount: OriginalEditionAccount}{
return(
this.editionAccount!=null&&
isOriginalEditionAccount(this.editionAccount)
);
}
publicisPrint(): this is {editionAccount: PrintEditionAccount}{
return(
this.editionAccount!=null&&isPrintEditionAccount(this.editionAccount)
);
}
}