UNPKG

@rainfi/sdk

Version:

This package is used to interact with Rain.fi protocol on Solana

277 lines 10.2 kB
"use strict"; 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()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.extendBorsh = exports.getMetadataAddress = exports.getMetadata = exports.decodeMetadata = exports.METADATA_SCHEMA = exports.Metadata = exports.CreateMasterEditionArgs = exports.UpdateMetadataArgs = exports.CreateMetadataArgs = exports.Data = exports.Collection = exports.TokenStandard = exports.Creator = exports.MetadataKey = exports.MetadataCategory = exports.EDITION_MARKER_BIT_SIZE = exports.MAX_EDITION_LEN = exports.MAX_METADATA_LEN = exports.MAX_CREATOR_LEN = exports.MAX_CREATOR_LIMIT = exports.MAX_URI_LENGTH = exports.MAX_SYMBOL_LENGTH = exports.MAX_NAME_LENGTH = exports.RESERVATION = exports.EDITION = exports.METADATA_PREFIX = void 0; const web3_js_1 = require("@solana/web3.js"); const borsh_1 = require("borsh"); const bs58_1 = __importDefault(require("bs58")); exports.METADATA_PREFIX = 'metadata'; exports.EDITION = 'edition'; exports.RESERVATION = 'reservation'; exports.MAX_NAME_LENGTH = 32; exports.MAX_SYMBOL_LENGTH = 10; exports.MAX_URI_LENGTH = 200; exports.MAX_CREATOR_LIMIT = 5; exports.MAX_CREATOR_LEN = 32 + 1 + 1; exports.MAX_METADATA_LEN = 1 + 32 + 32 + exports.MAX_NAME_LENGTH + exports.MAX_SYMBOL_LENGTH + exports.MAX_URI_LENGTH + exports.MAX_CREATOR_LIMIT * exports.MAX_CREATOR_LEN + 2 + 1 + 1 + 198; exports.MAX_EDITION_LEN = 1 + 32 + 8 + 200; exports.EDITION_MARKER_BIT_SIZE = 248; var MetadataCategory; (function (MetadataCategory) { MetadataCategory["Audio"] = "audio"; MetadataCategory["Video"] = "video"; MetadataCategory["Image"] = "image"; MetadataCategory["VR"] = "vr"; })(MetadataCategory || (exports.MetadataCategory = MetadataCategory = {})); var MetadataKey; (function (MetadataKey) { MetadataKey[MetadataKey["Uninitialized"] = 0] = "Uninitialized"; MetadataKey[MetadataKey["MetadataV1"] = 4] = "MetadataV1"; MetadataKey[MetadataKey["EditionV1"] = 1] = "EditionV1"; MetadataKey[MetadataKey["MasterEditionV1"] = 2] = "MasterEditionV1"; MetadataKey[MetadataKey["MasterEditionV2"] = 6] = "MasterEditionV2"; MetadataKey[MetadataKey["EditionMarker"] = 7] = "EditionMarker"; })(MetadataKey || (exports.MetadataKey = MetadataKey = {})); class Creator { constructor(args) { this.address = args.address; this.verified = args.verified; this.share = args.share; } } exports.Creator = Creator; class TokenStandard { constructor(args) { this.NonFungible = args.NonFungible; this.FungibleAsset = args.FungibleAsset; this.Fungible = args.Fungible; this.NonFungibleEdition = args.NonFungibleEdition; } } exports.TokenStandard = TokenStandard; class Collection { constructor(args) { this.verified = args.verified; this.key = args.key; } } exports.Collection = Collection; class Data { constructor(args) { this.name = args.name; this.symbol = args.symbol; this.uri = args.uri; this.sellerFeeBasisPoints = args.sellerFeeBasisPoints; this.creators = args.creators; } } exports.Data = Data; class CreateMetadataArgs { constructor(args) { this.instruction = 0; this.data = args.data; this.isMutable = args.isMutable; } } exports.CreateMetadataArgs = CreateMetadataArgs; class UpdateMetadataArgs { constructor(args) { this.instruction = 1; this.data = args.data ? args.data : null; this.updateAuthority = args.updateAuthority ? args.updateAuthority : null; } } exports.UpdateMetadataArgs = UpdateMetadataArgs; class CreateMasterEditionArgs { constructor(args) { this.instruction = 10; this.maxSupply = args.maxSupply; } } exports.CreateMasterEditionArgs = CreateMasterEditionArgs; class Metadata { constructor(args) { var _a, _b, _c; this.key = MetadataKey.MetadataV1; this.updateAuthority = args.updateAuthority; this.mint = args.mint; this.data = args.data; this.primarySaleHappened = args.primarySaleHappened; this.isMutable = args.isMutable; this.editionNonce = (_a = args.editionNonce) !== null && _a !== void 0 ? _a : null; this.tokenStandard = (_b = args.tokenStandard) !== null && _b !== void 0 ? _b : undefined; this.collection = (_c = args.collection) !== null && _c !== void 0 ? _c : undefined; } } exports.Metadata = Metadata; exports.METADATA_SCHEMA = new Map([ [ CreateMetadataArgs, { kind: 'struct', fields: [ ['instruction', 'u8'], ['data', Data], ['isMutable', 'u8'], // bool ], }, ], [ CreateMasterEditionArgs, { kind: 'struct', fields: [ ['instruction', 'u8'], ['maxSupply', { kind: 'option', type: 'u64' }], ], }, ], [ UpdateMetadataArgs, { kind: 'struct', fields: [ ['instruction', 'u8'], ['data', { kind: 'option', type: Data }], ['updateAuthority', { kind: 'option', type: 'pubkeyAsString' }], ['primarySaleHappened', { kind: 'option', type: 'u8' }], ], }, ], [ Data, { kind: 'struct', fields: [ ['name', 'string'], ['symbol', 'string'], ['uri', 'string'], ['sellerFeeBasisPoints', 'u16'], ['creators', { kind: 'option', type: [Creator] }], ], }, ], [ Creator, { kind: 'struct', fields: [ ['address', 'pubkeyAsString'], ['verified', 'u8'], ['share', 'u8'], ], }, ], [ Collection, { kind: 'struct', fields: [ ['verified', 'u8'], // bool ['key', 'pubkeyAsString'], ], }, ], [ TokenStandard, { kind: 'struct', fields: [ ['NonFungible', 'u8'], ['FungibleAsset', 'u8'], ['Fungible', 'u8'], ['NonFungibleEdition', 'u8'], ], }, ], [ Metadata, { kind: 'struct', fields: [ ['key', 'u8'], ['updateAuthority', 'pubkeyAsString'], ['mint', 'pubkeyAsString'], ['data', Data], ['primarySaleHappened', 'u8'], // bool ['isMutable', 'u8'], // bool ['editionNonce', { kind: 'option', type: 'u8' }], ['tokenStandard', { kind: 'option', type: 'u8' }], ['collection', { kind: 'option', type: Collection }], ], }, ], ]); // eslint-disable-next-line no-control-regex const METADATA_REPLACE = new RegExp('\u0000', 'g'); const decodeMetadata = (buffer) => { const metadata = (0, borsh_1.deserializeUnchecked)(exports.METADATA_SCHEMA, Metadata, buffer); metadata.data.name = metadata.data.name.replace(METADATA_REPLACE, ''); metadata.data.uri = metadata.data.uri.replace(METADATA_REPLACE, ''); metadata.data.symbol = metadata.data.symbol.replace(METADATA_REPLACE, ''); return metadata; }; exports.decodeMetadata = decodeMetadata; const getMetadata = (connection, mint) => __awaiter(void 0, void 0, void 0, function* () { const metadataAccount = (yield connection.getAccountInfo(yield getMetadataAddress(new web3_js_1.PublicKey(mint).toBase58()))); if (!metadataAccount) throw new Error('No metadata found for this NFT'); return (0, exports.decodeMetadata)(metadataAccount.data); }); exports.getMetadata = getMetadata; function getMetadataAddress(mintKey) { return __awaiter(this, void 0, void 0, function* () { const metadataProgramId = new web3_js_1.PublicKey('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s'); const metadataAccount = (yield web3_js_1.PublicKey.findProgramAddress([ Buffer.from(exports.METADATA_PREFIX), metadataProgramId.toBuffer(), new web3_js_1.PublicKey(mintKey).toBuffer(), ], metadataProgramId))[0]; return metadataAccount; }); } exports.getMetadataAddress = getMetadataAddress; const extendBorsh = () => { borsh_1.BinaryReader.prototype.readPubkey = function () { const reader = this; const array = reader.readFixedArray(32); return new web3_js_1.PublicKey(array); }; borsh_1.BinaryWriter.prototype.writePubkey = function (value) { const writer = this; writer.writeFixedArray(value.toBuffer()); }; borsh_1.BinaryReader.prototype.readPubkeyAsString = function () { const reader = this; const array = reader.readFixedArray(32); return bs58_1.default.encode(array); }; borsh_1.BinaryWriter.prototype.writePubkeyAsString = function (value) { const writer = this; writer.writeFixedArray(bs58_1.default.decode(value.toBase58())); }; }; exports.extendBorsh = extendBorsh; (0, exports.extendBorsh)(); //# sourceMappingURL=metadata.utils.js.map