From fa1f027e35108b8b9e51fd67990024b1d3d0bde8 Mon Sep 17 00:00:00 2001 From: Irakli Gozalishvili Date: Wed, 15 Jun 2022 13:19:01 -0700 Subject: [PATCH 1/2] feat: alight link API with multiformats --- packages/authority/package.json | 2 +- packages/core/package.json | 12 ++++- packages/core/src/delegation.js | 28 ++++++----- packages/core/src/lib.js | 10 +++- packages/core/src/link.js | 41 ++++++++++++++++ packages/core/test/lib.spec.js | 8 +-- packages/core/test/link.spec.js | 32 ++++++++++++ packages/interface/package.json | 2 +- packages/interface/src/lib.ts | 3 ++ packages/server/package.json | 4 ++ packages/server/src/api.ts | 65 ------------------------- packages/server/src/lib.js | 5 ++ packages/server/test/server.spec.js | 1 - packages/transport/src/car/codec.js | 21 +++----- packages/transport/src/cbor/codec.js | 8 +-- packages/transport/src/jwt.js | 2 +- packages/transport/test/car.spec.js | 7 ++- packages/validator/src/decoder/link.js | 29 +++-------- packages/validator/src/error.js | 15 +----- packages/validator/src/lib.js | 4 +- packages/validator/test/decoder.spec.js | 32 +----------- 21 files changed, 155 insertions(+), 176 deletions(-) create mode 100644 packages/core/src/link.js create mode 100644 packages/core/test/link.spec.js create mode 100644 packages/server/src/lib.js diff --git a/packages/authority/package.json b/packages/authority/package.json index 5e45d534..b2fc8377 100644 --- a/packages/authority/package.json +++ b/packages/authority/package.json @@ -29,7 +29,7 @@ "dependencies": { "@ucanto/interface": "^0.2.0", "@noble/ed25519": "^1.6.0", - "@ipld/dag-ucan": "^1.6.0-beta", + "@ipld/dag-ucan": "^1.7.0-beta", "multiformats": "^9.6.4" }, "devDependencies": { diff --git a/packages/core/package.json b/packages/core/package.json index 28c1e141..374d9eff 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -32,7 +32,7 @@ "@ipld/car": "^4.1.0", "@ipld/dag-cbor": "^7.0.1", "multiformats": "^9.6.4", - "@ipld/dag-ucan": "^1.6.0-beta", + "@ipld/dag-ucan": "^1.7.0-beta", "@ucanto/interface": "^0.2.0" }, "devDependencies": { @@ -54,7 +54,7 @@ "typesVersions": { "*": { "*": [ - "dist/*" + "dist/src/*" ], "dist/src/lib.d.ts": [ "dist/src/lib.d.ts" @@ -69,6 +69,14 @@ "./src/lib.js": { "types": "./dist/src/lib.d.ts", "import": "./src/lib.js" + }, + "./link": { + "types": "./dist/src/link.d.ts", + "import": "./src/link.js" + }, + "./delegation": { + "types": "./dist/src/delegation.d.ts", + "import": "./src/delegation.js" } }, "c8": { diff --git a/packages/core/src/delegation.js b/packages/core/src/delegation.js index 4b0ed4e0..3a7a1f05 100644 --- a/packages/core/src/delegation.js +++ b/packages/core/src/delegation.js @@ -1,5 +1,21 @@ import * as UCAN from "@ipld/dag-ucan" import * as API from "@ucanto/interface" +import * as Link from "./link.js" + +/** + * @deprecated + * Import `isLink` from module directly + */ +export const isLink = + /** @type {(value:API.Proof) => value is API.LinkedProof} */ + (Link.isLink) + +/** + * + * @param {API.Proof} proof + * @return {proof is API.Delegation} + */ +export const isDelegation = proof => !Link.isLink(proof) /** * Represents UCAN chain view over the set of DAG UCAN nodes. You can think of @@ -123,15 +139,6 @@ const decode = ({ bytes }) => { return data } -/** - * Type predicate returns true if value is the link. - * - * @param {unknown} value - * @returns {value is UCAN.Proof} - */ -export const isLink = value => - value != null && /** @type {{asCID: unknown}} */ (value).asCID === value - /** * Creates a new signed token with a given `options.issuer`. If expiration is * not set it defaults to 30 seconds from now. Returns UCAN in primary - IPLD @@ -151,10 +158,9 @@ export const delegate = async ( const links = [] const blocks = new Map() for (const proof of proofs) { - if (isLink(proof)) { + if (!isDelegation(proof)) { links.push(proof) } else { - proof links.push(proof.cid) for (const block of proof.export()) { blocks.set(block.cid.toString(), block) diff --git a/packages/core/src/lib.js b/packages/core/src/lib.js index 0c970aa7..b4577a38 100644 --- a/packages/core/src/lib.js +++ b/packages/core/src/lib.js @@ -1,3 +1,11 @@ export * as Delegation from "./delegation.js" -export { delegate, isLink } from "./delegation.js" +export { delegate, isDelegation } from "./delegation.js" +export { + create as createLink, + createV0 as createLegacyLink, + isLink, + asLink, + parse as parseLink, + decode as decodeLink, +} from "./link.js" export * as UCAN from "@ipld/dag-ucan" diff --git a/packages/core/src/link.js b/packages/core/src/link.js new file mode 100644 index 00000000..04660b69 --- /dev/null +++ b/packages/core/src/link.js @@ -0,0 +1,41 @@ +import { CID } from "multiformats" +import * as API from "@ucanto/interface" + +/** + * @template {number} Code + * @template {number} Alg + * @param {Code} code + * @param {API.MultihashDigest} digest + * @return {API.Link & CID} + */ +export const create = (code, digest) => + /** @type {any} */ (CID.createV1(code, digest)) + +/** + * @template {number} Alg + * @param {API.MultihashDigest} digest + * @return {API.Link & CID} + */ +export const createV0 = digest => /** @type {any} */ (CID.createV0(digest)) + +/** + * Type predicate returns true if value is the link. + * + * @template {API.Link} L + * @param {unknown} value + * @returns {value is (L & CID)} + */ +export const isLink = value => + value != null && /** @type {{asCID: unknown}} */ (value).asCID === value + +export const asLink = + /** @type {>(value:L|unknown) => (L & CID)|null} */ + (CID.asCID) + +export const parse = + /** @type {

(source:string, base?:API.MultibaseDecoder

) => API.Link & CID} */ + (CID.parse) + +export const decode = + /** @type {(bytes:Uint8Array) => API.Link & CID} */ + CID.decode diff --git a/packages/core/test/lib.spec.js b/packages/core/test/lib.spec.js index 67862267..d631960f 100644 --- a/packages/core/test/lib.spec.js +++ b/packages/core/test/lib.spec.js @@ -1,5 +1,5 @@ import { assert, test } from "./test.js" -import { Delegation, UCAN } from "../src/lib.js" +import { Delegation, UCAN, isDelegation } from "../src/lib.js" import { alice, bob, mallory, service } from "./fixtures.js" test("create delegation", async () => { @@ -271,7 +271,7 @@ test("create delegation chain", async () => { "references proof via link" ) - if (Delegation.isLink(actual)) { + if (!isDelegation(actual)) { return assert.fail("expect not to be a link") } @@ -310,7 +310,7 @@ test("create delegation chain", async () => { bytes: delegation.bytes, }) - if (Delegation.isLink(actual)) { + if (!isDelegation(actual)) { return assert.fail("expect not to be a link") } @@ -400,7 +400,7 @@ test("issue chained delegation", async () => { const [delegation] = invocation.proofs || [] - if (Delegation.isLink(delegation)) { + if (!isDelegation(delegation)) { return assert.fail("must be a delegation") } diff --git a/packages/core/test/link.spec.js b/packages/core/test/link.spec.js new file mode 100644 index 00000000..d0e0a7f6 --- /dev/null +++ b/packages/core/test/link.spec.js @@ -0,0 +1,32 @@ +import { test, assert } from "./test.js" +import { CID } from "multiformats" +import * as Link from "../src/link.js" + +{ + const dataset = [ + [ + "QmdpiaQ9q7n4E224syBJz4peZpAFLArwJgSXHZWH5F6DxB", + "bafybeihgb7yguzxak7m4yu6pmxn3fdarzqbkshw6ovq7bxzbpilu4wl63a", + "QmdpiaQ9q7n4E224syBJz4peZpAFLArwJgSXHZWH5F6DxB", + ], + [ + "bafybeiepa5hmd3vg2i2unyzrhnxnthwi2aksunykhmcaykbl2jx2u77cny", + "bafybeiepa5hmd3vg2i2unyzrhnxnthwi2aksunykhmcaykbl2jx2u77cny", + "QmXxyUQDxCpSuF8QrWHxsqmeCzMnHCukaBU3hnkgnYLYHj", + ], + ] + + for (const [input, expect, expect2] of dataset) { + test(`Link.create - ${input}`, () => { + const cid = CID.parse(input) + const link = Link.create(cid.code, cid.multihash) + assert.deepEqual(link, CID.parse(expect)) + }) + + test(`Link.createV0 - ${input}`, () => { + const cid = CID.parse(input) + const link = Link.createV0(cid.multihash) + assert.deepEqual(link.toString(), CID.parse(expect2).toString()) + }) + } +} diff --git a/packages/interface/package.json b/packages/interface/package.json index eb107f5b..c65af0e5 100644 --- a/packages/interface/package.json +++ b/packages/interface/package.json @@ -23,7 +23,7 @@ "typecheck": "tsc --build" }, "dependencies": { - "@ipld/dag-ucan": "^1.6.0-beta", + "@ipld/dag-ucan": "^1.7.0-beta", "multiformats": "^9.6.4" }, "devDependencies": { diff --git a/packages/interface/src/lib.ts b/packages/interface/src/lib.ts index 5e6ea0ed..34ad9140 100644 --- a/packages/interface/src/lib.ts +++ b/packages/interface/src/lib.ts @@ -14,6 +14,7 @@ import type { Identity, Audience, MultihashHasher, + MultihashDigest, ByteView, Ability, Resource, @@ -31,6 +32,8 @@ export type { } from "multiformats/bases/interface" export type { + MultihashDigest, + MultihashHasher, Transport, Encoded, Link, diff --git a/packages/server/package.json b/packages/server/package.json index 208dbb8a..6c246efa 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -54,6 +54,10 @@ ".": { "types": "./dist/src/lib.d.ts", "import": "./src/lib.js" + }, + "./server": { + "types": "./dist/src/server.d.ts", + "import": "./src/server.js" } }, "type": "module", diff --git a/packages/server/src/api.ts b/packages/server/src/api.ts index 7d164eb6..cd066232 100644 --- a/packages/server/src/api.ts +++ b/packages/server/src/api.ts @@ -28,68 +28,3 @@ export interface ProviderContext< context: API.InvocationContext } - -// export interface Provider = never> { -// execute: R["execute"] - -// or>(other: Provider): Provider -// } - -// interface Route< -// A extends API.Ability, -// C extends API.Caveats, -// O extends unknown, -// X extends { error: true } -// > { -// readonly can: A -// readonly capability: API.CapabilityParser< -// API.Match>> -// > -// readonly execute: ( -// capability: API.ParsedCapability>, -// options: API.ValidationOptions>> -// ) => API.Await> -// } - -// export type InferParsedCapability = R extends Route< -// infer A, -// infer C -// > -// ? API.ParsedCapability> -// : never - -// export type InferInvocation = R extends Route -// ? API.Invocation> -// : never - -// export type InferReturn = R extends Route< -// API.Ability, -// API.Caveats, -// infer O, -// infer X -// > -// ? API.Await> -// : never - -// export interface Route< -// A extends API.Ability = API.Ability, -// C extends API.Caveats = API.Caveats, -// O extends unknown = unknown, -// X extends { error: true } = { error: true } -// > { -// can: A -// execute: ( -// invocation: API.Invocation>, -// options: API.ValidationOptions>> -// ) => API.Await> -// } - -// // export type Provider< -// // I extends API.Capability = API.Capability, -// // O extends unknown = unknown, -// // X extends { error: true } = API.Failure -// // > = { -// // [K in I["can"]]: ( -// // invocation: API.Invocation -// // ) => API.Await> -// // } diff --git a/packages/server/src/lib.js b/packages/server/src/lib.js new file mode 100644 index 00000000..ad92ad37 --- /dev/null +++ b/packages/server/src/lib.js @@ -0,0 +1,5 @@ +export * from "./server.js" +export * from "./handler.js" +export * from "./api.js" + +export { InvocationError } from "./server.js" diff --git a/packages/server/test/server.spec.js b/packages/server/test/server.spec.js index 2af584ac..620731e3 100644 --- a/packages/server/test/server.spec.js +++ b/packages/server/test/server.spec.js @@ -5,7 +5,6 @@ import * as CBOR from "@ucanto/transport/cbor" import { alice, bob, mallory, service as w3 } from "./fixtures.js" import * as Service from "../../client/test/service.js" import { test, assert } from "./test.js" -import { CID } from "multiformats" const storeAdd = Server.capability({ can: "store/add", diff --git a/packages/transport/src/car/codec.js b/packages/transport/src/car/codec.js index 85e9d7f9..1e60210c 100644 --- a/packages/transport/src/car/codec.js +++ b/packages/transport/src/car/codec.js @@ -1,20 +1,14 @@ import * as API from "@ucanto/interface" import * as CARWriter from "@ipld/car/buffer-writer" import { CarReader } from "@ipld/car/reader" -import { CID } from "multiformats/cid" import { base32 } from "multiformats/bases/base32" -import { UCAN } from "@ucanto/core" +import { UCAN, createLink } from "@ucanto/core" import { sha256 } from "multiformats/hashes/sha2" -export { CID } - export const code = 0x0202 /** - * @typedef {{ - * cid: API.Link - * bytes: Uint8Array - * }} Block + * @typedef {API.UCAN.Block} Block * @typedef {{ * roots: Block[] * blocks: Map @@ -80,10 +74,6 @@ class Writer { export const createWriter = () => new Writer() -/** - - */ - /** * @param {Partial} input */ @@ -120,11 +110,14 @@ export const decode = async bytes => { /** * @param {Partial} data - * @param {{hasher?: import('multiformats/hashes/interface').MultihashHasher }} [options] + * @param {{hasher?: API.MultihashHasher }} [options] */ export const write = async (data, { hasher = sha256 } = {}) => { const bytes = encode(data) const digest = await hasher.digest(bytes) - const cid = CID.createV1(code, digest) + + const cid = + /** @type {UCAN.Link & import('multiformats').CID}*/ + (createLink(code, digest)) return { bytes, cid } } diff --git a/packages/transport/src/cbor/codec.js b/packages/transport/src/cbor/codec.js index ee6bc573..86e166df 100644 --- a/packages/transport/src/cbor/codec.js +++ b/packages/transport/src/cbor/codec.js @@ -1,7 +1,8 @@ import * as CBOR from "@ipld/dag-cbor" -import { CID } from "multiformats/cid" export { code, decode } from "@ipld/dag-cbor" import { sha256 } from "multiformats/hashes/sha2" +import { asLink, createLink } from "@ucanto/core" + /** * @param {unknown} data * @param {Set} seen @@ -24,7 +25,7 @@ const prepare = (data, seen) => { return null } - const cid = CID.asCID(data) + const cid = asLink(data) if (cid) { return cid } @@ -78,6 +79,7 @@ export const encode = data => CBOR.encode(prepare(data, new Set())) export const write = async (data, { hasher = sha256 } = {}) => { const bytes = encode(data) const digest = await hasher.digest(bytes) - const cid = CID.createV1(CBOR.code, digest) + + const cid = createLink(CBOR.code, digest) return { cid, bytes } } diff --git a/packages/transport/src/jwt.js b/packages/transport/src/jwt.js index ffee0c13..942b8fe0 100644 --- a/packages/transport/src/jwt.js +++ b/packages/transport/src/jwt.js @@ -1,6 +1,6 @@ import * as API from "@ucanto/interface" import * as UTF8 from "./utf8.js" -import { Delegation, UCAN } from "@ucanto/core" +import { Delegation, isLink, UCAN } from "@ucanto/core" const HEADER_PREFIX = "x-auth-" diff --git a/packages/transport/test/car.spec.js b/packages/transport/test/car.spec.js index 6bc4eced..4a199496 100644 --- a/packages/transport/test/car.spec.js +++ b/packages/transport/test/car.spec.js @@ -1,16 +1,15 @@ import { test, assert } from "./test.js" import * as CAR from "../src/car.js" import * as CBOR from "../src/cbor.js" -import { delegate, Delegation, UCAN } from "@ucanto/core" +import { delegate, Delegation, UCAN, parseLink, asLink } from "@ucanto/core" import * as UTF8 from "../src/utf8.js" import { alice, bob, mallory, service } from "./fixtures.js" import { CarReader } from "@ipld/car/reader" import * as API from "@ucanto/interface" -import { CID } from "multiformats" import { collect } from "./util.js" test("encode / decode", async () => { - const cid = CID.parse( + const cid = parseLink( "bafyreigw75rhf7gf7eubwmrhovcrdu4mfy6pfbi4wgbzlfieq2wlfsza5i" ) const expiration = 1654298135 @@ -243,7 +242,7 @@ test("codec", async () => { const car = await CAR.codec.write({ roots: [root] }) assert.deepEqual(car.bytes, bytes) - assert.equal(CID.asCID(car.cid), car.cid) + assert.ok(asLink(car.cid) === car.cid) }) test("car writer", async () => { diff --git a/packages/validator/src/decoder/link.js b/packages/validator/src/decoder/link.js index 7f1e6802..5e30baa2 100644 --- a/packages/validator/src/decoder/link.js +++ b/packages/validator/src/decoder/link.js @@ -1,24 +1,9 @@ import * as API from "@ucanto/interface" import { Failure } from "../error.js" -import { CID, digest } from "multiformats" +import { create, createV0, isLink, asLink, parse } from "@ucanto/core/link" import { sha256 } from "multiformats/hashes/sha2" -/** - * @template {number} Code - * @template {number} Alg - * @param {Code} code - * @param {import('multiformats/hashes/interface').MultihashDigest} digest - * @return {API.Link & CID} - */ -export const create = (code, digest) => - /** @type {any} */ (CID.createV1(code, digest)) - -/** - * @template {number} Alg - * @param {import('multiformats/hashes/interface').MultihashDigest} digest - * @return {API.Link} - */ -export const createV0 = digest => /** @type {any} */ (CID.createV0(digest)) +export { create, createV0, isLink, asLink, parse } /** * @template {number} Code @@ -26,13 +11,13 @@ export const createV0 = digest => /** @type {any} */ (CID.createV0(digest)) * @template {1|0} Version * @param {unknown} input * @param {{code?:Code, algorithm?:Alg, version?:Version}} [options] - * @returns {API.Result, API.Failure>} + * @returns {API.Result, API.Failure>} */ export const decode = (input, options = {}) => { if (input == null) { return new Failure(`Expected link but got ${input} instead`) } else { - const cid = CID.asCID(input) + const cid = asLink(input) if (cid == null) { return new Failure(`Expected link to be a CID instead of ${input}`) } else { @@ -58,7 +43,7 @@ export const decode = (input, options = {}) => { ) } - /** @type {API.Link} */ + /** @type {API.Link} */ const link = /** @type {any} */ (cid) return link @@ -71,7 +56,7 @@ export const decode = (input, options = {}) => { * @template {number} Alg * @template {1|0} Version * @param {{code?:Code, algorithm?:Alg, version?:Version}} options - * @returns {API.Decoder, API.Failure>} + * @returns {API.Decoder, API.Failure>} */ export const match = options => ({ @@ -83,7 +68,7 @@ export const match = options => ({ * @template {number} Alg * @template {1|0} Version * @param {{code?:Code, algorithm?:Alg, version?:Version}} [options] - * @returns {API.Decoder, API.Failure>} + * @returns {API.Decoder, API.Failure>} */ export const optional = options => ({ decode: input => { diff --git a/packages/validator/src/error.js b/packages/validator/src/error.js index 9a63c10c..b5f86f97 100644 --- a/packages/validator/src/error.js +++ b/packages/validator/src/error.js @@ -1,7 +1,5 @@ import * as API from "@ucanto/interface" import { the } from "./util.js" -import { CID } from "multiformats" -import * as Digest from "multiformats/hashes/digest" /** * @implements {API.Failure} @@ -235,17 +233,8 @@ const format = (capability, space) => JSON.stringify( capability, (key, value) => { - if ( - value && - value.hash instanceof Uint8Array && - typeof value.code === "number" && - typeof value.version === "number" - ) { - return CID.create( - value.version, - value.code, - Digest.decode(value.hash) - ).toString() + if (value && value.asCID === value) { + return value.toString() } else { return value } diff --git a/packages/validator/src/lib.js b/packages/validator/src/lib.js index bbdee403..2157a8d0 100644 --- a/packages/validator/src/lib.js +++ b/packages/validator/src/lib.js @@ -1,5 +1,5 @@ import * as API from "@ucanto/interface" -import { isLink, UCAN } from "@ucanto/core" +import { isDelegation, UCAN } from "@ucanto/core" import { UnavailableProof, InvalidAudience, @@ -61,7 +61,7 @@ const resolveProofs = async (delegation, config) => { const proofs = [] const promises = [] for (const [index, proof] of delegation.proofs.entries()) { - if (isLink(proof)) { + if (!isDelegation(proof)) { promises.push( new Promise(async resolve => { try { diff --git a/packages/validator/test/decoder.spec.js b/packages/validator/test/decoder.spec.js index 7a3b140f..3d6b6a70 100644 --- a/packages/validator/test/decoder.spec.js +++ b/packages/validator/test/decoder.spec.js @@ -1,5 +1,4 @@ -import { capability, URI, Link } from "../src/lib.js" -import * as API from "@ucanto/interface" +import { URI, Link } from "../src/lib.js" import { test, assert } from "./test.js" import { CID } from "multiformats" @@ -123,32 +122,3 @@ import { CID } from "multiformats" }) } } - -{ - const dataset = [ - [ - "QmdpiaQ9q7n4E224syBJz4peZpAFLArwJgSXHZWH5F6DxB", - "bafybeihgb7yguzxak7m4yu6pmxn3fdarzqbkshw6ovq7bxzbpilu4wl63a", - "QmdpiaQ9q7n4E224syBJz4peZpAFLArwJgSXHZWH5F6DxB", - ], - [ - "bafybeiepa5hmd3vg2i2unyzrhnxnthwi2aksunykhmcaykbl2jx2u77cny", - "bafybeiepa5hmd3vg2i2unyzrhnxnthwi2aksunykhmcaykbl2jx2u77cny", - "QmXxyUQDxCpSuF8QrWHxsqmeCzMnHCukaBU3hnkgnYLYHj", - ], - ] - - for (const [input, expect, expect2] of dataset) { - test(`Link.create - ${input}`, () => { - const cid = CID.parse(input) - const link = Link.create(cid.code, cid.multihash) - assert.deepEqual(link, CID.parse(expect)) - }) - - test(`Link.createV0 - ${input}`, () => { - const cid = CID.parse(input) - const link = Link.createV0(cid.multihash) - assert.deepEqual(link.toString(), CID.parse(expect2).toString()) - }) - } -} From 10e4c86fba81131a649cb034bac63a34fd242283 Mon Sep 17 00:00:00 2001 From: Irakli Gozalishvili Date: Wed, 15 Jun 2022 13:44:23 -0700 Subject: [PATCH 2/2] fix: module regressions from merge --- packages/core/package.json | 2 +- pnpm-lock.yaml | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 72d1d328..38bb35e6 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -54,7 +54,7 @@ "typesVersions": { "*": { "*": [ - "dist/*" + "dist/src/*" ], "dist/src/lib.d.ts": [ "dist/src/lib.d.ts" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 54a82e04..a9c11748 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,7 +12,7 @@ importers: packages/authority: specifiers: - '@ipld/dag-ucan': ^1.6.0-beta + '@ipld/dag-ucan': ^1.7.0-beta '@noble/ed25519': ^1.6.0 '@types/chai': ^4.3.0 '@types/mocha': ^9.1.0 @@ -25,7 +25,7 @@ importers: playwright-test: ^7.3.0 typescript: ^4.7.2 dependencies: - '@ipld/dag-ucan': 1.6.0-beta + '@ipld/dag-ucan': 1.7.0-beta '@noble/ed25519': 1.6.0 '@ucanto/interface': link:../interface multiformats: 9.6.5 @@ -82,7 +82,7 @@ importers: specifiers: '@ipld/car': ^4.1.0 '@ipld/dag-cbor': ^7.0.1 - '@ipld/dag-ucan': ^1.6.0-beta + '@ipld/dag-ucan': ^1.7.0-beta '@types/chai': ^4.3.0 '@types/chai-subset': ^1.3.3 '@types/mocha': ^9.1.0 @@ -99,7 +99,7 @@ importers: dependencies: '@ipld/car': 4.1.3 '@ipld/dag-cbor': 7.0.2 - '@ipld/dag-ucan': 1.6.0-beta + '@ipld/dag-ucan': 1.7.0-beta '@ucanto/interface': link:../interface multiformats: 9.6.5 devDependencies: @@ -117,11 +117,11 @@ importers: packages/interface: specifiers: - '@ipld/dag-ucan': ^1.6.0-beta + '@ipld/dag-ucan': ^1.7.0-beta multiformats: ^9.6.4 typescript: ^4.7.2 dependencies: - '@ipld/dag-ucan': 1.6.0-beta + '@ipld/dag-ucan': 1.7.0-beta multiformats: 9.6.5 devDependencies: typescript: 4.7.3 @@ -476,8 +476,8 @@ packages: multiformats: 9.6.5 dev: false - /@ipld/dag-ucan/1.6.0-beta: - resolution: {integrity: sha512-OkT5wRpQszYhvF+DV6Q6PovRcHc+8ubCHcQttY9AiCzeRDsLvNJzVlJfVkZXmc4KSegRQovFQS7FSGZh3QDvJg==} + /@ipld/dag-ucan/1.7.0-beta: + resolution: {integrity: sha512-QLGz2IyAiNlT09pwvC2RnZJ2dyUqil5aRN2KLvGpShaTWGlCpCFGJzkn9M1kA04M96S3pJaIV2uxPBSVnjgvcg==} dependencies: '@ipld/dag-cbor': 7.0.2 '@ipld/dag-json': 8.0.10