From a273486eb99ff9e160388d3d66840c8d972b4adf Mon Sep 17 00:00:00 2001 From: sakulstra Date: Tue, 27 Feb 2024 22:34:25 +0100 Subject: [PATCH] fix: use pinata upload --- src/index.ts | 1 + src/ipfs/upload.ts | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 src/ipfs/upload.ts diff --git a/src/index.ts b/src/index.ts index f91a95e..4b9f6b7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,5 +3,6 @@ export * from './rpc/chainIds'; export * from './rpc/helpers'; export * from './rpc/clients'; export * from './ipfs/hash'; +export * from './ipfs/upload'; export * from './ipfs/parseIpfs'; export * from './cache/json'; diff --git a/src/ipfs/upload.ts b/src/ipfs/upload.ts new file mode 100644 index 0000000..0970398 --- /dev/null +++ b/src/ipfs/upload.ts @@ -0,0 +1,35 @@ +export async function uploadToPinata(source: string) { + const PINATA_KEY = process.env.PINATA_KEY; + if (!PINATA_KEY) throw new Error('PINATA_KEY env must be set'); + const PINATA_SECRET = process.env.PINATA_SECRET; + if (!PINATA_SECRET) throw new Error('PINATA_SECRET env must be set'); + const data = new FormData(); + data.append('file', new Blob([source])); + const res = await fetch('https://api.pinata.cloud/pinning/pinFileToIPFS', { + method: 'POST', + body: data, + headers: { + pinata_api_key: PINATA_KEY, + pinata_secret_api_key: PINATA_SECRET, + }, + }); + + if (!res.ok) { + throw Error(await res.text()); + } + + const result = await res.json(); + + if (result.error) throw { message: result.error }; + return result; +} + +export async function uploadToTheGraph(source: string) { + const data = new FormData(); + data.append('file', new Blob([source])); + const res = await fetch('https://api.thegraph.com/ipfs/api/v0/add', { + method: 'POST', + body: data, + }); + return await res.json(); +}