@web3-storage/content-claims
v5.1.3
Published
Implementation of the Content Claims Protocol.
Downloads
3,931
Readme
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