UNPKG

@chris.troutner/ipfs-message-port-client

Version:
61 lines (53 loc) 1.55 kB
'use strict' /* eslint-env browser */ const Client = require('./client') const { decodeCID } = require('@chris.troutner/ipfs-message-port-protocol/src/cid') const CID = require('cids') /** * @typedef {import('@chris.troutner/ipfs-message-port-server').FilesService} FilesService * @typedef {import('@chris.troutner/ipfs-message-port-protocol/src/files').EncodedStat} EncodedStat * @typedef {import('./client').MessageTransport} MessageTransport * @typedef {import('./interface').MessagePortClientOptions} MessagePortClientOptions * @typedef {import('@chris.troutner/ipfs-core-types/src/files').API<MessagePortClientOptions>} FilesAPI */ /** * @class * @extends {Client<FilesService>} */ class FilesClient extends Client { /** * @param {MessageTransport} transport */ constructor (transport) { super('files', ['stat'], transport) } } /** * @type {FilesAPI["stat"]} */ FilesClient.prototype.stat = async function stat (pathOrCID, options = {}) { const { size, hash, withLocal, timeout, signal } = options const { stat } = await this.remote.stat({ path: encodeLocation(pathOrCID), size, hash, withLocal, timeout, signal }) return decodeStat(stat) } module.exports = FilesClient /** * Turns content address (path or CID) into path. * * @param {string|CID} pathOrCID */ const encodeLocation = pathOrCID => CID.isCID(pathOrCID) ? `/ipfs/${pathOrCID.toString()}` : pathOrCID /** * @param {EncodedStat} data */ const decodeStat = data => { return { ...data, cid: decodeCID(data.cid) } }