@symmetry-hq/baskets-v2-sdk
Version:
Symmetry Baskets V2 SDK
153 lines (152 loc) • 6.03 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());
});
};
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 });
});
}