import axios, { AxiosResponse } from 'axios'; import FormData from 'form-data'; import { logger as parentLogger } from '../logger.js'; type ACTIONS = 'PIN' | 'UPLOAD'; const logger = parentLogger.child({ module: 'Services::Estuary' }); const API_ROUTES: Record = { PIN: 'pinning/pins', UPLOAD: 'content/add', }; const ESTUARY_API_KEY = process.env.ESTUARY_API_KEY; const ESTUARY_API_URL = process.env.ESTUARY_API_URL; const UPLOAD_ROUTE = `${ESTUARY_API_URL}/${API_ROUTES['UPLOAD']}`; export interface ESTUARY_UPLOAD_RESPONSE { cid: string; retrieval_url: string; estuary_retrieval_url: string; estuaryId: number; providers: string[]; } export const uploadDataToEstuary = async (cid: string, body: Buffer): Promise => { logger.trace({ fn: 'uploadDataToEstuary', cid }, '[estuary::uploadDataToEstuary]'); const form = new FormData(); form.append('data', body, { filename: cid }); try { const { data } = await axios.post>(UPLOAD_ROUTE, form, { headers: { Authorization: `Bearer ${ESTUARY_API_KEY}`, ...form.getHeaders(), }, }); logger.info({ fn: 'uploadDataToEstuary', cid, data }, '[estuary::uploadDataToEstuary] Estuary response', cid, data); return data; } catch (err) { logger.error({ cid, err, errResponse: err.response?.data }, '[estuary::uploadDataToEstuary] Estuary error'); } return null; };