diff --git a/packages/access-client/package.json b/packages/access-client/package.json index 18ef47489..8da0bc05d 100644 --- a/packages/access-client/package.json +++ b/packages/access-client/package.json @@ -99,12 +99,12 @@ "dependencies": { "@ipld/car": "^5.1.1", "@ipld/dag-ucan": "^3.4.0", - "@ucanto/client": "^9.0.0", - "@ucanto/core": "^9.0.1", - "@ucanto/interface": "^9.0.0", - "@ucanto/principal": "^9.0.0", - "@ucanto/transport": "^9.1.0", - "@ucanto/validator": "^9.0.1", + "@ucanto/client": "^9.0.1", + "@ucanto/core": "^10.0.0", + "@ucanto/interface": "^10.0.0", + "@ucanto/principal": "^9.0.1", + "@ucanto/transport": "^9.1.1", + "@ucanto/validator": "^9.0.2", "@web3-storage/capabilities": "workspace:^", "@web3-storage/did-mailto": "workspace:^", "bigint-mod-arith": "^3.1.2", @@ -125,7 +125,7 @@ "@types/sinon": "^10.0.19", "@types/varint": "^6.0.1", "@types/ws": "^8.5.4", - "@ucanto/server": "^9.0.1", + "@ucanto/server": "^10.0.0", "assert": "^2.0.0", "mocha": "^10.2.0", "playwright-test": "^12.3.4", diff --git a/packages/capabilities/package.json b/packages/capabilities/package.json index 401094816..4649e73c6 100644 --- a/packages/capabilities/package.json +++ b/packages/capabilities/package.json @@ -83,11 +83,11 @@ "dist/src/**/*.d.ts.map" ], "dependencies": { - "@ucanto/core": "^9.0.1", - "@ucanto/interface": "^9.0.0", - "@ucanto/principal": "^9.0.0", - "@ucanto/transport": "^9.1.0", - "@ucanto/validator": "^9.0.1", + "@ucanto/core": "^10.0.0", + "@ucanto/interface": "^10.0.0", + "@ucanto/principal": "^9.0.1", + "@ucanto/transport": "^9.1.1", + "@ucanto/validator": "^9.0.2", "@web3-storage/data-segment": "^3.2.0", "uint8arrays": "^5.0.3" }, diff --git a/packages/capabilities/src/ucan.js b/packages/capabilities/src/ucan.js index 83ce637fa..c703f2f97 100644 --- a/packages/capabilities/src/ucan.js +++ b/packages/capabilities/src/ucan.js @@ -91,40 +91,42 @@ export const conclude = capability({ with: Schema.did(), // TODO: Should this just have bytes? nb: Schema.struct({ - /** - * A link to the UCAN invocation that this receipt is for. - */ - ran: UCANLink, - /** - * The value output of the invocation in Result format. - */ - out: Schema.unknown(), - /** - * Tasks that the invocation would like to enqueue. - */ - next: Schema.array(UCANLink), - /** - * Additional data about the receipt - */ - meta: Schema.unknown(), - /** - * The UTC Unix timestamp at which the Receipt was issued - */ - time: Schema.integer(), + bytes: Schema.Bytes, + // /** + // * A link to the UCAN invocation that this receipt is for. + // */ + // ran: UCANLink, + // /** + // * The value output of the invocation in Result format. + // */ + // out: Schema.unknown(), + // /** + // * Tasks that the invocation would like to enqueue. + // */ + // next: Schema.array(UCANLink), + // /** + // * Additional data about the receipt + // */ + // meta: Schema.unknown(), + // /** + // * The UTC Unix timestamp at which the Receipt was issued + // */ + // time: Schema.integer(), }), derives: (claim, from) => // With field MUST be the same and(equalWith(claim, from)) ?? - // invocation MUST be the same - and(checkLink(claim.nb.ran, from.nb.ran, 'nb.ran')) ?? - // value output MUST be the same - and(equal(claim.nb.out, from.nb.out, 'nb.out')) ?? - // tasks to enqueue MUST be the same - and(equal(claim.nb.next, from.nb.next, 'nb.next')) ?? - // additional data MUST be the same - and(equal(claim.nb.meta, from.nb.meta, 'nb.meta')) ?? - // the receipt issue time MUST be the same - equal(claim.nb.time, from.nb.time, 'nb.time'), + equal(claim.nb.bytes, from.nb.bytes, 'nb.bytes'), + // // invocation MUST be the same + // and(checkLink(claim.nb.ran, from.nb.ran, 'nb.ran')) ?? + // // value output MUST be the same + // and(equal(claim.nb.out, from.nb.out, 'nb.out')) ?? + // // tasks to enqueue MUST be the same + // and(equal(claim.nb.next, from.nb.next, 'nb.next')) ?? + // // additional data MUST be the same + // and(equal(claim.nb.meta, from.nb.meta, 'nb.meta')) ?? + // // the receipt issue time MUST be the same + // equal(claim.nb.time, from.nb.time, 'nb.time'), }) /** diff --git a/packages/filecoin-api/package.json b/packages/filecoin-api/package.json index 69a413cde..eba449271 100644 --- a/packages/filecoin-api/package.json +++ b/packages/filecoin-api/package.json @@ -153,13 +153,13 @@ }, "dependencies": { "@ipld/dag-ucan": "^3.4.0", - "@ucanto/client": "^9.0.0", - "@ucanto/core": "^9.0.1", - "@ucanto/interface": "^9.0.0", - "@ucanto/server": "^9.0.1", - "@ucanto/transport": "^9.1.0", + "@ucanto/client": "^9.0.1", + "@ucanto/core": "^10.0.0", + "@ucanto/interface": "^10.0.0", + "@ucanto/server": "^10.0.0", + "@ucanto/transport": "^9.1.1", "@web3-storage/capabilities": "workspace:^", - "@web3-storage/content-claims": "^4.0.2", + "@web3-storage/content-claims": "^4.0.4", "@web3-storage/data-segment": "^4.0.0", "fr32-sha2-256-trunc254-padded-binary-tree-multihash": "^3.3.0", "p-map": "^6.0.0" @@ -167,8 +167,8 @@ "devDependencies": { "@ipld/car": "^5.1.1", "@types/mocha": "^10.0.1", - "@ucanto/client": "^9.0.0", - "@ucanto/principal": "^9.0.0", + "@ucanto/client": "^9.0.1", + "@ucanto/principal": "^9.0.1", "@web-std/blob": "^3.0.5", "@web3-storage/eslint-config-w3up": "workspace:^", "@web3-storage/filecoin-client": "workspace:^", diff --git a/packages/filecoin-api/src/storefront/service.js b/packages/filecoin-api/src/storefront/service.js index 5afd10a95..01f6b4544 100644 --- a/packages/filecoin-api/src/storefront/service.js +++ b/packages/filecoin-api/src/storefront/service.js @@ -208,7 +208,7 @@ async function findDataAggregationProof({ taskStore, receiptStore }, task) { aggregateAcceptReceipt = receiptRes.ok.out.ok } if (!receiptRes.ok.fx.join) break - task = receiptRes.ok.fx.join + task = receiptRes.ok.fx.join.link() } if (!inclusion) { return { diff --git a/packages/filecoin-client/package.json b/packages/filecoin-client/package.json index d311f30ce..5092692da 100644 --- a/packages/filecoin-client/package.json +++ b/packages/filecoin-client/package.json @@ -54,10 +54,10 @@ ], "dependencies": { "@ipld/dag-ucan": "^3.4.0", - "@ucanto/client": "^9.0.0", - "@ucanto/core": "^9.0.1", - "@ucanto/interface": "^9.0.0", - "@ucanto/transport": "^9.1.0", + "@ucanto/client": "^9.0.1", + "@ucanto/core": "^10.0.0", + "@ucanto/interface": "^10.0.0", + "@ucanto/transport": "^9.1.1", "@web3-storage/capabilities": "workspace:^" }, "devDependencies": { @@ -65,8 +65,8 @@ "@ipld/dag-json": "^10.1.4", "@types/assert": "^1.5.6", "@types/mocha": "^10.0.1", - "@ucanto/principal": "^9.0.0", - "@ucanto/server": "^9.0.1", + "@ucanto/principal": "^9.0.1", + "@ucanto/server": "^10.0.0", "@web3-storage/data-segment": "^4.0.0", "@web3-storage/eslint-config-w3up": "workspace:^", "assert": "^2.0.0", diff --git a/packages/upload-api/package.json b/packages/upload-api/package.json index 2dfb26518..e4c356039 100644 --- a/packages/upload-api/package.json +++ b/packages/upload-api/package.json @@ -171,12 +171,12 @@ "test-watch": "pnpm build && mocha --bail --timeout 10s --watch --parallel -n no-warnings -n experimental-vm-modules -n experimental-fetch --watch-files src,test" }, "dependencies": { - "@ucanto/client": "^9.0.0", - "@ucanto/interface": "^9.0.0", - "@ucanto/principal": "^9.0.0", - "@ucanto/server": "^9.0.1", - "@ucanto/transport": "^9.1.0", - "@ucanto/validator": "^9.0.1", + "@ucanto/client": "^9.0.1", + "@ucanto/interface": "^10.0.0", + "@ucanto/principal": "^9.0.1", + "@ucanto/server": "^10.0.0", + "@ucanto/transport": "^9.1.1", + "@ucanto/validator": "^9.0.2", "@web3-storage/access": "workspace:^", "@web3-storage/capabilities": "workspace:^", "@web3-storage/did-mailto": "workspace:^", @@ -189,7 +189,7 @@ "@ipld/car": "^5.1.1", "@ipld/dag-ucan": "^3.4.0", "@types/mocha": "^10.0.1", - "@ucanto/core": "^9.0.1", + "@ucanto/core": "^10.0.0", "@types/sinon": "^17.0.3", "@web-std/blob": "^3.0.5", "@web3-storage/eslint-config-w3up": "workspace:^", diff --git a/packages/upload-api/src/blob/add.js b/packages/upload-api/src/blob/add.js index f46e5e06d..fbd544e07 100644 --- a/packages/upload-api/src/blob/add.js +++ b/packages/upload-api/src/blob/add.js @@ -1,6 +1,9 @@ import * as Server from '@ucanto/server' +import { Message } from '@ucanto/core' import { ed25519 } from '@ucanto/principal' +import { CAR } from '@ucanto/transport' import * as Blob from '@web3-storage/capabilities/blob' +import * as UCAN from '@web3-storage/capabilities/ucan' import * as API from '../types.js' import { BlobItemSizeExceeded } from './lib.js' @@ -103,6 +106,7 @@ export function blobAddProvider(context) { space, blob.content ) + let allocateUcanConcludefx if (!allocatedExistsRes.ok) { // Execute allocate invocation const allocateRes = await blobAllocate.execute(getServiceConnection()) @@ -111,6 +115,17 @@ export function blobAddProvider(context) { error: allocateRes.out.error, } } + const message = await Message.build({ receipts: [allocateRes] }) + const messageCar = await CAR.outbound.encode(message) + allocateUcanConcludefx = await UCAN.conclude.invoke({ + issuer: id, + audience: id, + with: id.toDIDKey(), + nb: { + bytes: messageCar.body + }, + expiration: Infinity, + }).delegate() } /** @type {API.OkBuilder} */ @@ -119,11 +134,20 @@ export function blobAddProvider(context) { 'await/ok': acceptfx.link(), }, }) - // TODO: not pass links, but delegation + // Add allocate receipt if allocate was executed + if (allocateUcanConcludefx) { + // TODO: perhaps if we allocated we need to get and write previous receipt? + return result + .fork(allocatefx) + .fork(allocateUcanConcludefx) + .fork(putfx) + .join(acceptfx) + } + return result - .fork(allocatefx.link()) - .fork(putfx.link()) - .join(acceptfx.link()) + .fork(allocatefx) + .fork(putfx) + .join(acceptfx) }, }) } diff --git a/packages/upload-api/src/ucan/conclude.js b/packages/upload-api/src/ucan/conclude.js index a3d94a237..e88ba6f18 100644 --- a/packages/upload-api/src/ucan/conclude.js +++ b/packages/upload-api/src/ucan/conclude.js @@ -1,4 +1,6 @@ import { provide } from '@ucanto/server' +import { Message } from '@ucanto/core' +import { CAR } from '@ucanto/transport' import { conclude } from '@web3-storage/capabilities/ucan' import * as API from '../types.js' @@ -7,8 +9,24 @@ import * as API from '../types.js' * @returns {API.ServiceMethod} */ export const ucanConcludeProvider = ({ receiptsStorage }) => - provide(conclude, async ({ capability, invocation }) => { - // TODO: Store receipt + provide(conclude, async ({ capability }) => { + const messageCar = CAR.codec.decode(capability.nb.bytes) + const message = Message.view({ root: messageCar.roots[0].cid, store: messageCar.blocks }) + + // TODO: check number of receipts + const receiptKey = Array.from(message.receipts.keys())[0] + const receipt = message.receipts.get(receiptKey) + + if (!receipt) { + throw new Error('receipt should exist') + } + + const receiptPutRes = await receiptsStorage.put(receipt) + if (receiptPutRes.error) { + return { + error: receiptPutRes.error + } + } // TODO: Schedule accept (temporary simple hack) diff --git a/packages/upload-api/test/handlers/blob.js b/packages/upload-api/test/handlers/blob.js index e4c126ac8..a6d51afa6 100644 --- a/packages/upload-api/test/handlers/blob.js +++ b/packages/upload-api/test/handlers/blob.js @@ -1,8 +1,11 @@ import * as API from '../../src/types.js' import { Absentee } from '@ucanto/principal' +import { Message } from '@ucanto/core' +import { CAR } from '@ucanto/transport' import { equals } from 'uint8arrays' import { sha256 } from 'multiformats/hashes/sha2' import * as BlobCapabilities from '@web3-storage/capabilities/blob' +import * as UCAN from '@web3-storage/capabilities/ucan' import { base64pad } from 'multiformats/bases/base64' import { provisionProvider } from '../helpers/utils.js' @@ -14,7 +17,7 @@ import { BlobItemSizeExceededName } from '../../src/blob/lib.js' * @type {API.Tests} */ export const test = { - 'blob/add schedules allocation and returns effects for allocation and accept': + 'blob/add executes allocation and returns effects for allocation, accept, put and allocate receipt': async (assert, context) => { const { proof, spaceDid } = await registerSpace(alice, context) @@ -45,24 +48,46 @@ export const test = { }) const blobAdd = await invocation.execute(connection) if (!blobAdd.out.ok) { - console.log('out error') throw new Error('invocation failed', { cause: blobAdd }) } + // Validate receipt assert.ok(blobAdd.out.ok.claim) - assert.equal(blobAdd.fx.fork.length, 2) + assert.ok(blobAdd.out.ok.claim['await/ok'].equals(blobAdd.fx.join?.link())) assert.ok(blobAdd.fx.join) - assert.ok(blobAdd.out.ok.claim['await/ok'].equals(blobAdd.fx.join)) + + /** + * @type {import('@ucanto/interface').Invocation[]} + **/ + // @ts-expect-error read only effect + const forkInvocations = blobAdd.fx.fork + assert.equal(blobAdd.fx.fork.length, 3) + const allocatefx = forkInvocations.find(fork => fork.capabilities[0].can === BlobCapabilities.allocate.can) + const allocateUcanConcludefx = forkInvocations.find(fork => fork.capabilities[0].can === UCAN.conclude.can) + const putfx = forkInvocations.find(fork => fork.capabilities[0].can === BlobCapabilities.put.can) + if (!allocatefx || !allocateUcanConcludefx || !putfx) { + throw new Error('effects not provided') + } // Validate `http/put` invocation stored - // TODO, needs receipt to include those bytes - - // validate scheduled task ran and has receipt inlined - // const [blobAllocateInvocation] = scheduledTasks - // assert.equal(blobAllocateInvocation.can, BlobCapabilities.allocate.can) - // assert.equal(blobAllocateInvocation.nb.space, spaceDid) - // assert.equal(blobAllocateInvocation.nb.blob.size, size) - // assert.ok(equals(blobAllocateInvocation.nb.blob.content, content)) + const httpPutGetTask = await context.tasksStorage.get( + putfx.cid + ) + assert.ok(httpPutGetTask.ok) + + // validate scheduled allocate task ran an its receipt content + // @ts-expect-error object of type unknown + const messageCar = CAR.codec.decode(allocateUcanConcludefx.capabilities[0].nb.bytes) + const message = Message.view({ root: messageCar.roots[0].cid, store: messageCar.blocks }) + + const receiptKey = Array.from(message.receipts.keys())[0] + const receipt = message.receipts.get(receiptKey) + assert.ok(receipt?.out) + assert.ok(receipt?.out.ok) + // @ts-expect-error receipt out is unknown + assert.equal(receipt?.out.ok?.size, size) + // @ts-expect-error receipt out is unknown + assert.ok(receipt?.out.ok?.address) }, 'blob/add fails when a blob with size bigger than maximum size is added': async (assert, context) => { diff --git a/packages/upload-api/test/storage/tasks-storage.js b/packages/upload-api/test/storage/tasks-storage.js index 9edb62347..43468a8bb 100644 --- a/packages/upload-api/test/storage/tasks-storage.js +++ b/packages/upload-api/test/storage/tasks-storage.js @@ -14,7 +14,7 @@ import { RecordNotFound } from '../../src/errors.js' */ export class TasksStorage { constructor() { - /** @type {Map} */ + /** @type {Map} */ this.items = new Map() } @@ -23,7 +23,7 @@ export class TasksStorage { * @returns {Promise>} */ async put(record) { - this.items.set(record.cid, record) + this.items.set(record.cid.toString(), record) return Promise.resolve({ ok: {}, @@ -35,7 +35,7 @@ export class TasksStorage { * @returns {Promise>} */ async get(link) { - const record = this.items.get(link) + const record = this.items.get(link.toString()) if (!record) { return { error: new RecordNotFound('not found'), @@ -51,7 +51,7 @@ export class TasksStorage { * @returns {Promise>} */ async has(link) { - const record = this.items.get(link) + const record = this.items.get(link.toString()) if (!record) { return { ok: false, diff --git a/packages/upload-client/package.json b/packages/upload-client/package.json index 82182868d..6604a55be 100644 --- a/packages/upload-client/package.json +++ b/packages/upload-client/package.json @@ -71,9 +71,9 @@ "@ipld/dag-cbor": "^9.0.6", "@ipld/dag-ucan": "^3.4.0", "@ipld/unixfs": "^2.1.1", - "@ucanto/client": "^9.0.0", - "@ucanto/interface": "^9.0.0", - "@ucanto/transport": "^9.1.0", + "@ucanto/client": "^9.0.1", + "@ucanto/interface": "^10.0.0", + "@ucanto/transport": "^9.1.1", "@web3-storage/capabilities": "workspace:^", "@web3-storage/data-segment": "^5.1.0", "@web3-storage/filecoin-client": "workspace:^", @@ -86,8 +86,8 @@ "@types/assert": "^1.5.6", "@types/mocha": "^10.0.1", "@types/varint": "^6.0.1", - "@ucanto/principal": "^9.0.0", - "@ucanto/server": "^9.0.1", + "@ucanto/principal": "^9.0.1", + "@ucanto/server": "^10.0.0", "@web3-storage/eslint-config-w3up": "workspace:^", "assert": "^2.0.0", "blockstore-core": "^3.0.0", diff --git a/packages/w3up-client/package.json b/packages/w3up-client/package.json index 19f1bb57c..0986722de 100644 --- a/packages/w3up-client/package.json +++ b/packages/w3up-client/package.json @@ -110,11 +110,11 @@ }, "dependencies": { "@ipld/dag-ucan": "^3.4.0", - "@ucanto/client": "^9.0.0", - "@ucanto/core": "^9.0.1", - "@ucanto/interface": "^9.0.0", - "@ucanto/principal": "^9.0.0", - "@ucanto/transport": "^9.1.0", + "@ucanto/client": "^9.0.1", + "@ucanto/core": "^10.0.0", + "@ucanto/interface": "^10.0.0", + "@ucanto/principal": "^9.0.1", + "@ucanto/transport": "^9.1.1", "@web3-storage/access": "workspace:^", "@web3-storage/capabilities": "workspace:^", "@web3-storage/did-mailto": "workspace:^", @@ -126,7 +126,7 @@ "@types/assert": "^1.5.6", "@types/mocha": "^10.0.1", "@types/node": "^20.8.4", - "@ucanto/server": "^9.0.1", + "@ucanto/server": "^10.0.0", "@web3-storage/data-segment": "^5.0.0", "@web3-storage/eslint-config-w3up": "workspace:^", "@web3-storage/upload-api": "workspace:^", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 65d8ae9ff..8ae921ff8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -58,23 +58,23 @@ importers: specifier: ^1.2.1 version: 1.2.1 '@ucanto/client': - specifier: ^9.0.0 - version: 9.0.0 - '@ucanto/core': specifier: ^9.0.1 version: 9.0.1 + '@ucanto/core': + specifier: ^10.0.0 + version: 10.0.0 '@ucanto/interface': - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^10.0.0 + version: 10.0.0 '@ucanto/principal': - specifier: ^9.0.0 - version: 9.0.0 - '@ucanto/transport': - specifier: ^9.1.0 - version: 9.1.0 - '@ucanto/validator': specifier: ^9.0.1 version: 9.0.1 + '@ucanto/transport': + specifier: ^9.1.1 + version: 9.1.1 + '@ucanto/validator': + specifier: ^9.0.2 + version: 9.0.2 '@web3-storage/capabilities': specifier: workspace:^ version: link:../capabilities @@ -125,8 +125,8 @@ importers: specifier: ^8.5.4 version: 8.5.9 '@ucanto/server': - specifier: ^9.0.1 - version: 9.0.1 + specifier: ^10.0.0 + version: 10.0.0 '@web3-storage/eslint-config-w3up': specifier: workspace:^ version: link:../eslint-config-w3up @@ -152,20 +152,20 @@ importers: packages/capabilities: dependencies: '@ucanto/core': - specifier: ^9.0.1 - version: 9.0.1 + specifier: ^10.0.0 + version: 10.0.0 '@ucanto/interface': - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^10.0.0 + version: 10.0.0 '@ucanto/principal': - specifier: ^9.0.0 - version: 9.0.0 - '@ucanto/transport': - specifier: ^9.1.0 - version: 9.1.0 - '@ucanto/validator': specifier: ^9.0.1 version: 9.0.1 + '@ucanto/transport': + specifier: ^9.1.1 + version: 9.1.1 + '@ucanto/validator': + specifier: ^9.0.2 + version: 9.0.2 '@web3-storage/data-segment': specifier: ^3.2.0 version: 3.2.0 @@ -243,26 +243,26 @@ importers: specifier: ^3.4.0 version: 3.4.0 '@ucanto/client': - specifier: ^9.0.0 - version: 9.0.0 - '@ucanto/core': specifier: ^9.0.1 version: 9.0.1 + '@ucanto/core': + specifier: ^10.0.0 + version: 10.0.0 '@ucanto/interface': - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^10.0.0 + version: 10.0.0 '@ucanto/server': - specifier: ^9.0.1 - version: 9.0.1 + specifier: ^10.0.0 + version: 10.0.0 '@ucanto/transport': - specifier: ^9.1.0 - version: 9.1.0 + specifier: ^9.1.1 + version: 9.1.1 '@web3-storage/capabilities': specifier: workspace:^ version: link:../capabilities '@web3-storage/content-claims': - specifier: ^4.0.2 - version: 4.0.2 + specifier: ^4.0.4 + version: 4.0.4 '@web3-storage/data-segment': specifier: ^4.0.0 version: 4.0.0 @@ -280,8 +280,8 @@ importers: specifier: ^10.0.1 version: 10.0.4 '@ucanto/principal': - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^9.0.1 + version: 9.0.1 '@web-std/blob': specifier: ^3.0.5 version: 3.0.5 @@ -313,17 +313,17 @@ importers: specifier: ^3.4.0 version: 3.4.0 '@ucanto/client': - specifier: ^9.0.0 - version: 9.0.0 - '@ucanto/core': specifier: ^9.0.1 version: 9.0.1 + '@ucanto/core': + specifier: ^10.0.0 + version: 10.0.0 '@ucanto/interface': - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^10.0.0 + version: 10.0.0 '@ucanto/transport': - specifier: ^9.1.0 - version: 9.1.0 + specifier: ^9.1.1 + version: 9.1.1 '@web3-storage/capabilities': specifier: workspace:^ version: link:../capabilities @@ -341,11 +341,11 @@ importers: specifier: ^10.0.1 version: 10.0.4 '@ucanto/principal': - specifier: ^9.0.0 - version: 9.0.0 - '@ucanto/server': specifier: ^9.0.1 version: 9.0.1 + '@ucanto/server': + specifier: ^10.0.0 + version: 10.0.0 '@web3-storage/data-segment': specifier: ^4.0.0 version: 4.0.0 @@ -380,23 +380,23 @@ importers: packages/upload-api: dependencies: '@ucanto/client': - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^9.0.1 + version: 9.0.1 '@ucanto/interface': - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^10.0.0 + version: 10.0.0 '@ucanto/principal': - specifier: ^9.0.0 - version: 9.0.0 - '@ucanto/server': specifier: ^9.0.1 version: 9.0.1 + '@ucanto/server': + specifier: ^10.0.0 + version: 10.0.0 '@ucanto/transport': - specifier: ^9.1.0 - version: 9.1.0 + specifier: ^9.1.1 + version: 9.1.1 '@ucanto/validator': - specifier: ^9.0.1 - version: 9.0.1 + specifier: ^9.0.2 + version: 9.0.2 '@web3-storage/access': specifier: workspace:^ version: link:../access-client @@ -432,8 +432,8 @@ importers: specifier: ^17.0.3 version: 17.0.3 '@ucanto/core': - specifier: ^9.0.1 - version: 9.0.1 + specifier: ^10.0.0 + version: 10.0.0 '@web-std/blob': specifier: ^3.0.5 version: 3.0.5 @@ -471,14 +471,14 @@ importers: specifier: ^2.1.1 version: 2.1.2 '@ucanto/client': - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^9.0.1 + version: 9.0.1 '@ucanto/interface': - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^10.0.0 + version: 10.0.0 '@ucanto/transport': - specifier: ^9.1.0 - version: 9.1.0 + specifier: ^9.1.1 + version: 9.1.1 '@web3-storage/capabilities': specifier: workspace:^ version: link:../capabilities @@ -511,11 +511,11 @@ importers: specifier: ^6.0.1 version: 6.0.3 '@ucanto/principal': - specifier: ^9.0.0 - version: 9.0.0 - '@ucanto/server': specifier: ^9.0.1 version: 9.0.1 + '@ucanto/server': + specifier: ^10.0.0 + version: 10.0.0 '@web3-storage/eslint-config-w3up': specifier: workspace:^ version: link:../eslint-config-w3up @@ -553,20 +553,20 @@ importers: specifier: ^3.4.0 version: 3.4.0 '@ucanto/client': - specifier: ^9.0.0 - version: 9.0.0 - '@ucanto/core': specifier: ^9.0.1 version: 9.0.1 + '@ucanto/core': + specifier: ^10.0.0 + version: 10.0.0 '@ucanto/interface': - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^10.0.0 + version: 10.0.0 '@ucanto/principal': - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^9.0.1 + version: 9.0.1 '@ucanto/transport': - specifier: ^9.1.0 - version: 9.1.0 + specifier: ^9.1.1 + version: 9.1.1 '@web3-storage/access': specifier: workspace:^ version: link:../access-client @@ -596,8 +596,8 @@ importers: specifier: ^20.8.4 version: 20.9.2 '@ucanto/server': - specifier: ^9.0.1 - version: 9.0.1 + specifier: ^10.0.0 + version: 10.0.0 '@web3-storage/data-segment': specifier: ^5.0.0 version: 5.0.0 @@ -4278,61 +4278,61 @@ packages: eslint-visitor-keys: 3.4.3 dev: false - /@ucanto/client@9.0.0: - resolution: {integrity: sha512-Fl8ZGuWoVQygBtLISPlFb5Ej/LKUofghTTAT4kjFNc8WB9bD7AS+yvSPowwd+4uTnxfEOeKWV2lzO1+gRxQF0w==} + /@ucanto/client@9.0.1: + resolution: {integrity: sha512-cV8w3AnaZaYCdUmyFFICj8YhFckDoy2DvWgAzGDMkPz0WbUW4lw9Tjm4hEE8x5kiP47wYej/pHKWCcoELiU0qw==} dependencies: - '@ucanto/core': 9.0.1 - '@ucanto/interface': 9.0.0 + '@ucanto/core': 10.0.0 + '@ucanto/interface': 10.0.0 dev: false - /@ucanto/core@9.0.1: - resolution: {integrity: sha512-SsYvKCO3FD27roTVcg8ASxnixjn+j96sPlijpVq1uBUxq7SmuNxNPYFZqpxXKj2R4gty/Oc8XTse12ebB9Kofg==} + /@ucanto/core@10.0.0: + resolution: {integrity: sha512-tNGkuHm3RUQLQtHInpJ4qIWFp3kptf9yuxWp60A6XFxdXxjnEcNi8hW23wB/utfKu9hKr2KxBjBdkyOg1ianSw==} dependencies: '@ipld/car': 5.2.4 '@ipld/dag-cbor': 9.0.6 '@ipld/dag-ucan': 3.4.0 - '@ucanto/interface': 9.0.0 + '@ucanto/interface': 10.0.0 multiformats: 11.0.2 - /@ucanto/interface@9.0.0: - resolution: {integrity: sha512-Y9185yj+CRNpT43EAHTe9MpskCgU9DyWvmYyLMMmF40w+ujp6EYy5JVI/gVjJAsh+2Y9ruvWHOF0M+21TnLQyg==} + /@ucanto/interface@10.0.0: + resolution: {integrity: sha512-VftAU5C5eCXIjTFpit8PqS8AZ4KaeGUwSI8HfEXNOeSBGbMNqIiBrGGb0Z/6BDsQ1uQ16PgAQyYxM3cpqORCaQ==} dependencies: '@ipld/dag-ucan': 3.4.0 multiformats: 11.0.2 - /@ucanto/principal@9.0.0: - resolution: {integrity: sha512-3KpaZ0mNycDnDx2WJ9p5qnhTlc4YLFqmuClBpNJcGLk+begaeH7dUlzfxNtloSvZAeB67G03Y883CqiVhN6ZmA==} + /@ucanto/principal@9.0.1: + resolution: {integrity: sha512-8eAvaZHW1vyET4X90rkJv6pmW1IOdEYlZYwO3wDgTkC5m9VytBEywCvpzP57cavdYIbbPse5QS9nMEGvk87zhw==} dependencies: '@ipld/dag-ucan': 3.4.0 '@noble/curves': 1.2.0 '@noble/ed25519': 1.7.3 '@noble/hashes': 1.3.2 - '@ucanto/interface': 9.0.0 + '@ucanto/interface': 10.0.0 multiformats: 11.0.2 one-webcrypto: 1.0.3 - /@ucanto/server@9.0.1: - resolution: {integrity: sha512-EGhgKLjPgvM39j86WxSD7UoR0rr7jpTMclCOcpOEVC9r91sob8BReW2i7cm1zPvhSNFqS8rLjlGEgUIAhdAxmg==} + /@ucanto/server@10.0.0: + resolution: {integrity: sha512-JMDMT3tFRE0S1cdtx/Hhh7v9FizV6IS0fPrh6pcli7AzKvXVy8Xu6EQ/66Fax4AQM2tkGxNNxjj2wHM7P4CqAg==} dependencies: - '@ucanto/core': 9.0.1 - '@ucanto/interface': 9.0.0 - '@ucanto/principal': 9.0.0 - '@ucanto/validator': 9.0.1 + '@ucanto/core': 10.0.0 + '@ucanto/interface': 10.0.0 + '@ucanto/principal': 9.0.1 + '@ucanto/validator': 9.0.2 - /@ucanto/transport@9.1.0: - resolution: {integrity: sha512-3pLXEg9YIH0NN1faBh0Xaioxbb2JtPL+4AFtQtmO8LnRyqGnTahZwwaM8XFL5eMBAp0pYDoZaQ6wdMce0t1cAQ==} + /@ucanto/transport@9.1.1: + resolution: {integrity: sha512-3CR17nEemOVaTuMZa6waWgVL4sLxSPcxYvpaNeJ6NZo1rfsqdyRXOtbVV/RcI2BtUL0Cao6JM6P9+gdghfc5ng==} dependencies: - '@ucanto/core': 9.0.1 - '@ucanto/interface': 9.0.0 + '@ucanto/core': 10.0.0 + '@ucanto/interface': 10.0.0 dev: false - /@ucanto/validator@9.0.1: - resolution: {integrity: sha512-H9GMOXHNW3vCv36eQZN1/h8zOXHEljRV5yNZ/huyOaJLVAKxt7Va1Ww8VBf2Ho/ac6P7jwvQRT7WgxaXx1/3Hg==} + /@ucanto/validator@9.0.2: + resolution: {integrity: sha512-LxhRbDMIoLt9LYHq/Rz1WCEH8AtmdsBTS/it28Ij/A3W0zyoSwUpAUxBtXaKRh/gpbxdWmjxX+nVfFJYL//b4g==} dependencies: '@ipld/car': 5.2.4 '@ipld/dag-cbor': 9.0.6 - '@ucanto/core': 9.0.1 - '@ucanto/interface': 9.0.0 + '@ucanto/core': 10.0.0 + '@ucanto/interface': 10.0.0 multiformats: 11.0.2 /@ungap/structured-clone@1.2.0: @@ -4409,13 +4409,13 @@ packages: web-streams-polyfill: 3.2.1 dev: false - /@web3-storage/content-claims@4.0.2: - resolution: {integrity: sha512-k6tIc7YjQtdKWi01r7+5stp2lo13ztwpIz+7NQYEbu5fZEsKKes5B4FKRqPWkZYO17+rPaihOY6sICT498c9EA==} + /@web3-storage/content-claims@4.0.4: + resolution: {integrity: sha512-zt5psR3SkLbPPHzGzhFXYSJEssDl/ELYbNhEez+tNZLZiagv3Vl0RSt+x3CFFgR5ovO6Zn+pLJJcMjpMiHw0Yw==} dependencies: - '@ucanto/client': 9.0.0 - '@ucanto/interface': 9.0.0 - '@ucanto/server': 9.0.1 - '@ucanto/transport': 9.1.0 + '@ucanto/client': 9.0.1 + '@ucanto/interface': 10.0.0 + '@ucanto/server': 10.0.0 + '@ucanto/transport': 9.1.1 carstream: 1.1.1 multiformats: 12.1.3 dev: false