ipfs-http-client
Version:
A client library for the IPFS HTTP API
32 lines • 1.2 kB
JavaScript
import { CID } from 'multiformats/cid';
import { configure } from '../lib/configure.js';
import { multipartRequest } from 'ipfs-core-utils/multipart-request';
import { toUrlSearchParams } from '../lib/to-url-search-params.js';
import { abortSignal } from '../lib/abort-signal.js';
import { AbortController } from 'native-abort-controller';
export const createPut = (codecs, options) => {
const fn = configure(api => {
const put = async (dagNode, options = {}) => {
const settings = {
format: 'dag-cbor',
hashAlg: 'sha2-256',
inputEnc: 'raw',
...options
};
const codec = await codecs.getCodec(settings.format);
const serialized = codec.encode(dagNode);
const controller = new AbortController();
const signal = abortSignal(controller.signal, settings.signal);
const res = await api.post('dag/put', {
timeout: settings.timeout,
signal,
searchParams: toUrlSearchParams(settings),
...await multipartRequest([serialized], controller, settings.headers)
});
const data = await res.json();
return CID.parse(data.Cid['/']);
};
return put;
});
return fn(options);
};