4.0.5 • Published 16 days ago

@web3-storage/content-claims v4.0.5

Weekly downloads
-
License
Apache-2.0 OR MIT
Repository
github
Last release
16 days ago

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 { headers, body } = await server.request({
    headers: request.headers,
    body: Buffer.concat(chunks),
  })

  response.writeHead(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

4.0.5

16 days ago

4.0.4

1 month ago

4.0.3

1 month ago

4.0.2

3 months ago

4.0.1

5 months ago

4.0.0

5 months ago

3.2.1

5 months ago

3.2.0

7 months ago

3.1.0

8 months ago

3.0.1

10 months ago

3.0.0

10 months ago

2.3.1

10 months ago

2.3.0

10 months ago

2.2.0

10 months ago

2.1.1

10 months ago

2.1.0

10 months ago

2.0.0

10 months ago

1.1.0

10 months ago

1.0.3

10 months ago

1.0.2

10 months ago

1.0.1

10 months ago