9 stable releases (3 major)
6.0.1 | Sep 3, 2024 |
---|---|
6.0.0 | Aug 26, 2024 |
5.3.1 | May 6, 2024 |
5.2.0 | Mar 15, 2024 |
1.1.0 | Dec 21, 2023 |
#38 in #multi-platform
28 downloads per month
Used in 2 crates
2MB
45K
SLoC
cml-cip25
Multiplatform SDK for CIP25 (Cardano NFT Metadata)
This can be used for both parsing and creating CIP25-compatible metadata.
Parsing can either be done directly from metadata bytes:
let schema = wasm.CIP25.CIP25Metadata.from_bytes(Buffer.from("a11902d1a26464617461a144baadf00da144cafed00da5646e616d656d4d65746164617461204e616d656566696c657382a3637372636473726331646e616d656966696c656e616d6531696d65646961547970656966696c657479706531a3637372636473726332646e616d656966696c656e616d6532696d65646961547970656966696c65747970653265696d6167657821687474733a2f2f736f6d652e776562736974652e636f6d2f696d6167652e706e67696d656469615479706567696d6167652f2a6b6465736372697074696f6e776465736372697074696f6e206f662074686973204e46546776657273696f6e02", "hex"));
// the above CBOR hex is for a V2 CIP25 schema. You should check which type it is first
// as as_label_metadata_v2() will return None (undefined) if it's a v1 schema
let v2Schema = schema.key_721().as_label_metadata_v2().data();
let policies = v2Schema.keys();
for (var i = 0; i < policies.len(); ++i) {
let policy = policies.get(i);
let assets = v2Schema.get(policy);
let assetNames = assets.keys();
for (var j = 0; j < assetNames.len(); ++j) {
let assetName = assetNames.get(j);
let details = assets.get(assetName);
console.log(`CIP25 NFT ${policy.toString("hex")}.${asset_name.toString("hex")} found:`);
console.log(` name: ${details.name().to_str()}`);
console.log(` image: ${details.image().to_string()}`);
let mediaType = details.media_type();
if (mediaType != null) {
console.log(` media_type: ${mediaType.to_str()}`);
}
let description = details.media_type();
if (description != null) {
console.log(` description: ${description.to_str()}`);
}
let files = details.files();
if (files != null) {
console.log(` files:`);
for (var k = 0; k < files.len(); ++k) {
let file = files.get(k);
console.log(` file #${k + 1}:`);
console.log(` name: ${file.name().to_str()}`);
console.log(` media_type: ${file.media_type().to_str()}`);
console.log(` src: ${file.src().to_string()}`);
}
}
}
}
We also support loose NFT parsing to try and parse key information out of potentially incorrectly formatted CIP25
const details = wasm.CIP25.MiniMetadataDetails.loose_parse(Buffer.from("a1646e616d65694d6574617665727365", "hex"));
console.log(details.name());
Dependencies
~7–13MB
~167K SLoC