From 8689e18e82301bda9a780f293b3499341f97d79d Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 12 Oct 2023 14:06:52 +0200 Subject: [PATCH 01/14] Add data assertions to tests, validate resolution of prev stream versions, make generic query fn --- components/ResearchObject.tsx | 4 +- components/ResearchObjectForm.tsx | 4 +- package-lock.json | 1170 ++++++++++++++--------------- pages/explore.tsx | 4 +- pages/index.tsx | 4 +- test/root.spec.ts | 201 +++-- types/index.ts | 6 +- utils/populate.tsx | 4 +- utils/queries.ts | 155 +++- 9 files changed, 870 insertions(+), 682 deletions(-) diff --git a/components/ResearchObject.tsx b/components/ResearchObject.tsx index 3bb6119..300ec17 100644 --- a/components/ResearchObject.tsx +++ b/components/ResearchObject.tsx @@ -2,7 +2,7 @@ import Link from "next/link"; import styles from "@/styles/Home.module.scss"; -import { ROProps } from "@/types"; +import { ResearchObject } from "@/types"; import { PropsWithChildren } from "react"; const ResearchObject = ({ @@ -10,7 +10,7 @@ const ResearchObject = ({ title, manifest, children, -}: PropsWithChildren) => { +}: PropsWithChildren) => { return (
{title}
diff --git a/components/ResearchObjectForm.tsx b/components/ResearchObjectForm.tsx index 597a72f..a0a8467 100644 --- a/components/ResearchObjectForm.tsx +++ b/components/ResearchObjectForm.tsx @@ -1,13 +1,13 @@ "use client"; import { useCeramicContext } from "@/context"; -import { ROProps } from "@/types"; +import { ResearchObject } from "@/types"; import styles from "@/styles/profile.module.scss"; import { useState } from "react"; import { mutationCreateResearchObject } from "@/utils/queries"; export const ResearchObjectForm = (updateParent: () => void) => { const { ceramic, composeClient } = useCeramicContext(); - const [object, setObject] = useState({ + const [object, setObject] = useState({ title: "", manifest: "" }); diff --git a/package-lock.json b/package-lock.json index e94c653..ad793d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,9 +58,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", - "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -70,13 +70,13 @@ } }, "node_modules/@ceramicnetwork/3id-did-resolver": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/3id-did-resolver/-/3id-did-resolver-2.28.0.tgz", - "integrity": "sha512-MrmpobSy+zPF1DuBvtvzhstOuoRPxTyV61at8cgVEgzqj1etrB+yCv5S9nJ7mzKLNsY59ncYMOtaKGHD5V1W2Q==", + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/3id-did-resolver/-/3id-did-resolver-2.29.0.tgz", + "integrity": "sha512-SLTQWgaLeFebURvomer2rC9IAbk1MFn6QZ7WEkWj7hJkg0ql5sy5fZ4LWXjCXYIepQ+4fUvoQoaY0fol201Ndg==", "dev": true, "dependencies": { - "@ceramicnetwork/common": "^2.35.0", - "@ceramicnetwork/stream-tile": "^2.31.0", + "@ceramicnetwork/common": "^2.36.0", + "@ceramicnetwork/stream-tile": "^2.32.0", "@ceramicnetwork/streamid": "^2.17.0", "cross-fetch": "^3.1.4", "least-recent": "^1.0.3", @@ -85,32 +85,32 @@ } }, "node_modules/@ceramicnetwork/anchor-listener": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/anchor-listener/-/anchor-listener-1.20.0.tgz", - "integrity": "sha512-ZDL1kxicvgGtEqhXzACMJFQT6oGncpz1xc47y1T4Ina5zkSve40P8FBXaLMRRJQ2ADp9lo4Rkvr6O/yisAspiw==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/anchor-listener/-/anchor-listener-1.21.0.tgz", + "integrity": "sha512-epZYQ+8Qjc6DMuVUIMlan4aNXpMqvni2KnQdsmI/FoZ2mianvCfgv2LUw2kbmBi2PNfxjUq+liogWggh8WYnNg==", "dev": true, "dependencies": { - "@ceramicnetwork/anchor-utils": "^1.18.0", + "@ceramicnetwork/anchor-utils": "^1.19.0", "@ethersproject/providers": "^5.5.1", "rxjs": "^7.5.2" } }, "node_modules/@ceramicnetwork/anchor-utils": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/anchor-utils/-/anchor-utils-1.18.0.tgz", - "integrity": "sha512-hVsNxLZxZDxvRqXy+ydxtKnCkCh9xGKb9Ua/osXovEuShdsVBNMqfYJorU/ael6uymBn9L52PpUMOCIrPiLmwg==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/anchor-utils/-/anchor-utils-1.19.0.tgz", + "integrity": "sha512-1U9hG37IGgLyai7oWBfoK9DBXudWgiuzRsLnGA/Sa28Ic7wN5Y5ycWd+EN9w2tUTVJr5KORM/aQpg1KH7knWjA==", "dev": true, "dependencies": { - "@ceramicnetwork/common": "^2.35.0", + "@ceramicnetwork/common": "^2.36.0", "@ethersproject/abi": "^5.7.0", "multiformats": "^11.0.1", "uint8arrays": "^4.0.3" } }, "node_modules/@ceramicnetwork/blockchain-utils-linking": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/blockchain-utils-linking/-/blockchain-utils-linking-2.20.0.tgz", - "integrity": "sha512-wzo6eNGfs4jFyYDZ2Ens/NYChZn3h5J9KUa1boaIl5I+7u3HNWob/updPUYC5SKafGeiErJh//7UFZfoKqbPbA==", + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/blockchain-utils-linking/-/blockchain-utils-linking-2.21.0.tgz", + "integrity": "sha512-rW99eRynpWKcok8WDv0azNZ2ojaEF3md93WxFDn9I1CbFOj+jCuZTBbEuBB4PlFcqPc+QS6qAaBASIp79sPcQA==", "dev": true, "dependencies": { "@ceramicnetwork/streamid": "^2.17.0", @@ -123,13 +123,13 @@ } }, "node_modules/@ceramicnetwork/blockchain-utils-validation": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/blockchain-utils-validation/-/blockchain-utils-validation-2.27.0.tgz", - "integrity": "sha512-popP5FtckqB7q2nY+MUuVfB6mdlO2dMS/puC2lZfxpQPPMEvvomyAnkiqfBZSkfkc7YNHNBR7Sbp3k4jtHYu6Q==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/blockchain-utils-validation/-/blockchain-utils-validation-2.28.0.tgz", + "integrity": "sha512-OLy6Y68mRDtna/8kXiDphthILjG1Ld4oCmPikIu6Zy+yfmU897r6FnNfD8NZ/K5clDWKDzgLtDr5Y6KAjiWv+Q==", "dev": true, "dependencies": { - "@ceramicnetwork/blockchain-utils-linking": "^2.20.0", - "@ceramicnetwork/common": "^2.35.0", + "@ceramicnetwork/blockchain-utils-linking": "^2.21.0", + "@ceramicnetwork/common": "^2.36.0", "@ethersproject/contracts": "^5.5.0", "@ethersproject/providers": "^5.5.1", "@ethersproject/wallet": "^5.5.0", @@ -146,21 +146,21 @@ } }, "node_modules/@ceramicnetwork/cli": { - "version": "2.40.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/cli/-/cli-2.40.0.tgz", - "integrity": "sha512-HuDJZcCU45TnxVqIYJFO6TWRt5MwkL2ZWXd6k3VetaK5nd6j8Nn6AT80o9exqtNmpcUz6ZtbV+MJuPYzizGsuQ==", + "version": "2.41.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/cli/-/cli-2.41.0.tgz", + "integrity": "sha512-CCpI8lRmq87vmJuLSMzg47fgpyLdf/nU9YeTRHLwfZeDrGHshSW1YzInPsgq1XuDtmA/TlE5Z/u52Cpk5VUmiA==", "dev": true, "dependencies": { "@awaitjs/express": "^0.9.0", - "@ceramicnetwork/3id-did-resolver": "^2.28.0", - "@ceramicnetwork/common": "^2.35.0", - "@ceramicnetwork/core": "^2.42.0", - "@ceramicnetwork/http-client": "^2.32.0", - "@ceramicnetwork/indexing": "^1.1.0", - "@ceramicnetwork/ipfs-daemon": "^2.28.0", + "@ceramicnetwork/3id-did-resolver": "^2.29.0", + "@ceramicnetwork/common": "^2.36.0", + "@ceramicnetwork/core": "^2.43.0", + "@ceramicnetwork/http-client": "^2.33.0", + "@ceramicnetwork/indexing": "^1.2.0", + "@ceramicnetwork/ipfs-daemon": "^2.29.0", "@ceramicnetwork/logger": "^2.5.0", "@ceramicnetwork/observability": "^1.4.1", - "@ceramicnetwork/stream-tile": "^2.31.0", + "@ceramicnetwork/stream-tile": "^2.32.0", "@ceramicnetwork/streamid": "^2.17.0", "@stablelib/random": "^1.0.1", "aws-sdk": "^2.1049.0", @@ -193,9 +193,9 @@ } }, "node_modules/@ceramicnetwork/codecs": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/codecs/-/codecs-1.10.0.tgz", - "integrity": "sha512-0/5/NCjKax2UFbvnlQuRzZ+T7sp+HKgGsBsW/fKK06E/ui0MBVMSK1eitn/ozvMFUo+nCjKPQF3ixXVpdsQl4A==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/codecs/-/codecs-1.11.0.tgz", + "integrity": "sha512-UEK8qveRk5f+ubAamdJ+fInmIGVKKMTXD8D4SUYa8zHXkKk4zGnYw+XwThAdh7+aClCWGN83SECR9TnaMZhIGw==", "dependencies": { "@ceramicnetwork/streamid": "^2.17.0", "cartonne": "^2.1.1", @@ -206,11 +206,11 @@ } }, "node_modules/@ceramicnetwork/common": { - "version": "2.35.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/common/-/common-2.35.0.tgz", - "integrity": "sha512-1TsdVYAjTIVTBz+6dlrEJACFGqMzYZeOvwLNbpk9E5vMh6fnrgRm8q9JPeGhDyGwdGlY7l4e1yqzWAoZGnJARQ==", + "version": "2.36.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/common/-/common-2.36.0.tgz", + "integrity": "sha512-cZu3953wsTd/xKUDosC1l2tXpWKLkYA+PkkueRCXIrLRvNQrMCde8yx6xnnNcFihU3hpzux/iqkHHEihATeN1Q==", "dependencies": { - "@ceramicnetwork/codecs": "^1.10.0", + "@ceramicnetwork/codecs": "^1.11.0", "@ceramicnetwork/streamid": "^2.17.0", "@didtools/cacao": "^2.1.0", "@didtools/pkh-ethereum": "^0.1.0", @@ -245,29 +245,29 @@ } }, "node_modules/@ceramicnetwork/core": { - "version": "2.42.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/core/-/core-2.42.0.tgz", - "integrity": "sha512-bHI0eZVanuBTeTZxpD9aNsNtYrB8ehYWA6SaUNK+eZ3x2uHLwpLwLbqE566RBuYi6UA7T6e4f4fyEsP79Se/zQ==", - "dev": true, - "dependencies": { - "@ceramicnetwork/anchor-listener": "^1.20.0", - "@ceramicnetwork/anchor-utils": "^1.18.0", - "@ceramicnetwork/codecs": "^1.10.0", - "@ceramicnetwork/common": "^2.35.0", - "@ceramicnetwork/indexing": "^1.1.0", - "@ceramicnetwork/ipfs-topology": "^2.29.0", - "@ceramicnetwork/job-queue": "^1.2.0", + "version": "2.43.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/core/-/core-2.43.0.tgz", + "integrity": "sha512-DKUNKf65R8clcmwjr1aEDZPzzvf0i1pmoRSRephMmGgfAuEUubC/ejWHppKpKJfv58JsQsF6E/7qAkaiWc/fMw==", + "dev": true, + "dependencies": { + "@ceramicnetwork/anchor-listener": "^1.21.0", + "@ceramicnetwork/anchor-utils": "^1.19.0", + "@ceramicnetwork/codecs": "^1.11.0", + "@ceramicnetwork/common": "^2.36.0", + "@ceramicnetwork/indexing": "^1.2.0", + "@ceramicnetwork/ipfs-topology": "^2.30.0", + "@ceramicnetwork/job-queue": "^1.3.0", "@ceramicnetwork/observability": "^1.4.1", - "@ceramicnetwork/pinning-aggregation": "^2.27.0", - "@ceramicnetwork/pinning-ipfs-backend": "^2.27.0", - "@ceramicnetwork/stream-caip10-link": "^2.30.0", - "@ceramicnetwork/stream-caip10-link-handler": "^2.28.0", - "@ceramicnetwork/stream-model": "^1.17.0", - "@ceramicnetwork/stream-model-handler": "^1.17.0", - "@ceramicnetwork/stream-model-instance": "^1.17.0", - "@ceramicnetwork/stream-model-instance-handler": "^1.17.0", - "@ceramicnetwork/stream-tile": "^2.31.0", - "@ceramicnetwork/stream-tile-handler": "^2.30.0", + "@ceramicnetwork/pinning-aggregation": "^2.28.0", + "@ceramicnetwork/pinning-ipfs-backend": "^2.28.0", + "@ceramicnetwork/stream-caip10-link": "^2.31.0", + "@ceramicnetwork/stream-caip10-link-handler": "^2.29.0", + "@ceramicnetwork/stream-model": "^1.18.0", + "@ceramicnetwork/stream-model-handler": "^1.18.0", + "@ceramicnetwork/stream-model-instance": "^1.18.0", + "@ceramicnetwork/stream-model-instance-handler": "^1.18.0", + "@ceramicnetwork/stream-tile": "^2.32.0", + "@ceramicnetwork/stream-tile-handler": "^2.31.0", "@ceramicnetwork/streamid": "^2.17.0", "@ceramicnetwork/wasm-bloom-filter": "^0.1.0", "@datastructures-js/priority-queue": "^6.1.0", @@ -307,15 +307,15 @@ "dev": true }, "node_modules/@ceramicnetwork/http-client": { - "version": "2.32.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/http-client/-/http-client-2.32.0.tgz", - "integrity": "sha512-2OUp33qXg2D243N+NwuwvPJfw/F2PFj2y73XT753yjwXIdyaHAJXwsoLJ8OyK1ixFYl1Q5Yb3kshO1sXurQi4g==", - "dependencies": { - "@ceramicnetwork/common": "^2.35.0", - "@ceramicnetwork/stream-caip10-link": "^2.30.0", - "@ceramicnetwork/stream-model": "^1.17.0", - "@ceramicnetwork/stream-model-instance": "^1.17.0", - "@ceramicnetwork/stream-tile": "^2.31.0", + "version": "2.33.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/http-client/-/http-client-2.33.0.tgz", + "integrity": "sha512-rZ2NlA1NoSSyA44ZK5W7KhvdNX6i3hFPu1z4NyRA5Zvl4jwEogGboaWZF2hWDDXxfkrRZX7+J/JvzxBKp360QQ==", + "dependencies": { + "@ceramicnetwork/common": "^2.36.0", + "@ceramicnetwork/stream-caip10-link": "^2.31.0", + "@ceramicnetwork/stream-model": "^1.18.0", + "@ceramicnetwork/stream-model-instance": "^1.18.0", + "@ceramicnetwork/stream-tile": "^2.32.0", "@ceramicnetwork/streamid": "^2.17.0", "@scarf/scarf": "^1.1.1", "query-string": "^7.1.0", @@ -323,16 +323,16 @@ } }, "node_modules/@ceramicnetwork/indexing": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/indexing/-/indexing-1.1.0.tgz", - "integrity": "sha512-mlR+UEexxMVl15bkpYeXKchbYIfVcT8LSBTK670U+UxwJu+JX5PSqmw4RTUWStHOiIER6KqIcZmQaWJWcyTd4Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/indexing/-/indexing-1.2.0.tgz", + "integrity": "sha512-++UIl4bMqM+5LK0hEk6kOVUil2YlkCF+wEbnxUT0gZrW2Wd0SnWjT2mQFAhjlgd+h78hGmwBVQMCk7QbsfMHvw==", "dev": true, "dependencies": { - "@ceramicnetwork/anchor-listener": "^1.20.0", - "@ceramicnetwork/anchor-utils": "^1.18.0", - "@ceramicnetwork/common": "^2.35.0", - "@ceramicnetwork/job-queue": "^1.2.0", - "@ceramicnetwork/stream-model": "^1.17.0", + "@ceramicnetwork/anchor-listener": "^1.21.0", + "@ceramicnetwork/anchor-utils": "^1.19.0", + "@ceramicnetwork/common": "^2.36.0", + "@ceramicnetwork/job-queue": "^1.3.0", + "@ceramicnetwork/stream-model": "^1.18.0", "@ceramicnetwork/streamid": "^2.17.0", "@ethersproject/providers": "^5.5.1", "knex": "^2.5.1", @@ -351,9 +351,9 @@ "dev": true }, "node_modules/@ceramicnetwork/indexing/node_modules/multiformats": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.1.tgz", - "integrity": "sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.2.tgz", + "integrity": "sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==", "dev": true, "engines": { "node": ">=16.0.0", @@ -377,13 +377,13 @@ } }, "node_modules/@ceramicnetwork/ipfs-daemon": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/ipfs-daemon/-/ipfs-daemon-2.28.0.tgz", - "integrity": "sha512-GpVRxUOJ5dfHPrsngg5D0GtK8XbKdiYWYMqJ122TDDm5XtNpYmps3TUVfXSukuyCZeb8CvwVflvHM+r2HgApLQ==", + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/ipfs-daemon/-/ipfs-daemon-2.29.0.tgz", + "integrity": "sha512-BpQBGNeS5orWBwv+w5Yn853b6b+PUENmuP4GfxEp2yARtSd8q5eusQ9jyGNetoYIXqNxrV0yrDCGnv4jl1Kt8Q==", "dev": true, "dependencies": { - "@ceramicnetwork/common": "^2.35.0", - "@ceramicnetwork/ipfs-topology": "^2.29.0", + "@ceramicnetwork/common": "^2.36.0", + "@ceramicnetwork/ipfs-topology": "^2.30.0", "express": "^4.17.2", "get-port": "^6.0.0", "go-ipfs": "^0.18.1", @@ -398,22 +398,22 @@ } }, "node_modules/@ceramicnetwork/ipfs-topology": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/ipfs-topology/-/ipfs-topology-2.29.0.tgz", - "integrity": "sha512-+AuRMWaAPLoXmKu6doDw+1tlAHB15diOdnZaQmQC8B4wfyX3Qrb42YufxdToWSO1BXPQL0AlY7R3K/4tdh4jYQ==", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/ipfs-topology/-/ipfs-topology-2.30.0.tgz", + "integrity": "sha512-gPc5gImS5SmHTEJHtz8rsAlhw0QKLKjrAw6uZ6sRuTFBsJimX6x4D1yLmwd/Qw/6J19b7U8nsyGX7gQMotWrJw==", "dev": true, "dependencies": { - "@ceramicnetwork/common": "^2.35.0", + "@ceramicnetwork/common": "^2.36.0", "cross-fetch": "^3.1.4" } }, "node_modules/@ceramicnetwork/job-queue": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/job-queue/-/job-queue-1.2.0.tgz", - "integrity": "sha512-KFUPbDcTkORmVQOXdG0UDeIEQP1iV8j4TSbNdnFzhVoelimmJA1Y6ZCC0/CESQWD22V8ecYgXZ4qxLn5ltC2SQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/job-queue/-/job-queue-1.3.0.tgz", + "integrity": "sha512-XMWRd8awOP1CVxTWisQ+zA3GJ4xJ87XOWHux8J7KUZSV1Rqfz4UqdNxI0RLIQuSelJEsXTLHCvYV6uKaJhyq8A==", "dev": true, "dependencies": { - "@ceramicnetwork/common": "^2.35.0", + "@ceramicnetwork/common": "^2.36.0", "pg": "^8.11.3", "pg-boss": "^8.2.0", "rxjs": "^7.8.1" @@ -454,9 +454,9 @@ } }, "node_modules/@ceramicnetwork/pinning-aggregation": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/pinning-aggregation/-/pinning-aggregation-2.27.0.tgz", - "integrity": "sha512-uAsa47Z14uK8QCYFhOfMXVZWFTl7LcQ5F+v0wQmg/kfdb6K2uST+S8ahy+9zgnXlayYbFQ2E7pE9c3l/9tjw7w==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/pinning-aggregation/-/pinning-aggregation-2.28.0.tgz", + "integrity": "sha512-X7jM8HbShCUWPjuVKx+zpI8+NhhdIpNkXZlY0xij/5/6tvKRfV6cFDYDF4mHE62PLWSH1CInKpG+NZNLSryQXA==", "dev": true, "dependencies": { "@stablelib/sha256": "^1.0.1", @@ -464,9 +464,9 @@ } }, "node_modules/@ceramicnetwork/pinning-ipfs-backend": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/pinning-ipfs-backend/-/pinning-ipfs-backend-2.27.0.tgz", - "integrity": "sha512-2ncDHjh2KaaVXgBO5zn42M6vLgT7/ZvJQBhGqk31VPV2rZflgEcbjTz3PD8G/b5776dz3WnBxbmiWVNMirL/+A==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/pinning-ipfs-backend/-/pinning-ipfs-backend-2.28.0.tgz", + "integrity": "sha512-SDr66Ny1zPKihc8iap9e+GDPxmxU3/GHLrQ1+TnUSZqyghHrK6jt8U3BnGfaz+vXxyyuHd6yXGjVHKbMr6QVTQ==", "dev": true, "dependencies": { "@stablelib/sha256": "^1.0.1", @@ -475,11 +475,11 @@ } }, "node_modules/@ceramicnetwork/stream-caip10-link": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-caip10-link/-/stream-caip10-link-2.30.0.tgz", - "integrity": "sha512-co6M+gKp2ShsLa1pxJScLBY+ICenN0asuA3ZFlLqquLcYAdXTYuLs37NaLSxkuTr41sI0HLSwzJVN8OBwjhvQg==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-caip10-link/-/stream-caip10-link-2.31.0.tgz", + "integrity": "sha512-yuj+tRd7REniekUxiNqFiyOsk+wf1Y8O08mM3hyDnVeOTax8C3ReO8ODYpRRIPESlRTb5SZn2sZp9THCAmJ2Ow==", "dependencies": { - "@ceramicnetwork/common": "^2.35.0", + "@ceramicnetwork/common": "^2.36.0", "@ceramicnetwork/streamid": "^2.17.0", "caip": "~1.1.0", "did-resolver": "^4.0.1", @@ -487,35 +487,35 @@ } }, "node_modules/@ceramicnetwork/stream-caip10-link-handler": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-caip10-link-handler/-/stream-caip10-link-handler-2.28.0.tgz", - "integrity": "sha512-29AKa8ztAdN6DUz3g9vb6bYsXqFgcN1Uykc21QNneAec7nsCzy9M+gLV319JIxChR903bBR/60RU8tcoLpwadw==", + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-caip10-link-handler/-/stream-caip10-link-handler-2.29.0.tgz", + "integrity": "sha512-WTtYwOrL4dphArjzsAu8gEeFxFz2M0wSamivqbE7YeCR+aX4UJauIdvUmKcS++AyfHkOYX/bf53TLtl3Trw9hw==", "dev": true, "dependencies": { - "@ceramicnetwork/blockchain-utils-validation": "^2.27.0", - "@ceramicnetwork/common": "^2.35.0", - "@ceramicnetwork/stream-caip10-link": "^2.30.0", - "@ceramicnetwork/stream-handler-common": "^1.25.0" + "@ceramicnetwork/blockchain-utils-validation": "^2.28.0", + "@ceramicnetwork/common": "^2.36.0", + "@ceramicnetwork/stream-caip10-link": "^2.31.0", + "@ceramicnetwork/stream-handler-common": "^1.26.0" } }, "node_modules/@ceramicnetwork/stream-handler-common": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-handler-common/-/stream-handler-common-1.25.0.tgz", - "integrity": "sha512-fLkc5VoeRSmQQlJCS69fRG0T7c5xFujp8nFyy19ay+BnYwJ5Ke0wyvnWG2A4HYUKM1MAkZ9BnLWntOWauM0bDw==", + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-handler-common/-/stream-handler-common-1.26.0.tgz", + "integrity": "sha512-CzrXEcPn44gJSRBlg/yfMe4mQbl+ECO9KaNLTwzmSD6OXl02F6lVvdy7IXxo7S4pydgr6XEitZ5rwml+I7L/FA==", "dev": true, "dependencies": { - "@ceramicnetwork/common": "^2.35.0", + "@ceramicnetwork/common": "^2.36.0", "@ceramicnetwork/streamid": "^2.17.0", "lodash.clonedeep": "^4.5.0" } }, "node_modules/@ceramicnetwork/stream-model": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model/-/stream-model-1.17.0.tgz", - "integrity": "sha512-d6HhiPAQfyw0a1wN32kWR/YdGdLd6DdOfhn3pDU8vHKH731l5uHIIOMwwp+XEcbFTSGQdPbxAbcdTM4AFJG3MA==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model/-/stream-model-1.18.0.tgz", + "integrity": "sha512-FmQ/gMeSLm0ow6c0sQwVtPoVCvMDKUXvjLAItoh4qbIVTo6TlEpSOalq7d3QdjttzZ3xxi3fiOBlmmQmpkku6g==", "dependencies": { - "@ceramicnetwork/codecs": "^1.10.0", - "@ceramicnetwork/common": "^2.35.0", + "@ceramicnetwork/codecs": "^1.11.0", + "@ceramicnetwork/common": "^2.36.0", "@ceramicnetwork/streamid": "^2.17.0", "@ipld/dag-cbor": "^7.0.0", "@stablelib/random": "^1.0.1", @@ -529,14 +529,14 @@ } }, "node_modules/@ceramicnetwork/stream-model-handler": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-handler/-/stream-model-handler-1.17.0.tgz", - "integrity": "sha512-nHsFCsvnsYXfHeJTi01ofvsrUjA7tvH4XNmzmKURHVdq71IYmGBALp+jLgKiV+XpPnDIE07J5j1JZQjklwhVBg==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-handler/-/stream-model-handler-1.18.0.tgz", + "integrity": "sha512-qIaySgRoV63H8O1A8HX8JLi9/K5y7deCLcRO7pkpZwe16cmjbB02jGlq8eRlrpi/kmRns+xecEMxgOMdGaL6FA==", "dev": true, "dependencies": { - "@ceramicnetwork/common": "^2.35.0", - "@ceramicnetwork/stream-handler-common": "^1.25.0", - "@ceramicnetwork/stream-model": "^1.17.0", + "@ceramicnetwork/common": "^2.36.0", + "@ceramicnetwork/stream-handler-common": "^1.26.0", + "@ceramicnetwork/stream-model": "^1.18.0", "@ceramicnetwork/streamid": "^2.17.0", "ajv": "^8.8.2", "ajv-formats": "^2.1.1", @@ -546,11 +546,11 @@ } }, "node_modules/@ceramicnetwork/stream-model-instance": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-instance/-/stream-model-instance-1.17.0.tgz", - "integrity": "sha512-cVHlz7ScpLYgz11Wzw5x99dh4BbThoKsJi9rFS2RF+p0BNuyp2QgSnpCjziEQqCz6djJngy6g2BCwf4b+MML5g==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-instance/-/stream-model-instance-1.18.0.tgz", + "integrity": "sha512-DikAfS1oZQbnco3wROdr+Wmln1qwh3MWOJt00dSaDhfUNw3dmcUdriZnjsUDs6B0pC+6d213ZfP+DZqJWHwRqw==", "dependencies": { - "@ceramicnetwork/common": "^2.35.0", + "@ceramicnetwork/common": "^2.36.0", "@ceramicnetwork/streamid": "^2.17.0", "@ipld/dag-cbor": "^7.0.0", "@stablelib/random": "^1.0.1", @@ -560,14 +560,14 @@ } }, "node_modules/@ceramicnetwork/stream-model-instance-handler": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-instance-handler/-/stream-model-instance-handler-1.17.0.tgz", - "integrity": "sha512-cdsqbHMh4E1ldtUiL83BkGvoXiBBcGpCyVbd8BPR0SqZDjyoxQrtfLApS5aNDD818/EkDhtxgbm+oue+RYxzLA==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-instance-handler/-/stream-model-instance-handler-1.18.0.tgz", + "integrity": "sha512-UuagfXvzT6pFSjZmQYEQEaWCteG3L27Rq/c4vSxl3tCdtxEupR3rsNTGs4RH6aPupxzJ3tdvtgaP86eZMzlMmA==", "dev": true, "dependencies": { - "@ceramicnetwork/common": "^2.35.0", - "@ceramicnetwork/stream-handler-common": "^1.25.0", - "@ceramicnetwork/stream-model-instance": "^1.17.0", + "@ceramicnetwork/common": "^2.36.0", + "@ceramicnetwork/stream-handler-common": "^1.26.0", + "@ceramicnetwork/stream-model-instance": "^1.18.0", "@ceramicnetwork/streamid": "^2.17.0", "ajv": "^8.8.2", "ajv-formats": "^2.1.1", @@ -578,11 +578,11 @@ } }, "node_modules/@ceramicnetwork/stream-tile": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-tile/-/stream-tile-2.31.0.tgz", - "integrity": "sha512-Vky2XyT38jqpQYVT4jzVmjmRWDU/T5Gx2wdCNuQsIYw6DkrMLSa0nTOMnqHTFl+hf+wcfNIpNvUI7RmooKoY7g==", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-tile/-/stream-tile-2.32.0.tgz", + "integrity": "sha512-3CpqkDOY00PGNWWGIBvT/+iv6TUyb8EUv4Nrn0r8lHj6UoM+lCZb78LLLpjw6FQnm5kL6/TkzfJJT6jKqB7LjQ==", "dependencies": { - "@ceramicnetwork/common": "^2.35.0", + "@ceramicnetwork/common": "^2.36.0", "@ceramicnetwork/streamid": "^2.17.0", "@ipld/dag-cbor": "^7.0.0", "@stablelib/random": "^1.0.1", @@ -593,14 +593,14 @@ } }, "node_modules/@ceramicnetwork/stream-tile-handler": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-tile-handler/-/stream-tile-handler-2.30.0.tgz", - "integrity": "sha512-7/0vZLXGhP5vGzre/yzQ1DdWZDAQxO8XP8fD1kfKu48nQSQCfNJjlFDKTgAEvrXb0WeCHJiOF72FudqPdEexRg==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-tile-handler/-/stream-tile-handler-2.31.0.tgz", + "integrity": "sha512-EDfxo0P85z+fH9y2Vzjm+/fiv6LFObo2slMxoRiaUPEqSiztkLY+ntkvervW16XfJNkI/wDgmKqOn+YPvatkeQ==", "dev": true, "dependencies": { - "@ceramicnetwork/common": "^2.35.0", - "@ceramicnetwork/stream-handler-common": "^1.25.0", - "@ceramicnetwork/stream-tile": "^2.31.0", + "@ceramicnetwork/common": "^2.36.0", + "@ceramicnetwork/stream-handler-common": "^1.26.0", + "@ceramicnetwork/stream-tile": "^2.32.0", "@ceramicnetwork/streamid": "^2.17.0", "ajv": "^8.8.2", "ajv-formats": "^2.1.1", @@ -656,23 +656,23 @@ } }, "node_modules/@composedb/cli": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@composedb/cli/-/cli-0.5.1.tgz", - "integrity": "sha512-U7/70LR7kOSOVNFvmVS32tI5zDYoxrwwlKBzRdGYWZtCpfVPrX7MDXp9F20DFFaMVJEPRuBnwmKsRLwCBHCT7w==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@composedb/cli/-/cli-0.5.2.tgz", + "integrity": "sha512-SFCzNsYtDegB8JeHrKMbX78ZbziJU+UMBvQN6N2uaXRZqy1h1FOwY6RnNndwTI4pYHLyHTrmLMbyOehEMa7Bgg==", "dev": true, "dependencies": { - "@ceramicnetwork/3id-did-resolver": "^2.27.0", - "@ceramicnetwork/cli": "^2.39.0", - "@ceramicnetwork/http-client": "^2.31.0", - "@ceramicnetwork/stream-model": "^1.16.0", - "@ceramicnetwork/stream-model-instance": "^1.16.0", + "@ceramicnetwork/3id-did-resolver": "^2.28.0", + "@ceramicnetwork/cli": "^2.40.0", + "@ceramicnetwork/http-client": "^2.32.0", + "@ceramicnetwork/stream-model": "^1.17.0", + "@ceramicnetwork/stream-model-instance": "^1.17.0", "@ceramicnetwork/streamid": "^2.17.0", - "@composedb/client": "^0.5.1", - "@composedb/devtools": "^0.5.0", - "@composedb/devtools-node": "^0.5.1", - "@composedb/runtime": "^0.5.1", + "@composedb/client": "^0.5.2", + "@composedb/devtools": "^0.5.1", + "@composedb/devtools-node": "^0.5.2", + "@composedb/runtime": "^0.5.2", "@oclif/core": "^2.15.0", - "@oclif/plugin-help": "^5.2.19", + "@oclif/plugin-help": "^5.2.20", "@oclif/plugin-version": "^1.3.10", "cli-table3": "^0.6.3", "did-resolver": "^4.1.0", @@ -695,21 +695,21 @@ } }, "node_modules/@composedb/client": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@composedb/client/-/client-0.5.1.tgz", - "integrity": "sha512-EY9166O1JPiubEZrE+ZYWnRhJvqFuFJGTZjM3gHtNjLyYwgFbDwjvreMHZXYQX4FSrNqGm2yveJRWyBdQ9gnYg==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@composedb/client/-/client-0.5.2.tgz", + "integrity": "sha512-SoDWCGvok3Yt5+9o/agyvU4oCxk/pAzhe6bnpbT8dQDnm4E9b0+YU/6VSb2CD8/28RaYEqDDXPM6ctZuhvvY+w==", "dependencies": { - "@ceramicnetwork/http-client": "^2.31.0", - "@ceramicnetwork/stream-model": "^1.16.0", - "@ceramicnetwork/stream-model-instance": "^1.16.0", + "@ceramicnetwork/http-client": "^2.32.0", + "@ceramicnetwork/stream-model": "^1.17.0", + "@ceramicnetwork/stream-model-instance": "^1.17.0", "@composedb/constants": "^0.5.0", "@composedb/graphql-scalars": "^0.5.0", - "@composedb/runtime": "^0.5.1", + "@composedb/runtime": "^0.5.2", "@graphql-tools/batch-execute": "^9.0.2", - "@graphql-tools/stitch": "^9.0.1", + "@graphql-tools/stitch": "^9.0.3", "@graphql-tools/utils": "^10.0.6", "dataloader": "^2.2.2", - "graphql": "^16.8.0", + "graphql": "^16.8.1", "graphql-relay": "^0.10.0" }, "engines": { @@ -725,24 +725,24 @@ } }, "node_modules/@composedb/devtools": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@composedb/devtools/-/devtools-0.5.0.tgz", - "integrity": "sha512-tZZOK82B2WZQRW1LQKmKI0Mmpl9z8G1nMmWLcR0vDRiVumL6o0jHkD9lBC3mQ990j4CRUgYsH2HIOrzNnYNyOg==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@composedb/devtools/-/devtools-0.5.1.tgz", + "integrity": "sha512-4hvoPcZHsm8UOgpFN2iaUbAYl9NWxzs6DsxrPLIM3ipJByynFMnSxs2LkUjCZDCY8JmmszNvzxbtvolW6rs/Zw==", "dev": true, "dependencies": { - "@ceramicnetwork/common": "^2.33.0", - "@ceramicnetwork/stream-model": "^1.15.0", + "@ceramicnetwork/common": "^2.35.0", + "@ceramicnetwork/stream-model": "^1.17.0", "@ceramicnetwork/streamid": "^2.17.0", "@composedb/graphql-scalars": "^0.5.0", "@didtools/cacao": "^2.0.0", "@graphql-tools/schema": "^10.0.0", - "@graphql-tools/utils": "^10.0.5", + "@graphql-tools/utils": "^10.0.6", "change-case": "^4.1.2", "json-ptr": "^3.1.1", "lodash-es": "^4.17.21", - "multiformats": "^12.1.0", + "multiformats": "^12.1.1", "object-hash": "^3.0.0", - "type-fest": "^4.3.1", + "type-fest": "^4.3.2", "uint8arrays": "^4.0.6" }, "engines": { @@ -750,28 +750,28 @@ } }, "node_modules/@composedb/devtools-node": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@composedb/devtools-node/-/devtools-node-0.5.1.tgz", - "integrity": "sha512-OAoMY4vXHrOkRvs2KHgkKOO/PzT9EpDni35Dt1sh+k6Jh9ZAalnV7rDAJ9DMRhV//zuKXhgWwsNrEwEv1xVSHA==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@composedb/devtools-node/-/devtools-node-0.5.2.tgz", + "integrity": "sha512-DNt1+s6q+9/S1ZgpDPloAeOqU8IV6A1y4NYUepykWd1HEXy+fOHOc24g+bn9QhSoVxOBMiBJC/bLnd9VgeJ7xQ==", "dev": true, "dependencies": { - "@ceramicnetwork/http-client": "^2.31.0", - "@composedb/client": "^0.5.1", - "@composedb/runtime": "^0.5.1", - "@composedb/server": "^0.5.1", + "@ceramicnetwork/http-client": "^2.32.0", + "@composedb/client": "^0.5.2", + "@composedb/runtime": "^0.5.2", + "@composedb/server": "^0.5.2", "fs-extra": "^11.1.1" }, "engines": { "node": ">=16" }, "peerDependencies": { - "@composedb/devtools": "^0.5.0" + "@composedb/devtools": "^0.5.1" } }, "node_modules/@composedb/devtools/node_modules/multiformats": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.1.tgz", - "integrity": "sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.2.tgz", + "integrity": "sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==", "dev": true, "engines": { "node": ">=16.0.0", @@ -779,42 +779,42 @@ } }, "node_modules/@composedb/graphql-scalars": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@composedb/graphql-scalars/-/graphql-scalars-0.5.0.tgz", - "integrity": "sha512-RNk2wRsZ1VrvLxWOaUbTlmjlKZhi7YqvWLfp83oy08HHz7HmfxcrlEvxT5f8thiOfnF4Hw4gXo8euwI3nTkhvg==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@composedb/graphql-scalars/-/graphql-scalars-0.5.1.tgz", + "integrity": "sha512-/TRjRqUMOqomt662ghgQRp0CzcPZVHHwnyEY8gVXwJiCH6xddxSFY0Jdfam8H8J4JUxP8o7rcm3COs5k0GpY5Q==", "dependencies": { "@ceramicnetwork/streamid": "^2.17.0", - "@composedb/types": "^0.5.0", + "@composedb/types": "^0.5.1", "caip": "^1.1.0", - "graphql": "^16.8.0", + "graphql": "^16.8.1", "graphql-scalars": "^1.22.2", - "multiformats": "^12.1.0" + "multiformats": "^12.1.1" }, "engines": { "node": ">=16" } }, "node_modules/@composedb/graphql-scalars/node_modules/multiformats": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.1.tgz", - "integrity": "sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.2.tgz", + "integrity": "sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" } }, "node_modules/@composedb/runtime": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@composedb/runtime/-/runtime-0.5.1.tgz", - "integrity": "sha512-Vhv34i4lkHhtwUIRKXTozahKCDoiSn9BMpiu3c6pZxtoUAkQn9twikfX8QIXI5Ssmap6nDMlSxWxm4ASnxID0Q==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@composedb/runtime/-/runtime-0.5.2.tgz", + "integrity": "sha512-88eiQpLcwWIn9aTEDIcu8Y/a3kBxzoh/cROBmnB8ztIdWnbRco2Q9FWcOZYdG733jm71mMPjU/AYTAGCbF3yZQ==", "dependencies": { - "@ceramicnetwork/http-client": "^2.31.0", - "@ceramicnetwork/stream-model": "^1.16.0", - "@ceramicnetwork/stream-model-instance": "^1.16.0", + "@ceramicnetwork/http-client": "^2.32.0", + "@ceramicnetwork/stream-model": "^1.17.0", + "@ceramicnetwork/stream-model-instance": "^1.17.0", "@ceramicnetwork/streamid": "^2.17.0", "@composedb/graphql-scalars": "^0.5.0", "dataloader": "^2.2.2", - "graphql": "^16.8.0", + "graphql": "^16.8.1", "graphql-relay": "^0.10.0" }, "engines": { @@ -822,17 +822,17 @@ } }, "node_modules/@composedb/server": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@composedb/server/-/server-0.5.1.tgz", - "integrity": "sha512-sg5Emyneeciu4vZRCLUY/1A3utkjh2UPJMsXxEsAvyzLP+Jx4PHI/ovUXeyC0UP/z7RvusYL092BbIwl0x0Bfg==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@composedb/server/-/server-0.5.2.tgz", + "integrity": "sha512-bUgCZkbNBAAggro8a00aTzJLSg6WlAzRjcs2fzFGHgu2l1QN3YCBZnljpvehsQPId6/v7cRcx/8l9BfOoFu9UA==", "dev": true, "dependencies": { - "@ceramicnetwork/http-client": "^2.31.0", + "@ceramicnetwork/http-client": "^2.32.0", "@composedb/constants": "^0.5.0", - "@composedb/runtime": "^0.5.1", + "@composedb/runtime": "^0.5.2", "get-port": "^7.0.0", - "graphql": "^16.8.0", - "graphql-yoga": "^4.0.4" + "graphql": "^16.8.1", + "graphql-yoga": "^4.0.5" }, "engines": { "node": ">=16" @@ -851,13 +851,13 @@ } }, "node_modules/@composedb/types": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@composedb/types/-/types-0.5.0.tgz", - "integrity": "sha512-rL4s2qlges21mWB1ujE6XhKEFDayP4vJU5NwS6NMt04Ig9xQ17reYBwR0fAJ61kE1qLuzhaQUe4bE6doPnSIjQ==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@composedb/types/-/types-0.5.1.tgz", + "integrity": "sha512-xgFwR+10Un+iQVj8Kl9n1w1hqMp8r1yIDSacZ/o5x4Yz0kWuHLPvLKUYdK0gP5dMiJPAhWAxvXVSbfkY+OmnmQ==", "dependencies": { - "@ceramicnetwork/common": "^2.33.0", - "@ceramicnetwork/stream-model": "^1.15.0", - "@ceramicnetwork/stream-model-instance": "^1.15.0", + "@ceramicnetwork/common": "^2.35.0", + "@ceramicnetwork/stream-model": "^1.17.0", + "@ceramicnetwork/stream-model-instance": "^1.17.0", "dids": "^4.0.4", "json-schema-typed": "^8.0.1" }, @@ -920,9 +920,9 @@ } }, "node_modules/@didtools/cacao/node_modules/@ipld/dag-cbor": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.5.tgz", - "integrity": "sha512-TyqgtxEojc98rvxg4NGM+73JzQeM4+tK2VQes/in2mdyhO+1wbGuBijh1tvi9BErQ/dEblxs9v4vEQSX8mFCIw==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.6.tgz", + "integrity": "sha512-3kNab5xMppgWw6DVYx2BzmFq8t7I56AGWfp5kaU1fIPkwHVpBRglJJTYsGtbVluCi/s/q97HZM3bC+aDW4sxbQ==", "dependencies": { "cborg": "^4.0.0", "multiformats": "^12.0.1" @@ -933,9 +933,9 @@ } }, "node_modules/@didtools/cacao/node_modules/@ipld/dag-cbor/node_modules/multiformats": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.1.tgz", - "integrity": "sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.2.tgz", + "integrity": "sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -962,6 +962,20 @@ "node": ">=14.14" } }, + "node_modules/@didtools/key-webcrypto": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@didtools/key-webcrypto/-/key-webcrypto-0.1.1.tgz", + "integrity": "sha512-xoyOOv8WHJOa28fjNtubyBubMrCna1oLFR0Ony91XgbkeUH4Vs4Ju/Fi2g8RUaX4oPCulNMzcjRTW+Naa4fvfg==", + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "rpc-utils": "^0.6.2", + "uint8arrays": "^4.0.3", + "varint": "^6.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/@didtools/pkh-ethereum": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.4.1.tgz", @@ -1037,9 +1051,9 @@ } }, "node_modules/@envelop/core": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@envelop/core/-/core-4.0.1.tgz", - "integrity": "sha512-uBLI7ql3hZopz7vMi9UDAb9HWzKw4STKiqg4QT+lb+tu5ZNaeuJ4fom2rrmgITz38B85QZOhZrGyVrlJXxfDzw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@envelop/core/-/core-4.0.3.tgz", + "integrity": "sha512-O0Vz8E0TObT6ijAob8jYFVJavcGywKThM3UAsxUIBBVPYZTMiqI9lo2gmAnbMUnrDcAYkUTZEW9FDYPRdF5l6g==", "dev": true, "dependencies": { "@envelop/types": "4.0.1", @@ -1429,9 +1443,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", - "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -2140,6 +2154,15 @@ "@ethersproject/strings": "^5.7.0" } }, + "node_modules/@fastify/busboy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", + "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==", + "dev": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -2393,9 +2416,9 @@ } }, "node_modules/@graphql-tools/utils": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.6.tgz", - "integrity": "sha512-hZMjl/BbX10iagovakgf3IiqArx8TPsotq5pwBld37uIX1JiZoSbgbCIFol7u55bh32o6cfDEiiJgfAD5fbeyQ==", + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.7.tgz", + "integrity": "sha512-KOdeMj6Hd/MENDaqPbws3YJl3wVy0DeYnL7PyUms5Skyf7uzI9INynDwPMhLXfSb0/ph6BXTwMd5zBtWbF8tBQ==", "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "dset": "^3.1.2", @@ -2475,9 +2498,9 @@ } }, "node_modules/@hapi/accept": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-6.0.2.tgz", - "integrity": "sha512-xaTLf29Zeph/B32hekmgxLFsEPuX1xQYyZu0gJ4ZCHKU6nXmBRXfBymtWNEK0souOJcX2XHWUaZU6JzccuuMpg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-6.0.3.tgz", + "integrity": "sha512-p72f9k56EuF0n3MwlBNThyVE5PXX40g+aQh+C/xbKrfzahM2Oispv3AXmOIU51t3j77zay1qrX7IIziZXspMlw==", "dev": true, "dependencies": { "@hapi/boom": "^10.0.1", @@ -2838,9 +2861,9 @@ "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" }, "node_modules/@ipld/dag-json": { - "version": "10.1.4", - "resolved": "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-10.1.4.tgz", - "integrity": "sha512-Vgm739qPQ7P8cstna60oYx19tzJzep+Uy7yWi80dzIOygibfVaaRZ07M6qbHP+C9BJl81GNFaXy2Plr0y7poBA==", + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-10.1.5.tgz", + "integrity": "sha512-AIIDRGPgIqVG2K1O42dPDzNOfP0YWV/suGApzpF+YWZLwkwdGVsxjmXcJ/+rwOhRGdjpuq/xQBKPCu1Ao6rdOQ==", "dev": true, "dependencies": { "cborg": "^4.0.0", @@ -2861,9 +2884,9 @@ } }, "node_modules/@ipld/dag-json/node_modules/multiformats": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.1.tgz", - "integrity": "sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.2.tgz", + "integrity": "sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==", "dev": true, "engines": { "node": ">=16.0.0", @@ -2871,9 +2894,9 @@ } }, "node_modules/@ipld/dag-pb": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.0.5.tgz", - "integrity": "sha512-El2Jhmv6bWuakhvnw1dl6xOhqLeVhlY8DIAJ06NtZRAoDcOzeGzvOtPzMCszVgCT0EQz+LOctyfgQ5Oszba19A==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.0.6.tgz", + "integrity": "sha512-wOij3jfDKZsb9yjhQeHp+TQy0pu1vmUkGv324xciFFZ7xGbDfAGTQW03lSA5aJ/7HBBNYgjEE0nvHmNW1Qjfag==", "dev": true, "dependencies": { "multiformats": "^12.0.1" @@ -2884,9 +2907,9 @@ } }, "node_modules/@ipld/dag-pb/node_modules/multiformats": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.1.tgz", - "integrity": "sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.2.tgz", + "integrity": "sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==", "dev": true, "engines": { "node": ">=16.0.0", @@ -2952,9 +2975,9 @@ } }, "node_modules/@libp2p/interface": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.2.tgz", - "integrity": "sha512-Q5t27434Mvn+R6AUJlRH+q/jSXarDpP+KXVkyGY7S1fKPI2berqoFPqT61bRRBYsCH2OPZiKBB53VUzxL9uEvg==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.3.tgz", + "integrity": "sha512-C1O7Xqd2TGVWrIOEDx6kGJSk4YOysWGmYG5Oh3chnsCY0wjUSsLDpl9+wKrdiM/lJbAlHlV65ZOvSkIQ9cWPBQ==", "dev": true, "dependencies": { "@multiformats/multiaddr": "^12.1.5", @@ -2963,6 +2986,7 @@ "it-stream-types": "^2.0.1", "multiformats": "^12.0.1", "p-defer": "^4.0.0", + "race-signal": "^1.0.0", "uint8arraylist": "^2.4.3" } }, @@ -3003,9 +3027,9 @@ } }, "node_modules/@libp2p/interface-connection/node_modules/multiformats": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.1.tgz", - "integrity": "sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.2.tgz", + "integrity": "sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==", "dev": true, "engines": { "node": ">=16.0.0", @@ -3083,9 +3107,9 @@ } }, "node_modules/@libp2p/interface-peer-info/node_modules/multiformats": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.1.tgz", - "integrity": "sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.2.tgz", + "integrity": "sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==", "dev": true, "engines": { "node": ">=16.0.0", @@ -3139,9 +3163,9 @@ } }, "node_modules/@libp2p/interface/node_modules/multiformats": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.1.tgz", - "integrity": "sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.2.tgz", + "integrity": "sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==", "dev": true, "engines": { "node": ">=16.0.0", @@ -3195,9 +3219,9 @@ } }, "node_modules/@libp2p/logger/node_modules/@multiformats/multiaddr/node_modules/multiformats": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.1.tgz", - "integrity": "sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.2.tgz", + "integrity": "sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==", "dev": true, "engines": { "node": ">=16.0.0", @@ -3291,9 +3315,9 @@ } }, "node_modules/@multiformats/multiaddr-to-uri/node_modules/multiformats": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.1.tgz", - "integrity": "sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.2.tgz", + "integrity": "sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==", "dev": true, "engines": { "node": ">=16.0.0", @@ -3301,9 +3325,9 @@ } }, "node_modules/@next/env": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.2.tgz", - "integrity": "sha512-dUseBIQVax+XtdJPzhwww4GetTjlkRSsXeQnisIJWBaHsnxYcN2RGzsPHi58D6qnkATjnhuAtQTJmR1hKYQQPg==" + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.4.tgz", + "integrity": "sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==" }, "node_modules/@next/eslint-plugin-next": { "version": "13.4.19", @@ -3315,9 +3339,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.2.tgz", - "integrity": "sha512-7eAyunAWq6yFwdSQliWMmGhObPpHTesiKxMw4DWVxhm5yLotBj8FCR4PXGkpRP2tf8QhaWuVba+/fyAYggqfQg==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.4.tgz", + "integrity": "sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==", "cpu": [ "arm64" ], @@ -3330,9 +3354,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.2.tgz", - "integrity": "sha512-WxXYWE7zF1ch8rrNh5xbIWzhMVas6Vbw+9BCSyZvu7gZC5EEiyZNJsafsC89qlaSA7BnmsDXVWQmc+s1feSYbQ==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.4.tgz", + "integrity": "sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==", "cpu": [ "x64" ], @@ -3345,9 +3369,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.2.tgz", - "integrity": "sha512-URSwhRYrbj/4MSBjLlefPTK3/tvg95TTm6mRaiZWBB6Za3hpHKi8vSdnCMw5D2aP6k0sQQIEG6Pzcfwm+C5vrg==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.4.tgz", + "integrity": "sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==", "cpu": [ "arm64" ], @@ -3360,9 +3384,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.2.tgz", - "integrity": "sha512-HefiwAdIygFyNmyVsQeiJp+j8vPKpIRYDlmTlF9/tLdcd3qEL/UEBswa1M7cvO8nHcr27ZTKXz5m7dkd56/Esg==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.4.tgz", + "integrity": "sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==", "cpu": [ "arm64" ], @@ -3375,9 +3399,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.2.tgz", - "integrity": "sha512-htGVVroW0tdHgMYwKWkxWvVoG2RlAdDXRO1RQxYDvOBQsaV0nZsgKkw0EJJJ3urTYnwKskn/MXm305cOgRxD2w==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.4.tgz", + "integrity": "sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==", "cpu": [ "x64" ], @@ -3390,9 +3414,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.2.tgz", - "integrity": "sha512-UBD333GxbHVGi7VDJPPDD1bKnx30gn2clifNJbla7vo5nmBV+x5adyARg05RiT9amIpda6yzAEEUu+s774ldkw==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.4.tgz", + "integrity": "sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==", "cpu": [ "x64" ], @@ -3405,9 +3429,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.2.tgz", - "integrity": "sha512-Em9ApaSFIQnWXRT3K6iFnr9uBXymixLc65Xw4eNt7glgH0eiXpg+QhjmgI2BFyc7k4ZIjglfukt9saNpEyolWA==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.4.tgz", + "integrity": "sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==", "cpu": [ "arm64" ], @@ -3420,9 +3444,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.2.tgz", - "integrity": "sha512-TBACBvvNYU+87X0yklSuAseqdpua8m/P79P0SG1fWUvWDDA14jASIg7kr86AuY5qix47nZLEJ5WWS0L20jAUNw==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.4.tgz", + "integrity": "sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==", "cpu": [ "ia32" ], @@ -3435,9 +3459,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.2.tgz", - "integrity": "sha512-LfTHt+hTL8w7F9hnB3H4nRasCzLD/fP+h4/GUVBTxrkMJOnh/7OZ0XbYDKO/uuWwryJS9kZjhxcruBiYwc5UDw==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.4.tgz", + "integrity": "sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==", "cpu": [ "x64" ], @@ -3603,9 +3627,9 @@ } }, "node_modules/@oclif/plugin-help": { - "version": "5.2.19", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-5.2.19.tgz", - "integrity": "sha512-gf6/dFtzMJ8RA4ovlBCBGJsZsd4jPXhYWJho+Gh6KmA+Ev9LupoExbE0qT+a2uHJyHEvIg4uX/MBW3qdERD/8g==", + "version": "5.2.20", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-5.2.20.tgz", + "integrity": "sha512-u+GXX/KAGL9S10LxAwNUaWdzbEBARJ92ogmM7g3gDVud2HioCmvWQCDohNRVZ9GYV9oKwZ/M8xwd6a1d95rEKQ==", "dev": true, "dependencies": { "@oclif/core": "^2.15.0" @@ -4083,9 +4107,9 @@ "integrity": "sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==" }, "node_modules/@rushstack/eslint-patch": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.4.0.tgz", - "integrity": "sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz", + "integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==", "dev": true }, "node_modules/@samverschueren/stream-to-observable": { @@ -4397,9 +4421,9 @@ } }, "node_modules/@stacks/common/node_modules/@types/node": { - "version": "18.17.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.19.tgz", - "integrity": "sha512-+pMhShR3Or5GR0/sp4Da7FnhVmTalWm81M6MkEldbwjETSaPalw138Z4KdpQaistvqQxLB7Cy4xwYdxpbSOs9Q==" + "version": "18.18.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.4.tgz", + "integrity": "sha512-t3rNFBgJRugIhackit2mVcLfF6IRc0JE4oeizPQL8Zrm8n2WY/0wOdpOPhdtG0V9Q2TlW/axbF1MJ6z+Yj/kKQ==" }, "node_modules/@stacks/encryption": { "version": "6.9.0", @@ -4429,9 +4453,9 @@ ] }, "node_modules/@stacks/encryption/node_modules/@types/node": { - "version": "18.17.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.19.tgz", - "integrity": "sha512-+pMhShR3Or5GR0/sp4Da7FnhVmTalWm81M6MkEldbwjETSaPalw138Z4KdpQaistvqQxLB7Cy4xwYdxpbSOs9Q==" + "version": "18.18.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.4.tgz", + "integrity": "sha512-t3rNFBgJRugIhackit2mVcLfF6IRc0JE4oeizPQL8Zrm8n2WY/0wOdpOPhdtG0V9Q2TlW/axbF1MJ6z+Yj/kKQ==" }, "node_modules/@stacks/network": { "version": "6.8.1", @@ -4626,9 +4650,9 @@ } }, "node_modules/@types/chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-/k+vesl92vMvMygmQrFe9Aimxi6oQXFUX9mA5HanTrKUSAMoLauSi6PNFOdRw0oeqilaW600GNx2vSaT2f8aIQ==", "dev": true }, "node_modules/@types/chai-subset": { @@ -4641,9 +4665,9 @@ } }, "node_modules/@types/cli-progress": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.2.tgz", - "integrity": "sha512-Yt/8rEJalfa9ve2SbfQnwFHrc9QF52JIZYHW3FDaTMpkCvnns26ueKiPHDxyJ0CS//IqjMINTx7R5Xa7k7uFHQ==", + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.3.tgz", + "integrity": "sha512-/+C9xAdVtc+g5yHHkGBThgAA8rYpi5B+2ve3wLtybYj0JHEBs57ivR4x/zGfSsplRnV+psE91Nfin1soNKqz5Q==", "dev": true, "dependencies": { "@types/node": "*" @@ -4660,9 +4684,9 @@ } }, "node_modules/@types/express": { - "version": "4.17.18", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz", - "integrity": "sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==", + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.19.tgz", + "integrity": "sha512-UtOfBtzN9OvpZPPbnnYunfjM7XCI4jyk1NvnFhTVz5krYAnW4o5DCoIekvms+8ApqhB4+9wSge1kBijdfTSmfg==", "dev": true, "peer": true, "dependencies": { @@ -4714,9 +4738,9 @@ } }, "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.3.tgz", + "integrity": "sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==", "dev": true, "peer": true }, @@ -4727,15 +4751,18 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.6.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.5.tgz", - "integrity": "sha512-2qGq5LAOTh9izcc0+F+dToFigBWiK1phKPt7rNhOqJSr35y8rlIBjDwGtFSgAI6MGIhjwOVNSQZVdJsZJ2uR1w==", - "dev": true + "version": "20.8.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.4.tgz", + "integrity": "sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==", + "dev": true, + "dependencies": { + "undici-types": "~5.25.1" + } }, "node_modules/@types/prop-types": { - "version": "15.7.7", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.7.tgz", - "integrity": "sha512-FbtmBWCcSa2J4zL781Zf1p5YUBXQomPEcep9QZCfRfQgTxz3pJWiDFLebohZ9fFntX5ibzOkSsrJ0TEew8cAog==", + "version": "15.7.8", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.8.tgz", + "integrity": "sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==", "dev": true }, "node_modules/@types/qs": { @@ -4746,9 +4773,9 @@ "peer": true }, "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.5.tgz", + "integrity": "sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==", "dev": true, "peer": true }, @@ -4764,24 +4791,24 @@ } }, "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.1.tgz", + "integrity": "sha512-TiGnitEDxj2X0j+98Eqk5lv/Cij8oHd32bU4D/Yw6AOq7vvTk0gSD2GPj0G/HkvhMoVsdlhYF4yqqlyPBTM6Sg==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "version": "0.16.4", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.4.tgz", + "integrity": "sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==", "dev": true }, "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.2.tgz", + "integrity": "sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==", "dev": true, "peer": true, "dependencies": { @@ -4790,9 +4817,9 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", - "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.3.tgz", + "integrity": "sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==", "dev": true, "peer": true, "dependencies": { @@ -4802,15 +4829,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.2.tgz", - "integrity": "sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==", + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.5.tgz", + "integrity": "sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.7.2", - "@typescript-eslint/types": "6.7.2", - "@typescript-eslint/typescript-estree": "6.7.2", - "@typescript-eslint/visitor-keys": "6.7.2", + "@typescript-eslint/scope-manager": "6.7.5", + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/typescript-estree": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", "debug": "^4.3.4" }, "engines": { @@ -4830,13 +4857,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.2.tgz", - "integrity": "sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==", + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz", + "integrity": "sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.2", - "@typescript-eslint/visitor-keys": "6.7.2" + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -4847,9 +4874,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.2.tgz", - "integrity": "sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==", + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.5.tgz", + "integrity": "sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -4860,13 +4887,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.2.tgz", - "integrity": "sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==", + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz", + "integrity": "sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.2", - "@typescript-eslint/visitor-keys": "6.7.2", + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -4887,12 +4914,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz", - "integrity": "sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==", + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz", + "integrity": "sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.2", + "@typescript-eslint/types": "6.7.5", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -4904,26 +4931,26 @@ } }, "node_modules/@vitest/expect": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.5.tgz", - "integrity": "sha512-/3RBIV9XEH+nRpRMqDJBufKIOQaYUH2X6bt0rKSCW0MfKhXFLYsR5ivHifeajRSTsln0FwJbitxLKHSQz/Xwkw==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz", + "integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==", "dev": true, "dependencies": { - "@vitest/spy": "0.34.5", - "@vitest/utils": "0.34.5", - "chai": "^4.3.7" + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "chai": "^4.3.10" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.5.tgz", - "integrity": "sha512-RDEE3ViVvl7jFSCbnBRyYuu23XxmvRTSZWW6W4M7eC5dOsK75d5LIf6uhE5Fqf809DQ1+9ICZZNxhIolWHU4og==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz", + "integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==", "dev": true, "dependencies": { - "@vitest/utils": "0.34.5", + "@vitest/utils": "0.34.6", "p-limit": "^4.0.0", "pathe": "^1.1.1" }, @@ -4959,9 +4986,9 @@ } }, "node_modules/@vitest/snapshot": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.5.tgz", - "integrity": "sha512-+ikwSbhu6z2yOdtKmk/aeoDZ9QPm2g/ZO5rXT58RR9Vmu/kB2MamyDSx77dctqdZfP3Diqv4mbc/yw2kPT8rmA==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz", + "integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==", "dev": true, "dependencies": { "magic-string": "^0.30.1", @@ -4973,9 +5000,9 @@ } }, "node_modules/@vitest/spy": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.5.tgz", - "integrity": "sha512-epsicsfhvBjRjCMOC/3k00mP/TBGQy8/P0DxOFiWyLt55gnZ99dqCfCiAsKO17BWVjn4eZRIjKvcqNmSz8gvmg==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz", + "integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==", "dev": true, "dependencies": { "tinyspy": "^2.1.1" @@ -4985,9 +5012,9 @@ } }, "node_modules/@vitest/utils": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.5.tgz", - "integrity": "sha512-ur6CmmYQoeHMwmGb0v+qwkwN3yopZuZyf4xt1DBBSGBed8Hf9Gmbm/5dEWqgpLPdRx6Av6jcWXrjcKfkTzg/pw==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", + "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", "dev": true, "dependencies": { "diff-sequences": "^29.4.3", @@ -5633,9 +5660,9 @@ "dev": true }, "node_modules/aws-sdk": { - "version": "2.1463.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1463.0.tgz", - "integrity": "sha512-NGJLovoHEX6uN3u9iHx0KWg9AigZfSz9YekLQssqGk5vHAEzW7TlCgRsqTu6vhGI5FzlYWapSvUpJUriQUCwMA==", + "version": "2.1472.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1472.0.tgz", + "integrity": "sha512-U7kAHRbvTy753IXKV8Oom/AqlqnsbXG+Kw5gRbKi6VcsZ3hR/EpNMzdRXTWO5U415bnLWGo8WAqIz67PIaaKsw==", "dev": true, "dependencies": { "buffer": "4.9.2", @@ -6376,9 +6403,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001539", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001539.tgz", - "integrity": "sha512-hfS5tE8bnNiNvEOEkm8HElUHroYwlqMMENEzELymy77+tJ6m+gA2krtHl5hxJaj71OlpC2cHZbdSMX1/YEqEkA==", + "version": "1.0.30001547", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001547.tgz", + "integrity": "sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==", "funding": [ { "type": "opencollective", @@ -6441,9 +6468,9 @@ } }, "node_modules/cartonne/node_modules/@ipld/dag-cbor": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.5.tgz", - "integrity": "sha512-TyqgtxEojc98rvxg4NGM+73JzQeM4+tK2VQes/in2mdyhO+1wbGuBijh1tvi9BErQ/dEblxs9v4vEQSX8mFCIw==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.6.tgz", + "integrity": "sha512-3kNab5xMppgWw6DVYx2BzmFq8t7I56AGWfp5kaU1fIPkwHVpBRglJJTYsGtbVluCi/s/q97HZM3bC+aDW4sxbQ==", "dependencies": { "cborg": "^4.0.0", "multiformats": "^12.0.1" @@ -6454,9 +6481,9 @@ } }, "node_modules/cartonne/node_modules/@ipld/dag-cbor/node_modules/multiformats": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.1.tgz", - "integrity": "sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.2.tgz", + "integrity": "sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -6488,18 +6515,18 @@ } }, "node_modules/chai": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", - "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.0.8" }, "engines": { "node": ">=4" @@ -6566,10 +6593,13 @@ } }, "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { "node": "*" } @@ -7022,9 +7052,9 @@ } }, "node_modules/dag-jose/node_modules/@ipld/dag-cbor": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.5.tgz", - "integrity": "sha512-TyqgtxEojc98rvxg4NGM+73JzQeM4+tK2VQes/in2mdyhO+1wbGuBijh1tvi9BErQ/dEblxs9v4vEQSX8mFCIw==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.6.tgz", + "integrity": "sha512-3kNab5xMppgWw6DVYx2BzmFq8t7I56AGWfp5kaU1fIPkwHVpBRglJJTYsGtbVluCi/s/q97HZM3bC+aDW4sxbQ==", "dependencies": { "cborg": "^4.0.0", "multiformats": "^12.0.1" @@ -7035,9 +7065,9 @@ } }, "node_modules/dag-jose/node_modules/@ipld/dag-cbor/node_modules/multiformats": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.1.tgz", - "integrity": "sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.2.tgz", + "integrity": "sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -7276,9 +7306,9 @@ } }, "node_modules/did-jwt": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-7.3.0.tgz", - "integrity": "sha512-5uZieA76TsrmWRE67qh1JyaRW6GopZxVTlKNy+rBROH7ca214VkLnFfgoxc9sguZkONvDTbUPfiP1xF0+Lckbw==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-7.4.2.tgz", + "integrity": "sha512-bdMVrUKD8wBiYihrxm5Bso33vYuw5DHxxN6y+IFSpHQpYQF16nuW6T8+FCrVkS5gDYE6jFZmnkqjJwycT4K7AA==", "dependencies": { "@noble/ciphers": "^0.3.0", "@noble/curves": "^1.0.0", @@ -7291,9 +7321,9 @@ } }, "node_modules/did-jwt/node_modules/multiformats": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.1.tgz", - "integrity": "sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.2.tgz", + "integrity": "sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -7305,13 +7335,15 @@ "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==" }, "node_modules/did-session": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/did-session/-/did-session-2.0.1.tgz", - "integrity": "sha512-z4Q2cqD1Wtrmd8Hc54Ia1vwAGHg7la1ine+CIle46cn9ccRKMtKpj+CiP/WpI8qJfImVJDTzePoCJ+fh8OI7Qg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/did-session/-/did-session-2.1.1.tgz", + "integrity": "sha512-HWpMKE3iAFp3JcAauQIh4fT7KkwVEiGk6N3wHJQ/ThqDyBlq65acXQzIYiwVMd8lAJmXo9EsAQRTmyuzbIUtLw==", "dependencies": { - "@ceramicnetwork/stream-tile": "^2.16.0", + "@ceramicnetwork/stream-tile": "^2.21.0", + "@didtools/key-webcrypto": "^0.1.1", "@stablelib/random": "^1.0.1", - "dids": "^4.0.1", + "caip": "^1.1.0", + "dids": "^4.0.3", "key-did-provider-ed25519": "^3.0.1", "key-did-resolver": "^3.0.0", "uint8arrays": "^4.0.3" @@ -8295,12 +8327,12 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -8904,12 +8936,12 @@ } }, "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", "dev": true, "dependencies": { - "flatted": "^3.2.7", + "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, @@ -9075,9 +9107,9 @@ } }, "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, "engines": { "node": "*" @@ -9212,9 +9244,9 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, "node_modules/globals": { - "version": "13.22.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", - "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -9367,9 +9399,9 @@ } }, "node_modules/graphql-scalars": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/graphql-scalars/-/graphql-scalars-1.22.2.tgz", - "integrity": "sha512-my9FB4GtghqXqi/lWSVAOPiTzTnnEzdOXCsAC2bb5V7EFNQjVjwy3cSSbUvgYOtDuDibd+ZsCDhz+4eykYOlhQ==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/graphql-scalars/-/graphql-scalars-1.22.4.tgz", + "integrity": "sha512-ILnv7jq5VKHLUyoaTFX7lgYrjCd6vTee9i8/B+D4zJKJT5TguOl0KkpPEbXHjmeor8AZYrVsrYUHdqRBMX1pjA==", "dependencies": { "tslib": "^2.5.0" }, @@ -9381,9 +9413,9 @@ } }, "node_modules/graphql-yoga": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/graphql-yoga/-/graphql-yoga-4.0.4.tgz", - "integrity": "sha512-MvCLhFecYNIKuxAZisPjpIL9lxRYbpgPSNKENDO/8CV3oiFlsLJHZb5dp2sVAeLafXHeZ9TgkijLthUBc1+Jag==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/graphql-yoga/-/graphql-yoga-4.0.5.tgz", + "integrity": "sha512-vIbJU9QX5RP4PoxbMCHcfOlt/3EsC/0uLdAOlKaiUvlwJDTFCaIHo2X10vL4i/27Gw8g90ECIwm2YbmeLDwcqg==", "dev": true, "dependencies": { "@envelop/core": "^4.0.0", @@ -9423,13 +9455,10 @@ } }, "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, "engines": { "node": ">= 0.4.0" } @@ -9878,9 +9907,9 @@ } }, "node_modules/ipfs-core-types/node_modules/@types/node": { - "version": "18.17.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.19.tgz", - "integrity": "sha512-+pMhShR3Or5GR0/sp4Da7FnhVmTalWm81M6MkEldbwjETSaPalw138Z4KdpQaistvqQxLB7Cy4xwYdxpbSOs9Q==", + "version": "18.18.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.4.tgz", + "integrity": "sha512-t3rNFBgJRugIhackit2mVcLfF6IRc0JE4oeizPQL8Zrm8n2WY/0wOdpOPhdtG0V9Q2TlW/axbF1MJ6z+Yj/kKQ==", "dev": true }, "node_modules/ipfs-core-types/node_modules/interface-datastore": { @@ -9984,9 +10013,9 @@ } }, "node_modules/ipfs-http-client/node_modules/@ipld/dag-cbor": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.5.tgz", - "integrity": "sha512-TyqgtxEojc98rvxg4NGM+73JzQeM4+tK2VQes/in2mdyhO+1wbGuBijh1tvi9BErQ/dEblxs9v4vEQSX8mFCIw==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.6.tgz", + "integrity": "sha512-3kNab5xMppgWw6DVYx2BzmFq8t7I56AGWfp5kaU1fIPkwHVpBRglJJTYsGtbVluCi/s/q97HZM3bC+aDW4sxbQ==", "dev": true, "dependencies": { "cborg": "^4.0.0", @@ -9998,9 +10027,9 @@ } }, "node_modules/ipfs-http-client/node_modules/@ipld/dag-cbor/node_modules/multiformats": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.1.tgz", - "integrity": "sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.2.tgz", + "integrity": "sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==", "dev": true, "engines": { "node": ">=16.0.0", @@ -10805,9 +10834,9 @@ } }, "node_modules/joi": { - "version": "17.10.2", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.10.2.tgz", - "integrity": "sha512-hcVhjBxRNW/is3nNLdGLIjkgXetkeGc2wyhydhz8KumG23Aerk4HPjU5zaPAMRqXQFc0xNqXTC7+zQjxr0GlKA==", + "version": "17.11.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", + "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", "dev": true, "dependencies": { "@hapi/hoek": "^9.0.0", @@ -10989,9 +11018,9 @@ } }, "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "dependencies": { "json-buffer": "3.0.1" @@ -11098,9 +11127,9 @@ } }, "node_modules/kubo-rpc-client/node_modules/@ipld/dag-cbor": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.5.tgz", - "integrity": "sha512-TyqgtxEojc98rvxg4NGM+73JzQeM4+tK2VQes/in2mdyhO+1wbGuBijh1tvi9BErQ/dEblxs9v4vEQSX8mFCIw==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.6.tgz", + "integrity": "sha512-3kNab5xMppgWw6DVYx2BzmFq8t7I56AGWfp5kaU1fIPkwHVpBRglJJTYsGtbVluCi/s/q97HZM3bC+aDW4sxbQ==", "dev": true, "dependencies": { "cborg": "^4.0.0", @@ -11112,9 +11141,9 @@ } }, "node_modules/kubo-rpc-client/node_modules/@ipld/dag-cbor/node_modules/multiformats": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.1.tgz", - "integrity": "sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.2.tgz", + "integrity": "sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==", "dev": true, "engines": { "node": ">=16.0.0", @@ -12198,9 +12227,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", - "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", + "version": "0.30.4", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.4.tgz", + "integrity": "sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -12806,18 +12835,17 @@ } }, "node_modules/next": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/next/-/next-13.5.2.tgz", - "integrity": "sha512-vog4UhUaMYAzeqfiAAmgB/QWLW7p01/sg+2vn6bqc/CxHFYizMzLv6gjxKzl31EVFkfl/F+GbxlKizlkTE9RdA==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/next/-/next-13.5.4.tgz", + "integrity": "sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==", "dependencies": { - "@next/env": "13.5.2", + "@next/env": "13.5.4", "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", + "postcss": "8.4.31", "styled-jsx": "5.1.1", - "watchpack": "2.4.0", - "zod": "3.21.4" + "watchpack": "2.4.0" }, "bin": { "next": "dist/bin/next" @@ -12826,15 +12854,15 @@ "node": ">=16.14.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "13.5.2", - "@next/swc-darwin-x64": "13.5.2", - "@next/swc-linux-arm64-gnu": "13.5.2", - "@next/swc-linux-arm64-musl": "13.5.2", - "@next/swc-linux-x64-gnu": "13.5.2", - "@next/swc-linux-x64-musl": "13.5.2", - "@next/swc-win32-arm64-msvc": "13.5.2", - "@next/swc-win32-ia32-msvc": "13.5.2", - "@next/swc-win32-x64-msvc": "13.5.2" + "@next/swc-darwin-arm64": "13.5.4", + "@next/swc-darwin-x64": "13.5.4", + "@next/swc-linux-arm64-gnu": "13.5.4", + "@next/swc-linux-arm64-musl": "13.5.4", + "@next/swc-linux-x64-gnu": "13.5.4", + "@next/swc-linux-x64-musl": "13.5.4", + "@next/swc-win32-arm64-msvc": "13.5.4", + "@next/swc-win32-ia32-msvc": "13.5.4", + "@next/swc-win32-x64-msvc": "13.5.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -14081,9 +14109,9 @@ } }, "node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -14092,10 +14120,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -14418,6 +14450,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/race-signal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/race-signal/-/race-signal-1.0.1.tgz", + "integrity": "sha512-a5un4dInIWoB7+76DieVE+Xv+wmyochKJ3P2GVs9dUKIzGuPyFR5iU3gEWJvztde/15fSOGkslbIsPxi+Loosw==", + "dev": true + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -14621,9 +14659,9 @@ } }, "node_modules/resolve": { - "version": "1.22.6", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", - "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { "is-core-module": "^2.13.0", @@ -14767,9 +14805,9 @@ } }, "node_modules/rollup": { - "version": "3.29.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.3.tgz", - "integrity": "sha512-T7du6Hum8jOkSWetjRgbwpM6Sy0nECYrYRSmZjayFcOddtKJWU4d17AC3HNUk7HRuqy4p+G7aEZclSHytqUmEg==", + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -14996,9 +15034,9 @@ "devOptional": true }, "node_modules/sass": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.68.0.tgz", - "integrity": "sha512-Lmj9lM/fef0nQswm1J2HJcEsBUba4wgNx2fea6yJHODREoMFnwRpZydBnX/RjyXw2REIwdkbqE4hrTo4qfDBUA==", + "version": "1.69.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.3.tgz", + "integrity": "sha512-X99+a2iGdXkdWn1akFPs0ZmelUzyAQfvqYc2P/MPTrJRuIRoTffGzT9W9nFqG00S+c8hXzVmgxhUuHFdrwxkhQ==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -16039,9 +16077,9 @@ } }, "node_modules/tinyspy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz", - "integrity": "sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", + "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", "dev": true, "engines": { "node": ">=14.0.0" @@ -16228,9 +16266,9 @@ } }, "node_modules/type-fest": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.3.1.tgz", - "integrity": "sha512-pphNW/msgOUSkJbH58x8sqpq8uQj6b0ZKGxEsLKMUnGorRcDjrUaLS+39+/ub41JNTwrrMyJcUB8+YZs3mbwqw==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.4.0.tgz", + "integrity": "sha512-HT3RRs7sTfY22KuPQJkD/XjbTbxgP2Je5HPt6H6JEGvcjHd5Lqru75EbrP3tb4FYjNJ+DjLp+MNQTFQU0mhXNw==", "dev": true, "engines": { "node": ">=16" @@ -16373,9 +16411,9 @@ "dev": true }, "node_modules/ufo": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.0.tgz", - "integrity": "sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.1.tgz", + "integrity": "sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==", "dev": true }, "node_modules/uint8-varint": { @@ -16410,9 +16448,9 @@ } }, "node_modules/uint8arrays/node_modules/multiformats": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.1.tgz", - "integrity": "sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.2.tgz", + "integrity": "sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -16434,17 +16472,23 @@ } }, "node_modules/undici": { - "version": "5.25.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.25.2.tgz", - "integrity": "sha512-tch8RbCfn1UUH1PeVCXva4V8gDpGAud/w0WubD6sHC46vYQ3KDxL+xv1A2UxK0N6jrVedutuPHxe1XIoqerwMw==", + "version": "5.26.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.3.tgz", + "integrity": "sha512-H7n2zmKEWgOllKkIUkLvFmsJQj062lSm3uA4EYApG8gLuiOM0/go9bIoC3HVaSnfg4xunowDE2i9p8drkXuvDw==", "dev": true, "dependencies": { - "busboy": "^1.6.0" + "@fastify/busboy": "^2.0.0" }, "engines": { "node": ">=14.0" } }, + "node_modules/undici-types": { + "version": "5.25.3", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", + "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", + "dev": true + }, "node_modules/unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -16640,9 +16684,9 @@ } }, "node_modules/vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz", + "integrity": "sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==", "dev": true, "dependencies": { "esbuild": "^0.18.10", @@ -16695,9 +16739,9 @@ } }, "node_modules/vite-node": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.5.tgz", - "integrity": "sha512-RNZ+DwbCvDoI5CbCSQSyRyzDTfFvFauvMs6Yq4ObJROKlIKuat1KgSX/Ako5rlDMfVCyMcpMRMTkJBxd6z8YRA==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", + "integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==", "dev": true, "dependencies": { "cac": "^6.7.14", @@ -16736,70 +16780,24 @@ } } }, - "node_modules/vite/node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/vite/node_modules/postcss": { - "version": "8.4.30", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.30.tgz", - "integrity": "sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, "node_modules/vitest": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.5.tgz", - "integrity": "sha512-CPI68mmnr2DThSB3frSuE5RLm9wo5wU4fbDrDwWQQB1CWgq9jQVoQwnQSzYAjdoBOPoH2UtXpOgHVge/uScfZg==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz", + "integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==", "dev": true, "dependencies": { "@types/chai": "^4.3.5", "@types/chai-subset": "^1.3.3", "@types/node": "*", - "@vitest/expect": "0.34.5", - "@vitest/runner": "0.34.5", - "@vitest/snapshot": "0.34.5", - "@vitest/spy": "0.34.5", - "@vitest/utils": "0.34.5", + "@vitest/expect": "0.34.6", + "@vitest/runner": "0.34.6", + "@vitest/snapshot": "0.34.6", + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", "acorn": "^8.9.0", "acorn-walk": "^8.2.0", "cac": "^6.7.14", - "chai": "^4.3.7", + "chai": "^4.3.10", "debug": "^4.3.4", "local-pkg": "^0.4.3", "magic-string": "^0.30.1", @@ -16810,7 +16808,7 @@ "tinybench": "^2.5.0", "tinypool": "^0.7.0", "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", - "vite-node": "0.34.5", + "vite-node": "0.34.6", "why-is-node-running": "^2.2.2" }, "bin": { @@ -17151,14 +17149,6 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/zod": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } } } } diff --git a/pages/explore.tsx b/pages/explore.tsx index 36890ec..400c47a 100644 --- a/pages/explore.tsx +++ b/pages/explore.tsx @@ -1,7 +1,7 @@ import type { NextPage } from "next"; import { useCallback, useEffect, useState } from "react"; import { useCeramicContext } from "@/context"; -import { ROProps } from "@/types"; +import { ResearchObject } from "@/types"; import Head from "next/head"; import styles from "@/styles/Home.module.scss"; import React from "react"; @@ -13,7 +13,7 @@ import { AttestList } from "@/components/AttestList"; const ExplorePage: NextPage = () => { const clients = useCeramicContext(); const { composeClient } = clients; - const [objects, setObjects] = useState([]); + const [objects, setObjects] = useState([]); const getResearchObjects = useCallback(async () => { const researchObjects = await queryResearchObjects(composeClient); diff --git a/pages/index.tsx b/pages/index.tsx index f6be0cf..477b508 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,7 +1,7 @@ import type { NextPage } from "next"; import { useCallback, useEffect, useState } from "react"; import { useCeramicContext } from "@/context"; -import { ROProps } from "@/types"; +import { ResearchObject } from "@/types"; import Head from "next/head"; import styles from "@/styles/Home.module.scss"; import React from "react"; @@ -12,7 +12,7 @@ import { queryViewerId, queryViewerResearchObjects } from "@/utils/queries"; const Home: NextPage = () => { const clients = useCeramicContext(); const { ceramic, composeClient } = clients; - const [objects, setObjects] = useState([]); + const [objects, setObjects] = useState([]); const getResearchObjects = useCallback(async () => { if (ceramic.did !== undefined) { diff --git a/test/root.spec.ts b/test/root.spec.ts index 74a51d8..bab54fb 100644 --- a/test/root.spec.ts +++ b/test/root.spec.ts @@ -3,13 +3,16 @@ import { definition } from '@/src/__generated__/definition' import { RuntimeCompositeDefinition } from '@composedb/types' import { test, describe, beforeAll, expect } from 'vitest' import { + genericEntityQuery, mutationCreateAttestation, mutationCreateClaim, mutationCreateProfile, - mutationCreateResearchObject, mutationUpdateAttestation, mutationUpdateResearchObject, queryResearchObjects + mutationCreateResearchComponent, + mutationCreateResearchObject, mutationUpdateAttestation, mutationUpdateResearchComponent, mutationUpdateResearchObject, queryAttestation, queryClaim, queryProfile, queryResearchComponent, queryResearchObject, queryResearchObjects } from '../utils/queries' import { randomDID } from './util' import { CeramicClient } from '@ceramicnetwork/http-client' import { writeComposite } from 'scripts/composites.mjs' import { setTimeout } from "timers/promises"; +import { Attestation, Claim, Profile, ResearchObject } from '@/types' const CERAMIC_API = 'http:/localhost:7007' const TIMEOUT = 7000 @@ -37,39 +40,44 @@ describe('ComposeDB nodes', () => { // Create mutations error on failure and are otherwise successful test('can create research object', async () => { - mutationCreateResearchObject( - composeClient, - { - title: 'Test', - manifest: A_CID - } + const data: ResearchObject = { + title: 'Test', + manifest: A_CID, + metadata: '{ "key": "value" }' + } + const researchObject = await mutationCreateResearchObject( + composeClient, data ); + const result = await queryResearchObject( + composeClient, researchObject.streamID, + ); + expect(result).toEqual(data); }); - test('can create profile', async () => - await mutationCreateProfile( - composeClient, - { - displayName: 'First Lastname', - orcid: 'orcidHandle' - } - ), - // SINGLE accountRelation instances will ask the network for previous - // creations, which slowly times out. PR allowing setting this timeout - // in progress: https://github.com/ceramicstudio/js-composedb/pull/182 - TIMEOUT - ); + test('can create profile', async () => { + const data: Profile = { + displayName: 'First Lastname', + orcid: 'orcidHandle' + }; + const profile = await mutationCreateProfile(composeClient, data); - test('can create claim', async () => - await mutationCreateClaim( - composeClient, - { - title: 'My Claim', - description: 'The point of the claim', - badge: A_CID - } - ) - ); + const result = await queryProfile( + composeClient, profile.streamID, + ); + expect(result).toEqual(data); + }); + + test('can create claim', async () => { + const data: Claim = { + title: 'My Claim', + description: 'The point of the claim', + badge: A_CID + }; + const claim = await mutationCreateClaim(composeClient, data); + + const result = await queryClaim(composeClient, claim.streamID); + expect(result).toEqual(data); + }); test('can attest to own research object', async () => { const myResearchObject = await mutationCreateResearchObject( @@ -87,16 +95,16 @@ describe('ComposeDB nodes', () => { badge: A_CID } ); - await mutationCreateAttestation( - composeClient, - { - targetID: myResearchObject.streamID, - targetVersion: myResearchObject.commitID, - claimID: myClaim.streamID, - claimVersion: myClaim.commitID, - revoked: false - } - ); + const data: Attestation = { + targetID: myResearchObject.streamID, + targetVersion: myResearchObject.commitID, + claimID: myClaim.streamID, + claimVersion: myClaim.commitID, + revoked: false + }; + const attestation = await mutationCreateAttestation(composeClient, data); + const result = await queryAttestation(composeClient, attestation.streamID); + expect(result).toEqual(data); }); }); @@ -123,7 +131,7 @@ describe('ComposeDB nodes', () => { } ); - await mutationCreateAttestation( + const attestation = await mutationCreateAttestation( composeClient, { targetID: ownProfile.streamID, @@ -133,6 +141,9 @@ describe('ComposeDB nodes', () => { revoked: false } ); + const result = await queryAttestation(composeClient, attestation.streamID); + expect(result?.targetID).toEqual(ownProfile.streamID); + expect(result?.targetVersion).toEqual(ownProfile.commitID); }) test('can be made to other users research object', async () => { @@ -148,7 +159,7 @@ describe('ComposeDB nodes', () => { const user2 = await randomDID(); composeClient.setDID(user2); - await mutationCreateAttestation( + const attestation = await mutationCreateAttestation( composeClient, { targetID: user1ResearchObject.streamID, @@ -158,6 +169,9 @@ describe('ComposeDB nodes', () => { revoked: false } ); + const result = await queryAttestation(composeClient, attestation.streamID); + expect(result?.targetID).toEqual(user1ResearchObject.streamID); + expect(result?.targetVersion).toEqual(user1ResearchObject.commitID); }) test('can be updated with revokation', async () => { @@ -189,17 +203,21 @@ describe('ComposeDB nodes', () => { revoked: true } ); + + await setTimeout(1000); + const result = await queryAttestation(composeClient, attestation.streamID); + expect(result?.revoked).toEqual(true) }) }) describe.skip('Annotations', async () => { - test('can comment on research component', async () => { }); + test('can comment on research component', async () => {}); - test('can comment on research object', async () => { }); + test('can comment on research object', async () => {}); - test('can suggest metadata change on research component', async () => { }); + test('can suggest metadata change on research component', async () => {}); - test('can suggest metadata changes on research object', async () => { }); + test('can suggest metadata changes on research object', async () => {}); }); describe('User', async () => { @@ -208,25 +226,29 @@ describe('ComposeDB nodes', () => { composeClient.setDID(user); test('can update research object', async () => { - const researchObject = await mutationCreateResearchObject( - composeClient, - { - title: 'Test', - manifest: A_CID - } - ); + const data: ResearchObject = { + title: 'Test', + manifest: A_CID, + metadata: '{ "key": "value" }' + }; + const researchObject = await mutationCreateResearchObject(composeClient, data); + + const newMetadata = '{ "key": "value", "newKey": "value" }'; await mutationUpdateResearchObject( composeClient, { id: researchObject.streamID, - title: 'A fancy new title', - manifest: "bafkreibtsll3aq2bynvlxnqh6nxafzdm4cpiovr3bcncbkzjcy32xaaaaa" + metadata: newMetadata } ); + + await setTimeout(500); + const result = await queryResearchObject(composeClient, researchObject.streamID); + expect(result).toEqual({ ...data, metadata: newMetadata }); }); test('can update profile', async () => { - await mutationCreateProfile( + const profile = await mutationCreateProfile( composeClient, { displayName: "My Name", @@ -236,16 +258,17 @@ describe('ComposeDB nodes', () => { // Ceramic node takes a little while syncing this with the "network" // since it has the SINGLE accountRelation - await setTimeout(500); + await setTimeout(250); + const newProfile: Profile = { + displayName: "New Name", + orcid: "@handle" + }; // Apparently create acts as an upsert on SINGLE accountRelation models - await mutationCreateProfile( - composeClient, - { - displayName: "New Name", - orcid: "@handle" - } - ); - }, TIMEOUT); + await mutationCreateProfile(composeClient, newProfile); + + const result = await queryProfile(composeClient, profile.streamID); + expect(result).toEqual(newProfile); + }); }); @@ -281,6 +304,54 @@ describe('ComposeDB nodes', () => { const streamBetween = await ceramic.loadStream(streamID, { atTime: timeBetween }); expect(streamBetween.state.content.title).toEqual('Old'); }); + + test('can resolve stream refs in old versions', async () => { + const researchObjectV0 = await mutationCreateResearchObject( + composeClient, + { + title: 'Title', + manifest: A_CID + } + ); + const componentV0 = await mutationCreateResearchComponent( + composeClient, + { + name: 'Filename', + mimeType: 'text/plain', + dagNode: A_CID, + researchObjectID: researchObjectV0.streamID, + researchObjectVersion: researchObjectV0.commitID + } + ); + const newManifest = 'bafybeibeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'; + const researchObjectV1 = await mutationUpdateResearchObject( + composeClient, + { + id: researchObjectV0.streamID, + manifest: newManifest + } + ); + await mutationUpdateResearchComponent( + composeClient, + { + id: componentV0.streamID, + dagNode: newManifest, + // Set a new version indicator + researchObjectVersion: researchObjectV1.commitID + } + ); + + const roResult = await queryResearchObject(composeClient, researchObjectV0.streamID); + const rcResult = await queryResearchComponent(composeClient, componentV0.streamID); + expect(roResult?.manifest).toEqual(newManifest); + expect(rcResult?.researchObjectID).toEqual(researchObjectV0.streamID); + + // Check that we can get the old state with the research object version at + // that point in time + const oldComponentState = await ceramic.loadStream(componentV0.commitID); + expect(oldComponentState.content.researchObjectVersion) + .toEqual(researchObjectV0.commitID); + }); }); diff --git a/types/index.ts b/types/index.ts index 01be5ea..2903c06 100644 --- a/types/index.ts +++ b/types/index.ts @@ -9,7 +9,7 @@ export type DID = { profile?: Profile }; -export type ROProps = { +export type ResearchObject = { id?: string version?: string title: string @@ -90,9 +90,9 @@ export type ResearchFieldRelation = { researchObjectVersion: string }; -export type MutationTarget = +export type ProtocolEntity = Profile | - ROProps | + ResearchObject | ResearchComponent | Claim | Attestation | diff --git a/utils/populate.tsx b/utils/populate.tsx index 35455b4..79817c0 100644 --- a/utils/populate.tsx +++ b/utils/populate.tsx @@ -19,7 +19,7 @@ import { import { CeramicClient } from "@ceramicnetwork/http-client" import { definition } from '@/src/__generated__/definition' import { RuntimeCompositeDefinition } from "@composedb/types" -import { Annotation, Attestation, NodeIDs, ROProps } from "@/types" +import { Annotation, Attestation, NodeIDs, ResearchObject } from "@/types" import { AnnotationTemplate, AttestationTemplate, @@ -173,7 +173,7 @@ const loadResearchObject = async ( roTemplate: ResearchObjectTemplate, composeClient: ComposeClient ): Promise => { - const roProps: ROProps = { + const roProps: ResearchObject = { title: roTemplate.title, manifest: roTemplate.manifest } diff --git a/utils/queries.ts b/utils/queries.ts index 3e71001..809d90f 100644 --- a/utils/queries.ts +++ b/utils/queries.ts @@ -1,5 +1,5 @@ import { ComposeClient } from "@composedb/client"; -import { Attestation, Claim, ResearchComponent, Profile, ROProps, ContributorRelation, ReferenceRelation, ResearchFieldRelation, MutationTarget, Annotation, NodeIDs, ResearchField } from "../types"; +import { Attestation, Claim, ResearchComponent, Profile, ResearchObject, ContributorRelation, ReferenceRelation, ResearchFieldRelation, ProtocolEntity, Annotation, NodeIDs, ResearchField } from "../types"; import { ExecutionResult } from "graphql"; export const queryViewerId = async ( @@ -39,9 +39,9 @@ export const queryViewerProfile = async ( export const queryViewerResearchObjects = async ( composeClient: ComposeClient -): Promise => { +): Promise => { const response = await composeClient.executeQuery< - { viewer: { researchObjectList: { edges: { node: ROProps }[] } } } + { viewer: { researchObjectList: { edges: { node: ResearchObject }[] } } } >(` query { viewer { @@ -88,9 +88,9 @@ export const queryViewerClaims = async ( export const queryResearchObjects = async ( composeClient: ComposeClient -): Promise => { +): Promise => { const response = await composeClient.executeQuery< - { researchObjectIndex: { edges: { node: ROProps }[] } } + { researchObjectIndex: { edges: { node: ResearchObject }[] } } >(` query { researchObjectIndex(first: 100) { @@ -148,7 +148,7 @@ export const queryResearchObjectAttestations = async ( export const mutationCreateResearchObject = async ( composeClient: ComposeClient, - inputs: ROProps + inputs: ResearchObject ): Promise => genericCreate( composeClient, inputs, @@ -176,9 +176,25 @@ export const mutationCreateResearchComponent = async ( 'createResearchComponent' ); +export const mutationUpdateResearchComponent = async ( + composeClient: ComposeClient, + inputs: Partial & { id: string } +): Promise => genericUpdate( + composeClient, + inputs, + { + name: "String!", + mimeType: "String!", + dagNode: "InterPlanetaryCID!", + researchObjectID: "CeramicStreamID!", + researchObjectVersion: "CeramicCommitID!" + }, + 'updateResearchComponent' +); + export const mutationUpdateResearchObject = async ( composeClient: ComposeClient, - inputs: Partial & { id: string } + inputs: Partial & { id: string } ): Promise => genericUpdate( composeClient, inputs, @@ -200,7 +216,8 @@ export const mutationCreateProfile = async ( displayName: "String!", orcid: "String" }, - 'createProfile' + 'createProfile', + true ); export const mutationCreateClaim = async ( @@ -321,19 +338,129 @@ export const mutationCreateResearchField = async ( 'createResearchField' ); -async function genericCreate( +export const queryResearchObject = async ( + composeClient: ComposeClient, + id: string, + selection?: string +): Promise => genericEntityQuery( + composeClient, + id, + 'ResearchObject', + selection ?? + ` + title + manifest + metadata + ` +); + +export const queryProfile = async ( + composeClient: ComposeClient, + id: string, + selection?: string +): Promise => genericEntityQuery( + composeClient, + id, + 'Profile', + selection ?? + ` + displayName + orcid + ` +); + +export const queryClaim = async ( + composeClient: ComposeClient, + id: string, + selection?: string +): Promise => genericEntityQuery( + composeClient, + id, + 'Claim', + selection ?? + ` + title + description + badge + ` +); + +export const queryAttestation = async ( + composeClient: ComposeClient, + id: string, + selection?: string +): Promise => genericEntityQuery( + composeClient, + id, + 'Attestation', + selection ?? + ` + targetID + targetVersion + claimID + claimVersion + revoked + ` +); + +export const queryResearchComponent = async ( + composeClient: ComposeClient, + id: string, + selection?: string +): Promise => genericEntityQuery( + composeClient, + id, + 'ResearchComponent', + selection ?? + ` + name + mimeType + dagNode + researchObjectID + researchObjectVersion + ` +); + +export async function genericEntityQuery( + composeClient: ComposeClient, + id: string, + entityName: string, + // Specify the field structure to query for + selection: string +): Promise { + const query = ` + query($id: ID!) { + node(id: $id) { + ...on ${entityName} { + ${selection} + } + } + } + `; + const result = await composeClient.executeQuery(query, { id }) + assertQueryErrors(result, `${entityName} node`) + return result.data + ? result.data.node as T + : undefined // query can return null too, downscope type +}; + +async function genericCreate( composeClient: ComposeClient, inputs: T, - // At least verify all keys exist in T, can still forget one though. - // Can't require it fully because some props are not allowed in the mutation. + /** At least verify all keys exist in T, can still forget one though. + * Can't require it fully because some props are not allowed in the mutation. + */ gqlTypes: Partial>, - mutationName: string + mutationName: string, + /** Skip timeout for single accountRelation entities */ + noTimeout?: boolean ): Promise { const [params, content] = getQueryFields(gqlTypes as Record, inputs); const response = await composeClient.executeQuery(` mutation( ${params} ) { ${mutationName}(input: { content: { ${content} } + ${noTimeout ? "options: { syncTimeout: 0 }" : ""} }) { document { @@ -351,12 +478,12 @@ async function genericCreate( return nodeIDs; }; -async function genericUpdate( +async function genericUpdate( composeClient: ComposeClient, inputs: Partial & { id: string }, // See note in genericCreate gqlTypes: Partial>, - mutationName: string + mutationName: string, ): Promise { const [params, content] = getQueryFields(gqlTypes as Record, inputs); const response = await composeClient.executeQuery(` From cbb45d70ad0f73451047e13478b74927c8a371e9 Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 12 Oct 2023 14:51:57 +0200 Subject: [PATCH 02/14] Fix bork after renaming ROProps --- components/ResearchObject.tsx | 4 ++-- pages/explore.tsx | 6 +++--- pages/index.tsx | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/components/ResearchObject.tsx b/components/ResearchObject.tsx index 300ec17..f8c1eb8 100644 --- a/components/ResearchObject.tsx +++ b/components/ResearchObject.tsx @@ -5,7 +5,7 @@ import styles from "@/styles/Home.module.scss"; import { ResearchObject } from "@/types"; import { PropsWithChildren } from "react"; -const ResearchObject = ({ +const ResearchObjectComponent = ({ owner, title, manifest, @@ -22,4 +22,4 @@ const ResearchObject = ({ ); }; -export default ResearchObject; +export default ResearchObjectComponent; diff --git a/pages/explore.tsx b/pages/explore.tsx index 400c47a..bfded2b 100644 --- a/pages/explore.tsx +++ b/pages/explore.tsx @@ -5,7 +5,7 @@ import { ResearchObject } from "@/types"; import Head from "next/head"; import styles from "@/styles/Home.module.scss"; import React from "react"; -import ResearchObject from "@/components/ResearchObject"; +import ResearchObjectComponent from "@/components/ResearchObject"; import { queryResearchObjects } from "@/utils/queries"; import { AttestButton } from "@/components/AttestButton"; import { AttestList } from "@/components/AttestList"; @@ -36,7 +36,7 @@ const ExplorePage: NextPage = () => { The world of DeSci {objects.map((ro) => ( - { > - + ))}
diff --git a/pages/index.tsx b/pages/index.tsx index 477b508..26b332d 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -5,7 +5,7 @@ import { ResearchObject } from "@/types"; import Head from "next/head"; import styles from "@/styles/Home.module.scss"; import React from "react"; -import ResearchObject from "@/components/ResearchObject"; +import ResearchObjectComponent from "@/components/ResearchObject"; import { ResearchObjectForm } from "@/components/ResearchObjectForm"; import { queryViewerId, queryViewerResearchObjects } from "@/utils/queries"; @@ -43,7 +43,7 @@ const Home: NextPage = () => { My research objects {objects.map((ro) => ( - Date: Thu, 12 Oct 2023 14:54:16 +0200 Subject: [PATCH 03/14] Run tests in PRs --- test/root.spec.ts | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/test/root.spec.ts b/test/root.spec.ts index bab54fb..b0727d1 100644 --- a/test/root.spec.ts +++ b/test/root.spec.ts @@ -3,10 +3,19 @@ import { definition } from '@/src/__generated__/definition' import { RuntimeCompositeDefinition } from '@composedb/types' import { test, describe, beforeAll, expect } from 'vitest' import { - genericEntityQuery, - mutationCreateAttestation, mutationCreateClaim, mutationCreateProfile, + mutationCreateAttestation, + mutationCreateClaim, + mutationCreateProfile, mutationCreateResearchComponent, - mutationCreateResearchObject, mutationUpdateAttestation, mutationUpdateResearchComponent, mutationUpdateResearchObject, queryAttestation, queryClaim, queryProfile, queryResearchComponent, queryResearchObject, queryResearchObjects + mutationCreateResearchObject, + mutationUpdateAttestation, + mutationUpdateResearchComponent, + mutationUpdateResearchObject, + queryAttestation, + queryClaim, + queryProfile, + queryResearchComponent, + queryResearchObject } from '../utils/queries' import { randomDID } from './util' import { CeramicClient } from '@ceramicnetwork/http-client' @@ -15,7 +24,6 @@ import { setTimeout } from "timers/promises"; import { Attestation, Claim, Profile, ResearchObject } from '@/types' const CERAMIC_API = 'http:/localhost:7007' -const TIMEOUT = 7000 const A_CID = 'bafybeibeaampol2yz5xuoxex7dxri6ztqveqrybzfh5obz6jrul5gb4cf4' const ceramic = new CeramicClient(CERAMIC_API) @@ -211,13 +219,13 @@ describe('ComposeDB nodes', () => { }) describe.skip('Annotations', async () => { - test('can comment on research component', async () => {}); + test('can comment on research component', async () => { }); - test('can comment on research object', async () => {}); + test('can comment on research object', async () => { }); - test('can suggest metadata change on research component', async () => {}); + test('can suggest metadata change on research component', async () => { }); - test('can suggest metadata changes on research object', async () => {}); + test('can suggest metadata changes on research object', async () => { }); }); describe('User', async () => { From 1c303987d06f1a01053bbebcc382dd5002cc9bd2 Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 12 Oct 2023 15:04:21 +0200 Subject: [PATCH 04/14] Fix CI test workflow --- .github/workflows/pr.yml | 4 +++- scripts/run.mjs | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 8098df6..13886e4 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -7,11 +7,13 @@ jobs: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - - uses: setup-node@v3 + - uses: actions/setup-node@v3 with: node-version-file: ".nvmrc" cache: "npm" cache-dependency-path: "package-lock.json" check-latest: false - run: npm ci + - run: npm run generate + - run: CI=true npm run dev - run: make test diff --git a/scripts/run.mjs b/scripts/run.mjs index 742b330..f6e8469 100644 --- a/scripts/run.mjs +++ b/scripts/run.mjs @@ -3,6 +3,7 @@ import ora from 'ora' import { spawn } from "child_process" import { EventEmitter } from 'events' import { writeComposite } from './composites.mjs'; +import { setTimeout } from 'timers/promises'; const events = new EventEmitter() const spinner = ora(); @@ -58,6 +59,11 @@ const start = async () => { events.on('ceramic', async (isRunning) => { if (isRunning) { await bootstrap() + if (process.env.CI) { + ceramic.kill() + await setTimeout(1000); + process.exit(); + } await graphiql() await next() } From 8111fb3a8b14ba06db62caaf38651ee76a785a8a Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 12 Oct 2023 15:31:48 +0200 Subject: [PATCH 05/14] Log ipfs/ceramic processes in CI --- .github/workflows/pr.yml | 1 + scripts/run.mjs | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 13886e4..53d0ee6 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -16,4 +16,5 @@ jobs: - run: npm ci - run: npm run generate - run: CI=true npm run dev + - run: echo "PROCESSES"; ps aux | grep -e ceramic -e ipfs - run: make test diff --git a/scripts/run.mjs b/scripts/run.mjs index f6e8469..65513a5 100644 --- a/scripts/run.mjs +++ b/scripts/run.mjs @@ -60,8 +60,8 @@ const start = async () => { if (isRunning) { await bootstrap() if (process.env.CI) { - ceramic.kill() - await setTimeout(1000); + ceramic.kill(); + await setTimeout(5000); process.exit(); } await graphiql() From f86556cba1240e302c1f7ed22e45e50db2d4c58c Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 12 Oct 2023 16:03:21 +0200 Subject: [PATCH 06/14] less stupid, more working --- .github/workflows/pr.yml | 2 -- scripts/run.mjs | 6 ------ 2 files changed, 8 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 53d0ee6..693080e 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -15,6 +15,4 @@ jobs: check-latest: false - run: npm ci - run: npm run generate - - run: CI=true npm run dev - - run: echo "PROCESSES"; ps aux | grep -e ceramic -e ipfs - run: make test diff --git a/scripts/run.mjs b/scripts/run.mjs index 65513a5..742b330 100644 --- a/scripts/run.mjs +++ b/scripts/run.mjs @@ -3,7 +3,6 @@ import ora from 'ora' import { spawn } from "child_process" import { EventEmitter } from 'events' import { writeComposite } from './composites.mjs'; -import { setTimeout } from 'timers/promises'; const events = new EventEmitter() const spinner = ora(); @@ -59,11 +58,6 @@ const start = async () => { events.on('ceramic', async (isRunning) => { if (isRunning) { await bootstrap() - if (process.env.CI) { - ceramic.kill(); - await setTimeout(5000); - process.exit(); - } await graphiql() await next() } From 41f798ab73ea7c279dfcc0fbb43e75156dcc60ab Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 12 Oct 2023 16:11:00 +0200 Subject: [PATCH 07/14] try relative import paths in spec --- test/root.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/root.spec.ts b/test/root.spec.ts index b0727d1..d3f07ac 100644 --- a/test/root.spec.ts +++ b/test/root.spec.ts @@ -1,5 +1,5 @@ import { ComposeClient } from '@composedb/client' -import { definition } from '@/src/__generated__/definition' +import { definition } from '../src/__generated__/definition' import { RuntimeCompositeDefinition } from '@composedb/types' import { test, describe, beforeAll, expect } from 'vitest' import { From 69b78fc95a31feea11400982fe340909211285ab Mon Sep 17 00:00:00 2001 From: m0ar Date: Fri, 13 Oct 2023 11:04:21 +0200 Subject: [PATCH 08/14] Fix clean key and config generation for CI --- Makefile | 6 ++-- scripts/commands.mjs | 69 +++++++++++++++++++++++------------------- scripts/composites.mjs | 14 +++++++-- 3 files changed, 52 insertions(+), 37 deletions(-) diff --git a/Makefile b/Makefile index 2b31400..4aca2a6 100644 --- a/Makefile +++ b/Makefile @@ -4,8 +4,8 @@ clean-test: rm -rf local-data/ceramic-test test: clean-test - sed 's|local-data/ceramic|local-data/ceramic-test|' composedb.config.json \ - > test.config.json + sed 's|local-data/ceramic|local-data/ceramic-test|' composedb.config.json > test.config.json npx ceramic daemon --config test.config.json &>/dev/null & sleep 5 - npm test; pkill --full "npm exec ceramic" \ No newline at end of file + node scripts/composites.mjs + npm test; pkill --full "ceramic daemon|ipfs daemon" \ No newline at end of file diff --git a/scripts/commands.mjs b/scripts/commands.mjs index 4ce9f3a..8eb7be9 100644 --- a/scripts/commands.mjs +++ b/scripts/commands.mjs @@ -1,27 +1,33 @@ -import KeyDIDResolver from "key-did-resolver"; +import { getResolver } from "key-did-resolver"; import { randomBytes } from "crypto"; import { toString } from "uint8arrays/to-string"; -import { writeFile } from "fs"; +import { fromString } from "uint8arrays/from-string"; +import { existsSync, readFileSync, writeFileSync } from "fs"; import { DID } from "dids"; import { Ed25519Provider } from "key-did-provider-ed25519"; +const PWD = process.cwd(); +const CONFIG_PATH = `${PWD}/composedb.config.json`; +const SEED_PATH = `${PWD}/admin_seed.txt`; + export const RunCommands = async () => { + const newSeed = () => { + const raw = new Uint8Array(randomBytes(32)); + return toString(raw, 'base16') + } + const generateAdminKeyDid = async () => { - const seed = new Uint8Array(randomBytes(32)); - const keyResolver = KeyDIDResolver.getResolver(); + const seed = readFileSync(SEED_PATH); + const key = fromString(seed, 'base16'); const did = new DID({ - provider: new Ed25519Provider(seed), - resolver: { - ...keyResolver, - }, + provider: new Ed25519Provider(key), + resolver: getResolver(), }); await did.authenticate(); - return { - seed: toString(seed, "base16"), - did, - }; + return did; }; - const generateLocalConfig = async (adminSeed, adminDid) => { + + const generateLocalConfig = async (adminDid) => { const configData = { anchor: {}, "http-api": { @@ -49,30 +55,31 @@ export const RunCommands = async () => { "local-directory": "local-data/ceramic/statestore", }, indexing: { - db: `sqlite://${process.cwd()}/local-data/ceramic/indexing.sqlite`, + db: `sqlite://${PWD}/local-data/ceramic/indexing.sqlite`, "allow-queries-before-historical-sync": true, // Cannot be enabled on inmemory, but activate for proper networks // "enable-historical-sync": "true" models: [], }, }; - writeFile( - `${process.cwd()}/composedb.config.json`, - JSON.stringify(configData), - (err) => { - if (err) { - console.error(err); - } - } - ); - writeFile(`${process.cwd()}/admin_seed.txt`, adminSeed, (err) => { - if (err) { - console.error(err); - } - }); + writeFileSync(CONFIG_PATH, JSON.stringify(configData, undefined, 2)); + }; + + if (!existsSync(SEED_PATH)){ + console.log('Creating new admin seed...'); + writeFileSync(SEED_PATH, newSeed()); + + console.log('Generating new config...'); + const did = await generateAdminKeyDid(); + console.log('Saving new DID:', JSON.stringify(did, undefined, 2)) + await generateLocalConfig(did); + } else if (!existsSync(CONFIG_PATH)) { + console.log('Found seed but no config, generating...'); + const did = await generateAdminKeyDid(); + await generateLocalConfig(did); + } else { + console.log('Seed and config present, skipping generation.') }; - const { seed, did } = await generateAdminKeyDid(); - console.log(seed, did); - await generateLocalConfig(seed, did); }; + RunCommands(); diff --git a/scripts/composites.mjs b/scripts/composites.mjs index 8d6b76c..3b1a10b 100644 --- a/scripts/composites.mjs +++ b/scripts/composites.mjs @@ -19,7 +19,7 @@ const ceramic = new CeramicClient("http://localhost:7007"); * @return {Promise} - return void when composite finishes deploying. */ export const writeComposite = async (spinner) => { - await authenticate(); + await authenticateAdmin(); spinner.info("writing composite to Ceramic"); const profileComposite = await createComposite( @@ -165,7 +165,7 @@ export const writeComposite = async (spinner) => { * Authenticating DID for publishing composite * @return {Promise} - return void when DID is authenticated. */ -const authenticate = async () => { +const authenticateAdmin = async () => { const seed = readFileSync("./admin_seed.txt"); const key = fromString(seed, "base16"); const did = new DID({ @@ -173,6 +173,14 @@ const authenticate = async () => { provider: new Ed25519Provider(key), }); await did.authenticate(); - ceramic.did = did; + await ceramic.setDID(did); }; +const runAsScript = + process.argv[0].includes('/bin/node') && + process.argv[1].includes('scripts/composites.mjs'); + +if (runAsScript) { + const logSpinner = { info: console.log, succeed: console.log }; + await writeComposite(logSpinner); +}; \ No newline at end of file From 1a0700d2d85609ed96835a974edf098a481521e6 Mon Sep 17 00:00:00 2001 From: m0ar Date: Fri, 13 Oct 2023 11:22:16 +0200 Subject: [PATCH 09/14] Add stream syncs for less flaky tests --- test/root.spec.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/test/root.spec.ts b/test/root.spec.ts index d3f07ac..0550fbc 100644 --- a/test/root.spec.ts +++ b/test/root.spec.ts @@ -204,6 +204,7 @@ describe('ComposeDB nodes', () => { } ); + await waitAndSync(attestation.streamID); await mutationUpdateAttestation( composeClient, { @@ -212,7 +213,6 @@ describe('ComposeDB nodes', () => { } ); - await setTimeout(1000); const result = await queryAttestation(composeClient, attestation.streamID); expect(result?.revoked).toEqual(true) }) @@ -241,6 +241,7 @@ describe('ComposeDB nodes', () => { }; const researchObject = await mutationCreateResearchObject(composeClient, data); + await waitAndSync(researchObject.streamID); const newMetadata = '{ "key": "value", "newKey": "value" }'; await mutationUpdateResearchObject( composeClient, @@ -250,7 +251,6 @@ describe('ComposeDB nodes', () => { } ); - await setTimeout(500); const result = await queryResearchObject(composeClient, researchObject.streamID); expect(result).toEqual({ ...data, metadata: newMetadata }); }); @@ -264,13 +264,11 @@ describe('ComposeDB nodes', () => { } ); - // Ceramic node takes a little while syncing this with the "network" - // since it has the SINGLE accountRelation - await setTimeout(250); const newProfile: Profile = { displayName: "New Name", orcid: "@handle" }; + await waitAndSync(profile.streamID); // Apparently create acts as an upsert on SINGLE accountRelation models await mutationCreateProfile(composeClient, newProfile); @@ -297,7 +295,7 @@ describe('ComposeDB nodes', () => { } ); const timeBetween = Date.now(); - await setTimeout(1000) + await waitAndSync(streamID); await mutationUpdateResearchObject( composeClient, { @@ -367,3 +365,12 @@ describe('ComposeDB nodes', () => { const freshClient = () => new ComposeClient({ ceramic, definition: definition as RuntimeCompositeDefinition }) + +/** Sync between fast updates to same streams to make tests less flaky, +* also allowing for an anchor commit to pop in between +*/ +const waitAndSync = async (streamID: string) => { + await setTimeout(100); + const stream = await ceramic.loadStream(streamID); + await stream.sync(); +} From cbbfcd85b3b1b3a6aac322a3cf8186de684051dd Mon Sep 17 00:00:00 2001 From: m0ar Date: Fri, 13 Oct 2023 13:02:44 +0200 Subject: [PATCH 10/14] Add annotation tests --- Makefile | 4 +- composites/11-annotation.graphql | 2 +- test/root.spec.ts | 98 ++++++++++++++++++++++++++++++-- utils/queries.ts | 32 +++++++++-- 4 files changed, 123 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index 4aca2a6..35064ca 100644 --- a/Makefile +++ b/Makefile @@ -8,4 +8,6 @@ test: clean-test npx ceramic daemon --config test.config.json &>/dev/null & sleep 5 node scripts/composites.mjs - npm test; pkill --full "ceramic daemon|ipfs daemon" \ No newline at end of file + # Kill lingering daemons without unsetting exit code of test + (npm test && pkill -f "ceramic daemon | ipfs daemon") \ + || (pkill -f "ceramic daemon | ipfs daemon"; exit 1) diff --git a/composites/11-annotation.graphql b/composites/11-annotation.graphql index f5e5ab4..491142c 100644 --- a/composites/11-annotation.graphql +++ b/composites/11-annotation.graphql @@ -21,7 +21,7 @@ type Annotation # Optionally tag a claim to contextualise the annotation claimID: StreamID @documentReference(model: "Claim") claim: Claim @relationDocument(property: "claimID") - claimVersion: CommitID! + claimVersion: CommitID metadataPayload: String @string(maxLength: 1024) } diff --git a/test/root.spec.ts b/test/root.spec.ts index 0550fbc..8486534 100644 --- a/test/root.spec.ts +++ b/test/root.spec.ts @@ -3,6 +3,7 @@ import { definition } from '../src/__generated__/definition' import { RuntimeCompositeDefinition } from '@composedb/types' import { test, describe, beforeAll, expect } from 'vitest' import { + mutationCreateAnnotation, mutationCreateAttestation, mutationCreateClaim, mutationCreateProfile, @@ -11,6 +12,7 @@ import { mutationUpdateAttestation, mutationUpdateResearchComponent, mutationUpdateResearchObject, + queryAnnotation, queryAttestation, queryClaim, queryProfile, @@ -21,7 +23,7 @@ import { randomDID } from './util' import { CeramicClient } from '@ceramicnetwork/http-client' import { writeComposite } from 'scripts/composites.mjs' import { setTimeout } from "timers/promises"; -import { Attestation, Claim, Profile, ResearchObject } from '@/types' +import { Annotation, Attestation, Claim, Profile, ResearchObject } from '@/types' const CERAMIC_API = 'http:/localhost:7007' const A_CID = 'bafybeibeaampol2yz5xuoxex7dxri6ztqveqrybzfh5obz6jrul5gb4cf4' @@ -218,14 +220,98 @@ describe('ComposeDB nodes', () => { }) }) - describe.skip('Annotations', async () => { - test('can comment on research component', async () => { }); + describe('Annotations', async () => { + const composeClient = freshClient(); + const user = await randomDID(); + composeClient.setDID(user); + + const researchObject = await mutationCreateResearchObject( + composeClient, + { + title: 'Title', + manifest: A_CID + } + ); + + const claim = await mutationCreateClaim( + composeClient, + { + title: 'Title', + description: 'Description' + } + ); + + const researchComponent = await mutationCreateResearchComponent( + composeClient, + { + name: 'Name', + mimeType: 'text/csv', + dagNode: A_CID, + researchObjectID: researchObject.streamID, + researchObjectVersion: researchObject.commitID + } + ); - test('can comment on research object', async () => { }); + test('can be made on research object', async () => { + const data: Annotation = { + comment: 'This is a cool object!', + targetID: researchObject.streamID, + targetVersion: researchObject.commitID, + claimID: claim.streamID, + claimVersion: claim.commitID + }; + + const annotation = await mutationCreateAnnotation(composeClient, data); + + const response = await queryAnnotation(composeClient, annotation.streamID); + expect(response).toEqual({ ...data, metadataPayload: null, path: null }); + }); + + test('can be made on research component', async () => { + const data: Annotation = { + comment: 'This is a cool object!', + targetID: researchComponent.streamID, + targetVersion: researchComponent.commitID, + claimID: claim.streamID, + claimVersion: claim.commitID + }; + + const annotation = await mutationCreateAnnotation(composeClient, data); + + const response = await queryAnnotation(composeClient, annotation.streamID); + expect(response).toEqual({ ...data, metadataPayload: null, path: null }); + }); - test('can suggest metadata change on research component', async () => { }); + test('can attach metadata', async () => { + const data: Annotation = { + comment: 'This is a cool object!', + targetID: researchComponent.streamID, + targetVersion: researchComponent.commitID, + claimID: claim.streamID, + claimVersion: claim.commitID, + metadataPayload: "JSONPatch" + }; + + const annotation = await mutationCreateAnnotation(composeClient, data); + + const response = await queryAnnotation(composeClient, annotation.streamID); + expect(response?.metadataPayload).toEqual("JSONPatch"); + }); + + test.skip('can omit claim', async () => { + // API fails on @relationDocument when the key is optional and omitted + const data: Annotation = { + comment: 'This is a cool object!', + targetID: researchComponent.streamID, + targetVersion: researchComponent.commitID + }; + + const annotation = await mutationCreateAnnotation(composeClient, data); + + const response = await queryAnnotation(composeClient, annotation.streamID); + expect(response).toEqual(data); + }); - test('can suggest metadata changes on research object', async () => { }); }); describe('User', async () => { diff --git a/utils/queries.ts b/utils/queries.ts index 809d90f..d6e7a8a 100644 --- a/utils/queries.ts +++ b/utils/queries.ts @@ -257,8 +257,8 @@ export const mutationUpdateAttestation = async ( composeClient, inputs, { - targetID: "CeramicStreamID", - claimID: "CeramicStreamID", + targetID: "CeramicStreamID!", + claimID: "CeramicStreamID!", revoked: "Boolean" }, 'updateAttestation' @@ -267,7 +267,8 @@ export const mutationUpdateAttestation = async ( export const mutationCreateAnnotation = async ( composeClient: ComposeClient, inputs: Annotation -): Promise => genericCreate( +): Promise => { + return genericCreate( composeClient, inputs, { @@ -276,11 +277,12 @@ export const mutationCreateAnnotation = async ( metadataPayload: "String", targetID: "CeramicStreamID!", targetVersion: "CeramicCommitID!", - claimID: "CeramicStreamID!", - claimVersion: "CeramicCommitID!" + claimID: "CeramicStreamID", + claimVersion: "CeramicCommitID" }, 'createAnnotation' ); +} export const mutationCreateContributorRelation = async ( composeClient: ComposeClient, @@ -421,6 +423,26 @@ export const queryResearchComponent = async ( ` ); +export const queryAnnotation = async ( + composeClient: ComposeClient, + id: string, + selection?: string +): Promise => genericEntityQuery( + composeClient, + id, + 'Annotation', + selection ?? + ` + comment + path + targetID + targetVersion + claimID + claimVersion + metadataPayload + ` +); + export async function genericEntityQuery( composeClient: ComposeClient, id: string, From befab97033655377183f6e99c993d3444a3b88eb Mon Sep 17 00:00:00 2001 From: m0ar Date: Fri, 13 Oct 2023 14:11:12 +0200 Subject: [PATCH 11/14] Add omitted claims test --- Makefile | 4 +--- test/root.spec.ts | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 35064ca..6525135 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,4 @@ test: clean-test npx ceramic daemon --config test.config.json &>/dev/null & sleep 5 node scripts/composites.mjs - # Kill lingering daemons without unsetting exit code of test - (npm test && pkill -f "ceramic daemon | ipfs daemon") \ - || (pkill -f "ceramic daemon | ipfs daemon"; exit 1) + npm test \ No newline at end of file diff --git a/test/root.spec.ts b/test/root.spec.ts index 8486534..9921b75 100644 --- a/test/root.spec.ts +++ b/test/root.spec.ts @@ -298,8 +298,8 @@ describe('ComposeDB nodes', () => { expect(response?.metadataPayload).toEqual("JSONPatch"); }); - test.skip('can omit claim', async () => { - // API fails on @relationDocument when the key is optional and omitted + test('can omit claim', async () => { + // API error on @relationDocument when the key is optional and omitted const data: Annotation = { comment: 'This is a cool object!', targetID: researchComponent.streamID, From 0b566a0a31d470c3f348ba7e1f8a478e88a3ff47 Mon Sep 17 00:00:00 2001 From: m0ar Date: Fri, 13 Oct 2023 14:44:53 +0200 Subject: [PATCH 12/14] Skip broken omit test until resolved --- Makefile | 7 ++++++- package.json | 1 + test/root.spec.ts | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 6525135..6dfd427 100644 --- a/Makefile +++ b/Makefile @@ -8,4 +8,9 @@ test: clean-test npx ceramic daemon --config test.config.json &>/dev/null & sleep 5 node scripts/composites.mjs - npm test \ No newline at end of file + # Kill daemons without losing test exit code for CI + if npm test; then \ + npm run kill; true; \ + else \ + npm run kill; false; \ + fi diff --git a/package.json b/package.json index 26c8149..df5d786 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "start": "next start", "lint": "next lint", "ceramic": "ceramic daemon --config composedb.config.json", + "kill": "pkill --full \"ceramic daemon|ipfs daemon\"", "test": "vitest --run --config vitest.config.ts" }, "author": "Edvard Hubinette", diff --git a/test/root.spec.ts b/test/root.spec.ts index 9921b75..57d1389 100644 --- a/test/root.spec.ts +++ b/test/root.spec.ts @@ -298,7 +298,7 @@ describe('ComposeDB nodes', () => { expect(response?.metadataPayload).toEqual("JSONPatch"); }); - test('can omit claim', async () => { + test.skip('can omit claim', async () => { // API error on @relationDocument when the key is optional and omitted const data: Annotation = { comment: 'This is a cool object!', From fe487fd9b5285112983862ce2db95b7676ab803f Mon Sep 17 00:00:00 2001 From: m0ar Date: Fri, 13 Oct 2023 17:51:21 +0200 Subject: [PATCH 13/14] Add test for version index resolution --- test/root.spec.ts | 170 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 162 insertions(+), 8 deletions(-) diff --git a/test/root.spec.ts b/test/root.spec.ts index 57d1389..c8fb35b 100644 --- a/test/root.spec.ts +++ b/test/root.spec.ts @@ -299,7 +299,8 @@ describe('ComposeDB nodes', () => { }); test.skip('can omit claim', async () => { - // API error on @relationDocument when the key is optional and omitted + // API error on @relationDocument when claimID omitted even if optional, + // under review by ceramic devs const data: Annotation = { comment: 'This is a cool object!', targetID: researchComponent.streamID, @@ -312,6 +313,117 @@ describe('ComposeDB nodes', () => { expect(response).toEqual(data); }); + test('can be accessed from research object', async () => { + const data: Annotation = { + comment: 'This is a cool object!', + targetID: researchObject.streamID, + targetVersion: researchObject.commitID, + claimID: claim.streamID, + claimVersion: claim.commitID + }; + + const annotation = await mutationCreateAnnotation(composeClient, data); + + const response = await queryResearchObject( + composeClient, + researchObject.streamID, + ` + annotations(first: 10) { + edges { + node { + targetID + targetVersion + id + } + } + } + ` + ); + const expected = { + node: { + targetID: researchObject.streamID, + targetVersion: researchObject.commitID, + id: annotation.streamID + } + }; + expect((response as any).annotations.edges).toContainEqual(expected); + }); + + test('can be accessed from research component', async () => { + const data: Annotation = { + comment: 'This is a cool component!', + targetID: researchComponent.streamID, + targetVersion: researchComponent.commitID, + claimID: claim.streamID, + claimVersion: claim.commitID + }; + + const annotation = await mutationCreateAnnotation(composeClient, data); + + const response = await queryResearchComponent( + composeClient, + researchComponent.streamID, + ` + annotations(first: 10) { + edges { + node { + targetID + targetVersion + id + } + } + } + ` + ); + const expected = { + node: { + targetID: researchComponent.streamID, + targetVersion: researchComponent.commitID, + id: annotation.streamID + } + }; + expect((response as any).annotations.edges).toContainEqual(expected); + }); + + test('can reply to another annotation', async () => { + const questionData: Annotation = { + comment: 'What do you tink about this?', + targetID: researchComponent.streamID, + targetVersion: researchComponent.commitID, + claimID: claim.streamID, + claimVersion: claim.commitID + }; + + const question = await mutationCreateAnnotation(composeClient, questionData); + + const replyData: Annotation = { + comment: 'Looks good!', + targetID: question.streamID, + targetVersion: question.commitID, + claimID: claim.streamID, + claimVersion: claim.commitID + }; + + const reply = await mutationCreateAnnotation(composeClient, replyData); + + const replyFromQuestion = await queryAnnotation( + composeClient, + question.streamID, + ` + replies(first: 10) { + edges { + node { + id + } + } + } + ` + ); + + // Verify that we can get the replies from the question + const expectedReply = { node: { id: reply.streamID }}; + expect((replyFromQuestion as any).replies.edges).toContainEqual(expectedReply); + }); }); describe('User', async () => { @@ -433,24 +545,66 @@ describe('ComposeDB nodes', () => { } ); + // Verify that queries return the fresh data const roResult = await queryResearchObject(composeClient, researchObjectV0.streamID); const rcResult = await queryResearchComponent(composeClient, componentV0.streamID); expect(roResult?.manifest).toEqual(newManifest); expect(rcResult?.researchObjectID).toEqual(researchObjectV0.streamID); - // Check that we can get the old state with the research object version at - // that point in time + // Verify that we can still get the data of a specific version const oldComponentState = await ceramic.loadStream(componentV0.commitID); expect(oldComponentState.content.researchObjectVersion) .toEqual(researchObjectV0.commitID); }); - }); + test('can resolve a specific version index', async () => { + const data: ResearchObject = { + title: 'Title 0', + manifest: A_CID + }; + const { streamID } = await mutationCreateResearchObject(composeClient, data); + + await waitAndSync(streamID); + const V1 = await mutationUpdateResearchObject( + composeClient, + { + id: streamID, + title: 'Title 1' + } + ); -}) + await waitAndSync(streamID); + const V2 = await mutationUpdateResearchObject( + composeClient, + { + id: streamID, + title: 'Title 2' + } + ); + + await waitAndSync(streamID); + const versionToResolve = 1; + const stream = await ceramic.loadStream(streamID); + + // Find CIDs identifying anchor commits + const anchorCIDs = stream.state.log + .filter(c => c.type !== 2) + .map(c => c.cid); + + // Find commits with commit CIDs not in the anchor CID list + const dataCommits = stream.allCommitIds + .filter(c => !anchorCIDs.includes(c.commit)) + + // Load state as of the n:th data commit in the stream + const streamAtV0 = await ceramic.loadStream(dataCommits[versionToResolve]) + expect(streamAtV0.content.title).toEqual('Title 1') // yay + + }); + }); +}); const freshClient = () => - new ComposeClient({ ceramic, definition: definition as RuntimeCompositeDefinition }) + new ComposeClient({ ceramic, definition: definition as RuntimeCompositeDefinition }); /** Sync between fast updates to same streams to make tests less flaky, * also allowing for an anchor commit to pop in between @@ -458,5 +612,5 @@ const freshClient = () => const waitAndSync = async (streamID: string) => { await setTimeout(100); const stream = await ceramic.loadStream(streamID); - await stream.sync(); -} + await stream.sync(); +}; \ No newline at end of file From 08f613395b4c157a609a9856980f48b88fea6250 Mon Sep 17 00:00:00 2001 From: m0ar Date: Mon, 16 Oct 2023 09:14:53 +0200 Subject: [PATCH 14/14] Simplify version index resolution --- test/root.spec.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/root.spec.ts b/test/root.spec.ts index c8fb35b..563b8c8 100644 --- a/test/root.spec.ts +++ b/test/root.spec.ts @@ -24,6 +24,7 @@ import { CeramicClient } from '@ceramicnetwork/http-client' import { writeComposite } from 'scripts/composites.mjs' import { setTimeout } from "timers/promises"; import { Annotation, Attestation, Claim, Profile, ResearchObject } from '@/types' +import { CommitID } from '@ceramicnetwork/streamid' const CERAMIC_API = 'http:/localhost:7007' const A_CID = 'bafybeibeaampol2yz5xuoxex7dxri6ztqveqrybzfh5obz6jrul5gb4cf4' @@ -586,19 +587,18 @@ describe('ComposeDB nodes', () => { const versionToResolve = 1; const stream = await ceramic.loadStream(streamID); - // Find CIDs identifying anchor commits - const anchorCIDs = stream.state.log + // Find n:th commit, excluding anchor commits + const commitCID = stream.state.log .filter(c => c.type !== 2) - .map(c => c.cid); + .map(c => c.cid) + .at(versionToResolve); - // Find commits with commit CIDs not in the anchor CID list - const dataCommits = stream.allCommitIds - .filter(c => !anchorCIDs.includes(c.commit)) + expect(commitCID).not.toBeUndefined(); + const commit = CommitID.make(stream.id, commitCID!); // Load state as of the n:th data commit in the stream - const streamAtV0 = await ceramic.loadStream(dataCommits[versionToResolve]) - expect(streamAtV0.content.title).toEqual('Title 1') // yay - + const streamAtV0 = await ceramic.loadStream(commit); + expect(streamAtV0.content.title).toEqual('Title 1'); // yay }); }); });