UNPKG

@symmetry-hq/baskets-v2-sdk

Version:

Symmetry Baskets V2 SDK

153 lines (152 loc) 6.03 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.decodeMetadata = exports.MetadataKey = exports.METADATA_PREFIX = exports.METADATA_PROGRAM_ID = void 0; exports.parseMetadata = parseMetadata; /** * This blob of a file is pulled together from different files from the metaplex * repository. * Metaplex does not have a NPM package at the current time to make this easier, so instead of * trying to reference their stuff, I copied all of the minimum necessary code into this file */ const borsh_1 = require("borsh"); const web3_js_1 = require("@solana/web3.js"); const bytes_1 = require("@coral-xyz/anchor/dist/cjs/utils/bytes"); exports.METADATA_PROGRAM_ID = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"; exports.METADATA_PREFIX = "metadata"; // Borsh extension for pubkey stuff // eslint-disable-next-line @typescript-eslint/no-explicit-any borsh_1.BinaryReader.prototype.readPubkey = function () { const reader = this; const array = reader.readFixedArray(32); return new web3_js_1.PublicKey(array); }; // eslint-disable-next-line @typescript-eslint/no-explicit-any borsh_1.BinaryWriter.prototype.writePubkey = function (value) { const writer = this; writer.writeFixedArray(value.toBuffer()); }; // eslint-disable-next-line @typescript-eslint/no-explicit-any borsh_1.BinaryReader.prototype.readPubkeyAsString = function () { const reader = this; const array = reader.readFixedArray(32); return bytes_1.bs58.encode(array); }; // eslint-disable-next-line @typescript-eslint/no-explicit-any borsh_1.BinaryWriter.prototype.writePubkeyAsString = function (value) { const writer = this; writer.writeFixedArray(bytes_1.bs58.decode(value)); }; 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; } } class Data { constructor(args) { this.name = args.name; this.symbol = args.symbol; this.uri = args.uri; this.sellerFeeBasisPoints = args.sellerFeeBasisPoints; this.creators = args.creators; } } class Metadata { constructor(args) { 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 = args.editionNonce; } } // eslint-disable-next-line @typescript-eslint/no-explicit-any const METADATA_SCHEMA = new Map([ [ 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"], ], }, ], [ Metadata, { kind: "struct", fields: [ ["key", "u8"], ["updateAuthority", "pubkeyAsString"], ["mint", "pubkeyAsString"], ["data", Data], ["primarySaleHappened", "u8"], // bool ["isMutable", "u8"], // bool ], }, ], ]); // eslint-disable-next-line no-control-regex const METADATA_REPLACE = new RegExp("\u0000", "g"); const decodeMetadata = (buffer) => { const metadata = (0, borsh_1.deserializeUnchecked)(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; function parseMetadata(connection, metadataAccount // eslint-disable-next-line @typescript-eslint/no-explicit-any ) { return __awaiter(this, void 0, void 0, function* () { const metadataBuffer = yield connection.getAccountInfo(metadataAccount, "confirmed"); // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore const metadata = (0, exports.decodeMetadata)(metadataBuffer === null || metadataBuffer === void 0 ? void 0 : metadataBuffer.data); let json = {}; try { const parsed = yield fetch(metadata.data.uri); json = yield parsed.json(); } catch (e) { console.log(e); } return Object.assign(Object.assign({}, metadata.data), { parsed: json }); }); }