@solana-suite/nft
Version:
nft module for solana-suite
104 lines • 5.84 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { debugLog, KeypairAccount, Node, PartialSignInstruction, Try, } from '@solana-suite/shared';
import { Transaction } from '@solana/web3.js';
import { Storage } from '@solana-suite/storage-v0.6';
import { Convert, Royalty, Validator, } from '@solana-suite/shared-metaplex';
import { Metaplex as _Mint } from './mint';
export var Metaplex;
(function (Metaplex) {
/**
* Upload content and NFT mint with Partial Sign
*
* @param {Pubkey} owner // first minted owner
* @param {Secret} signer // owner's Secret
* @param {UserSideInput.NftMetadata} input
* {
* name: string // nft content name
* symbol: string // nft ticker symbol
* filePath: string | File // nft ticker symbol
* royalty: number // royalty percentage
* storageType: 'arweave'|'nftStorage' // royalty percentage
* description?: string // nft content description
* external_url?: string // landing page, home page uri, related url
* attributes?: MetadataAttribute[] // game character parameter, personality, characteristics
* properties?: MetadataProperties<Uri> // include file name, uri, supported file type
* collection?: Pubkey // collections of different colors, shapes, etc.
* [key: string]?: unknown // optional param, Usually not used.
* creators?: InputCreators[] // other creators than owner
* uses?: Uses // usage feature: burn, single, multiple
* isMutable?: boolean // enable update()
* }
* @param {Secret} feePayer? // fee payer
* @param {Pubkey} freezeAuthority? // freeze authority
* @return Promise<Result<PartialSignInstruction, Error>>
*/
Metaplex.feePayerPartialSignMint = (owner, signer, input, feePayer, freezeAuthority) => __awaiter(this, void 0, void 0, function* () {
return Try(() => __awaiter(this, void 0, void 0, function* () {
const valid = Validator.checkAll(input);
if (valid.isErr) {
throw valid.error;
}
const sellerFeeBasisPoints = Royalty.convert(input.royalty);
//--- porperties, Upload content ---
let uri = '';
if (input.filePath && input.storageType === 'nftStorage') {
const properties = yield Convert.Properties.intoInfraSide(input.properties, Storage.uploadContent, input.storageType);
const nftStorageMetadata = Storage.toConvertOffchaindata(Object.assign(Object.assign({}, input), { properties }), sellerFeeBasisPoints);
const uploaded = yield Storage.uploadMetaAndContent(nftStorageMetadata, input.filePath, input.storageType);
if (uploaded.isErr) {
throw uploaded;
}
uri = uploaded.value;
debugLog('# upload content url: ', uploaded);
}
else if (input.uri) {
uri = input.uri;
}
else {
throw Error(`Must set 'storageType=nftStorage + filePath' or 'uri'`);
}
//--- porperties, Upload content ---
let datav2 = Convert.NftMetadata.intoInfraSide(input, uri, sellerFeeBasisPoints);
//--- collection ---
let collection;
if (input.collection && input.collection) {
collection = Convert.Collection.intoInfraSide(input.collection);
datav2 = Object.assign(Object.assign({}, datav2), { collection });
}
//--- collection ---
const isMutable = input.isMutable === undefined ? true : input.isMutable;
debugLog('# input: ', input);
debugLog('# sellerFeeBasisPoints: ', sellerFeeBasisPoints);
debugLog('# datav2: ', datav2);
const mint = KeypairAccount.create();
const insts = yield _Mint.createMintInstructions(mint.toPublicKey(), owner.toPublicKey(), datav2, feePayer.toPublicKey(), isMutable);
// freezeAuthority
if (freezeAuthority) {
insts.push(_Mint.createDeleagateInstruction(mint.toPublicKey(), owner.toPublicKey(), freezeAuthority.toPublicKey()));
}
const blockhashObj = yield Node.getConnection().getLatestBlockhash();
const tx = new Transaction({
lastValidBlockHeight: blockhashObj.lastValidBlockHeight,
blockhash: blockhashObj.blockhash,
feePayer: feePayer.toPublicKey(),
});
insts.forEach((inst) => tx.add(inst));
tx.recentBlockhash = blockhashObj.blockhash;
[signer, mint].forEach((signer) => tx.partialSign(signer.toKeypair()));
const serializedTx = tx.serialize({
requireAllSignatures: false,
});
const hex = serializedTx.toString('hex');
return new PartialSignInstruction(hex, mint.pubkey);
}));
});
})(Metaplex || (Metaplex = {}));
//# sourceMappingURL=fee-payer-partial-sign-mint.js.map