import BaseService from "@Services/BaseService"; import { Service } from "typedi"; import pinataSDK from "@pinata/sdk"; import { BackendVariables } from "@Common/config/variables/Variables"; import { Readable } from "stream"; @Service() export default class FilesService extends BaseService { private ipfsClient: pinataSDK; constructor(protected variables: BackendVariables) { super(); this.ipfsClient = new pinataSDK({ pinataApiKey: variables.PINATA_API_KEY, pinataSecretApiKey: variables.PINATA_API_SECRET }); } /** * @description : pin a file * @throws {Error} If file cannot be pinned */ public async pinFile(stream: Readable, fileName: string) { return this.ipfsClient.pinFileToIPFS(stream, { pinataMetadata: { name: fileName } }); } /** * @description : unpin a file * @throws {Error} If file cannot be unpinned */ public async unpinFile(hashToUnpin: string) { return this.ipfsClient.unpin(hashToUnpin); } }