@web3-storage/content-claims
TypeScript icon, indicating that this package has built-in type declarations

5.1.3 • Public • Published

Content Claims

Implementation of the Content Claims Protocol.

Read the spec.

Install

npm install @web3-storage/content-claims

Usage

Client

Read claims

import { read } from '@web3-storage/content-claims/client'

// Fetch claims and read them all, returning an array.
const claims = await read(rootCID)

console.log(claims)
import { fetch, ClaimReaderStream } from '@web3-storage/content-claims/client'
import { CARReaderStream } from 'carstream'

// Fetch a CAR of claims
const response = await fetch(rootCID)

await response.body
  .pipeThrough(new CARReaderStream()) // bytes in and blocks out
  .pipeThrough(new ClaimReaderStream()) // blocks in and claims out
  .pipeTo(new WritableStream({
    write (claim) {
      console.log(claim)
    }
  }))

Write claims

import * as Client from '@web3-storage/content-claims/client'
import { Assert } from '@web3-storage/content-claims/capability'

const result = await Assert.partition
  .invoke({
    issuer,
    audience,
    with: 'did:web:claims.web3.storage',
    nb: {
      content: rootCID,
      parts: [partCID]
    },
    expiration: Math.floor((Date.now() / 1000) + 5) // expire in 5 seconds
  })
  .execute(Client.connection)

Server

import { createServer } from '@web3-storage/content-claims/server'
import { Signer } from '@ucanto/server'
import * as CAR from '@ucanto/transport/car'
import http from 'node:http'

const claimStore = {
  async put (claim) { /* ... */ }
  async get (content) { /* ... */ }
  async list (content)  { /* ... */ }
}

const server = createServer({
  id: await Signer.generate(),
  codec: CAR.inbound,
  claimStore
})

http.createServer(async (request, response) => {
  const chunks = []
  for await (const chunk of request) {
    chunks.push(chunk)
  }

  const { status, headers, body } = await server.request({
    headers: request.headers,
    body: Buffer.concat(chunks),
  })

  response.writeHead(status ?? 200, headers)
  response.write(body)
  response.end()
}).listen(3000)

Contributing

Feel free to join in. All welcome. Please open an issue!

License

Dual-licensed under MIT + Apache 2.0

Package Sidebar

Install

npm i @web3-storage/content-claims

Weekly Downloads

1,185

Version

5.1.3

License

Apache-2.0 OR MIT

Unpacked Size

77.9 kB

Total Files

56

Last publish

Collaborators

  • it-dag-house
  • gozala
  • olizilla
  • vascosantos
  • alanshaw