@web3-storage/w3up-client
Version:
Client for the web3.storage w3up api
68 lines • 2.47 kB
JavaScript
import { Blob } from '@web3-storage/upload-client';
import { Blob as BlobCapabilities } from '@web3-storage/capabilities';
import { sha256 } from 'multiformats/hashes/sha2';
import { Base } from '../base.js';
/**
* Client for interacting with the `blob/*` capabilities.
*/
export class BlobClient extends Base {
/**
* Store a Blob to the resource.
*
* Required delegated capabilities:
* - `space/blob/add`
*
* @param {Blob} blob - blob data.
* @param {import('../types.js').RequestOptions} [options]
*/
async add(blob, options = {}) {
options = {
receiptsEndpoint: this._receiptsEndpoint.toString(),
connection: this._serviceConf.upload,
...options,
};
const conf = await this._invocationConfig([BlobCapabilities.add.can]);
const bytes = new Uint8Array(await blob.arrayBuffer());
const digest = await sha256.digest(bytes);
return { digest, ...(await Blob.add(conf, digest, bytes, options)) };
}
/**
* List blobs stored to the resource.
*
* Required delegated capabilities:
* - `space/blob/list`
*
* @param {import('../types.js').ListRequestOptions} [options]
*/
async list(options = {}) {
const conf = await this._invocationConfig([BlobCapabilities.list.can]);
options.connection = this._serviceConf.upload;
return Blob.list(conf, options);
}
/**
* Remove a stored blob by multihash digest.
*
* Required delegated capabilities:
* - `space/blob/remove`
*
* @param {import('multiformats').MultihashDigest} digest - digest of blob to remove.
* @param {import('../types.js').RequestOptions} [options]
*/
async remove(digest, options = {}) {
const conf = await this._invocationConfig([BlobCapabilities.remove.can]);
options.connection = this._serviceConf.upload;
return Blob.remove(conf, digest, options);
}
/**
* Gets a stored blob by multihash digest.
*
* @param {import('multiformats').MultihashDigest} digest - digest of blob to get.
* @param {import('../types.js').RequestOptions} [options]
*/
async get(digest, options = {}) {
const conf = await this._invocationConfig([BlobCapabilities.get.can]);
options.connection = this._serviceConf.upload;
return Blob.get(conf, digest, options);
}
}
//# sourceMappingURL=blob.js.map