npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@ethersphere/bee-js

v9.4.0

Published

Javascript client for Bee

Downloads

6,934

Readme

Bee-JS

FOSSA Status standard-readme compliant js-standard-style

JavaScript SDK for the Swarm decentralised storage.

Supports Node.js 18+, Vite and Webpack.

Write your code in CJS, MJS or TypeScript.

Intended to be used with Bee version 2.5.0.

Quick start

Start a Swarm project using TypeScript:

npm init swarm-app@latest my-dapp node-ts

or using Vite and TypeScript:

npm init swarm-app@latest my-dapp vite-tsx

Supported types are node, node-esm, node-ts and vite-tsx. Replace my-dapp with your project name.

Install

npm install @ethersphere/bee-js

Import

CJS

const { Bee } = require('@ethersphere/bee-js')

MJS and TypeScript

import { Bee } from '@ethersphere/bee-js'

Script tag

Loading this module through a script tag will make the BeeJs object available in the global namespace.

<script src="https://unpkg.com/@ethersphere/bee-js/dist/index.browser.min.js"></script>

Overview

Type interfaces

NumberString is a branded type for marking strings that represent numbers. It interops with string and bigint types. Where NumberString is present, number is disallowed in order to avoid pitfalls with unsafe large values.

Byte primitives

All the classes below extend Bytes, therefor the following methods are available on all of them: toUint8Array, toHex, toBase64, toBase32, toUtf8, toJSON, static keccak256, static fromUtf8.

The toString method uses toHex.

Bytes and its subclasses may be constructed with new from Uint8Array or hex string.

Elliptic

| Name | Description | Methods | | ---------- | ------------------------- | ------------------------------------------------------ | | PrivateKey | 32 bytes private key | publicKey, sign | | PublicKey | 64 bytes public key | address, toCompressedUint8Array, toCompressedHex | | EthAddress | 20 bytes Ethereum address | toChecksum | | Signature | 65 bytes signature | recoverPublicKey |

Swarm

| Name | Description | Methods | | ------------- | ----------------------------------- | ------------------------------- | | Reference | 32/64 bytes reference (chunk, feed) | toCid | | Identifier | 32 bytes identifier (SOC, Feed) | - | | TransactionId | 32 bytes transaction ID | - | | FeedIndex | 8 bytes feed index (BE) | static fromBigInt, toBigInt | | Topic | 32 bytes topic | static fromString | | PeerAddress | 32 bytes peer address | - | | BatchId | 32 bytes batch ID | - | | Span | 8 bytes span (LE) | static fromBigInt, toBigInt |

Tokens

| Name | Description | Methods | | ---- | --------------------------- | ------------------------------------------------------------------------------------------------ | | DAI | ERC20 DAI token (18 digits) | static fromDecimalString, static fromWei, toWeiString, toWeiBigInt, toDecimalString | | BZZ | ERC20 BZZ token (16 digits) | static fromDecimalString, static fromPLUR, toPLURString, toPLURBigInt, toDecimalString |

Swarm chunks

| Name | Description | Creation | | ---------------- | ----------------------------------------------------------------------------------------------- | --------------------------- | | Chunk | Span, max. 4096 bytes payload; address dervied from content | makeContentAddressedChunk | | SingleOwnerChunk | Identifier, signature, span, max. 4096 bytes payload; address derived from identifier and owner | makeSingleOwnerChunk |

Swarm primitives

| Name | Description | Methods | | ------------ | ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | | MantarayNode | Compact trie with reference values and JSON metadata | addFork, removeFork, calculateSelfAddress, find, findClosest, collect, marshal, unmarshal, saveRecursively, loadRecursively | | MerkleTree | Streaming BMT of chunks | append, finalize, static root |

Swarm objects

| Name | Description | Creation | | ---------- | ----------------------- | -------------------- | | SOCWriter | SingleOwnerChunk writer | bee.makeSOCWriter | | SOCReader | SingleOwnerChunk reader | bee.makeSOCReader | | FeedWriter | Feed writer | bee.makeFeedWriter | | FeedReader | Feed reader | bee.makeFeedReader |

Bee API

  • ❌❌✅ - Full node only
  • ❌✅✅ - Light node and full node
  • ✅✅✅ - Ultra-light node, light node and full node

| JS Call | Bee Endpoint | Bee Mode | | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | | uploadFile | POST /bzz 🔗 | ❌✅✅ | | uploadFilesFromDirectory Node.js | POST /bzz 🔗 | ❌✅✅ | | uploadFiles | POST /bzz 🔗 | ❌✅✅ | | uploadCollection | POST /bzz 🔗 | ❌✅✅ | | uploadData | POST /bytes 🔗 | ❌✅✅ | | uploadChunk | POST /chunks 🔗 | ❌✅✅ | | streamDirectory Node.js | POST /chunks 🔗 | ❌✅✅ | | streamFiles Browser | POST /chunks 🔗 | ❌✅✅ | | SOCWriter.upload | POST /soc/:owner/:identifier 🔗 | ❌✅✅ | | FeedReader.download | GET /feeds/:owner/:topic 🔗 | ✅✅✅ | | FeedWriter.updateFeed | POST /soc/:owner/:identifier 🔗 | ❌✅✅ | | downloadFile | GET /bzz/:reference 🔗 | ✅✅✅ | | downloadFile | GET /bzz/:reference/:path 🔗 | ✅✅✅ | | downloadReadableFile | GET /bzz/:reference 🔗 | ✅✅✅ | | downloadData | GET /bytes/:reference 🔗 | ✅✅✅ | | downloadReadableData | GET /bytes/:reference 🔗 | ✅✅✅ | | downloadChunk | GET /chunks/:reference 🔗 | ✅✅✅ | | createFeedManifest | POST /feeds/:owner/:topic 🔗 | ❌✅✅ | | isConnected | GET / | ✅✅✅ | | getHealth | GET /health 🔗 | ✅✅✅ | | getReadiness | GET /readiness 🔗 | ✅✅✅ | | getNodeInfo | GET /node 🔗 | ✅✅✅ | | getChainState | GET /chainstate 🔗 | ❌✅✅ | | getRedistributionState | GET /redistributionstate 🔗 | ❌❌✅ | | getReserveState | GET /reservestate 🔗 | ❌❌✅ | | getStatus | GET /status 🔗 | ✅✅✅ | | getWallet | GET /wallet 🔗 | ❌✅✅ | | getTopology | GET /topology 🔗 | ✅✅✅ | | getAddresses | GET /addresses 🔗 | ✅✅✅ | | getPeers | GET /peers 🔗 | ✅✅✅ | | getAllBalances | GET /balances 🔗 | ❌✅✅ | | getPeerBalance | GET /balances/:peer 🔗 | ❌✅✅ | | getPastDueConsumptionBalances | GET /consumed 🔗 | ❌✅✅ | | getPastDueConsumptionPeerBalance | GET /consumed/:peer 🔗 | ❌✅✅ | | getAllSettlements | GET /settlements 🔗 | ❌✅✅ | | getSettlements | GET /settlements/:peer 🔗 | ❌✅✅ | | getChequebookAddress | GET /chequebook/address 🔗 | ❌✅✅ | | getChequebookBalance | GET /chequebook/balance 🔗 | ❌✅✅ | | getLastCheques | GET /chequebook/cheque 🔗 | ❌✅✅ | | getLastChequesForPeer | GET /chequebook/cheque/:peer 🔗 | ❌✅✅ | | getLastCashoutAction | GET /chequebook/cashout/:peer 🔗 | ❌✅✅ | | cashoutLastCheque | POST /chequebook/cashout/:peer 🔗 | ❌✅✅ | | depositTokens | POST /chequebook/deposit 🔗 | ❌✅✅ | | withdrawTokens | POST /chequebook/withdraw 🔗 | ❌✅✅ | | getAllPendingTransactions | GET /transactions 🔗 | ❌✅✅ | | getPendingTransaction | GET /transactions/:id 🔗 | ❌✅✅ | | rebroadcastTransaction | POST /transactions/:id 🔗 | ❌✅✅ | | cancelTransaction | DELETE /transactions/:id 🔗 | ❌✅✅ | | createTag | POST /tags 🔗 | ❌✅✅ | | retrieveTag | GET /tags/:id 🔗 | ❌✅✅ | | getAllTags | GET /tags 🔗 | ❌✅✅ | | deleteTag | DELETE /tags/:id 🔗 | ❌✅✅ | | updateTag | PATCH /tags/:id 🔗 | ❌✅✅ | | pin | POST /pins/:reference 🔗 | ✅✅✅ | | getAllPins | GET /pins 🔗 | ✅✅✅ | | getPin | GET /pins/:reference 🔗 | ✅✅✅ | | isReferenceRetrievable | GET /stewardship/:reference 🔗 | ✅✅✅ | | reuploadPinnedData | PUT /stewardship/:reference 🔗 | ❌✅✅ | | unpin | DELETE /pins/:reference 🔗 | ✅✅✅ | | getGrantees | GET /grantee/:reference 🔗 | ❌✅✅ | | createGrantees | POST /grantee 🔗 | ❌✅✅ | | patchGrantees | PATCH /grantee/:reference 🔗 | ❌✅✅ | | pssSend | POST /pss/send/:topic/:target 🔗 | ❌✅✅ | | pssSubscribe Websocket | GET /pss/subscribe/:topic 🔗 | ❌❌✅ | | pssReceive | GET /pss/subscribe/:topic 🔗 | ❌❌✅ | | getAllPostageBatch | GET /stamps 🔗 | ❌✅✅ | | getGlobalPostageBatches | GET /batches 🔗 | ❌✅✅ | | getPostageBatch | GET /stamps/:batchId 🔗 | ❌✅✅ | | getPostageBatchBuckets | GET /stamps/:batchId/buckets 🔗 | ❌✅✅ | | createPostageBatch | POST /stamps/:amount/:depth 🔗 | ❌✅✅ | | topUpBatch | PATCH /stamps/topup/:batchId/:amount 🔗 | ❌✅✅ | | diluteBatch | PATCH /stamps/dilute/:batchId/:depth 🔗 | ❌✅✅ | | createEnvelope | POST /envelope/:reference 🔗 | ❌✅✅ | | getStake | GET /stake 🔗 | ❌❌✅ | | depositStake | POST /stake 🔗 | ❌❌✅ |

Utils

General

  • getCollectionSize
  • getFolderSize

PSS

  • makeMaxTarget

Erasure Coding

  • approximateOverheadForRedundancyLevel
  • getRedundancyStat
  • getRedundancyStats

Stamps

  • getAmountForTtl
  • getDepthForCapacity
  • getStampCost
  • getStampEffectiveBytes
  • getStampMaximumCapacityBytes
  • getStampTtlSeconds
  • getStampUsage

Usage

Upload via Swarm Gateway

import { Bee, NULL_STAMP, SWARM_GATEWAY_URL } from '@ethersphere/bee-js'

main()

async function main() {
  const bee = new Bee(SWARM_GATEWAY_URL)
  const { reference } = await bee.uploadData(NULL_STAMP, 'Hello, World!')
  console.log(reference.toHex())
}

Create or select an existing postage batch

Swarm incentivizes nodes in the network to store content, therefor all uploads require a paid postage batch.

import { Bee } from '@ethersphere/bee-js'

async function getOrCreatePostageBatch() {
  const bee = new Bee('http://localhost:1633')
  let batchId

  const batches = await bee.getAllPostageBatch()
  const usable = batches.find(x => x.usable)

  if (usable) {
    batchId = usable.batchID
  } else {
    batchId = await bee.buyStorage(Size.fromGigabytes(1), Duration.fromDays(7))
  }
}

The following examples all assume an existing batchId.

Upload simple data (Browser + Node.js)

import { Bee } from '@ethersphere/bee-js'

const bee = new Bee('http://localhost:1633')

const uploadResult = await bee.uploadData(batchId, 'Bee is awesome!')
const data = await bee.downloadData(uploadResult.reference)

console.log(data.toUtf8()) // prints 'Bee is awesome!'

Upload data from a file input (React)

import { Bee } from '@ethersphere/bee-js'

const bee = new Bee('http://localhost:1633')
const result = await bee.uploadFile(batchId, file)

Upload multiple files or a directory (React)

import { Bee } from '@ethersphere/bee-js'

const bee = new Bee('http://localhost:1633')
const result = await bee.uploadFiles(batchId, fileList)

Upload arbitrary large file (Node.js)

import { Bee } from '@ethersphere/bee-js'
import { createReadStream } from 'fs'

const bee = new Bee('http://localhost:1633')
const readable = createReadStream('./path/to/large.bin')
const uploadResult = await bee.uploadFile(batchId, readable)

Upload arbitrary large directories (Node.js)

import { Bee } from '@ethersphere/bee-js'
import { createReadStream } from 'fs'

const bee = new Bee('http://localhost:1633')
const uploadResult = await bee.uploadFilesFromDirectory(batchId, './path/to/gallery/')

Customize http/https agent and headers

const bee = new Bee('http://localhost:1633', {
  httpAgent: new http.Agent({ keepAlive: true }),
  httpsAgent: new https.Agent({ keepAlive: true }),
  headers: {
    Authorization: 'Basic ' + Buffer.from('username:password').toString('base64'),
  },
})

Contribute

Stay up to date by joining the official Discord and by keeping an eye on the releases tab.

We are using Conventional Commits for our commit messages and pull requests, following the Semantic Versioning rules.

There are some ways you can make this module better:

  • Consult our open issues and take on one of them
  • Help our tests reach 100% coverage!
  • Join us in our Discord chat in the #develop-on-swarm channel if you have questions or want to give feedback

Setup

Install project dependencies:

npm install

Build the project:

npm run build

After making changes, link the package to your project by running npm link in the Bee-JS project root, and npm link @ethersphere/bee-js in your project root.

Test

Code coverage

Tests are currently run against a mainnet Bee nodes. This is temporary and this section will be revised in the future.

License

BSD-3-Clause

FOSSA Status