Skip to content

Commit

Permalink
Merge pull request #142 from Itheum/develop
Browse files Browse the repository at this point in the history
fix: pinata
  • Loading branch information
damienen authored Jun 13, 2024
2 parents e103187 + 519d6a6 commit 5f98880
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 19 deletions.
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@itheum/sdk-mx-data-nft",
"version": "3.5.0",
"version": "3.5.1",
"description": "SDK for Itheum's Data NFT Technology on MultiversX Blockchain",
"main": "out/index.js",
"types": "out/index.d.js",
Expand Down
71 changes: 55 additions & 16 deletions src/common/mint-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,23 +37,64 @@ export async function dataNFTDataStreamAdvertise(

export async function storeToIpfs(
storageToken: string,
traits: File,
image: File
traits: object,
image: Blob
): Promise<{ imageOnIpfsUrl: string; metadataOnIpfsUrl: string }> {
let res;
try {
const nftstorage = new NFTStorage({
token: storageToken
});
const dir = [image, traits];
res = await nftstorage.storeDirectory(dir);
const imageHash = await storeImageToIpfs(image, storageToken);
const traitsHash = await storeTraitsToIpfs(traits, storageToken);
return {
imageOnIpfsUrl: `https://ipfs.io/ipfs/${imageHash}`,
metadataOnIpfsUrl: `https://ipfs.io/ipfs/${traitsHash}`
};
} catch (error) {
throw error;
}
return {
imageOnIpfsUrl: `https://ipfs.io/ipfs/${res}/image.png`,
metadataOnIpfsUrl: `https://ipfs.io/ipfs/${res}/metadata.json`
}

async function storeImageToIpfs(image: Blob, storageToken: string) {
const form = new FormData();
form.append('file', image);
form.append('pinataMetadata', '{\n "name": "image"\n}');
form.append('pinataOptions', '{\n "cidVersion": 0\n}');

const options = {
method: 'POST',
headers: {
Authorization: `Bearer ${storageToken}`
},
body: form
};
const response = await fetch(
'https://api.pinata.cloud/pinning/pinFileToIPFS',
options
);
const res = await response.json();
const imageHash = res.IpfsHash;
return imageHash;
}

async function storeTraitsToIpfs(traits: object, storageToken: string) {
const options = {
method: 'POST',
headers: {
Authorization: `Bearer ${storageToken}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
pinataOptions: { cidVersion: 0 },
pinataMetadata: { name: 'metadata' },
pinataContent: traits
})
};

const response = await fetch(
'https://api.pinata.cloud/pinning/pinJSONToIPFS',
options
);
const res = await response.json();
const traitsHash = res.IpfsHash;
return traitsHash;
}

export function createIpfsMetadata(
Expand Down Expand Up @@ -96,11 +137,11 @@ export async function createFileFromUrl(
) {
let res: any = '';
let data: any = '';
let _imageFile: File = new File([], '');
let _imageFile: Blob = new Blob();
if (url) {
res = await fetch(url);
data = await res.blob();
_imageFile = new File([data], 'image.png', { type: 'image/png' });
_imageFile = data;
}
const traits = createIpfsMetadata(
res.headers.get('x-nft-traits') || '',
Expand All @@ -110,8 +151,6 @@ export async function createFileFromUrl(
address,
extraAssets
);
const _traitsFile = new File([JSON.stringify(traits)], 'metadata.json', {
type: 'application/json'
});
const _traitsFile = traits;
return { image: _imageFile, traits: _traitsFile };
}

0 comments on commit 5f98880

Please sign in to comment.