@pinata/sdk
Version:
Official SDK for the Pinata IPFS platform
48 lines (41 loc) • 1.64 kB
text/typescript
import axios from 'axios';
import { baseUrl } from '../../constants';
import { createConfigForAxiosHeaders, validateMetadata, validatePinataOptions } from '../../util/validators';
import { handleError } from '../../util/errorResponse';
import { PinataConfig } from '../..';
import { PinataPinOptions, PinataPinResponse } from './pinFileToIPFS';
export default function pinJSONToIPFS(config: PinataConfig, body: any, options? : PinataPinOptions):Promise<PinataPinResponse> {
let requestBody: any = body;
if (typeof body !== 'object') {
throw new Error('body must be a valid JSON object');
}
if (options) {
requestBody = {
pinataContent: body
};
if (options.pinataMetadata) {
validateMetadata(options.pinataMetadata);
requestBody.pinataMetadata = options.pinataMetadata;
}
if (options.pinataOptions) {
validatePinataOptions(options.pinataOptions);
requestBody.pinataOptions = options.pinataOptions;
}
}
const endpoint = `${baseUrl}/pinning/pinJSONToIPFS`;
return new Promise((resolve, reject) => {
axios.post(
endpoint,
requestBody,
{...createConfigForAxiosHeaders(config)})
.then(function (result) {
if (result.status !== 200) {
reject(new Error(`unknown server response while pinning JSON to IPFS: ${result}`));
}
resolve(result.data);
}).catch(function (error) {
const formattedError = handleError(error);
reject(formattedError);
});
});
}