From dbeb2c19c188b124faead60f8093a6dbac878f2e Mon Sep 17 00:00:00 2001 From: Lukas Date: Wed, 28 Feb 2024 09:13:26 +0100 Subject: [PATCH] feat: add quicknode ipfs (#30) * feat: add quicknode ipfs * fix: don't inline api key --- src/ipfs/upload.spec.ts | 10 ++++++++++ src/ipfs/upload.ts | 22 +++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 src/ipfs/upload.spec.ts diff --git a/src/ipfs/upload.spec.ts b/src/ipfs/upload.spec.ts new file mode 100644 index 0000000..d15993d --- /dev/null +++ b/src/ipfs/upload.spec.ts @@ -0,0 +1,10 @@ +import { describe, it, expect } from 'vitest'; +import { uploadToQuicknode } from './upload'; + +describe('upload', () => { + it('upload to quicknode', async () => { + if (!process.env.QUICKNODE_API_KEY) return; + const response = await uploadToQuicknode('BoredGhosts'); + console.log(response); + }); +}); diff --git a/src/ipfs/upload.ts b/src/ipfs/upload.ts index 0970398..8ba2105 100644 --- a/src/ipfs/upload.ts +++ b/src/ipfs/upload.ts @@ -31,5 +31,25 @@ export async function uploadToTheGraph(source: string) { method: 'POST', body: data, }); - return await res.json(); + return res.json(); +} + +export async function uploadToQuicknode(source: string, key?: string) { + const apiKey = process.env.QUICKNODE_API_KEY!; + const headers = new Headers(); + headers.append('x-api-key', apiKey); + const data = new FormData(); + data.append('Body', new Blob([source])); + data.append('Key', key || 'unknownKey'); + data.append('ContentType', 'text/plain'); + const res = await fetch( + 'https://api.quicknode.com/ipfs/rest/v1/s3/put-object', + { + method: 'POST', + headers, + body: data, + redirect: 'follow', + }, + ); + return res.text(); }