From 3a26d3e498bdcd07c8a769329110dfcb4a37d718 Mon Sep 17 00:00:00 2001 From: "bob@babbageproject.com" Date: Thu, 3 Apr 2025 21:32:22 +0100 Subject: [PATCH 1/6] restricted message length to 256 chars, in case black hackers are tempted, set max blocks validation --- frontend/src/App.tsx | 12 +++++++----- frontend/src/utils/utils.ts | 7 +++++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index fb3f3b3..821dc45 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -6,7 +6,7 @@ import { LinearProgress, Container } from '@mui/material' -import { lock, startBackgroundUnlockWatchman } from './utils/utils' +import { lock, startBackgroundUnlockWatchman, truncate } from './utils/utils' import { NoMncModal } from 'metanet-react-prompt' import { LookupResolver, Transaction, Utils, WalletClient } from '@bsv/sdk' import { HodlockerToken, Token } from './types/types' @@ -242,14 +242,16 @@ export const App: React.FC = () => {
} - }) => setMessage(e.target.value)} + inputProps={{ maxLength: 256 }} + onChange={(e: React.ChangeEvent) => { + const truncated = truncate(e.target.value, 256) + setMessage(truncated) + }} />

diff --git a/frontend/src/utils/utils.ts b/frontend/src/utils/utils.ts index 0132b7d..bb4859c 100644 --- a/frontend/src/utils/utils.ts +++ b/frontend/src/utils/utils.ts @@ -65,8 +65,8 @@ export const lock = async ( setHodlocker: React.Dispatch>, hodlocker: HodlockerToken[] ): Promise => { - if (lockBlockCount < 0) { - throw new Error('Lock block count must be zero or positive') + if (lockBlockCount < 1 || lockBlockCount > 10) { + throw new Error('Lock block count must be positive and less than 10') } if (satoshis < 10 || satoshis > 1000) { throw new Error( @@ -76,6 +76,9 @@ export const lock = async ( if (message.length < 1) { throw new Error('Message is required for the lock') } + if (message.length > 260) { + throw new Error('Message is too long') + } const currentBlockHeightObj = await constants.walletClient.getHeight() const lockBlockHeight = currentBlockHeightObj.height + lockBlockCount From 9e276ee74e187f0eb6b86ecd31eda9e232ea2e4b Mon Sep 17 00:00:00 2001 From: Bob <27419107+raspi-user@users.noreply.github.com> Date: Fri, 4 Apr 2025 13:35:26 +0100 Subject: [PATCH 2/6] Update README.md --- README.md | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/README.md b/README.md index 8d2dfb4..1cbf3e1 100644 --- a/README.md +++ b/README.md @@ -53,3 +53,109 @@ The one constant is `deployment-info.json`. ## License [Open BSV License](./LICENSE.txt) + +# Locksmith + +## "For those of us who think purposely freezing our money for a cause is cool." + +### Locksmith is a Bitcoin SV (BSV) application that lets users lock a small amount of satoshis in a smart contract until a specified future block height. This time-lock is accompanied by a custom message and cannot be redeemed until the blockchain reaches the unlock height. + +## Features + +- Lock 10–1000 satoshis for 1–10 blocks. +- Attach a personal message to each lock. +- View current active locks and the number of blocks remaining. +- Automatically redeem funds once the lock expires. +- Lookup service and topic manager to manage the overlay. + +## Tech Stack + +| Layer | Technology | +|----------------|--------------------------------------------| +| Frontend | React + TypeScript + MUI | +| Smart Contract | sCrypt (Locksmith contract) | +| Blockchain | Bitcoin SV (via `@bsv/sdk`, `@bsv/overlay`) | +| Backend | Node.js + Express + MongoDB | +| Storage | MongoDB (lock metadata) | +| Overlay | LookupService + TopicManager via `@bsv/overlay` | + +## Screenshots + +The frontend allows you to lock satoshis with a reason and see other users' active locks when it is deployed using CARS (see above). + +## Getting Started + +### Prerequisites + +- Node.js ≥ v18 +- MongoDB running locally or remotely +- BRC-100 Wallet integration (get your Metanet wallet here) +- Docker (optional, but integral if using LARS (see above)) + +## Frontend Setup +```bash +cd frontend +npm install +npm run start +Visit: http://localhost:8090 +``` +## Backend Setup +```bash +cd backend +npm install +npm run build +npm run start +Server runs on: http://localhost:8080 +``` + +## Contracts +### Locksmith (sCrypt) +```ts +class Locksmith extends SmartContract { + @prop() address: Addr + @prop() lockUntilHeight: bigint + @prop() message: ByteString + + @method(SigHash.ANYONECANPAY_NONE) + unlock(sig: Sig, pubKey: PubKey) { + assert(lock conditions...) + } +} +``` +## The contract enforces: +- Lock until a future block height +- Signature verification +- Message attachment for context + +## Lock Flow +### Lock funds +- User inputs satoshis, block duration, and message. +- Transaction is created using walletClient.createAction(). +- Funds are locked in a smart contract and broadcast via SHIPBroadcaster. + +### Monitor locks +- The frontend polls the overlay every 10 seconds. +- Active locks are displayed with their remaining blocks. + +### Unlock funds +- When the lock expires, the app automatically constructs and broadcasts a redeeming transaction using the original contract and signature. + +## Overlay +- Two overlay components handle indexing and filtering: +- HodlockerLookupService: Tracks active locks in MongoDB. +- HodlockerTopicManager: Identifies outputs created using the Locksmith contract. + +## Directory Structure +```css +locksmith/ +├── frontend/ +│ └── App.tsx +├── backend/ +│ ├── src/ +│ │ ├── contracts/Locksmith.ts +│ │ ├── lookup-services/ +│ │ └── topic-managers/ +├── artifacts/ +├── types/ +├── mod.ts +``` From 2941c50b31aad64ab6600ee1c142804a4ca21a43 Mon Sep 17 00:00:00 2001 From: Bob <27419107+raspi-user@users.noreply.github.com> Date: Fri, 4 Apr 2025 14:32:24 +0100 Subject: [PATCH 3/6] Update README.md --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1cbf3e1..bec9664 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,7 @@ The one constant is `deployment-info.json`. ## Screenshots The frontend allows you to lock satoshis with a reason and see other users' active locks when it is deployed using CARS (see above). +![App page](https://github.com/user-attachments/assets/9363c9a5-0535-4805-a376-a0322aeef074) ## Getting Started @@ -89,7 +90,7 @@ The frontend allows you to lock satoshis with a reason and see other users' acti - Node.js ≥ v18 - MongoDB running locally or remotely -- BRC-100 Wallet integration (get your Metanet wallet here) +- [BRC-100](https://github.com/bitcoin-sv/BRCs/blob/master/wallet/0100.md) Wallet integration (get your [Metanet Desktop](https://github.com/bitcoin-sv/metanet-desktop/releases) wallet) - Docker (optional, but integral if using LARS (see above)) ## Frontend Setup @@ -109,7 +110,8 @@ Server runs on: http://localhost:8080 ``` ## Contracts -### Locksmith (sCrypt) +### Locksmith +Built using: ([sCrypt.io](https://scrypt.io/)) ```ts class Locksmith extends SmartContract { @prop() address: Addr @@ -130,15 +132,15 @@ class Locksmith extends SmartContract { ## Lock Flow ### Lock funds - User inputs satoshis, block duration, and message. -- Transaction is created using walletClient.createAction(). -- Funds are locked in a smart contract and broadcast via SHIPBroadcaster. +- Transaction is created using `walletClient.createAction()`. +- Funds are locked in a smart contract and broadcast via `SHIPBroadcaster()`. ### Monitor locks - The frontend polls the overlay every 10 seconds. - Active locks are displayed with their remaining blocks. ### Unlock funds -- When the lock expires, the app automatically constructs and broadcasts a redeeming transaction using the original contract and signature. +- When the lock expires, the app automatically constructs and broadcasts a redeeming transaction using the `walletClient.createAction()` and the original contract and signature. ## Overlay - Two overlay components handle indexing and filtering: From 2366a23b008cd6ac47eeff1866d9774803b35bfd Mon Sep 17 00:00:00 2001 From: Bob <27419107+raspi-user@users.noreply.github.com> Date: Fri, 4 Apr 2025 14:44:02 +0100 Subject: [PATCH 4/6] Update README.md --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index bec9664..1d0ca82 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ The one constant is `deployment-info.json`. # Locksmith -## "For those of us who think purposely freezing our money for a cause is cool." +### "For those of us who think purposely freezing our money for a cause is cool." ### Locksmith is a Bitcoin SV (BSV) application that lets users lock a small amount of satoshis in a smart contract until a specified future block height. This time-lock is accompanied by a custom message and cannot be redeemed until the blockchain reaches the unlock height. @@ -142,10 +142,11 @@ class Locksmith extends SmartContract { ### Unlock funds - When the lock expires, the app automatically constructs and broadcasts a redeeming transaction using the `walletClient.createAction()` and the original contract and signature. -## Overlay +## Overlay +[documentation](https://docs.projectbabbage.com/docs/concepts/overlays) - Two overlay components handle indexing and filtering: -- HodlockerLookupService: Tracks active locks in MongoDB. -- HodlockerTopicManager: Identifies outputs created using the Locksmith contract. +- LookupService: Tracks active locks in the MongoDB. +- TopicManager: Identifies outputs created using the Locksmith contract. ## Directory Structure ```css From 0d882bad8e06b48d6b05d1ac042d626c19013615 Mon Sep 17 00:00:00 2001 From: Bob <27419107+raspi-user@users.noreply.github.com> Date: Fri, 4 Apr 2025 14:46:15 +0100 Subject: [PATCH 5/6] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1d0ca82..748a51b 100644 --- a/README.md +++ b/README.md @@ -96,14 +96,14 @@ The frontend allows you to lock satoshis with a reason and see other users' acti ## Frontend Setup ```bash cd frontend -npm install +npm i npm run start Visit: http://localhost:8090 ``` ## Backend Setup ```bash cd backend -npm install +npm i npm run build npm run start Server runs on: http://localhost:8080 @@ -140,7 +140,7 @@ class Locksmith extends SmartContract { - Active locks are displayed with their remaining blocks. ### Unlock funds -- When the lock expires, the app automatically constructs and broadcasts a redeeming transaction using the `walletClient.createAction()` and the original contract and signature. +- When the lock expires, the app automatically constructs and broadcasts a redeeming transaction using `walletClient.createAction()` and the original contract and signature. ## Overlay [documentation](https://docs.projectbabbage.com/docs/concepts/overlays) From d2e9f2175b76d713445bf2ac7ca82a267b8e4fa9 Mon Sep 17 00:00:00 2001 From: Ty J Everett Date: Fri, 5 Jun 2026 14:05:08 -0700 Subject: [PATCH 6/6] Use p2ppsr CARS packages --- package-lock.json | 294 +++++++++++++++++++++++----------------------- package.json | 4 +- 2 files changed, 149 insertions(+), 149 deletions(-) diff --git a/package-lock.json b/package-lock.json index 135af4c..b125238 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,27 +21,8 @@ "ts-standard": "^12.0.2" }, "devDependencies": { - "@bsv/cars-cli": "^1.1.4", - "@bsv/lars": "1.4.0" - } - }, - "node_modules/@bsv/cars-cli": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@bsv/cars-cli/-/cars-cli-1.1.4.tgz", - "integrity": "sha512-KlkzrzBW9vWrSoM6VqqOAiAuNF7V9DXrBTXlMY3JfDQCuB5ACjYT0iFVbtbioBzUqIw8LSP9f5Hug1QgU/jb5g==", - "dev": true, - "dependencies": { - "@bsv/sdk": "^1.3.33", - "axios": "^1.4.0", - "chalk": "^4.1.2", - "cli-table3": "^0.6.5", - "commander": "^10.0.0", - "inquirer": "^12.1.0", - "ora": "^6.1.2", - "tar": "^6.1.11" - }, - "bin": { - "cars": "dist/index.js" + "@p2ppsr/cars-cli": "^1.2.13", + "@p2ppsr/lars": "^1.5.11" } }, "node_modules/@bsv/gasp": { @@ -53,45 +34,6 @@ "@bsv/sdk": "^1.1.6" } }, - "node_modules/@bsv/lars": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@bsv/lars/-/lars-1.4.0.tgz", - "integrity": "sha512-X9pwUSnV+FQYNogLD7vIxML7xdr0/Y2pxj7y+2ox4GfwjivrfFratgrhGoPK/NPzkxTUkpoKKrIboIlunFX5Hw==", - "dev": true, - "license": "SEE LICENSE IN LICENSE.txt", - "dependencies": { - "@bsv/sdk": "^1.4.12", - "@bsv/wallet-toolbox-client": "^1.2.30", - "axios": "^1.7.9", - "chalk": "^5.3.0", - "chokidar": "^3.5.3", - "commander": "^10.0.0", - "dotenv": "^16.3.1", - "figlet": "^1.8.0", - "fs-extra": "^11.1.1", - "inquirer": "^12.1.0", - "ngrok": "^5.0.0-beta.2", - "open": "^10.1.0", - "tsx": "^3.12.7", - "yaml": "^2.2.1" - }, - "bin": { - "lars": "dist/index.js" - } - }, - "node_modules/@bsv/lars/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/@bsv/overlay": { "version": "0.1.27", "resolved": "https://registry.npmjs.org/@bsv/overlay/-/overlay-0.1.27.tgz", @@ -110,15 +52,24 @@ "license": "SEE LICENSE IN LICENSE.txt" }, "node_modules/@bsv/wallet-toolbox-client": { - "version": "1.2.35", - "resolved": "https://registry.npmjs.org/@bsv/wallet-toolbox-client/-/wallet-toolbox-client-1.2.35.tgz", - "integrity": "sha512-qW/4e6PhH9YZgxQPxSqCn3oLEuTwRihrH6LFJHtcU7f8nQwJWIso1AEDbyQhIkKY1bXmPS4BooDhmixpkX+cZw==", + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/@bsv/wallet-toolbox-client/-/wallet-toolbox-client-2.1.28.tgz", + "integrity": "sha512-kxkQXQxff0xk9IfWjSJW5xq1orlGfoG0ZYG3MFOmGXykMeTruYp++79ESIt0M9xtusMuB78ktaJvcdeuY1T5mg==", "dev": true, "license": "SEE LICENSE IN license.md", "dependencies": { - "@bsv/sdk": "^1.4.18" + "@bsv/sdk": "2.1.2", + "hash-wasm": "^4.12.0", + "idb": "^8.0.2" } }, + "node_modules/@bsv/wallet-toolbox-client/node_modules/@bsv/sdk": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@bsv/sdk/-/sdk-2.1.2.tgz", + "integrity": "sha512-648RLJEkbH+vFt5Q65orm3jdmZDnmLdt8YUpyQcctxVYwHvhEN/7RxMXjA+OnNLHZV1IOstqwXQ+4ar89KUs7Q==", + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt" + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -925,6 +876,19 @@ } } }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", @@ -975,6 +939,79 @@ "node": ">= 8" } }, + "node_modules/@p2ppsr/cars-cli": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@p2ppsr/cars-cli/-/cars-cli-1.2.13.tgz", + "integrity": "sha512-l7yEdHP60DRLd9xwgn+JnCVfTPXLdS/wEN7rGcn7LonT0uZcWdvJ59rOMRhaL59o347Uo2VWEy4iZXZKU+Xzkg==", + "dev": true, + "dependencies": { + "@bsv/sdk": "^2.0.1", + "@bsv/wallet-toolbox-client": "^2.0.5", + "axios": "^1.4.0", + "chalk": "^4.1.2", + "cli-table3": "^0.6.5", + "commander": "^10.0.0", + "inquirer": "^12.1.0", + "ora": "^6.1.2", + "tar": "^7.5.7" + }, + "bin": { + "cars": "dist/index.js" + } + }, + "node_modules/@p2ppsr/cars-cli/node_modules/@bsv/sdk": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@bsv/sdk/-/sdk-2.1.4.tgz", + "integrity": "sha512-FrX5knwUZXPJHVaE9usoevwWqLItiWCFIr2jD20W3Ke6I+IHbDyivMF8MKtrWSeOxeanFx9v8YLeN6/qzAtlzQ==", + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt" + }, + "node_modules/@p2ppsr/lars": { + "version": "1.5.11", + "resolved": "https://registry.npmjs.org/@p2ppsr/lars/-/lars-1.5.11.tgz", + "integrity": "sha512-y+W79pnm2Zai/4lXelvJITd72mzAynjYALLwSBcL+jN/NHnu3DD6iCPhx/wAj5yC0lgxJJBnI36BO+Dmr7LAvg==", + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "dependencies": { + "@bsv/sdk": "^2.0.14", + "@bsv/wallet-toolbox-client": "^2.1.22", + "axios": "^1.7.9", + "chalk": "^5.3.0", + "chokidar": "^3.5.3", + "commander": "^10.0.0", + "dotenv": "^16.3.1", + "figlet": "^1.8.0", + "fs-extra": "^11.1.1", + "inquirer": "^12.1.0", + "ngrok": "^5.0.0-beta.2", + "open": "^10.1.0", + "tsx": "^3.12.7", + "yaml": "^2.2.1" + }, + "bin": { + "lars": "dist/index.js" + } + }, + "node_modules/@p2ppsr/lars/node_modules/@bsv/sdk": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@bsv/sdk/-/sdk-2.1.4.tgz", + "integrity": "sha512-FrX5knwUZXPJHVaE9usoevwWqLItiWCFIr2jD20W3Ke6I+IHbDyivMF8MKtrWSeOxeanFx9v8YLeN6/qzAtlzQ==", + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt" + }, + "node_modules/@p2ppsr/lars/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -1996,13 +2033,13 @@ } }, "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/cli-cursor": { @@ -3803,32 +3840,6 @@ "node": ">=14.14" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4268,6 +4279,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hash-wasm": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.12.0.tgz", + "integrity": "sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ==", + "dev": true, + "license": "MIT" + }, "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", @@ -4391,6 +4409,13 @@ "node": ">=0.10.0" } }, + "node_modules/idb": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/idb/-/idb-8.0.3.tgz", + "integrity": "sha512-LtwtVyVYO5BqRvcsKuB2iUMnHwPVByPCXFXOpuU96IZPPoPN6xjOGxZQ74pgSVVLQWtUOYgyeL4GE98BY5D3wg==", + "dev": true, + "license": "ISC" + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -5519,53 +5544,26 @@ } }, "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "minipass": "^7.1.2" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" + "node": ">= 18" } }, "node_modules/mongodb": { @@ -7540,21 +7538,20 @@ } }, "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "version": "7.5.16", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.16.tgz", + "integrity": "sha512-56adEpPMouktRlBLXiaYFFzZ/3+JXa8P9n7WbR+ibIjtviN55mEaOkiysCnPnWm+7kkui1Dn8J9l+g6zV8731w==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/tarn": { @@ -8140,11 +8137,14 @@ } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, - "license": "ISC" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } }, "node_modules/yaml": { "version": "2.7.1", diff --git a/package.json b/package.json index 97c64c8..6c427e1 100644 --- a/package.json +++ b/package.json @@ -20,8 +20,8 @@ "overlay-services" ], "devDependencies": { - "@bsv/cars-cli": "^1.1.4", - "@bsv/lars": "1.4.0" + "@p2ppsr/cars-cli": "^1.2.13", + "@p2ppsr/lars": "^1.5.11" }, "dependencies": { "@bsv/overlay": "^0.1.27",