New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More

@orca-so/token-sdk

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@orca-so/token-sdk - npm Package Compare versions

Comparing version

to
0.2.0-alpha.2

export * from "./coingecko-client";
export * from "./metaplex-client";
export * from "./solanafm-client";

@@ -18,2 +18,3 @@ "use strict";

__exportStar(require("./coingecko-client"), exports);
__exportStar(require("./metaplex-client"), exports);
__exportStar(require("./solanafm-client"), exports);

@@ -15,3 +15,4 @@ import { Connection } from "@solana/web3.js";

export declare class MetaplexProvider implements MetadataProvider {
private readonly ctx;
private readonly connection;
private readonly client;
private readonly queue;

@@ -18,0 +19,0 @@ private readonly opts;

@@ -7,7 +7,6 @@ "use strict";

exports.MetaplexProvider = void 0;
const web3_js_1 = require("@solana/web3.js");
const common_sdk_1 = require("@orca-so/common-sdk");
const p_queue_1 = __importDefault(require("p-queue"));
const umi_1 = require("@metaplex-foundation/umi");
const umi_bundle_defaults_1 = require("@metaplex-foundation/umi-bundle-defaults");
const mpl_token_metadata_1 = require("@metaplex-foundation/mpl-token-metadata");
const client_1 = require("./client");
const DEFAULT_CONCURRENCY = 5;

@@ -18,3 +17,4 @@ const DEFAULT_INTERVAL_MS = 1000;

const { concurrency = DEFAULT_CONCURRENCY, intervalMs = DEFAULT_INTERVAL_MS } = opts;
this.ctx = (0, umi_bundle_defaults_1.createUmi)(connection.rpcEndpoint);
this.connection = connection;
this.client = new client_1.MetaplexHttpClient();
this.queue = new p_queue_1.default({ concurrency, interval: intervalMs });

@@ -24,32 +24,68 @@ this.opts = opts;

async find(address) {
try {
const pda = (0, mpl_token_metadata_1.findMetadataPda)(this.ctx, { mint: (0, umi_1.publicKey)(address) });
const meta = await (0, mpl_token_metadata_1.fetchMetadata)(this.ctx, pda);
let image;
if (this.opts.loadImage) {
const json = await (0, mpl_token_metadata_1.fetchJsonMetadata)(this.ctx, meta.uri);
const pda = this.client.getMetadataAddress(new web3_js_1.PublicKey(address));
const info = await this.connection.getAccountInfo(pda);
if (!info) {
return null;
}
const meta = this.client.parseOnChainMetadata(pda, info.data);
if (!meta) {
return null;
}
let image;
if (this.opts.loadImage) {
const json = await this.client.getOffChainMetadata(meta);
if (json) {
image = json.image;
}
return { symbol: meta.symbol, name: meta.name, image };
}
catch (e) {
return null;
}
return { symbol: meta.symbol, name: meta.name, image };
}
async findMany(addresses) {
const mints = common_sdk_1.AddressUtil.toPubKeys(addresses);
const pdas = mints.map((mint) => (0, mpl_token_metadata_1.findMetadataPda)(this.ctx, { mint: (0, umi_1.publicKey)(mint) }));
const metas = await (0, mpl_token_metadata_1.fetchAllMetadata)(this.ctx, pdas);
const pdas = mints.map((mint) => this.client.getMetadataAddress(mint));
// chunk the requests into groups of 100 since this is the max number of accounts
// that can be fetched in a single request using `getMultipleAccountsInfo`
let datas = Array(pdas.length);
const dataHandlers = Array();
const chunkSize = 100;
for (let i = 0; i < pdas.length; i += chunkSize) {
const chunk = pdas.slice(i, i + chunkSize);
dataHandlers.push(async () => {
const chunkInfos = await this.connection.getMultipleAccountsInfo(chunk);
for (let j = 0; j < chunkInfos.length; j++) {
datas[i + j] = chunkInfos[j]?.data ?? null;
}
});
}
await this.queue.addAll(dataHandlers);
const metas = datas.map((data, index) => data ? this.client.parseOnChainMetadata(pdas[index], data) : null);
let jsons = Array(metas.length);
const jsonHandlers = Array();
if (this.opts.loadImage) {
jsons = await this.queue.addAll(metas.map((meta) => async () => (0, mpl_token_metadata_1.fetchJsonMetadata)(this.ctx, meta.uri)));
for (let i = 0; i < metas.length; i += 1) {
const meta = metas[i];
if (!meta) {
continue;
}
jsonHandlers.push(async () => {
const json = await this.client.getOffChainMetadata(meta);
jsons[i] = json;
});
}
}
return new Map(metas.map((meta, index) => {
const mint = mints[index].toBase58();
const json = jsons[index];
await this.queue.addAll(jsonHandlers);
const map = new Map();
for (let i = 0; i < pdas.length; i += 1) {
const mint = mints[i];
const meta = metas[i];
const json = jsons[i];
if (!meta) {
continue;
}
const result = { symbol: meta.symbol, name: meta.name, image: json?.image };
return [mint, result];
}));
map.set(mint.toString(), result);
}
return map;
}
}
exports.MetaplexProvider = MetaplexProvider;
{
"name": "@orca-so/token-sdk",
"version": "0.2.0-alpha.1",
"version": "0.2.0-alpha.2",
"description": "SPL Token Utilities",

@@ -11,5 +11,2 @@ "repository": "https://github.com/orca-so/orca-sdks",

"dependencies": {
"@metaplex-foundation/mpl-token-metadata": "^3.1.0",
"@metaplex-foundation/umi": "^0.8.9",
"@metaplex-foundation/umi-bundle-defaults": "^0.8.9",
"@orca-so/common-sdk": "^0.3.1",

@@ -16,0 +13,0 @@ "@solana/spl-token": "0.3.8",

Sorry, the diff of this file is not supported yet