diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 53c37a1..0000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -dist \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index e68b503..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - parser: "@typescript-eslint/parser", // Specifies the ESLint parser - env: { - node: true, // This line tells ESLint that the code will run in a Node.js environment - }, - extends: [ - "eslint:recommended", // Use the recommended rules from eslint - "plugin:@typescript-eslint/recommended", // Use the recommended rules from @typescript-eslint/eslint-plugin - ], - parserOptions: { - ecmaVersion: 2020, // Allows parsing of modern ECMAScript features - sourceType: "module", // Allows using import/export statements - }, - rules: { - // Place your custom rules here - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "no-fallthrough": "off", - }, -}; diff --git a/.github/workflows/deploy-image.yaml b/.github/workflows/deploy-image.yaml new file mode 100644 index 0000000..b18f182 --- /dev/null +++ b/.github/workflows/deploy-image.yaml @@ -0,0 +1,54 @@ +name: Build and Push Docker Image to GitHub Container Registry + +on: + push: + branches: + - main + - feature/encore # Add your branch here + +permissions: + contents: read + packages: write # Needed to push to GitHub Packages (ghcr.io) + +jobs: + build-push-image: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} # GitHub automatically provides this token + + - name: Download Encore CLI script + # Using curl directly as suggested in some setups + run: curl --output install.sh -L https://encore.dev/install.sh + + - name: Install Encore CLI + run: bash install.sh + + - name: Build Docker image with Encore + # Using a fixed image name 'ordfs-server'. + # Remove --config flag for now, assuming no complex infra config needed yet. + run: /home/runner/.encore/bin/encore build docker ordfs-server + + - name: Tag Docker image + # Tags the image with 'latest' and a unique SHA for ghcr.io + run: | + IMAGE_ID=ghcr.io/${{ github.repository }}/ordfs-server + # Change all uppercase to lowercase + IMAGE_ID=$(echo $IMAGE_ID | tr '[:upper:]' '[:lower:]') + echo IMAGE_ID=$IMAGE_ID + docker tag ordfs-server:latest $IMAGE_ID:latest + docker tag ordfs-server:latest $IMAGE_ID:${{ github.sha }} + + - name: Push Docker image to ghcr.io + run: | + IMAGE_ID=ghcr.io/${{ github.repository }}/ordfs-server + IMAGE_ID=$(echo $IMAGE_ID | tr '[:upper:]' '[:lower:]') + docker push $IMAGE_ID:latest + docker push $IMAGE_ID:${{ github.sha }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 1dcef2d..00824be 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,7 @@ node_modules -.env \ No newline at end of file +.env +dist +encore.gen.go +encore.gen.cue +/.encore +/encore.gen diff --git a/DigitalOceanApp.md b/DigitalOceanApp.md index 500491f..417241f 100644 --- a/DigitalOceanApp.md +++ b/DigitalOceanApp.md @@ -1,7 +1,7 @@ # Setting up ordfs-server on DigitalOcean App Platform ## Go from zero to a self-hosted Bitcoin website in just five minutes! -1. Fork the [ordfs-server repository on GitHub](https://github.com/shruggr/ordfs-server). +1. Fork the [ordfs-server repository on GitHub](https://github.com/b-open-io/ordfs-server). 2. Log into your DigitalOcean dashboard. 3. Navigate to "Apps" in the "Manage" menu. 4. Click on "Create App". diff --git a/README.md b/README.md index 27aa0c2..456b3e7 100644 --- a/README.md +++ b/README.md @@ -1,63 +1,93 @@ # OrdFS Server -This project provides an ExpressJS server to host your website from an Ordinal. +This project provides a server, built with [Encore.dev](https://encore.dev/), to serve websites and files inscribed on the Bitcoin SV blockchain. It supports resolving inscriptions via Transaction IDs (TXIDs), Outpoints (TXID_vout), and DNS-based pointers. -### Prerequisites -- NodeJS (v18+) -- NPM (comes with NodeJS) -- tsc (npm install -g typescript) +## Features -### Stand-alone -`npm install` -`npm run start` +* Serves inscription content directly from BSV. +* Resolves pointers via TXID, Outpoint (e.g., `txid_0`), and DNS TXT records. +* Built with Encore.ts for a modern, type-safe backend. +* Includes basic block information endpoints (e.g., `/v1/bsv/block/latest`). -Navigate to `http://localhost:8080/` to view the demo page, or `http://localhost:8080/971388081f6601b0e502adbfceef68d152e7f27ba5aff0230d2567aaa8acb768_0` to render an inscription. +## Prerequisites -### Integrate with existing Express server -``` -import { RegisterRoutes } from 'ordfs-server'; +* **Node.js** (v18+ recommended) +* **Bun** (for package management and running scripts - `npm install -g bun`) +* **Encore CLI:** Follow the installation instructions at [encore.dev/docs/install](https://encore.dev/docs/install). +* **Docker Desktop:** Required by Encore for running local development services (like databases, if used - Redis is used by this project for caching). Ensure Docker is running. -const app = express(); -... +## Getting Started -RegisterRoutes(app); -``` +1. **Clone the repository:** + ```bash + git clone + cd ordfs-server + ``` -### DNS Registration -2 DNS records are required - -1. `A` or `CNAME` record to point domain to wherever this server is running -2. `TXT` record for the same domain, which points sever to InscriptionId which should function as home page for the domain - - `ordfs=` - - hostname should be prefixed with `_ordfs.` ex `_ordfs.subdomain.example.com` - -### Usage -To get block height and hash, make a GET request to `/v1/{network}/block/latest` - -```html - -``` +2. **Install dependencies:** + ```bash + bun install + ``` + +3. **Initialize Encore (if first time running an Encore app):** + You might need to run `encore auth login` if you haven't used Encore before. + +4. **Run the server:** + ```bash + encore run + ``` + This will start the Encore development server, typically at `http://localhost:4000`. You'll also get a link to the Encore local development dashboard (usually `http://localhost:9400`). + +## Usage + +Once the server is running: + +* **Root Page:** Navigate to `http://localhost:4000/` to view the main page. +* **Fetch Inscription by TXID/Outpoint:** + * `http://localhost:4000/` + * `http://localhost:4000/` (e.g., `http://localhost:4000/c7464f399365837cb6f72820f63a37f0709dd9f45f771243ebbac1d07716d72a_0`) + * Can also be a B protocol or Ordinal TXID - it will resolve to the first one. +* **Fetch Inscription by DNS Pointer:** + * `http://localhost:4000/` (e.g., `http://localhost:4000/satoshi.bsv`) +* **Block Information:** + * `http://localhost:4000/v1/bsv/block/latest` + * `http://localhost:4000/v1/bsv/block/height/:height` + * `http://localhost:4000/v1/bsv/block/hash/:hash` + +### DNS Registration for Pointers + +To use DNS pointers: + +1. Ensure your domain's `A` or `CNAME` record points to the server where this Ordfs instance is running. +2. Create a `TXT` record for the domain/subdomain you wish to use. The `TXT` record should point to the Inscription ID (TXID or Outpoint) that serves as the content for that name. + * Format: `ordfs=` (where InscriptionID is `txid` or `txid_vout`) + * Hostname: Prefix the hostname with `_ordfs.`. For example, if your pointer is `mypointer.example.com`, the TXT record should be for `_ordfs.mypointer.example.com`. -### Config -#### General -`ORDFS-NAME=` Name of your OrdFS instance. This will be displayed on the demo page. - -#### BTC Node -Set the following ENVIRONMENT VARS to point to your BTC Node. REST server must be enabled. -`BTC_HOST=` -`BTC_PORT=` -`BTC_UN=` -`BTC_PW=` - -#### BSV Node (Optional. JungleBus is used as a fallback if not configured) -Set the following ENVIRONMENT VARS to point to your BSV Node. REST server must be enabled. -`BITCOIN_HOST=` -`BITCOIN_PORT=` -`BITCOIN_UN=` -`BITCOIN_PW=` \ No newline at end of file +## Project Structure & Architecture + +The server is built using Encore and is structured into services: + +* **`apiService`**: Handles incoming user requests, routing, serving the main HTML page, and orchestrating calls to other services. +* **`bitcoinService`**: Responsible for direct interaction with BSV data sources, fetching inscription content, and providing block information. + +For more details on the migration and architecture, see `plan.md`. + +## Deployment + +For deploying to DigitalOcean's App Platform, refer to the detailed guide: [Deploying to DigitalOcean App Platform](./DigitalOceanApp.md). + +## Configuration + +* **Redis for Caching:** The application uses Redis for caching inscription data. Encore manages the Redis instance locally when you run `encore run` (via Docker). For cloud deployments, Encore can provision Redis. + + +## Linting and Formatting + +This project uses Biome for linting and formatting. +```bash +bun lint +bun format +# To fix issues: +bun lint:fix +bun lint:fix:unsafe +``` diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..e683be9 --- /dev/null +++ b/biome.json @@ -0,0 +1,69 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "organizeImports": { "enabled": true }, + "linter": { + "enabled": true, + "rules": { + "recommended": false, + "complexity": { + "noExtraBooleanCast": "error", + "noMultipleSpacesInRegularExpressionLiterals": "error", + "noUselessCatch": "error", + "noWith": "error" + }, + "correctness": { + "noConstAssign": "error", + "noConstantCondition": "error", + "noEmptyCharacterClassInRegex": "error", + "noEmptyPattern": "error", + "noGlobalObjectCalls": "error", + "noInvalidBuiltinInstantiation": "error", + "noInvalidConstructorSuper": "error", + "noNonoctalDecimalEscape": "error", + "noPrecisionLoss": "error", + "noSelfAssign": "error", + "noSetterReturn": "error", + "noSwitchDeclarations": "error", + "noUndeclaredVariables": "error", + "noUnreachable": "error", + "noUnreachableSuper": "error", + "noUnsafeFinally": "error", + "noUnsafeOptionalChaining": "error", + "noUnusedLabels": "error", + "noUnusedPrivateClassMembers": "error", + "noUnusedVariables": "error", + "useIsNan": "error", + "useValidForDirection": "error", + "useYield": "error" + }, + "style": { "noNonNullAssertion": "off" }, + "suspicious": { + "noAsyncPromiseExecutor": "error", + "noCatchAssign": "error", + "noClassAssign": "error", + "noCompareNegZero": "error", + "noControlCharactersInRegex": "error", + "noDebugger": "error", + "noDuplicateCase": "error", + "noDuplicateClassMembers": "error", + "noDuplicateObjectKeys": "error", + "noDuplicateParameters": "error", + "noEmptyBlockStatements": "error", + "noExplicitAny": "off", + "noFallthroughSwitchClause": "off", + "noFunctionAssign": "error", + "noGlobalAssign": "error", + "noImportAssign": "error", + "noMisleadingCharacterClass": "error", + "noPrototypeBuiltins": "error", + "noRedeclare": "error", + "noShadowRestrictedNames": "error", + "noSparseArray": "error", + "noUnsafeNegation": "error", + "useGetterReturn": "error", + "useValidTypeof": "error" + } + }, + "ignore": ["**/dist"] + } +} diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..27b365c --- /dev/null +++ b/bun.lock @@ -0,0 +1,666 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "ordfs-server", + "dependencies": { + "@ts-bitcoin/core": "^2.2.0", + "axios": "^1.9.0", + "bitcoin-core": "5.0.0", + "bitcore-lib": "^10.9.0", + "cors": "^2.8.5", + "cross-fetch": "^4.1.0", + "dotenv": "^16.5.0", + "ejs": "^3.1.10", + "encore.dev": "^1.46.21", + "express": "5.1.0", + "http-errors": "^2.0.0", + "ioredis": "^5.6.1", + }, + "devDependencies": { + "@biomejs/biome": "^1.9.4", + "@types/bitcore-lib": "^0.15.6", + "@types/cors": "^2.8.18", + "@types/ejs": "^3.1.5", + "@types/express": "5.0.1", + "@types/http-errors": "^2.0.4", + "@types/node": "^22.15.16", + "nodemon": "^3.1.10", + "ts-node": "^10.9.2", + "typescript": "^5.8.3", + }, + }, + }, + "overrides": { + "whatwg-url": "^14.0.0", + }, + "packages": { + "@biomejs/biome": ["@biomejs/biome@1.9.4", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "1.9.4", "@biomejs/cli-darwin-x64": "1.9.4", "@biomejs/cli-linux-arm64": "1.9.4", "@biomejs/cli-linux-arm64-musl": "1.9.4", "@biomejs/cli-linux-x64": "1.9.4", "@biomejs/cli-linux-x64-musl": "1.9.4", "@biomejs/cli-win32-arm64": "1.9.4", "@biomejs/cli-win32-x64": "1.9.4" }, "bin": { "biome": "bin/biome" } }, "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog=="], + + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@1.9.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw=="], + + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@1.9.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg=="], + + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@1.9.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g=="], + + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@1.9.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA=="], + + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@1.9.4", "", { "os": "linux", "cpu": "x64" }, "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg=="], + + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@1.9.4", "", { "os": "linux", "cpu": "x64" }, "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg=="], + + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@1.9.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg=="], + + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@1.9.4", "", { "os": "win32", "cpu": "x64" }, "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA=="], + + "@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="], + + "@ioredis/commands": ["@ioredis/commands@1.2.0", "", {}, "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.1", "", {}, "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.4.15", "", {}, "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], + + "@ts-bitcoin/core": ["@ts-bitcoin/core@2.2.0", "", { "dependencies": { "aes": "0.1.0", "bitcoin-elliptic": "^7.0.1", "bn.js": "^5.1.1", "bs58": "4.0.1", "chai": "^4.2.0", "hash.js": "^1.1.7", "is-hex": "1.1.3", "pbkdf2": "3.1.1", "randombytes": "^2.1.0" } }, "sha512-txOTdUXqMMoadNg1qlR+p6loMKL100IO0TpaWsBbvb2M1reqd3yrvIDwPIHHG9YZ3p2yvNdJFIOmhRrR23HovQ=="], + + "@tsconfig/node10": ["@tsconfig/node10@1.0.9", "", {}, "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA=="], + + "@tsconfig/node12": ["@tsconfig/node12@1.0.11", "", {}, "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag=="], + + "@tsconfig/node14": ["@tsconfig/node14@1.0.3", "", {}, "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow=="], + + "@tsconfig/node16": ["@tsconfig/node16@1.0.4", "", {}, "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA=="], + + "@types/bitcore-lib": ["@types/bitcore-lib@0.15.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-CtKDBgSBubPXZ0wFeCiUCSdzH+cuy6nFya3FboOqf44evi+OmkQPqEg3ASMpmPDYE8vkcxV302Iu8lZqCjYieg=="], + + "@types/body-parser": ["@types/body-parser@1.19.2", "", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g=="], + + "@types/connect": ["@types/connect@3.4.35", "", { "dependencies": { "@types/node": "*" } }, "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ=="], + + "@types/cors": ["@types/cors@2.8.18", "", { "dependencies": { "@types/node": "*" } }, "sha512-nX3d0sxJW41CqQvfOzVG1NCTXfFDrDWIghCZncpHeWlVFd81zxB/DLhg7avFg6eHLCRX7ckBmoIIcqa++upvJA=="], + + "@types/ejs": ["@types/ejs@3.1.5", "", {}, "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg=="], + + "@types/express": ["@types/express@5.0.1", "", { "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", "@types/serve-static": "*" } }, "sha512-UZUw8vjpWFXuDnjFTh7/5c2TWDlQqeXHi6hcN7F2XSVT5P+WmUnnbFS3KA6Jnc6IsEqI2qCVu2bK0R0J4A8ZQQ=="], + + "@types/express-serve-static-core": ["@types/express-serve-static-core@5.0.6", "", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA=="], + + "@types/http-errors": ["@types/http-errors@2.0.4", "", {}, "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA=="], + + "@types/mime": ["@types/mime@1.3.2", "", {}, "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="], + + "@types/node": ["@types/node@22.15.17", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-wIX2aSZL5FE+MR0JlvF87BNVrtFWf6AE6rxSE9X7OwnVvoyCQjpzSRJ+M87se/4QCkCiebQAqrJ0y6fwIyi7nw=="], + + "@types/qs": ["@types/qs@6.9.7", "", {}, "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="], + + "@types/range-parser": ["@types/range-parser@1.2.4", "", {}, "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw=="], + + "@types/send": ["@types/send@0.17.1", "", { "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q=="], + + "@types/serve-static": ["@types/serve-static@1.15.2", "", { "dependencies": { "@types/http-errors": "*", "@types/mime": "*", "@types/node": "*" } }, "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw=="], + + "@uphold/request-logger": ["@uphold/request-logger@2.0.0", "", { "dependencies": { "uuid": "^3.0.1" }, "peerDependencies": { "request": ">=2.27.0" } }, "sha512-UvGS+v87C7VTtQDcFHDLfvfl1zaZaLSwSmAnV35Ne7CzAVvotmZqt9lAIoNpMpaoRpdjVIcnUDwPSeIeA//EoQ=="], + + "abbrev": ["abbrev@1.1.1", "", {}, "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="], + + "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], + + "acorn": ["acorn@8.9.0", "", { "bin": "bin/acorn" }, "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ=="], + + "acorn-walk": ["acorn-walk@8.2.0", "", {}, "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA=="], + + "aes": ["aes@0.1.0", "", {}, "sha512-zoxY6y00WNu5EVioxSm+X1uIcx0EIRGdRPGO+C3RsccQT/JgMHo/GiGfl7ryOTdKuCtbnSHrkthTjPSME2oOjA=="], + + "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + + "arg": ["arg@4.1.3", "", {}, "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="], + + "asn1": ["asn1@0.2.6", "", { "dependencies": { "safer-buffer": "~2.1.0" } }, "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ=="], + + "assert-plus": ["assert-plus@1.0.0", "", {}, "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="], + + "assertion-error": ["assertion-error@1.1.0", "", {}, "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw=="], + + "async": ["async@3.2.4", "", {}, "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="], + + "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + + "aws-sign2": ["aws-sign2@0.7.0", "", {}, "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="], + + "aws4": ["aws4@1.12.0", "", {}, "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="], + + "axios": ["axios@1.9.0", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "base-x": ["base-x@3.0.9", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ=="], + + "bcrypt-pbkdf": ["bcrypt-pbkdf@1.0.2", "", { "dependencies": { "tweetnacl": "^0.14.3" } }, "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w=="], + + "bech32": ["bech32@2.0.0", "", {}, "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg=="], + + "bignumber.js": ["bignumber.js@9.1.1", "", {}, "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig=="], + + "binary-extensions": ["binary-extensions@2.2.0", "", {}, "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="], + + "bitcoin-core": ["bitcoin-core@5.0.0", "", { "dependencies": { "@uphold/request-logger": "^2.0.0", "debugnyan": "^1.0.0", "json-bigint": "^1.0.0", "lodash": "^4.0.0", "request": "^2.53.0", "semver": "^5.1.0", "standard-error": "^1.1.0" } }, "sha512-XqHsD5LjtshN8yWzRrq2kof57e1eXCGDx3i5+sFKBRi9MktSlXOR4SRLyXLkfzfBmPEs5q/76RotQJuaWg75DQ=="], + + "bitcoin-elliptic": ["bitcoin-elliptic@7.0.1", "", { "dependencies": { "bn.js": "^5.1.1", "brorand": "^1.0.1", "hash.js": "^1.0.0", "hmac-drbg": "^1.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.0" } }, "sha512-eJIERwXIIjJK7gfVoevk0G1CbYbxezZ6ePZXIxngjyI+QQHXWqXMbY+gpxsND8FCLvWl050fw6W+PVZge5fBHw=="], + + "bitcore-lib": ["bitcore-lib@10.9.0", "", { "dependencies": { "bech32": "=2.0.0", "bn.js": "=4.11.8", "bs58": "^4.0.1", "buffer-compare": "=1.1.1", "elliptic": "^6.5.3", "inherits": "=2.0.1", "lodash": "^4.17.20" } }, "sha512-CrkdxL4yPFuvOmASRwEE6+XTWixsFYgyu2aaXiG7Lv0a/edQWFkJRiBg79ebS8bZh0x/rQyx40R7pDv0PRfDNA=="], + + "bn.js": ["bn.js@5.2.1", "", {}, "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ=="], + + "body-parser": ["body-parser@2.2.0", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.0", "http-errors": "^2.0.0", "iconv-lite": "^0.6.3", "on-finished": "^2.4.1", "qs": "^6.14.0", "raw-body": "^3.0.0", "type-is": "^2.0.0" } }, "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg=="], + + "brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + + "braces": ["braces@3.0.2", "", { "dependencies": { "fill-range": "^7.0.1" } }, "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="], + + "brorand": ["brorand@1.1.0", "", {}, "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w=="], + + "bs58": ["bs58@4.0.1", "", { "dependencies": { "base-x": "^3.0.2" } }, "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw=="], + + "buffer-compare": ["buffer-compare@1.1.1", "", {}, "sha512-O6NvNiHZMd3mlIeMDjP6t/gPG75OqGPeiRZXoMQZJ6iy9GofCls4Ijs5YkPZZwoysizLiedhticmdyx/GyHghA=="], + + "bunyan": ["bunyan@1.8.15", "", { "optionalDependencies": { "dtrace-provider": "~0.8", "moment": "^2.19.3", "mv": "~2", "safe-json-stringify": "~1" }, "bin": "bin/bunyan" }, "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig=="], + + "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + + "caseless": ["caseless@0.12.0", "", {}, "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="], + + "chai": ["chai@4.3.7", "", { "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", "pathval": "^1.1.1", "type-detect": "^4.0.5" } }, "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "check-error": ["check-error@1.0.2", "", {}, "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA=="], + + "chokidar": ["chokidar@3.5.3", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw=="], + + "cipher-base": ["cipher-base@1.0.4", "", { "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q=="], + + "cluster-key-slot": ["cluster-key-slot@1.1.2", "", {}, "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "content-disposition": ["content-disposition@1.0.0", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg=="], + + "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], + + "cookie": ["cookie@0.7.1", "", {}, "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w=="], + + "cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="], + + "core-util-is": ["core-util-is@1.0.2", "", {}, "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="], + + "cors": ["cors@2.8.5", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g=="], + + "create-hash": ["create-hash@1.2.0", "", { "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "md5.js": "^1.3.4", "ripemd160": "^2.0.1", "sha.js": "^2.4.0" } }, "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg=="], + + "create-hmac": ["create-hmac@1.1.7", "", { "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", "inherits": "^2.0.1", "ripemd160": "^2.0.0", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" } }, "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg=="], + + "create-require": ["create-require@1.1.1", "", {}, "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="], + + "cross-fetch": ["cross-fetch@4.1.0", "", { "dependencies": { "node-fetch": "^2.7.0" } }, "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw=="], + + "dashdash": ["dashdash@1.14.1", "", { "dependencies": { "assert-plus": "^1.0.0" } }, "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g=="], + + "debug": ["debug@4.3.4", "", { "dependencies": { "ms": "2.1.2" } }, "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="], + + "debugnyan": ["debugnyan@1.0.0", "", { "dependencies": { "bunyan": "^1.8.1", "debug": "^2.2.0" } }, "sha512-dTvKxcLZCammDLFYi31NRVr5g6vjJ33uf1wcdbIPPxPxxnJ9/xj00Mh/YQkhFMw/VGavaG5KpjSC+4o9r/JjRg=="], + + "deep-eql": ["deep-eql@4.1.3", "", { "dependencies": { "type-detect": "^4.0.0" } }, "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw=="], + + "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], + + "denque": ["denque@2.1.0", "", {}, "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="], + + "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], + + "diff": ["diff@4.0.2", "", {}, "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="], + + "dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], + + "dtrace-provider": ["dtrace-provider@0.8.8", "", { "dependencies": { "nan": "^2.14.0" } }, "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "ecc-jsbn": ["ecc-jsbn@0.1.2", "", { "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw=="], + + "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], + + "ejs": ["ejs@3.1.10", "", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="], + + "elliptic": ["elliptic@6.5.4", "", { "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", "hmac-drbg": "^1.0.1", "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" } }, "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ=="], + + "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], + + "encore.dev": ["encore.dev@1.46.21", "", {}, "sha512-+mAZYquu8ONxpaUwPKvnaKDRntHwd84j362yOPTXtcK2vF3BQT/J6nfivMwmyisPpz7Z2Mr+GAqc/g6OZp+8AQ=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], + + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], + + "express": ["express@5.1.0", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.0", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA=="], + + "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], + + "extsprintf": ["extsprintf@1.3.0", "", {}, "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + + "filelist": ["filelist@1.0.4", "", { "dependencies": { "minimatch": "^5.0.1" } }, "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q=="], + + "fill-range": ["fill-range@7.0.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ=="], + + "finalhandler": ["finalhandler@2.1.0", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q=="], + + "follow-redirects": ["follow-redirects@1.15.9", "", {}, "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="], + + "forever-agent": ["forever-agent@0.6.1", "", {}, "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="], + + "form-data": ["form-data@4.0.0", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww=="], + + "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], + + "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "get-func-name": ["get-func-name@2.0.0", "", {}, "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "getpass": ["getpass@0.1.7", "", { "dependencies": { "assert-plus": "^1.0.0" } }, "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng=="], + + "glob": ["glob@6.0.4", "", { "dependencies": { "inflight": "^1.0.4", "inherits": "2", "minimatch": "2 || 3", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A=="], + + "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "har-schema": ["har-schema@2.0.0", "", {}, "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q=="], + + "har-validator": ["har-validator@5.1.5", "", { "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" } }, "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w=="], + + "has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "hash-base": ["hash-base@3.1.0", "", { "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" } }, "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA=="], + + "hash.js": ["hash.js@1.1.7", "", { "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "hmac-drbg": ["hmac-drbg@1.0.1", "", { "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg=="], + + "http-errors": ["http-errors@2.0.0", "", { "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ=="], + + "http-signature": ["http-signature@1.2.0", "", { "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" } }, "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ=="], + + "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + + "ignore-by-default": ["ignore-by-default@1.0.1", "", {}, "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="], + + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + + "inherits": ["inherits@2.0.1", "", {}, "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA=="], + + "ioredis": ["ioredis@5.6.1", "", { "dependencies": { "@ioredis/commands": "^1.1.1", "cluster-key-slot": "^1.1.0", "debug": "^4.3.4", "denque": "^2.1.0", "lodash.defaults": "^4.2.0", "lodash.isarguments": "^3.1.0", "redis-errors": "^1.2.0", "redis-parser": "^3.0.0", "standard-as-callback": "^2.1.0" } }, "sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA=="], + + "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], + + "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-hex": ["is-hex@1.1.3", "", {}, "sha512-98aEziIu1Em+QAPkiGgKMKpqfS3yRdwgViS0d1TgsvWYgPvqzH22XoTWH/ngubeOd5wSH3zYY+zJ12iMCGI6Xw=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], + + "is-typedarray": ["is-typedarray@1.0.0", "", {}, "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="], + + "isstream": ["isstream@0.1.2", "", {}, "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="], + + "jake": ["jake@10.8.7", "", { "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", "filelist": "^1.0.4", "minimatch": "^3.1.2" }, "bin": "bin/cli.js" }, "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w=="], + + "jsbn": ["jsbn@0.1.1", "", {}, "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="], + + "json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="], + + "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], + + "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + + "json-stringify-safe": ["json-stringify-safe@5.0.1", "", {}, "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="], + + "jsprim": ["jsprim@1.4.2", "", { "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.4.0", "verror": "1.10.0" } }, "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw=="], + + "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + + "lodash.defaults": ["lodash.defaults@4.2.0", "", {}, "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="], + + "lodash.isarguments": ["lodash.isarguments@3.1.0", "", {}, "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg=="], + + "loupe": ["loupe@2.3.6", "", { "dependencies": { "get-func-name": "^2.0.0" } }, "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA=="], + + "lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + + "make-error": ["make-error@1.3.6", "", {}, "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "md5.js": ["md5.js@1.3.5", "", { "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg=="], + + "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], + + "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], + + "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + + "mime-types": ["mime-types@3.0.1", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA=="], + + "minimalistic-assert": ["minimalistic-assert@1.0.1", "", {}, "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="], + + "minimalistic-crypto-utils": ["minimalistic-crypto-utils@1.0.1", "", {}, "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg=="], + + "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + + "mkdirp": ["mkdirp@0.5.6", "", { "dependencies": { "minimist": "^1.2.6" }, "bin": "bin/cmd.js" }, "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="], + + "moment": ["moment@2.29.4", "", {}, "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="], + + "ms": ["ms@2.1.2", "", {}, "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="], + + "mv": ["mv@2.1.1", "", { "dependencies": { "mkdirp": "~0.5.1", "ncp": "~2.0.0", "rimraf": "~2.4.0" } }, "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg=="], + + "nan": ["nan@2.17.0", "", {}, "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ=="], + + "ncp": ["ncp@2.0.0", "", { "bin": "bin/ncp" }, "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA=="], + + "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], + + "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + + "nodemon": ["nodemon@3.1.10", "", { "dependencies": { "chokidar": "^3.5.2", "debug": "^4", "ignore-by-default": "^1.0.1", "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", "semver": "^7.5.3", "simple-update-notifier": "^2.0.0", "supports-color": "^5.5.0", "touch": "^3.1.0", "undefsafe": "^2.0.5" }, "bin": { "nodemon": "bin/nodemon.js" } }, "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw=="], + + "nopt": ["nopt@1.0.10", "", { "dependencies": { "abbrev": "1" }, "bin": "bin/nopt.js" }, "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "oauth-sign": ["oauth-sign@0.9.0", "", {}, "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="], + + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + + "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], + + "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], + + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], + + "path-to-regexp": ["path-to-regexp@8.2.0", "", {}, "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ=="], + + "pathval": ["pathval@1.1.1", "", {}, "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ=="], + + "pbkdf2": ["pbkdf2@3.1.1", "", { "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", "ripemd160": "^2.0.1", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" } }, "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg=="], + + "performance-now": ["performance-now@2.1.0", "", {}, "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="], + + "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], + + "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + + "psl": ["psl@1.9.0", "", {}, "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="], + + "pstree.remy": ["pstree.remy@1.1.8", "", {}, "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="], + + "punycode": ["punycode@2.3.0", "", {}, "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="], + + "qs": ["qs@6.14.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w=="], + + "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], + + "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], + + "raw-body": ["raw-body@3.0.0", "", { "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.6.3", "unpipe": "1.0.0" } }, "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g=="], + + "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + + "redis-errors": ["redis-errors@1.2.0", "", {}, "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w=="], + + "redis-parser": ["redis-parser@3.0.0", "", { "dependencies": { "redis-errors": "^1.0.0" } }, "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A=="], + + "request": ["request@2.88.2", "", { "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", "caseless": "~0.12.0", "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "oauth-sign": "~0.9.0", "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" } }, "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw=="], + + "rimraf": ["rimraf@2.4.5", "", { "dependencies": { "glob": "^6.0.1" }, "bin": "bin.js" }, "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ=="], + + "ripemd160": ["ripemd160@2.0.2", "", { "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA=="], + + "router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "safe-json-stringify": ["safe-json-stringify@1.2.0", "", {}, "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "semver": ["semver@7.5.4", "", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": "bin/semver.js" }, "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA=="], + + "send": ["send@1.2.0", "", { "dependencies": { "debug": "^4.3.5", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.0", "mime-types": "^3.0.1", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.1" } }, "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw=="], + + "serve-static": ["serve-static@2.2.0", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" } }, "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ=="], + + "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], + + "sha.js": ["sha.js@2.4.11", "", { "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" }, "bin": "bin.js" }, "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ=="], + + "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], + + "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], + + "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], + + "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + + "simple-update-notifier": ["simple-update-notifier@2.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w=="], + + "sshpk": ["sshpk@1.17.0", "", { "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", "bcrypt-pbkdf": "^1.0.0", "dashdash": "^1.12.0", "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" }, "bin": { "sshpk-conv": "bin/sshpk-conv", "sshpk-sign": "bin/sshpk-sign", "sshpk-verify": "bin/sshpk-verify" } }, "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ=="], + + "standard-as-callback": ["standard-as-callback@2.1.0", "", {}, "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A=="], + + "standard-error": ["standard-error@1.1.0", "", {}, "sha512-4v7qzU7oLJfMI5EltUSHCaaOd65J6S4BqKRWgzMi4EYaE5fvNabPxmAPGdxpGXqrcWjhDGI/H09CIdEuUOUeXg=="], + + "statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], + + "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], + + "touch": ["touch@3.1.0", "", { "dependencies": { "nopt": "~1.0.10" }, "bin": { "nodetouch": "bin/nodetouch.js" } }, "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA=="], + + "tough-cookie": ["tough-cookie@2.5.0", "", { "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" } }, "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g=="], + + "tr46": ["tr46@5.1.1", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw=="], + + "ts-node": ["ts-node@10.9.2", "", { "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", "@tsconfig/node16": "^1.0.2", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", "@types/node": "*", "typescript": ">=2.7" }, "optionalPeers": ["@swc/core", "@swc/wasm"], "bin": { "ts-node": "dist/bin.js", "ts-script": "dist/bin-script-deprecated.js", "ts-node-cwd": "dist/bin-cwd.js", "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js" } }, "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ=="], + + "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], + + "tweetnacl": ["tweetnacl@0.14.5", "", {}, "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="], + + "type-detect": ["type-detect@4.0.8", "", {}, "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="], + + "type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="], + + "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], + + "undefsafe": ["undefsafe@2.0.5", "", {}, "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="], + + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + + "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], + + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "uuid": ["uuid@3.4.0", "", { "bin": "bin/uuid" }, "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="], + + "v8-compile-cache-lib": ["v8-compile-cache-lib@3.0.1", "", {}, "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="], + + "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], + + "verror": ["verror@1.10.0", "", { "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw=="], + + "webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], + + "whatwg-url": ["whatwg-url@14.2.0", "", { "dependencies": { "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" } }, "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + + "yn": ["yn@3.1.1", "", {}, "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="], + + "@types/bitcore-lib/@types/node": ["@types/node@22.15.16", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-3pr+KjwpVujqWqOKT8mNR+rd09FqhBLwg+5L/4t0cNYBzm/yEiYGCxWttjaPBsLtAo+WFNoXzGJfolM1JuRXoA=="], + + "@types/body-parser/@types/node": ["@types/node@20.3.2", "", {}, "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw=="], + + "@types/connect/@types/node": ["@types/node@20.3.2", "", {}, "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw=="], + + "@types/cors/@types/node": ["@types/node@20.3.2", "", {}, "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw=="], + + "@types/express-serve-static-core/@types/node": ["@types/node@22.15.16", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-3pr+KjwpVujqWqOKT8mNR+rd09FqhBLwg+5L/4t0cNYBzm/yEiYGCxWttjaPBsLtAo+WFNoXzGJfolM1JuRXoA=="], + + "@types/send/@types/node": ["@types/node@20.3.2", "", {}, "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw=="], + + "@types/serve-static/@types/http-errors": ["@types/http-errors@2.0.1", "", {}, "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ=="], + + "@types/serve-static/@types/node": ["@types/node@20.3.2", "", {}, "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw=="], + + "bitcoin-core/semver": ["semver@5.7.1", "", { "bin": "bin/semver" }, "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="], + + "bitcoin-elliptic/inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "bitcore-lib/bn.js": ["bn.js@4.11.8", "", {}, "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="], + + "body-parser/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "cipher-base/inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "create-hash/inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "create-hmac/inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "debugnyan/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + + "elliptic/bn.js": ["bn.js@4.12.0", "", {}, "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="], + + "elliptic/inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "express/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "filelist/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], + + "finalhandler/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "glob/inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "hash-base/inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "hash.js/inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "http-errors/inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "md5.js/inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "readable-stream/inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "request/form-data": ["form-data@2.3.3", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ=="], + + "request/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "request/qs": ["qs@6.5.3", "", {}, "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="], + + "ripemd160/inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "router/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "send/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "send/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "sha.js/inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "tr46/punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "body-parser/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "chalk/supports-color/has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "debugnyan/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + + "express/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "filelist/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + + "finalhandler/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "form-data/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "request/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "router/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + } +} diff --git a/dist/data.js b/dist/data.js deleted file mode 100644 index 6764ecd..0000000 --- a/dist/data.js +++ /dev/null @@ -1,159 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.parseScript = exports.loadFileByTxid = exports.loadFileByInpoint = exports.loadFileByOutpoint = exports.getBlockByHash = exports.getBlockByHeight = exports.getBlockchainInfo = exports.loadTx = exports.getRawTx = void 0; -const bitcore_lib_1 = require("bitcore-lib"); -const ioredis_1 = require("ioredis"); -const core_1 = require("@ts-bitcoin/core"); -const http_errors_1 = require("http-errors"); -const createError = require("http-errors"); -const provider_1 = require("./provider"); -let bsvProvider = new provider_1.ProxyProvider(); -let btcProvider = new provider_1.BtcProvider(); -if (process.env.BITCOIN_HOST) { - bsvProvider = new provider_1.RpcProvider("bsv", process.env.BITCOIN_HOST || "", process.env.BITCOIN_PORT || "8332", process.env.BITCOIN_USER || "", process.env.BITCOIN_PASS || ""); -} -if (process.env.BTC_HOST) { - btcProvider = new provider_1.RpcProvider("btc", process.env.BTC_HOST || "", process.env.BTC_PORT || "8332", process.env.BTC_USER || "", process.env.BTC_PASS || ""); -} -const B = Buffer.from("19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut"); -const ORD = Buffer.from("ord"); -let redis; -if (process.env.REDIS_HOST) { - const host = process.env.REDIS_HOST; - const port = process.env.REDIS_PORT - ? parseInt(process.env.REDIS_PORT, 10) - : 6379; - console.log("Connecting to redis:", host, port); - redis = new ioredis_1.Redis(port, host); -} -async function getRawTx(txid) { - let rawtx = await (redis === null || redis === void 0 ? void 0 : redis.getBuffer(txid)); - if (!rawtx) { - try { - rawtx = await bsvProvider.getRawTx(txid); - } - catch (_a) { } - // const url = `http://${BITCOIN_HOST}:${BITCOIN_PORT}/rest/tx/${txid}.bin` - // const resp = await fetch(url); - // if (!resp.ok) { - // throw createError(resp.status, resp.statusText) - // } - // rawtx = Buffer.from(await resp.arrayBuffer()); - } - if (!rawtx) { - try { - rawtx = await btcProvider.getRawTx(txid); - } - catch (_b) { } - } - if (!rawtx) { - throw new http_errors_1.NotFound(); - } - return rawtx; -} -exports.getRawTx = getRawTx; -async function loadTx(txid) { - return core_1.Tx.fromBuffer(await getRawTx(txid)); -} -exports.loadTx = loadTx; -async function getBlockchainInfo(network) { - switch (network) { - case "bsv": - return bsvProvider.getBlockchainInfo(); - case "btc": - return btcProvider.getBlockchainInfo(); - } - throw new Error("Invalid Network"); -} -exports.getBlockchainInfo = getBlockchainInfo; -async function getBlockByHeight(network, height) { - switch (network) { - case "bsv": - return bsvProvider.getBlockByHeight(height); - case "btc": - return btcProvider.getBlockByHeight(height); - } - throw new Error("Invalid Network"); -} -exports.getBlockByHeight = getBlockByHeight; -async function getBlockByHash(network, hash) { - switch (network) { - case "bsv": - return bsvProvider.getBlockByHash(hash); - case "btc": - return btcProvider.getBlockByHash(hash); - } - throw new Error("Invalid Network"); -} -exports.getBlockByHash = getBlockByHash; -async function loadFileByOutpoint(outpoint, fuzzy = false) { - const url = `https://v3.ordinals.gorillapool.io/content/${outpoint.toString()}${fuzzy ? '?fuzzy=true' : ''}`; - const resp = await fetch(url); - if (!resp.ok) { - throw createError(resp.status, resp.statusText); - } - return { - data: Buffer.from(await resp.arrayBuffer()), - type: resp.headers.get('content-type') || '', - }; -} -exports.loadFileByOutpoint = loadFileByOutpoint; -async function loadFileByInpoint(inpoint) { - const [txid, vout] = inpoint.split('i'); - const rawtx = await getRawTx(txid); - const tx = new bitcore_lib_1.Transaction(rawtx); - return parseScript(tx.txIns[parseInt(vout, 10)].script); -} -exports.loadFileByInpoint = loadFileByInpoint; -async function loadFileByTxid(txid) { - const tx = await loadTx(txid); - for (let txOut of tx.txOuts) { - try { - const data = await parseScript(txOut.script); - if (data) - return data; - } - catch (_a) { } - } - throw new http_errors_1.NotFound(); -} -exports.loadFileByTxid = loadFileByTxid; -function parseScript(script) { - var _a, _b, _c, _d; - let opFalse = 0; - let opIf = 0; - for (let [i, chunk] of script.chunks.entries()) { - if (chunk.opCodeNum === core_1.OpCode.OP_FALSE) { - opFalse = i; - } - if (chunk.opCodeNum === core_1.OpCode.OP_IF) { - opIf = i; - } - if (((_a = chunk.buf) === null || _a === void 0 ? void 0 : _a.equals(ORD)) && opFalse === i - 2 && opIf === i - 1) { - let file = {}; - for (let j = i + 1; j < script.chunks.length; j += 2) { - if (script.chunks[j].buf) - break; - switch (script.chunks[j].opCodeNum) { - case core_1.OpCode.OP_0: - file.data = script.chunks[j + 1].buf; - return file; - case core_1.OpCode.OP_1: - file.type = (_b = script.chunks[j + 1].buf) === null || _b === void 0 ? void 0 : _b.toString('utf8'); - break; - case core_1.OpCode.OP_ENDIF: - break; - } - } - } - if ((_c = chunk.buf) === null || _c === void 0 ? void 0 : _c.equals(B)) { - return { - data: script.chunks[i + 1].buf, - type: (_d = script.chunks[i + 2].buf) === null || _d === void 0 ? void 0 : _d.toString('utf8'), - }; - } - } - throw new http_errors_1.NotFound(); -} -exports.parseScript = parseScript; -//# sourceMappingURL=data.js.map \ No newline at end of file diff --git a/dist/data.js.map b/dist/data.js.map deleted file mode 100644 index 4db1712..0000000 --- a/dist/data.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"data.js","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/index.cjs b/dist/index.cjs deleted file mode 100644 index 7fefa07..0000000 --- a/dist/index.cjs +++ /dev/null @@ -1,2 +0,0 @@ -var e=require("http-errors"),t=require("@ts-bitcoin/core"),r=require("dns/promises"),n=require("cross-fetch"),o=require("@gorillapool/js-junglebus"),i=require("ioredis");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}}),t.default=e,t}var s,c=/*#__PURE__*/u(e),f=/*#__PURE__*/a(r),h=/*#__PURE__*/u(n);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}if(process.env.REDIS_HOST){var m=process.env.REDIS_HOST,d=process.env.REDIS_PORT?parseInt(process.env.REDIS_PORT,10):6379;console.log("Connecting to redis:",m,d),s=new i.Redis(d,m)}var p=/*#__PURE__*/function(){function e(){this.network="bsv"}var t=e.prototype;return t.getRawTx=function(e){try{var t;return Promise.resolve(null==(t=s)?void 0:t.getBuffer("rawtx:"+e)).then(function(t){var r=function(){if(!t){var r=new o.JungleBusClient("https://junglebus.gorillapool.io");return Promise.resolve(r.GetTransaction(e)).then(function(r){var n;t=Buffer.from(r.transaction,"base64"),null==(n=s)||n.set("rawtx:"+e,t)})}}();return r&&r.then?r.then(function(){return t}):t})}catch(e){return Promise.reject(e)}},t.getBlockchainInfo=function(){try{return Promise.resolve(h.default("https://api.whatsonchain.com/v1/bsv/main/block/headers")).then(function(e){if(!e.ok)throw c.default(e.status,e.statusText);return Promise.resolve(e.json()).then(function(e){return{height:e[0].height,hash:e[0].hash}})})}catch(e){return Promise.reject(e)}},t.getBlockByHeight=function(e){try{return Promise.resolve(h.default("https://api.whatsonchain.com/v1/bsv/main/block/height/"+e)).then(function(t){return Promise.resolve(t.json()).then(function(t){return{height:e,hash:t.hash}})})}catch(e){return Promise.reject(e)}},t.getBlockByHash=function(e){try{return Promise.resolve(h.default("https://api.whatsonchain.com/v1/bsv/main/block/hash/"+e)).then(function(t){return Promise.resolve(t.json()).then(function(t){return{height:t.height,hash:e}})})}catch(e){return Promise.reject(e)}},e}(),g=function(e,r){void 0===r&&(r=!1);try{var n,o=function(e){if(!n)throw new c.default.NotFound;return n};console.log("loadInscription",e);var i=function(){if(e.match(/^[0-9a-fA-F]{64}_\d*$/)){var o=e.split("_"),i=o[0],u=o[1];return console.log("BSV:",i,u),Promise.resolve(O.getRawTx(i)).then(function(o){if(!o)throw new Error("No raw tx found");var a=t.Tx.fromBuffer(o),s=parseInt(u,10),f=a.txOuts[s].script;if(!f)throw new c.default.NotFound;n=B(f);var l=function(){if(n&&r){var t=function(t,r){try{var o=Promise.resolve(h.default("https://ordinals.gorillapool.io/api/inscriptions/outpoint/"+e)).then(function(e){return Promise.resolve(e.json()).then(function(e){return Promise.resolve(O.getBlockByHeight(e.height)).then(function(t){n.meta={height:e.height,MAP:e.MAP,hash:t.hash,txid:i,v:s}})})})}catch(e){return}return o&&o.then?o.then(void 0,function(){}):o}();if(t&&t.then)return t.then(function(){})}}();if(l&&l.then)return l.then(function(){})})}throw new Error("Invalid Pointer")}();return Promise.resolve(i&&i.then?i.then(o):o())}catch(e){return Promise.reject(e)}},P=function(e){try{var t="_ordfs."+e;return Promise.resolve(f.resolveTxt(t)).then(function(e){var r="";console.log("Lookup Up:",t);e:for(var n,o=v(e);!(n=o()).done;){for(var i,u=v(n.value);!(i=u()).done;){var a=i.value;if(a.startsWith("ordfs=")){console.log("Elem:",a),r=a.slice(6),console.log("Origin:",r);break e}}if(!r)throw new c.default.NotFound}return r})}catch(e){return Promise.reject(e)}},y=function(e,t){try{if("bsv"===e)return Promise.resolve(O.getRawTx(t));throw new c.default.NotFound("Network Not Found")}catch(e){return Promise.reject(e)}},w=function(e,t){try{if("bsv"===e)return Promise.resolve(O.getBlockByHash(t));throw new c.default.NotFound("Network Not Found")}catch(e){return Promise.reject(e)}},b=function(e,t){try{if("bsv"===e)return Promise.resolve(O.getBlockByHeight(t));throw new c.default.NotFound("Network Not Found")}catch(e){return Promise.reject(e)}},k=function(e){try{if("bsv"===e)return Promise.resolve(O.getBlockchainInfo());throw new c.default.NotFound("Network Not Found")}catch(e){return Promise.reject(e)}},j=Buffer.from("19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut"),x=Buffer.from("ord"),O=new p;function B(e){for(var r,n=0,o=0,i=0,u="application/octet-stream",a=Buffer.alloc(0),s=v(e.chunks.entries());!(r=s()).done;){var c,f,h=r.value,l=h[0],m=h[1];if(null!=(c=m.buf)&&c.equals(j)&&e.chunks.length>l+2)return{data:a=e.chunks[l+1].buf,type:u=e.chunks[l+2].buf.toString()};if(m.opCodeNum===t.OpCode.OP_FALSE&&(n=l),m.opCodeNum===t.OpCode.OP_IF&&(o=l),null!=(f=m.buf)&&f.equals(x)&&n===l-2&&o===l-1){i=l;break}}for(var d=i+1;d=1&&(null==(g=e.chunks[d+1])?void 0:g.opCodeNum)<=t.OpCode.OP_PUSHDATA4;){var p,g;a=Buffer.concat([a,e.chunks[d+1].buf]),d++}break;case 1:if(1!=e.chunks[d].buf[0])return;case t.OpCode.OP_TRUE:u=e.chunks[d+1].buf.toString("utf8"),d++;break;case t.OpCode.OP_ENDIF:return{type:u,data:a};default:return}return{type:u,data:a}}function N(e,t){try{var r=e()}catch(e){return t(e)}return r&&r.then?r.then(void 0,t):r}function S(e,t,r){void 0===r&&(r=!0),t.header("Content-Type",e.type||""),e.meta&&t.header("ordfs-meta",JSON.stringify(e.meta)),r&&!e.meta&&t.header("Cache-Control","public,immutable,max-age=31536000"),t.status(200).send(e.data)}exports.RegisterRoutes=function(e){var t=function(e,t,r){try{return Promise.resolve(N(function(){var r=e.params.pointer,n=e.params.filename;return Promise.resolve(g(r)).then(function(o){var i=JSON.parse(o.data.toString("utf8"));if(!i[n])throw new c.default.NotFound;return r=i[n].startsWith("ord://")?i[n].slice(6):i[n],Promise.resolve(g(r,e.query.meta)).then(function(e){S(e,t,!0)})})},function(e){r(e)}))}catch(e){return Promise.reject(e)}};e.get("/",function(e,t){try{var r,n,o=function(o){return r?o:N(function(){return Promise.resolve(g(n)).then(function(r){var n;"ord-fs/json"!==r.type||e.query.raw?S(r,t,!1):null==(n=e.res)||n.redirect("index.html")})},function(){t.render("pages/404")})},i=N(function(){return Promise.resolve(P(e.hostname)).then(function(e){n=e})},function(){t.render("pages/index"),r=1});return Promise.resolve(i&&i.then?i.then(o):o(i))}catch(e){return Promise.reject(e)}}),e.get("/v1/:network/block/latest",function(e,t,r){try{var n=N(function(){var r=t.json;return Promise.resolve(k(e.params.network)).then(function(e){r.call(t,e)})},function(e){r(e)});return Promise.resolve(n&&n.then?n.then(function(){}):void 0)}catch(e){return Promise.reject(e)}}),e.get("/v1/:network/block/height/:height",function(e,t,r){try{var n=N(function(){var r=t.json;return Promise.resolve(b(e.params.network,parseInt(e.params.height,10))).then(function(e){r.call(t,e)})},function(e){r(e)});return Promise.resolve(n&&n.then?n.then(function(){}):void 0)}catch(e){return Promise.reject(e)}}),e.get("/v1/:network/block/hash/:hash",function(e,t,r){try{var n=N(function(){var r=t.json;return Promise.resolve(w(e.params.network,e.params.hash)).then(function(e){r.call(t,e)})},function(e){r(e)});return Promise.resolve(n&&n.then?n.then(function(){}):void 0)}catch(e){return Promise.reject(e)}}),e.get("/v1/:network/tx/:txid",function(e,t){try{t.set("Content-type","application/octet-stream");var r=t.send;return Promise.resolve(y(e.params.network,e.params.txid)).then(function(e){r.call(t,e)})}catch(e){return Promise.reject(e)}}),e.get("/:filename",function(e,t,r){try{var n,o=e.params.filename;return Promise.resolve(N(function(){function r(e){if(n)return e;S(u,t,a)}var i,u,a=!0,s=N(function(){return Promise.resolve(g(o,e.query.meta)).then(function(t){var r;"ord-fs/json"!==(u=t).type||e.query.raw||(null==(r=e.res)||r.redirect("/"+o+"/index.html"),n=1)})},function(t){return console.error("Outpoint Error",o,t.message),Promise.resolve(P(e.hostname)).then(function(t){return i=t,Promise.resolve(g(i)).then(function(t){var r=JSON.parse(t.data.toString("utf8"));if(!r[o])throw new c.default.NotFound;return i=r[o].slice(6),Promise.resolve(g(i,e.query.meta)).then(function(e){u=e,a=!1})})})});return s&&s.then?s.then(r):r(s)},function(e){r(e)}))}catch(e){return Promise.reject(e)}}),e.get("/content/:pointer",function(e,t,r){try{var n=e.params.pointer;return Promise.resolve(N(function(){return Promise.resolve(g(n,e.query.meta)).then(function(r){var o;"ord-fs/json"!==r.type||e.query.raw?S(r,t,!0):null==(o=e.res)||o.redirect("/"+n+"/index.html")})},function(e){r(e)}))}catch(e){return Promise.reject(e)}}),e.get("/preview/:b64HtmlData",function(e,t,r){try{try{var n=Buffer.from(e.params.b64HtmlData,"base64").toString("utf8");t.render("pages/preview",{htmlData:n})}catch(e){r(e)}return Promise.resolve()}catch(e){return Promise.reject(e)}}),e.get("/:pointer/:filename",t),e.get("/content/:pointer/:filename",t)},exports.getBlockByHash=w,exports.getBlockByHeight=b,exports.getLatestBlock=k,exports.getRawTx=y,exports.loadInscription=g,exports.loadPointerFromDNS=P,exports.parseScript=B; -//# sourceMappingURL=index.cjs.map diff --git a/dist/index.cjs.map b/dist/index.cjs.map deleted file mode 100644 index 2438bd5..0000000 --- a/dist/index.cjs.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.cjs","sources":["../src/provider.ts","../src/lib.ts","../src/routes.ts"],"sourcesContent":["import { JungleBusClient } from \"@gorillapool/js-junglebus\";\n// import * as Client from \"bitcoin-core\";\nimport fetch from \"cross-fetch\";\nimport createError from \"http-errors\";\nimport { Redis } from \"ioredis\";\n\nlet redis: Redis;\nif (process.env.REDIS_HOST) {\n const host = process.env.REDIS_HOST;\n const port = process.env.REDIS_PORT\n ? parseInt(process.env.REDIS_PORT, 10)\n : 6379;\n console.log(\"Connecting to redis:\", host, port);\n redis = new Redis(port, host);\n}\n\nexport interface ITxProvider {\n network: string;\n getRawTx: (string) => Promise;\n getBlockchainInfo: () => Promise<{ height: number; hash: string }>;\n getBlockByHeight: (number) => Promise<{ height: number; hash: string }>;\n getBlockByHash: (string) => Promise<{ height: number; hash: string }>;\n}\n\n// export class RpcProvider implements ITxProvider {\n// private client: Client;\n\n// constructor(\n// public network: string,\n// host: string,\n// port: string,\n// username: string,\n// password: string\n// ) {\n// this.client = new Client({\n// host,\n// port,\n// username,\n// password,\n// });\n// }\n\n// async getRawTx(txid: string): Promise {\n// let rawtx = await redis?.getBuffer(`rawtx:${txid}`);\n// if (!rawtx) {\n// rawtx = await this.client.getTransactionByHash(txid, {\n// extension: \"bin\",\n// });\n// if (!rawtx) {\n// throw new createError.NotFound();\n// }\n// redis?.set(`rawtx:${txid}`, rawtx);\n// }\n// return rawtx;\n// }\n\n// async getBlockchainInfo(): Promise<{ height: number; hash: string }> {\n// const info = await this.client.getBlockchainInfo();\n// return {\n// height: info.blocks,\n// hash: info.bestblockhash,\n// };\n// }\n\n// async getBlockByHeight(\n// height: number\n// ): Promise<{ height: number; hash: string }> {\n// const hash = await this.client.getBlockHash(height);\n// return { height, hash };\n// }\n\n// async getBlockByHash(\n// hash: string\n// ): Promise<{ height: number; hash: string }> {\n// const info = await this.client.getBlockHeader(hash);\n// return {\n// height: info.height,\n// hash,\n// };\n// }\n// }\n\nexport class JungleBusProvider implements ITxProvider {\n public network = \"bsv\";\n\n async getRawTx(txid: string): Promise {\n let rawtx = await redis?.getBuffer(`rawtx:${txid}`);\n if (!rawtx) {\n const jb = new JungleBusClient(\"https://junglebus.gorillapool.io\");\n const txnData = await jb.GetTransaction(txid);\n rawtx = Buffer.from(txnData!.transaction, \"base64\");\n redis?.set(`rawtx:${txid}`, rawtx);\n }\n return rawtx;\n }\n\n async getBlockchainInfo(): Promise<{ height: number; hash: string }> {\n const resp = await fetch(\n \"https://api.whatsonchain.com/v1/bsv/main/block/headers\"\n );\n if (!resp.ok) {\n throw createError(resp.status, resp.statusText);\n }\n const info = await resp.json();\n return {\n height: info[0].height,\n hash: info[0].hash,\n };\n }\n\n async getBlockByHeight(\n height: number\n ): Promise<{ height: number; hash: string }> {\n const resp = await fetch(\n `https://api.whatsonchain.com/v1/bsv/main/block/height/${height}`\n );\n const info = await resp.json();\n return { height, hash: info.hash };\n }\n\n async getBlockByHash(\n hash: string\n ): Promise<{ height: number; hash: string }> {\n const resp = await fetch(\n `https://api.whatsonchain.com/v1/bsv/main/block/hash/${hash}`\n );\n const info = await resp.json();\n\n return {\n height: info.height,\n hash,\n };\n }\n}\n\n// export class BtcProvider implements ITxProvider {\n// public network = \"btc\";\n\n// async getRawTx(txid: string): Promise {\n// let rawtx = await redis?.getBuffer(`rawtx:${txid}`);\n// if (!rawtx) {\n// // TODO: Make this configuration based\n// const resp = await fetch(\n// `https://ordinals.shruggr.cloud/v1/btc/tx/${txid}`\n// );\n// if (!resp.ok) {\n// throw createError(resp.status, resp.statusText);\n// }\n// rawtx = Buffer.from(await resp.arrayBuffer());\n// redis?.set(`rawtx:${txid}`, rawtx);\n// }\n// return rawtx;\n// }\n\n// async getBlockchainInfo(): Promise<{ height: number; hash: string }> {\n// // TODO: Make this configuration based\n// const resp = await fetch(\n// \"https://ordinals.shruggr.cloud/v1/btc/block/latest\"\n// );\n// if (!resp.ok) {\n// throw createError(resp.status, resp.statusText);\n// }\n\n// return resp.json();\n// }\n\n// async getBlockByHeight(\n// height: number\n// ): Promise<{ height: number; hash: string }> {\n// const resp = await fetch(\n// `https://ordinals.shruggr.cloud/v1/btc/block/height/${height}`\n// );\n// const info = await resp.json();\n// return { height, hash: info.hash };\n// }\n\n// async getBlockByHash(\n// hash: string\n// ): Promise<{ height: number; hash: string }> {\n// const resp = await fetch(\n// `https://ordinals.shruggr.cloud/v1/btc/block/hash/${hash}`\n// );\n// const info = await resp.json();\n\n// return {\n// height: info.height,\n// hash,\n// };\n// }\n// }\n","import { OpCode, Script, Tx } from \"@ts-bitcoin/core\";\n// import { Transaction } from \"bitcore-lib\";\nimport * as dns from \"dns/promises\";\nimport createError from \"http-errors\";\nimport fetch from \"cross-fetch\";\nimport {\n // BtcProvider,\n ITxProvider,\n JungleBusProvider,\n // RpcProvider,\n} from \"./provider\";\n\nconst B = Buffer.from(\"19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut\");\nconst ORD = Buffer.from(\"ord\");\n\n// let btcProvider: ITxProvider = new BtcProvider();\nlet bsvProvider: ITxProvider = new JungleBusProvider();\n\n// if (process.env.BITCOIN_HOST) {\n// bsvProvider = new RpcProvider(\n// \"bsv\",\n// process.env.BITCOIN_HOST || \"\",\n// process.env.BITCOIN_PORT || \"8332\",\n// process.env.BITCOIN_USER || \"\",\n// process.env.BITCOIN_PASS || \"\"\n// );\n// }\n\n// if (process.env.BTC_HOST) {\n// btcProvider = new RpcProvider(\n// \"btc\",\n// process.env.BTC_HOST || \"\",\n// process.env.BTC_PORT || \"8332\",\n// process.env.BTC_USER || \"\",\n// process.env.BTC_PASS || \"\"\n// );\n// }\n\nexport async function getLatestBlock(\n network: string\n): Promise<{ height: number; hash: string }> {\n switch (network) {\n // case \"btc\":\n // return btcProvider.getBlockchainInfo();\n case \"bsv\":\n return bsvProvider.getBlockchainInfo();\n default:\n throw new createError.NotFound(\"Network Not Found\");\n }\n}\n\nexport async function getBlockByHeight(\n network: string,\n height: number\n): Promise<{ height: number; hash: string }> {\n switch (network) {\n // case \"btc\":\n // return btcProvider.getBlockByHeight(height);\n case \"bsv\":\n return bsvProvider.getBlockByHeight(height);\n default:\n throw new createError.NotFound(\"Network Not Found\");\n }\n}\n\nexport async function getBlockByHash(\n network: string,\n hash: string\n): Promise<{ height: number; hash: string }> {\n switch (network) {\n // case \"btc\":\n // return btcProvider.getBlockByHash(hash);\n case \"bsv\":\n return bsvProvider.getBlockByHash(hash);\n default:\n throw new createError.NotFound(\"Network Not Found\");\n }\n}\n\nexport async function getRawTx(\n network: string,\n txid: string\n): Promise {\n switch (network) {\n // case \"btc\":\n // return btcProvider.getRawTx(txid);\n case \"bsv\":\n return bsvProvider.getRawTx(txid);\n default:\n throw new createError.NotFound(\"Network Not Found\");\n }\n}\n\nexport async function loadPointerFromDNS(hostname: string): Promise {\n const lookupDomain = `_ordfs.${hostname}`;\n const TXTs = await dns.resolveTxt(lookupDomain);\n const prefix = \"ordfs=\";\n let pointer = \"\";\n console.log(\"Lookup Up:\", lookupDomain);\n outer: for (const TXT of TXTs) {\n for (const elem of TXT) {\n if (!elem.startsWith(prefix)) continue;\n console.log(\"Elem:\", elem);\n pointer = elem.slice(prefix.length);\n console.log(\"Origin:\", pointer);\n break outer;\n }\n\n if (!pointer) {\n throw new createError.NotFound();\n }\n }\n return pointer;\n}\n\nexport async function loadInscription(pointer: string, metadata = false): Promise {\n console.log(\"loadInscription\", pointer);\n let file: File | undefined;\n if (pointer.match(/^[0-9a-fA-F]{64}_\\d*$/)) {\n const [txid, vout] = pointer.split(\"_\");\n console.log(\"BSV:\", txid, vout);\n const rawtx = await bsvProvider.getRawTx(txid);\n if (!rawtx) throw new Error(\"No raw tx found\");\n const tx = Tx.fromBuffer(rawtx);\n const v = parseInt(vout, 10);\n const script = tx.txOuts[v].script;\n if (!script) throw new createError.NotFound();\n file = parseScript(script);\n if (file && metadata) {\n try {\n const url =`https://ordinals.gorillapool.io/api/inscriptions/outpoint/${pointer}`;\n const resp = await fetch(url);\n const data = await resp.json();\n const { hash } = await bsvProvider.getBlockByHeight(data!.height);\n const meta: Meta = {\n height: data.height,\n MAP: data.MAP,\n hash,\n txid,\n v,\n };\n file.meta = meta;\n } catch {};\n }\n // } else if (pointer.match(/^[0-9a-fA-F]{64}i\\d+$/) && btcProvider) {\n // const [txid, vin] = pointer.split(\"i\");\n // console.log(\"BTC\", txid, vin);\n // const rawtx = await btcProvider.getRawTx(txid);\n // if (!rawtx) throw new Error(\"No raw tx found\");\n // const tx = new Transaction(rawtx);\n // const script = Script.fromBuffer(tx.inputs[parseInt(vin, 10)].witnesses[1]);\n // if (!script) throw new createError.NotFound();\n // file = parseScript(script);\n } else throw new Error(\"Invalid Pointer\");\n\n if (!file) throw new createError.NotFound();\n return file;\n}\n\nexport interface Meta {\n height?: number;\n hash?: string;\n txid: string;\n v: number;\n MAP?: {[key:string]:any}\n}\n\nexport interface File {\n type: string;\n data: Buffer;\n meta?: Meta;\n}\n\nexport interface OrdFS {\n [filename: string]: string;\n}\n\nexport function parseScript(script: Script): File | undefined {\n let opFalse = 0;\n let opIf = 0;\n let opORD = 0;\n\n let type = \"application/octet-stream\";\n let data = Buffer.alloc(0);\n for (const [i, chunk] of script.chunks.entries()) {\n if (chunk.buf?.equals(B) && script.chunks.length > i + 2) {\n data = script.chunks[i + 1].buf!;\n type = script.chunks[i + 2].buf!.toString();\n return { data, type };\n }\n if (chunk.opCodeNum === OpCode.OP_FALSE) {\n opFalse = i;\n }\n if (chunk.opCodeNum === OpCode.OP_IF) {\n opIf = i;\n }\n if (chunk.buf?.equals(ORD) && opFalse === i - 2 && opIf === i - 1) {\n opORD = i;\n break;\n }\n }\n\n for (let i = opORD + 1; i < script.chunks.length; i++) {\n switch (script.chunks[i].opCodeNum) {\n case OpCode.OP_FALSE:\n while (\n script.chunks[i + 1]?.opCodeNum >= 1 &&\n script.chunks[i + 1]?.opCodeNum <= OpCode.OP_PUSHDATA4\n ) {\n data = Buffer.concat([data, script.chunks[i + 1].buf!]);\n i++;\n }\n break;\n case 1:\n // treat 1 like OP_1 (BTC convention)\n // console.log(script.chunks[i].toString('hex'))\n if (script.chunks[i].buf![0] != 1) return;\n case OpCode.OP_TRUE:\n type = script.chunks[i + 1]!.buf!.toString(\"utf8\");\n // console.log(\"Type:\", type)\n i++;\n break;\n case OpCode.OP_ENDIF:\n return { type, data };\n default:\n return;\n }\n }\n\n return { type, data };\n}\n","import * as express from \"express\";\nimport { Response } from \"express\";\nimport createError from \"http-errors\";\nimport {\n File,\n OrdFS,\n getBlockByHash,\n getBlockByHeight,\n getLatestBlock,\n getRawTx,\n loadInscription,\n loadPointerFromDNS,\n} from \"./lib\";\n\nfunction sendFile(file: File, res: Response, immutable = true) {\n res.header(\"Content-Type\", file.type || \"\");\n if (file.meta) {\n res.header('ordfs-meta', JSON.stringify(file.meta))\n }\n if (immutable && !file.meta) {\n res.header(\"Cache-Control\", \"public,immutable,max-age=31536000\");\n }\n res.status(200).send(file.data);\n}\n\nexport function RegisterRoutes(app: express.Express) {\n app.get(\"/\", async (req, res) => {\n let outpoint: string;\n try {\n outpoint = await loadPointerFromDNS(req.hostname);\n } catch (e: any) {\n // DNS pointer not found\n res.render(\"pages/index\");\n return;\n }\n try {\n const file = await loadInscription(outpoint);\n if (file.type === \"ord-fs/json\" && !req.query[\"raw\"]) {\n req.res?.redirect(\"index.html\");\n return;\n }\n sendFile(file, res, false);\n } catch (err) {\n // TODO: inscription not found\n res.render(\"pages/404\");\n }\n });\n\n app.get(\"/v1/:network/block/latest\", async (req, res, next) => {\n try {\n res.json(await getLatestBlock(req.params.network));\n } catch (e) {\n next(e);\n }\n });\n\n app.get(\"/v1/:network/block/height/:height\", async (req, res, next) => {\n try {\n res.json(\n await getBlockByHeight(\n req.params.network,\n parseInt(req.params.height, 10)\n )\n );\n } catch (e) {\n next(e);\n }\n });\n\n app.get(\"/v1/:network/block/hash/:hash\", async (req, res, next) => {\n try {\n res.json(await getBlockByHash(req.params.network, req.params.hash));\n } catch (e) {\n next(e);\n }\n });\n\n app.get(\"/v1/:network/tx/:txid\", async (req, res) => {\n res.set(\"Content-type\", \"application/octet-stream\");\n res.send(await getRawTx(req.params.network, req.params.txid));\n });\n app.get(\"/:filename\", getInscriptionOrDnsFile);\n app.get(\"/content/:pointer\", getInscription);\n app.get(\"/preview/:b64HtmlData\", previewHtmlFromB64Data);\n app.get(\"/:pointer/:filename\", getOrdfsFile);\n app.get(\"/content/:pointer/:filename\", getOrdfsFile);\n\n async function previewHtmlFromB64Data(req, res, next) {\n try {\n const b64HtmlData = req.params.b64HtmlData;\n const htmlData = Buffer.from(b64HtmlData, \"base64\").toString(\"utf8\");\n res.render(\"pages/preview\", { htmlData });\n } catch (err) {\n next(err);\n }\n }\n\n async function getInscriptionOrDnsFile(req, res, next) {\n const filename = req.params.filename;\n try {\n let pointer: string;\n let file: File;\n let immutable = true;\n try {\n // check if its an ordfs directory\n file = await loadInscription(filename, req.query.meta);\n if (file.type === \"ord-fs/json\" && !req.query.raw) {\n req.res?.redirect(`/${filename}/index.html`);\n return;\n }\n } catch (e: any) {\n console.error(\"Outpoint Error\", filename, e.message);\n pointer = await loadPointerFromDNS(req.hostname);\n const dirData = await loadInscription(pointer);\n const dir = JSON.parse(dirData.data!.toString(\"utf8\"));\n if (!dir[filename]) {\n throw new createError.NotFound();\n }\n pointer = dir[filename].slice(6);\n file = await loadInscription(pointer, req.query.meta);\n immutable = false;\n }\n sendFile(file, res, immutable);\n } catch (err) {\n next(err);\n }\n }\n\n async function getInscription(req, res, next) {\n const pointer = req.params.pointer;\n try {\n const file = await loadInscription(pointer, req.query.meta);\n // check if its an ordfs directory\n if (file.type === \"ord-fs/json\" && !req.query.raw) {\n req.res?.redirect(`/${pointer}/index.html`);\n return;\n }\n sendFile(file, res, true);\n } catch (err) {\n next(err);\n }\n }\n\n async function getOrdfsFile(req, res, next) {\n try {\n let pointer = req.params.pointer;\n const filename = req.params.filename;\n const dirData = await loadInscription(pointer);\n const dir: OrdFS = JSON.parse(dirData.data!.toString(\"utf8\"));\n if (!dir[filename]) {\n throw new createError.NotFound();\n }\n if (dir[filename].startsWith(\"ord://\")) {\n pointer = dir[filename].slice(6);\n } else {\n pointer = dir[filename];\n }\n const file = await loadInscription(pointer, req.query.meta);\n sendFile(file, res, true);\n } catch (err) {\n next(err);\n }\n }\n}\n"],"names":["redis","process","env","REDIS_HOST","host","port","REDIS_PORT","parseInt","console","log","Redis","JungleBusProvider","network","_proto","prototype","getRawTx","txid","_redis","Promise","resolve","getBuffer","then","rawtx","_temp","jb","JungleBusClient","GetTransaction","txnData","_redis2","Buffer","from","transaction","set","e","reject","getBlockchainInfo","fetch","resp","ok","createError","status","statusText","json","info","height","hash","getBlockByHeight","getBlockByHash","loadInscription","pointer","metadata","file","_temp4","_result","NotFound","_temp3","match","_pointer$split","split","vout","bsvProvider","Error","tx","Tx","fromBuffer","v","script","txOuts","parseScript","_temp2","data","_ref","meta","MAP","_catch","loadPointerFromDNS","hostname","lookupDomain","dns","resolveTxt","TXTs","outer","_step","_iterator","_createForOfIteratorHelperLoose","done","_step2","_iterator2","value","elem","startsWith","slice","prefix","getLatestBlock","B","ORD","_step3","opFalse","opIf","opORD","type","alloc","_iterator3","chunks","entries","_chunk$buf","_chunk$buf2","_step3$value","i","chunk","buf","equals","length","toString","opCodeNum","OpCode","OP_FALSE","OP_IF","_script$chunks","_script$chunks2","OP_PUSHDATA4","concat","OP_TRUE","OP_ENDIF","sendFile","res","immutable","header","JSON","stringify","send","app","getOrdfsFile","req","next","params","filename","dirData","dir","parse","query","err","get","_exit","outpoint","_req$res","redirect","render","_loadPointerFromDNS","_json","_getLatestBlock","call","_json2","_getBlockByHeight","_temp5","_json3","_getBlockByHash","_send","_getRawTx","_exit2","_temp7","_result3","_temp6","_loadInscription","_req$res2","raw","error","message","_loadPointerFromDNS2","_loadInscription2","_req$res3","htmlData","b64HtmlData"],"mappings":"ogBAMIA,o3BACJ,GAAIC,QAAQC,IAAIC,WAAY,CAC1B,IAAMC,EAAOH,QAAQC,IAAIC,WACnBE,EAAOJ,QAAQC,IAAII,WACrBC,SAASN,QAAQC,IAAII,WAAY,IACjC,KACJE,QAAQC,IAAI,uBAAwBL,EAAMC,GAC1CL,EAAQ,IAAIU,EAAAA,MAAML,EAAMD,EACzB,CAoEY,IAAAO,eAAiBA,WAAAA,SAAAA,IACrBC,KAAAA,QAAU,KAAK,KAAAC,EAAAF,EAAAG,UAiDrB,OAjDqBD,EAEhBE,kBAASC,OAAYC,IAAAA,EAAAC,OAAAA,QAAAC,QACPF,OADOA,EACPjB,QAAAiB,EAAAA,EAAOG,UAAS,SAAUJ,IAAOK,cAA/CC,GAAK,IAAAC,EACL,WAAA,IAACD,EACH,CAAA,IAAME,EAAK,IAAIC,EAAeA,gBAAC,oCAAoC,OAAAP,QAAAC,QAC7CK,EAAGE,eAAeV,IAAKK,KAAA,SAAvCM,GAAOC,IAAAA,EACbN,EAAQO,OAAOC,KAAKH,EAASI,YAAa,iBAC1CH,EAAA5B,IAAA4B,EAAOI,IAAahB,SAAAA,EAAQM,EAAO,EAAAC,CAAAA,CAJjC,GAIiCA,OAAAA,GAAAA,EAAAF,KAAAE,EAAAF,KAAA,WAErC,OAAOC,CAAM,GAANA,CAAK,EACd,CAAC,MAAAW,GAAA,OAAAf,QAAAgB,OAAAD,EAAA,CAAA,EAAApB,EAEKsB,kBAAiB,WAAA,IAAA,OAAAjB,QAAAC,QACFiB,EAAAA,QACjB,2DACDf,cAFKgB,GAGN,IAAKA,EAAKC,GACR,MAAMC,EAAAA,QAAYF,EAAKG,OAAQH,EAAKI,YACrC,OAAAvB,QAAAC,QACkBkB,EAAKK,QAAMrB,KAAA,SAAxBsB,GACN,MAAO,CACLC,OAAQD,EAAK,GAAGC,OAChBC,KAAMF,EAAK,GAAGE,KACd,EAAA,EACJ,CAAC,MAAAZ,GAAAf,OAAAA,QAAAgB,OAAAD,EAAA,CAAA,EAAApB,EAEKiC,iBAAgB,SACpBF,GAAc,IAAA1B,OAAAA,QAAAC,QAEKiB,EAAAA,QAAK,yDACmCQ,IAC1DvB,KAFKgB,SAAAA,GAAInB,OAAAA,QAAAC,QAGSkB,EAAKK,QAAMrB,KAAA,SAAxBsB,GACN,MAAO,CAAEC,OAAAA,EAAQC,KAAMF,EAAKE,KAAO,EAAA,EACrC,CAAC,MAAAZ,GAAAf,OAAAA,QAAAgB,OAAAD,KAAApB,EAEKkC,eAAc,SAClBF,OAAY3B,OAAAA,QAAAC,QAEOiB,EAAK,QACiCS,uDAAAA,IACxDxB,KAAA,SAFKgB,GAAInB,OAAAA,QAAAC,QAGSkB,EAAKK,QAAMrB,KAAA,SAAxBsB,GAEN,MAAO,CACLC,OAAQD,EAAKC,OACbC,KAAAA,EACA,EACJ,EAAA,CAAC,MAAAZ,GAAAf,OAAAA,QAAAgB,OAAAD,EAAA,CAAA,EAAAtB,CAAA,CAlD2BA,GCiCRqC,WAAgBC,EAAiBC,QAAQ,IAARA,IAAAA,GAAW,GAAK,QAEjEC,EAFiEC,EAAA,SAAAC,GAwCrE,IAAKF,EAAM,MAAU,IAAAZ,EAAW,QAACe,SACjC,OAAOH,CAAK,EAxCZ3C,QAAQC,IAAI,kBAAmBwC,GACJ,IAAAM,EACvBN,WAAAA,GAAAA,EAAQO,MAAM,0BAChB,IAAAC,EAAqBR,EAAQS,MAAM,KAA5B1C,EAAIyC,KAAEE,EAAIF,EAAA,GACe,OAAhCjD,QAAQC,IAAI,OAAQO,EAAM2C,GAAMzC,QAAAC,QACZyC,EAAY7C,SAASC,IAAKK,KAAxCC,SAAAA,GACN,IAAKA,EAAO,MAAM,IAAIuC,MAAM,mBAC5B,IAAMC,EAAKC,EAAEA,GAACC,WAAW1C,GACnB2C,EAAI1D,SAASoD,EAAM,IACnBO,EAASJ,EAAGK,OAAOF,GAAGC,OAC5B,IAAKA,EAAQ,MAAM,IAAI3B,EAAW,QAACe,SACnCH,EAAOiB,EAAYF,GAAQ,IAAAG,EACvBlB,WAAAA,GAAAA,GAAQD,EAAQ,CAAA,IAAA3B,0BAEkEL,QAAAC,QAC/DiB,EAAK,QADf,6DAA+Da,IAC3C5B,KAAvBgB,SAAAA,GAAInB,OAAAA,QAAAC,QACSkB,EAAKK,QAAMrB,cAAxBiD,GAAI,OAAApD,QAAAC,QACayC,EAAYd,iBAAiBwB,EAAM1B,SAAOvB,KAAAkD,SAAAA,GAQjEpB,EAAKqB,KAPc,CACjB5B,OAAQ0B,EAAK1B,OACb6B,IAAKH,EAAKG,IACV5B,KAJU0B,EAAJ1B,KAKN7B,KAAAA,EACAiD,EAAAA,EAEe,EAClB,EAAA,kDAAA1C,gBAdiBmD,GAcjBnD,GAAAA,GAAAA,EAAAF,KAAA,OAAAE,EAAAF,KAAAgD,WAAAA,EAAAA,CAAAA,CAdClB,GAcDkB,GAAAA,GAAAA,EAAAhD,KAAA,OAAAgD,EAAAhD,KAAA,WAAA,EAAA,EAAA,OAWY,IAAAwC,MAAM,kBAAmB,CAnCtCZ,GAmCsC,OAAA/B,QAAAC,QAAAoC,GAAAA,EAAAlC,KAAAkC,EAAAlC,KAAA+B,GAAAA,IAI5C,CAAC,MAAAnB,GAAA,OAAAf,QAAAgB,OAAAD,EAAA,CAAA,EAhEqB0C,EAAA,SAAmBC,GAAgB,IACvD,IAAMC,EAAyBD,UAAAA,EAAW,OAAA1D,QAAAC,QACvB2D,EAAIC,WAAWF,IAAaxD,KAAA,SAAzC2D,GACN,IACI/B,EAAU,GACdzC,QAAQC,IAAI,aAAcoE,GAC1BI,EAAO,IAAA,IAAsBC,EAAtBC,EAAAC,EAAkBJ,KAAIE,EAAAC,KAAAE,MAAE,CAC7B,IAD6B,IACPC,EAAtBC,EAAAH,EADmBF,EAAAM,SACGF,EAAAC,KAAAF,MAAE,CAAb,IAAAI,EAAIH,EAAAE,MACb,GAAKC,EAAKC,WALC,UAKX,CACAlF,QAAQC,IAAI,QAASgF,GACrBxC,EAAUwC,EAAKE,MAAMC,GACrBpF,QAAQC,IAAI,UAAWwC,GACvB,MAAMgC,EACP,CAED,IAAKhC,EACH,MAAU,IAAAV,EAAAA,QAAYe,QAEzB,CACD,OAAOL,CAAQ,EACjB,CAAC,MAAAhB,UAAAf,QAAAgB,OAAAD,EAlCD,CAAA,EAAsBlB,WACpBH,EACAI,GAAY,IAEZ,GAGO,QAHCJ,EAIJ,OAAAM,QAAAC,QAAOyC,EAAY7C,SAASC,IAE5B,UAAUuB,EAAW,QAACe,SAAS,oBAErC,CAAC,MAAArB,GAAAf,OAAAA,QAAAgB,OAAAD,EAAA,CAAA,EA1BqBc,EAAA,SACpBnC,EACAiC,GAAY,IAEZ,GAGO,QAHCjC,EAIJ,OAAAM,QAAAC,QAAOyC,EAAYb,eAAeF,IAElC,MAAM,IAAIN,EAAW,QAACe,SAAS,oBAErC,CAAC,MAAArB,GAAA,OAAAf,QAAAgB,OAAAD,EA1BD,CAAA,EAAsBa,EAAgB,SACpClC,EACAgC,GAAc,IAEd,GAGO,QAHChC,EAIJ,OAAAM,QAAAC,QAAOyC,EAAYd,iBAAiBF,IAEpC,MAAU,IAAAL,EAAW,QAACe,SAAS,oBAErC,CAAC,MAAArB,UAAAf,QAAAgB,OAAAD,EAzBD,CAAA,EAAsB4D,WACpBjF,OAEA,GAGO,QAHCA,EAIJ,OAAAM,QAAAC,QAAOyC,EAAYzB,qBAEnB,MAAM,IAAII,EAAAA,QAAYe,SAAS,oBAErC,CAAC,MAAArB,UAAAf,QAAAgB,OAAAD,EArCD,CAAA,EAAM6D,EAAIjE,OAAOC,KAAK,sCAChBiE,EAAMlE,OAAOC,KAAK,OAGpB8B,EAA2B,IAAIjD,EAiK7B,SAAUyD,EAAYF,GAO1B,IANA,IAMgD8B,EAN5CC,EAAU,EACVC,EAAO,EACPC,EAAQ,EAERC,EAAO,2BACP9B,EAAOzC,OAAOwE,MAAM,GACxBC,EAAAlB,EAAyBlB,EAAOqC,OAAOC,aAASR,EAAAM,KAAAjB,MAAE,KAAAoB,EAAAC,EAAAC,EAAAX,EAAAR,MAAtCoB,EAACD,EAAA,GAAEE,EAAKF,EAClB,GAAA,GAAIF,OAAAA,EAAAI,EAAMC,MAANL,EAAWM,OAAOjB,IAAM5B,EAAOqC,OAAOS,OAASJ,EAAI,EAGrD,MAAO,CAAEtC,KAFTA,EAAOJ,EAAOqC,OAAOK,EAAI,GAAGE,IAEbV,KADfA,EAAOlC,EAAOqC,OAAOK,EAAI,GAAGE,IAAKG,YASnC,GANIJ,EAAMK,YAAcC,SAAOC,WAC7BnB,EAAUW,GAERC,EAAMK,YAAcC,EAAMA,OAACE,QAC7BnB,EAAOU,GAELF,OAAAA,EAAAG,EAAMC,MAANJ,EAAWK,OAAOhB,IAAQE,IAAYW,EAAI,GAAKV,IAASU,EAAI,EAAG,CACjET,EAAQS,EACR,KACD,CACF,CAED,IAAK,IAAIA,EAAIT,EAAQ,EAAGS,EAAI1C,EAAOqC,OAAOS,OAAQJ,IAChD,OAAQ1C,EAAOqC,OAAOK,GAAGM,WACvB,KAAKC,EAAMA,OAACC,SACV,MACEE,OAAAA,EAAApD,EAAOqC,OAAOK,EAAI,SAAlBU,EAAAA,EAAsBJ,YAAa,WACnCK,EAAArD,EAAOqC,OAAOK,EAAI,WAAlBW,EAAsBL,YAAaC,EAAMA,OAACK,cAC1C,KAAAF,EAAAC,EACAjD,EAAOzC,OAAO4F,OAAO,CAACnD,EAAMJ,EAAOqC,OAAOK,EAAI,GAAGE,MACjDF,GACD,CACD,MACF,KAAK,EAGH,GAAgC,GAA5B1C,EAAOqC,OAAOK,GAAGE,IAAK,GAAS,OACrC,KAAKK,EAAMA,OAACO,QACVtB,EAAOlC,EAAOqC,OAAOK,EAAI,GAAIE,IAAKG,SAAS,QAE3CL,IACA,MACF,KAAKO,EAAAA,OAAOQ,SACV,MAAO,CAAEvB,KAAAA,EAAM9B,KAAAA,GACjB,QACE,OAIN,MAAO,CAAE8B,KAAAA,EAAM9B,KAAAA,EACjB,wFCxNA,SAASsD,EAASzE,EAAY0E,EAAeC,QAAS,IAATA,IAAAA,GAAY,GACvDD,EAAIE,OAAO,eAAgB5E,EAAKiD,MAAQ,IACpCjD,EAAKqB,MACPqD,EAAIE,OAAO,aAAcC,KAAKC,UAAU9E,EAAKqB,OAE3CsD,IAAc3E,EAAKqB,MACrBqD,EAAIE,OAAO,gBAAiB,qCAE9BF,EAAIrF,OAAO,KAAK0F,KAAK/E,EAAKmB,KAC5B,wBAEM,SAAyB6D,OAsHdC,WAAaC,EAAKR,EAAKS,GAAI,WAAApH,QAAAC,QAAAuD,EACpC,WACF,IAAIzB,EAAUoF,EAAIE,OAAOtF,QACnBuF,EAAWH,EAAIE,OAAOC,SAAS,OAAAtH,QAAAC,QACf6B,EAAgBC,IAAQ5B,KAAxCoH,SAAAA,GACN,IAAMC,EAAaV,KAAKW,MAAMF,EAAQnE,KAAM2C,SAAS,SACrD,IAAKyB,EAAIF,GACP,MAAM,IAAIjG,UAAYe,SAMvB,OAHCL,EADEyF,EAAIF,GAAU9C,WAAW,UACjBgD,EAAIF,GAAU7C,MAAM,GAEpB+C,EAAIF,GACftH,QAAAC,QACkB6B,EAAgBC,EAASoF,EAAIO,MAAMpE,OAAKnD,KAArD8B,SAAAA,GACNyE,EAASzE,EAAM0E,GAAK,EAAM,EAAA,EAC3B,EAAQgB,SAAAA,GACPP,EAAKO,EACN,GACH,CAAC,MAAA5G,UAAAf,QAAAgB,OAAAD,EAlCc,CAAA,EAtGfkG,EAAIW,IAAI,IAAYT,SAAAA,EAAKR,OAAOxD,IAmB7B0E,EAlBGC,EAD0B3E,WAAAhB,UAAA0F,EAAA1F,EAAAqB,EAS1B,WAAA,OAAAxD,QAAAC,QACiB6B,EAAgBgG,IAAS3H,KAAA,SAAtC8B,GACgD,IAAA8F,EAApC,gBAAd9F,EAAKiD,MAA2BiC,EAAIO,MAAW,IAInDhB,EAASzE,EAAM0E,GAAK,GAHX,OAAPoB,EAAAZ,EAAIR,MAAJoB,EAASC,SAAS,aAGO,EAC5B,aAECrB,EAAIsB,OAAO,YACZ,EAAA,EAlBoB5H,EAAAmD,EAAA,kBACjBxD,QAAAC,QACewD,EAAmB0D,EAAIzD,WAASvD,KAAA,SAAA+H,GAAjDJ,EAAQI,CAA0C,EACnD,EAAA,WAECvB,EAAIsB,OAAO,eAAeJ,EAAA,CAE3B,GAAA7H,OAAAA,QAAAC,QAAAI,GAAAA,EAAAF,KAAAE,EAAAF,KAAAgD,GAAAA,EAAA9C,GAYH,CAAC,MAAAU,GAAAf,OAAAA,QAAAgB,OAAAD,EAAC,CAAA,GAEFkG,EAAIW,IAAI,qCAAoCT,EAAKR,EAAKS,GAAQ,IAAA,IAAA/E,EAAAmB,EACxD,WAAA,IAAA2E,EACFxB,EAAInF,KAAI,OAAAxB,QAAAC,QAAO0E,EAAewC,EAAIE,OAAO3H,UAAQS,KAAAiI,SAAAA,GAAjDD,EAAAE,KAAA1B,EAAGyB,EAAgD,EACpD,EAAQrH,SAAAA,GACPqG,EAAKrG,EACN,GAAA,OAAAf,QAAAC,QAAAoC,GAAAA,EAAAlC,KAAAkC,EAAAlC,KAAA,mBAAA,EACH,CAAC,MAAAY,GAAAf,OAAAA,QAAAgB,OAAAD,EAAC,CAAA,GAEFkG,EAAIW,IAAI,6CAA4CT,EAAKR,EAAKS,GAAQ,IAAA,IAAAlF,EAAAsB,EAChE,WAAA,IAAA8E,EACF3B,EAAInF,KAAI,OAAAxB,QAAAC,QACA2B,EACJuF,EAAIE,OAAO3H,QACXL,SAAS8H,EAAIE,OAAO3F,OAAQ,MAC7BvB,KAAAoI,SAAAA,GAJHD,EAAAD,KAAA1B,EAAG4B,EAKD,EACH,EAAQxH,SAAAA,GACPqG,EAAKrG,EACN,GAAA,OAAAf,QAAAC,QAAAiC,GAAAA,EAAA/B,KAAA+B,EAAA/B,KAAA,WAAA,QAAA,EACH,CAAC,MAAAY,GAAAf,OAAAA,QAAAgB,OAAAD,EAAA,CAAA,GAEDkG,EAAIW,IAAI,gCAAwCT,SAAAA,EAAKR,EAAKS,GAAQ,IAAA,IAAAoB,EAAAhF,EAC5D,WAAA,IAAAiF,EACF9B,EAAInF,KAAI,OAAAxB,QAAAC,QAAO4B,EAAesF,EAAIE,OAAO3H,QAASyH,EAAIE,OAAO1F,OAAKxB,KAAA,SAAAuI,GAAlED,EAAAJ,KAAA1B,EAAG+B,EAAiE,EACrE,EAAA,SAAQ3H,GACPqG,EAAKrG,EACN,GAAA,OAAAf,QAAAC,QAAAuI,GAAAA,EAAArI,KAAAqI,EAAArI,0BACH,CAAC,MAAAY,GAAA,OAAAf,QAAAgB,OAAAD,MAEDkG,EAAIW,IAAI,wBAAgCT,SAAAA,EAAKR,OAC3CA,EAAI7F,IAAI,eAAgB,4BAA4B,IAAA6H,EACpDhC,EAAIK,YAAIhH,QAAAC,QAAOJ,EAASsH,EAAIE,OAAO3H,QAASyH,EAAIE,OAAOvH,OAAKK,cAAAyI,GAA5DD,EAAAN,KAAA1B,EAAGiC,EAA2D,EAChE,CAAC,MAAA7H,GAAA,OAAAf,QAAAgB,OAAAD,EAAA,CAAA,GACDkG,EAAIW,IAAI,sBAgB+BT,EAAKR,EAAKS,GAAI,IAAA,IAAAyB,EAC7CvB,EAAWH,EAAIE,OAAOC,SAAS,OAAAtH,QAAAC,QAAAuD,EAAA,WACjCsF,SAAAA,EAAAC,GAAAF,GAAAA,SAAAE,EAuBFrC,EAASzE,EAAM0E,EAAKC,EAAW,CAtB/B,IAAI7E,EACAE,EACA2E,GAAY,EAAKoC,EAAAxF,aACjBxD,OAAAA,QAAAC,QAEW6B,EAAgBwF,EAAUH,EAAIO,MAAMpE,OAAKnD,KAAA,SAAA8I,OACLC,EAA/B,iBADlBjH,EAAIgH,GACK/D,MAA2BiC,EAAIO,MAAMyB,MACrC,OAAPD,EAAA/B,EAAIR,MAAJuC,EAASlB,SAAaV,IAAAA,iBAAuBuB,EAGhD,EAAA,EAAA,WAAQ9H,GAC8C,OAArDzB,QAAQ8J,MAAM,iBAAkB9B,EAAUvG,EAAEsI,SAASrJ,QAAAC,QACrCwD,EAAmB0D,EAAIzD,WAASvD,KAAAmJ,SAAAA,GAAC,OAAjDvH,EAAOuH,EAA0CtJ,QAAAC,QAC3B6B,EAAgBC,IAAQ5B,cAAxCoH,GACN,IAAMC,EAAMV,KAAKW,MAAMF,EAAQnE,KAAM2C,SAAS,SAC9C,IAAKyB,EAAIF,GACP,MAAU,IAAAjG,EAAW,QAACe,SAES,OAAjCL,EAAUyF,EAAIF,GAAU7C,MAAM,GAAGzE,QAAAC,QACpB6B,EAAgBC,EAASoF,EAAIO,MAAMpE,OAAKnD,cAAAoJ,GAArDtH,EAAIsH,EACJ3C,GAAY,CAAM,MACnB,GAAA,OAAAoC,GAAAA,EAAA7I,KAAA6I,EAAA7I,KAAA2I,GAAAA,EAAAE,EAEF,EAAQrB,SAAAA,GACPP,EAAKO,EACN,GACH,CAAC,MAAA5G,UAAAf,QAAAgB,OAAAD,EAvCc,CAAA,GALfkG,EAAIW,IAAI,oBA8CO,SAAeT,EAAKR,EAAKS,GAAI,IAC1C,IAAMrF,EAAUoF,EAAIE,OAAOtF,QAAQ,OAAA/B,QAAAC,QAAAuD,EAAA,kBAC/BxD,QAAAC,QACiB6B,EAAgBC,EAASoF,EAAIO,MAAMpE,OAAKnD,cAArD8B,GAE6C,IAAAuH,EAAjC,gBAAdvH,EAAKiD,MAA2BiC,EAAIO,MAAMyB,IAI9CzC,EAASzE,EAAM0E,GAAK,UAHlB6C,EAAArC,EAAIR,MAAJ6C,EAASxB,SAAajG,IAAAA,gBAGE,EAC3B,EAAA,SAAQ4F,GACPP,EAAKO,EACN,GACH,CAAC,MAAA5G,GAAA,OAAAf,QAAAgB,OAAAD,EAAA,CAAA,GA1DDkG,EAAIW,IAAI,wBAI6B,SAACT,EAAKR,EAAKS,GAAI,IAClD,IACE,IACMqC,EAAW9I,OAAOC,KADJuG,EAAIE,OAAOqC,YACW,UAAU3D,SAAS,QAC7DY,EAAIsB,OAAO,gBAAiB,CAAEwB,SAAAA,GAC/B,CAAC,MAAO9B,GACPP,EAAKO,EACN,CAAA,OAAA3H,QAAAC,SACH,CAAC,MAAAc,GAAA,OAAAf,QAAAgB,OAAAD,MAXDkG,EAAIW,IAAI,sBAAuBV,GAC/BD,EAAIW,IAAI,8BAA+BV,EA8EzC"} \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 7d28902..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './routes'; -export * from './lib'; diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index 489ece6..0000000 --- a/dist/index.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("./routes"), exports); -__exportStar(require("./lib"), exports); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map deleted file mode 100644 index 9416de5..0000000 --- a/dist/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,wCAAsB"} \ No newline at end of file diff --git a/dist/index.modern.js b/dist/index.modern.js deleted file mode 100644 index 5a7524f..0000000 --- a/dist/index.modern.js +++ /dev/null @@ -1,2 +0,0 @@ -import t from"http-errors";import{Tx as o,OpCode as e}from"@ts-bitcoin/core";import*as n from"dns/promises";import a from"cross-fetch";import{JungleBusClient as r}from"@gorillapool/js-junglebus";import{Redis as s}from"ioredis";let i;if(process.env.REDIS_HOST){const t=process.env.REDIS_HOST,o=process.env.REDIS_PORT?parseInt(process.env.REDIS_PORT,10):6379;console.log("Connecting to redis:",t,o),i=new s(o,t)}const c=Buffer.from("19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut"),h=Buffer.from("ord");let u=new class{constructor(){this.network="bsv"}async getRawTx(t){var o;let e=await(null==(o=i)?void 0:o.getBuffer(`rawtx:${t}`));if(!e){var n;const o=new r("https://junglebus.gorillapool.io"),a=await o.GetTransaction(t);e=Buffer.from(a.transaction,"base64"),null==(n=i)||n.set(`rawtx:${t}`,e)}return e}async getBlockchainInfo(){const o=await a("https://api.whatsonchain.com/v1/bsv/main/block/headers");if(!o.ok)throw t(o.status,o.statusText);const e=await o.json();return{height:e[0].height,hash:e[0].hash}}async getBlockByHeight(t){const o=await a(`https://api.whatsonchain.com/v1/bsv/main/block/height/${t}`);return{height:t,hash:(await o.json()).hash}}async getBlockByHash(t){const o=await a(`https://api.whatsonchain.com/v1/bsv/main/block/hash/${t}`);return{height:(await o.json()).height,hash:t}}};async function f(o){if("bsv"===o)return u.getBlockchainInfo();throw new t.NotFound("Network Not Found")}async function l(o,e){if("bsv"===o)return u.getBlockByHeight(e);throw new t.NotFound("Network Not Found")}async function p(o,e){if("bsv"===o)return u.getBlockByHash(e);throw new t.NotFound("Network Not Found")}async function w(o,e){if("bsv"===o)return u.getRawTx(e);throw new t.NotFound("Network Not Found")}async function m(o){const e=`_ordfs.${o}`,a=await n.resolveTxt(e);let r="";console.log("Lookup Up:",e);t:for(const o of a){for(const t of o)if(t.startsWith("ordfs=")){console.log("Elem:",t),r=t.slice(6),console.log("Origin:",r);break t}if(!r)throw new t.NotFound}return r}async function d(e,n=!1){let r;if(console.log("loadInscription",e),!e.match(/^[0-9a-fA-F]{64}_\d*$/))throw new Error("Invalid Pointer");{const[s,i]=e.split("_");console.log("BSV:",s,i);const c=await u.getRawTx(s);if(!c)throw new Error("No raw tx found");const h=o.fromBuffer(c),f=parseInt(i,10),l=h.txOuts[f].script;if(!l)throw new t.NotFound;if(r=g(l),r&&n)try{const t=`https://ordinals.gorillapool.io/api/inscriptions/outpoint/${e}`,o=await a(t),n=await o.json(),{hash:i}=await u.getBlockByHeight(n.height);r.meta={height:n.height,MAP:n.MAP,hash:i,txid:s,v:f}}catch(t){}}if(!r)throw new t.NotFound;return r}function g(t){let o=0,n=0,a=0,r="application/octet-stream",s=Buffer.alloc(0);for(const[f,l]of t.chunks.entries()){var i,u;if(null!=(i=l.buf)&&i.equals(c)&&t.chunks.length>f+2)return s=t.chunks[f+1].buf,r=t.chunks[f+2].buf.toString(),{data:s,type:r};if(l.opCodeNum===e.OP_FALSE&&(o=f),l.opCodeNum===e.OP_IF&&(n=f),null!=(u=l.buf)&&u.equals(h)&&o===f-2&&n===f-1){a=f;break}}for(let o=a+1;o=1&&(null==(l=t.chunks[o+1])?void 0:l.opCodeNum)<=e.OP_PUSHDATA4;){var f,l;s=Buffer.concat([s,t.chunks[o+1].buf]),o++}break;case 1:if(1!=t.chunks[o].buf[0])return;case e.OP_TRUE:r=t.chunks[o+1].buf.toString("utf8"),o++;break;case e.OP_ENDIF:return{type:r,data:s};default:return}return{type:r,data:s}}function y(t,o,e=!0){o.header("Content-Type",t.type||""),t.meta&&o.header("ordfs-meta",JSON.stringify(t.meta)),e&&!t.meta&&o.header("Cache-Control","public,immutable,max-age=31536000"),o.status(200).send(t.data)}function k(o){async function e(o,e,n){try{let n=o.params.pointer;const a=o.params.filename,r=await d(n),s=JSON.parse(r.data.toString("utf8"));if(!s[a])throw new t.NotFound;n=s[a].startsWith("ord://")?s[a].slice(6):s[a],y(await d(n,o.query.meta),e,!0)}catch(t){n(t)}}o.get("/",async(t,o)=>{let e;try{e=await m(t.hostname)}catch(t){return void o.render("pages/index")}try{const a=await d(e);var n;if("ord-fs/json"===a.type&&!t.query.raw)return void(null==(n=t.res)||n.redirect("index.html"));y(a,o,!1)}catch(t){o.render("pages/404")}}),o.get("/v1/:network/block/latest",async(t,o,e)=>{try{o.json(await f(t.params.network))}catch(t){e(t)}}),o.get("/v1/:network/block/height/:height",async(t,o,e)=>{try{o.json(await l(t.params.network,parseInt(t.params.height,10)))}catch(t){e(t)}}),o.get("/v1/:network/block/hash/:hash",async(t,o,e)=>{try{o.json(await p(t.params.network,t.params.hash))}catch(t){e(t)}}),o.get("/v1/:network/tx/:txid",async(t,o)=>{o.set("Content-type","application/octet-stream"),o.send(await w(t.params.network,t.params.txid))}),o.get("/:filename",async function(o,e,n){const a=o.params.filename;try{let n,s,i=!0;try{var r;if(s=await d(a,o.query.meta),"ord-fs/json"===s.type&&!o.query.raw)return void(null==(r=o.res)||r.redirect(`/${a}/index.html`))}catch(e){console.error("Outpoint Error",a,e.message),n=await m(o.hostname);const r=await d(n),c=JSON.parse(r.data.toString("utf8"));if(!c[a])throw new t.NotFound;n=c[a].slice(6),s=await d(n,o.query.meta),i=!1}y(s,e,i)}catch(t){n(t)}}),o.get("/content/:pointer",async function(t,o,e){const n=t.params.pointer;try{const e=await d(n,t.query.meta);var a;if("ord-fs/json"===e.type&&!t.query.raw)return void(null==(a=t.res)||a.redirect(`/${n}/index.html`));y(e,o,!0)}catch(t){e(t)}}),o.get("/preview/:b64HtmlData",async function(t,o,e){try{const e=Buffer.from(t.params.b64HtmlData,"base64").toString("utf8");o.render("pages/preview",{htmlData:e})}catch(t){e(t)}}),o.get("/:pointer/:filename",e),o.get("/content/:pointer/:filename",e)}export{k as RegisterRoutes,p as getBlockByHash,l as getBlockByHeight,f as getLatestBlock,w as getRawTx,d as loadInscription,m as loadPointerFromDNS,g as parseScript}; -//# sourceMappingURL=index.modern.js.map diff --git a/dist/index.modern.js.map b/dist/index.modern.js.map deleted file mode 100644 index cb7611e..0000000 --- a/dist/index.modern.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.modern.js","sources":["../src/provider.ts","../src/lib.ts","../src/routes.ts"],"sourcesContent":["import { JungleBusClient } from \"@gorillapool/js-junglebus\";\n// import * as Client from \"bitcoin-core\";\nimport fetch from \"cross-fetch\";\nimport createError from \"http-errors\";\nimport { Redis } from \"ioredis\";\n\nlet redis: Redis;\nif (process.env.REDIS_HOST) {\n const host = process.env.REDIS_HOST;\n const port = process.env.REDIS_PORT\n ? parseInt(process.env.REDIS_PORT, 10)\n : 6379;\n console.log(\"Connecting to redis:\", host, port);\n redis = new Redis(port, host);\n}\n\nexport interface ITxProvider {\n network: string;\n getRawTx: (string) => Promise;\n getBlockchainInfo: () => Promise<{ height: number; hash: string }>;\n getBlockByHeight: (number) => Promise<{ height: number; hash: string }>;\n getBlockByHash: (string) => Promise<{ height: number; hash: string }>;\n}\n\n// export class RpcProvider implements ITxProvider {\n// private client: Client;\n\n// constructor(\n// public network: string,\n// host: string,\n// port: string,\n// username: string,\n// password: string\n// ) {\n// this.client = new Client({\n// host,\n// port,\n// username,\n// password,\n// });\n// }\n\n// async getRawTx(txid: string): Promise {\n// let rawtx = await redis?.getBuffer(`rawtx:${txid}`);\n// if (!rawtx) {\n// rawtx = await this.client.getTransactionByHash(txid, {\n// extension: \"bin\",\n// });\n// if (!rawtx) {\n// throw new createError.NotFound();\n// }\n// redis?.set(`rawtx:${txid}`, rawtx);\n// }\n// return rawtx;\n// }\n\n// async getBlockchainInfo(): Promise<{ height: number; hash: string }> {\n// const info = await this.client.getBlockchainInfo();\n// return {\n// height: info.blocks,\n// hash: info.bestblockhash,\n// };\n// }\n\n// async getBlockByHeight(\n// height: number\n// ): Promise<{ height: number; hash: string }> {\n// const hash = await this.client.getBlockHash(height);\n// return { height, hash };\n// }\n\n// async getBlockByHash(\n// hash: string\n// ): Promise<{ height: number; hash: string }> {\n// const info = await this.client.getBlockHeader(hash);\n// return {\n// height: info.height,\n// hash,\n// };\n// }\n// }\n\nexport class JungleBusProvider implements ITxProvider {\n public network = \"bsv\";\n\n async getRawTx(txid: string): Promise {\n let rawtx = await redis?.getBuffer(`rawtx:${txid}`);\n if (!rawtx) {\n const jb = new JungleBusClient(\"https://junglebus.gorillapool.io\");\n const txnData = await jb.GetTransaction(txid);\n rawtx = Buffer.from(txnData!.transaction, \"base64\");\n redis?.set(`rawtx:${txid}`, rawtx);\n }\n return rawtx;\n }\n\n async getBlockchainInfo(): Promise<{ height: number; hash: string }> {\n const resp = await fetch(\n \"https://api.whatsonchain.com/v1/bsv/main/block/headers\"\n );\n if (!resp.ok) {\n throw createError(resp.status, resp.statusText);\n }\n const info = await resp.json();\n return {\n height: info[0].height,\n hash: info[0].hash,\n };\n }\n\n async getBlockByHeight(\n height: number\n ): Promise<{ height: number; hash: string }> {\n const resp = await fetch(\n `https://api.whatsonchain.com/v1/bsv/main/block/height/${height}`\n );\n const info = await resp.json();\n return { height, hash: info.hash };\n }\n\n async getBlockByHash(\n hash: string\n ): Promise<{ height: number; hash: string }> {\n const resp = await fetch(\n `https://api.whatsonchain.com/v1/bsv/main/block/hash/${hash}`\n );\n const info = await resp.json();\n\n return {\n height: info.height,\n hash,\n };\n }\n}\n\n// export class BtcProvider implements ITxProvider {\n// public network = \"btc\";\n\n// async getRawTx(txid: string): Promise {\n// let rawtx = await redis?.getBuffer(`rawtx:${txid}`);\n// if (!rawtx) {\n// // TODO: Make this configuration based\n// const resp = await fetch(\n// `https://ordinals.shruggr.cloud/v1/btc/tx/${txid}`\n// );\n// if (!resp.ok) {\n// throw createError(resp.status, resp.statusText);\n// }\n// rawtx = Buffer.from(await resp.arrayBuffer());\n// redis?.set(`rawtx:${txid}`, rawtx);\n// }\n// return rawtx;\n// }\n\n// async getBlockchainInfo(): Promise<{ height: number; hash: string }> {\n// // TODO: Make this configuration based\n// const resp = await fetch(\n// \"https://ordinals.shruggr.cloud/v1/btc/block/latest\"\n// );\n// if (!resp.ok) {\n// throw createError(resp.status, resp.statusText);\n// }\n\n// return resp.json();\n// }\n\n// async getBlockByHeight(\n// height: number\n// ): Promise<{ height: number; hash: string }> {\n// const resp = await fetch(\n// `https://ordinals.shruggr.cloud/v1/btc/block/height/${height}`\n// );\n// const info = await resp.json();\n// return { height, hash: info.hash };\n// }\n\n// async getBlockByHash(\n// hash: string\n// ): Promise<{ height: number; hash: string }> {\n// const resp = await fetch(\n// `https://ordinals.shruggr.cloud/v1/btc/block/hash/${hash}`\n// );\n// const info = await resp.json();\n\n// return {\n// height: info.height,\n// hash,\n// };\n// }\n// }\n","import { OpCode, Script, Tx } from \"@ts-bitcoin/core\";\n// import { Transaction } from \"bitcore-lib\";\nimport * as dns from \"dns/promises\";\nimport createError from \"http-errors\";\nimport fetch from \"cross-fetch\";\nimport {\n // BtcProvider,\n ITxProvider,\n JungleBusProvider,\n // RpcProvider,\n} from \"./provider\";\n\nconst B = Buffer.from(\"19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut\");\nconst ORD = Buffer.from(\"ord\");\n\n// let btcProvider: ITxProvider = new BtcProvider();\nlet bsvProvider: ITxProvider = new JungleBusProvider();\n\n// if (process.env.BITCOIN_HOST) {\n// bsvProvider = new RpcProvider(\n// \"bsv\",\n// process.env.BITCOIN_HOST || \"\",\n// process.env.BITCOIN_PORT || \"8332\",\n// process.env.BITCOIN_USER || \"\",\n// process.env.BITCOIN_PASS || \"\"\n// );\n// }\n\n// if (process.env.BTC_HOST) {\n// btcProvider = new RpcProvider(\n// \"btc\",\n// process.env.BTC_HOST || \"\",\n// process.env.BTC_PORT || \"8332\",\n// process.env.BTC_USER || \"\",\n// process.env.BTC_PASS || \"\"\n// );\n// }\n\nexport async function getLatestBlock(\n network: string\n): Promise<{ height: number; hash: string }> {\n switch (network) {\n // case \"btc\":\n // return btcProvider.getBlockchainInfo();\n case \"bsv\":\n return bsvProvider.getBlockchainInfo();\n default:\n throw new createError.NotFound(\"Network Not Found\");\n }\n}\n\nexport async function getBlockByHeight(\n network: string,\n height: number\n): Promise<{ height: number; hash: string }> {\n switch (network) {\n // case \"btc\":\n // return btcProvider.getBlockByHeight(height);\n case \"bsv\":\n return bsvProvider.getBlockByHeight(height);\n default:\n throw new createError.NotFound(\"Network Not Found\");\n }\n}\n\nexport async function getBlockByHash(\n network: string,\n hash: string\n): Promise<{ height: number; hash: string }> {\n switch (network) {\n // case \"btc\":\n // return btcProvider.getBlockByHash(hash);\n case \"bsv\":\n return bsvProvider.getBlockByHash(hash);\n default:\n throw new createError.NotFound(\"Network Not Found\");\n }\n}\n\nexport async function getRawTx(\n network: string,\n txid: string\n): Promise {\n switch (network) {\n // case \"btc\":\n // return btcProvider.getRawTx(txid);\n case \"bsv\":\n return bsvProvider.getRawTx(txid);\n default:\n throw new createError.NotFound(\"Network Not Found\");\n }\n}\n\nexport async function loadPointerFromDNS(hostname: string): Promise {\n const lookupDomain = `_ordfs.${hostname}`;\n const TXTs = await dns.resolveTxt(lookupDomain);\n const prefix = \"ordfs=\";\n let pointer = \"\";\n console.log(\"Lookup Up:\", lookupDomain);\n outer: for (const TXT of TXTs) {\n for (const elem of TXT) {\n if (!elem.startsWith(prefix)) continue;\n console.log(\"Elem:\", elem);\n pointer = elem.slice(prefix.length);\n console.log(\"Origin:\", pointer);\n break outer;\n }\n\n if (!pointer) {\n throw new createError.NotFound();\n }\n }\n return pointer;\n}\n\nexport async function loadInscription(pointer: string, metadata = false): Promise {\n console.log(\"loadInscription\", pointer);\n let file: File | undefined;\n if (pointer.match(/^[0-9a-fA-F]{64}_\\d*$/)) {\n const [txid, vout] = pointer.split(\"_\");\n console.log(\"BSV:\", txid, vout);\n const rawtx = await bsvProvider.getRawTx(txid);\n if (!rawtx) throw new Error(\"No raw tx found\");\n const tx = Tx.fromBuffer(rawtx);\n const v = parseInt(vout, 10);\n const script = tx.txOuts[v].script;\n if (!script) throw new createError.NotFound();\n file = parseScript(script);\n if (file && metadata) {\n try {\n const url =`https://ordinals.gorillapool.io/api/inscriptions/outpoint/${pointer}`;\n const resp = await fetch(url);\n const data = await resp.json();\n const { hash } = await bsvProvider.getBlockByHeight(data!.height);\n const meta: Meta = {\n height: data.height,\n MAP: data.MAP,\n hash,\n txid,\n v,\n };\n file.meta = meta;\n } catch {};\n }\n // } else if (pointer.match(/^[0-9a-fA-F]{64}i\\d+$/) && btcProvider) {\n // const [txid, vin] = pointer.split(\"i\");\n // console.log(\"BTC\", txid, vin);\n // const rawtx = await btcProvider.getRawTx(txid);\n // if (!rawtx) throw new Error(\"No raw tx found\");\n // const tx = new Transaction(rawtx);\n // const script = Script.fromBuffer(tx.inputs[parseInt(vin, 10)].witnesses[1]);\n // if (!script) throw new createError.NotFound();\n // file = parseScript(script);\n } else throw new Error(\"Invalid Pointer\");\n\n if (!file) throw new createError.NotFound();\n return file;\n}\n\nexport interface Meta {\n height?: number;\n hash?: string;\n txid: string;\n v: number;\n MAP?: {[key:string]:any}\n}\n\nexport interface File {\n type: string;\n data: Buffer;\n meta?: Meta;\n}\n\nexport interface OrdFS {\n [filename: string]: string;\n}\n\nexport function parseScript(script: Script): File | undefined {\n let opFalse = 0;\n let opIf = 0;\n let opORD = 0;\n\n let type = \"application/octet-stream\";\n let data = Buffer.alloc(0);\n for (const [i, chunk] of script.chunks.entries()) {\n if (chunk.buf?.equals(B) && script.chunks.length > i + 2) {\n data = script.chunks[i + 1].buf!;\n type = script.chunks[i + 2].buf!.toString();\n return { data, type };\n }\n if (chunk.opCodeNum === OpCode.OP_FALSE) {\n opFalse = i;\n }\n if (chunk.opCodeNum === OpCode.OP_IF) {\n opIf = i;\n }\n if (chunk.buf?.equals(ORD) && opFalse === i - 2 && opIf === i - 1) {\n opORD = i;\n break;\n }\n }\n\n for (let i = opORD + 1; i < script.chunks.length; i++) {\n switch (script.chunks[i].opCodeNum) {\n case OpCode.OP_FALSE:\n while (\n script.chunks[i + 1]?.opCodeNum >= 1 &&\n script.chunks[i + 1]?.opCodeNum <= OpCode.OP_PUSHDATA4\n ) {\n data = Buffer.concat([data, script.chunks[i + 1].buf!]);\n i++;\n }\n break;\n case 1:\n // treat 1 like OP_1 (BTC convention)\n // console.log(script.chunks[i].toString('hex'))\n if (script.chunks[i].buf![0] != 1) return;\n case OpCode.OP_TRUE:\n type = script.chunks[i + 1]!.buf!.toString(\"utf8\");\n // console.log(\"Type:\", type)\n i++;\n break;\n case OpCode.OP_ENDIF:\n return { type, data };\n default:\n return;\n }\n }\n\n return { type, data };\n}\n","import * as express from \"express\";\nimport { Response } from \"express\";\nimport createError from \"http-errors\";\nimport {\n File,\n OrdFS,\n getBlockByHash,\n getBlockByHeight,\n getLatestBlock,\n getRawTx,\n loadInscription,\n loadPointerFromDNS,\n} from \"./lib\";\n\nfunction sendFile(file: File, res: Response, immutable = true) {\n res.header(\"Content-Type\", file.type || \"\");\n if (file.meta) {\n res.header('ordfs-meta', JSON.stringify(file.meta))\n }\n if (immutable && !file.meta) {\n res.header(\"Cache-Control\", \"public,immutable,max-age=31536000\");\n }\n res.status(200).send(file.data);\n}\n\nexport function RegisterRoutes(app: express.Express) {\n app.get(\"/\", async (req, res) => {\n let outpoint: string;\n try {\n outpoint = await loadPointerFromDNS(req.hostname);\n } catch (e: any) {\n // DNS pointer not found\n res.render(\"pages/index\");\n return;\n }\n try {\n const file = await loadInscription(outpoint);\n if (file.type === \"ord-fs/json\" && !req.query[\"raw\"]) {\n req.res?.redirect(\"index.html\");\n return;\n }\n sendFile(file, res, false);\n } catch (err) {\n // TODO: inscription not found\n res.render(\"pages/404\");\n }\n });\n\n app.get(\"/v1/:network/block/latest\", async (req, res, next) => {\n try {\n res.json(await getLatestBlock(req.params.network));\n } catch (e) {\n next(e);\n }\n });\n\n app.get(\"/v1/:network/block/height/:height\", async (req, res, next) => {\n try {\n res.json(\n await getBlockByHeight(\n req.params.network,\n parseInt(req.params.height, 10)\n )\n );\n } catch (e) {\n next(e);\n }\n });\n\n app.get(\"/v1/:network/block/hash/:hash\", async (req, res, next) => {\n try {\n res.json(await getBlockByHash(req.params.network, req.params.hash));\n } catch (e) {\n next(e);\n }\n });\n\n app.get(\"/v1/:network/tx/:txid\", async (req, res) => {\n res.set(\"Content-type\", \"application/octet-stream\");\n res.send(await getRawTx(req.params.network, req.params.txid));\n });\n app.get(\"/:filename\", getInscriptionOrDnsFile);\n app.get(\"/content/:pointer\", getInscription);\n app.get(\"/preview/:b64HtmlData\", previewHtmlFromB64Data);\n app.get(\"/:pointer/:filename\", getOrdfsFile);\n app.get(\"/content/:pointer/:filename\", getOrdfsFile);\n\n async function previewHtmlFromB64Data(req, res, next) {\n try {\n const b64HtmlData = req.params.b64HtmlData;\n const htmlData = Buffer.from(b64HtmlData, \"base64\").toString(\"utf8\");\n res.render(\"pages/preview\", { htmlData });\n } catch (err) {\n next(err);\n }\n }\n\n async function getInscriptionOrDnsFile(req, res, next) {\n const filename = req.params.filename;\n try {\n let pointer: string;\n let file: File;\n let immutable = true;\n try {\n // check if its an ordfs directory\n file = await loadInscription(filename, req.query.meta);\n if (file.type === \"ord-fs/json\" && !req.query.raw) {\n req.res?.redirect(`/${filename}/index.html`);\n return;\n }\n } catch (e: any) {\n console.error(\"Outpoint Error\", filename, e.message);\n pointer = await loadPointerFromDNS(req.hostname);\n const dirData = await loadInscription(pointer);\n const dir = JSON.parse(dirData.data!.toString(\"utf8\"));\n if (!dir[filename]) {\n throw new createError.NotFound();\n }\n pointer = dir[filename].slice(6);\n file = await loadInscription(pointer, req.query.meta);\n immutable = false;\n }\n sendFile(file, res, immutable);\n } catch (err) {\n next(err);\n }\n }\n\n async function getInscription(req, res, next) {\n const pointer = req.params.pointer;\n try {\n const file = await loadInscription(pointer, req.query.meta);\n // check if its an ordfs directory\n if (file.type === \"ord-fs/json\" && !req.query.raw) {\n req.res?.redirect(`/${pointer}/index.html`);\n return;\n }\n sendFile(file, res, true);\n } catch (err) {\n next(err);\n }\n }\n\n async function getOrdfsFile(req, res, next) {\n try {\n let pointer = req.params.pointer;\n const filename = req.params.filename;\n const dirData = await loadInscription(pointer);\n const dir: OrdFS = JSON.parse(dirData.data!.toString(\"utf8\"));\n if (!dir[filename]) {\n throw new createError.NotFound();\n }\n if (dir[filename].startsWith(\"ord://\")) {\n pointer = dir[filename].slice(6);\n } else {\n pointer = dir[filename];\n }\n const file = await loadInscription(pointer, req.query.meta);\n sendFile(file, res, true);\n } catch (err) {\n next(err);\n }\n }\n}\n"],"names":["redis","process","env","REDIS_HOST","host","port","REDIS_PORT","parseInt","console","log","Redis","B","Buffer","from","ORD","bsvProvider","constructor","this","network","getRawTx","txid","_redis","rawtx","getBuffer","_redis2","jb","JungleBusClient","txnData","GetTransaction","transaction","set","getBlockchainInfo","resp","fetch","ok","createError","status","statusText","info","json","height","hash","getBlockByHeight","getBlockByHash","async","getLatestBlock","NotFound","loadPointerFromDNS","hostname","lookupDomain","TXTs","dns","resolveTxt","pointer","outer","TXT","elem","startsWith","slice","prefix","loadInscription","metadata","file","match","Error","vout","split","tx","Tx","fromBuffer","v","script","txOuts","parseScript","url","data","meta","MAP","_unused","opFalse","opIf","opORD","type","alloc","i","chunk","chunks","entries","_chunk$buf","_chunk$buf2","buf","equals","length","toString","opCodeNum","OpCode","OP_FALSE","OP_IF","_script$chunks","_script$chunks2","OP_PUSHDATA4","concat","OP_TRUE","OP_ENDIF","sendFile","res","immutable","header","JSON","stringify","send","RegisterRoutes","app","getOrdfsFile","req","next","params","filename","dirData","dir","parse","query","err","get","outpoint","e","render","_req$res","redirect","_req$res2","raw","error","message","_req$res3","htmlData","b64HtmlData"],"mappings":"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"} \ No newline at end of file diff --git a/dist/index.module.js b/dist/index.module.js deleted file mode 100644 index 4a92cdc..0000000 --- a/dist/index.module.js +++ /dev/null @@ -1,2 +0,0 @@ -import e from"http-errors";import{Tx as r,OpCode as t}from"@ts-bitcoin/core";import*as n from"dns/promises";import o from"cross-fetch";import{JungleBusClient as i}from"@gorillapool/js-junglebus";import{Redis as u}from"ioredis";function s(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=new Array(r);t=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var c;if(process.env.REDIS_HOST){var h=process.env.REDIS_HOST,f=process.env.REDIS_PORT?parseInt(process.env.REDIS_PORT,10):6379;console.log("Connecting to redis:",h,f),c=new u(f,h)}var l=/*#__PURE__*/function(){function r(){this.network="bsv"}var t=r.prototype;return t.getRawTx=function(e){try{var r;return Promise.resolve(null==(r=c)?void 0:r.getBuffer("rawtx:"+e)).then(function(r){var t=function(){if(!r){var t=new i("https://junglebus.gorillapool.io");return Promise.resolve(t.GetTransaction(e)).then(function(t){var n;r=Buffer.from(t.transaction,"base64"),null==(n=c)||n.set("rawtx:"+e,r)})}}();return t&&t.then?t.then(function(){return r}):r})}catch(e){return Promise.reject(e)}},t.getBlockchainInfo=function(){try{return Promise.resolve(o("https://api.whatsonchain.com/v1/bsv/main/block/headers")).then(function(r){if(!r.ok)throw e(r.status,r.statusText);return Promise.resolve(r.json()).then(function(e){return{height:e[0].height,hash:e[0].hash}})})}catch(e){return Promise.reject(e)}},t.getBlockByHeight=function(e){try{return Promise.resolve(o("https://api.whatsonchain.com/v1/bsv/main/block/height/"+e)).then(function(r){return Promise.resolve(r.json()).then(function(r){return{height:e,hash:r.hash}})})}catch(e){return Promise.reject(e)}},t.getBlockByHash=function(e){try{return Promise.resolve(o("https://api.whatsonchain.com/v1/bsv/main/block/hash/"+e)).then(function(r){return Promise.resolve(r.json()).then(function(r){return{height:r.height,hash:e}})})}catch(e){return Promise.reject(e)}},r}(),m=function(t,n){void 0===n&&(n=!1);try{var i,u=function(r){if(!i)throw new e.NotFound;return i};console.log("loadInscription",t);var s=function(){if(t.match(/^[0-9a-fA-F]{64}_\d*$/)){var u=t.split("_"),s=u[0],a=u[1];return console.log("BSV:",s,a),Promise.resolve(b.getRawTx(s)).then(function(u){if(!u)throw new Error("No raw tx found");var c=r.fromBuffer(u),h=parseInt(a,10),f=c.txOuts[h].script;if(!f)throw new e.NotFound;i=k(f);var l=function(){if(i&&n){var e=function(e,r){try{var n=Promise.resolve(o("https://ordinals.gorillapool.io/api/inscriptions/outpoint/"+t)).then(function(e){return Promise.resolve(e.json()).then(function(e){return Promise.resolve(b.getBlockByHeight(e.height)).then(function(r){i.meta={height:e.height,MAP:e.MAP,hash:r.hash,txid:s,v:h}})})})}catch(e){return}return n&&n.then?n.then(void 0,function(){}):n}();if(e&&e.then)return e.then(function(){})}}();if(l&&l.then)return l.then(function(){})})}throw new Error("Invalid Pointer")}();return Promise.resolve(s&&s.then?s.then(u):u())}catch(e){return Promise.reject(e)}},v=function(r){try{var t="_ordfs."+r;return Promise.resolve(n.resolveTxt(t)).then(function(r){var n="";console.log("Lookup Up:",t);e:for(var o,i=a(r);!(o=i()).done;){for(var u,s=a(o.value);!(u=s()).done;){var c=u.value;if(c.startsWith("ordfs=")){console.log("Elem:",c),n=c.slice(6),console.log("Origin:",n);break e}}if(!n)throw new e.NotFound}return n})}catch(e){return Promise.reject(e)}},p=function(r,t){try{if("bsv"===r)return Promise.resolve(b.getRawTx(t));throw new e.NotFound("Network Not Found")}catch(e){return Promise.reject(e)}},d=function(r,t){try{if("bsv"===r)return Promise.resolve(b.getBlockByHash(t));throw new e.NotFound("Network Not Found")}catch(e){return Promise.reject(e)}},g=function(r,t){try{if("bsv"===r)return Promise.resolve(b.getBlockByHeight(t));throw new e.NotFound("Network Not Found")}catch(e){return Promise.reject(e)}},P=function(r){try{if("bsv"===r)return Promise.resolve(b.getBlockchainInfo());throw new e.NotFound("Network Not Found")}catch(e){return Promise.reject(e)}},y=Buffer.from("19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut"),w=Buffer.from("ord"),b=new l;function k(e){for(var r,n=0,o=0,i=0,u="application/octet-stream",s=Buffer.alloc(0),c=a(e.chunks.entries());!(r=c()).done;){var h,f,l=r.value,m=l[0],v=l[1];if(null!=(h=v.buf)&&h.equals(y)&&e.chunks.length>m+2)return{data:s=e.chunks[m+1].buf,type:u=e.chunks[m+2].buf.toString()};if(v.opCodeNum===t.OP_FALSE&&(n=m),v.opCodeNum===t.OP_IF&&(o=m),null!=(f=v.buf)&&f.equals(w)&&n===m-2&&o===m-1){i=m;break}}for(var p=i+1;p=1&&(null==(g=e.chunks[p+1])?void 0:g.opCodeNum)<=t.OP_PUSHDATA4;){var d,g;s=Buffer.concat([s,e.chunks[p+1].buf]),p++}break;case 1:if(1!=e.chunks[p].buf[0])return;case t.OP_TRUE:u=e.chunks[p+1].buf.toString("utf8"),p++;break;case t.OP_ENDIF:return{type:u,data:s};default:return}return{type:u,data:s}}function j(e,r){try{var t=e()}catch(e){return r(e)}return t&&t.then?t.then(void 0,r):t}function N(e,r,t){void 0===t&&(t=!0),r.header("Content-Type",e.type||""),e.meta&&r.header("ordfs-meta",JSON.stringify(e.meta)),t&&!e.meta&&r.header("Cache-Control","public,immutable,max-age=31536000"),r.status(200).send(e.data)}function S(r){var t=function(r,t,n){try{return Promise.resolve(j(function(){var n=r.params.pointer,o=r.params.filename;return Promise.resolve(m(n)).then(function(i){var u=JSON.parse(i.data.toString("utf8"));if(!u[o])throw new e.NotFound;return n=u[o].startsWith("ord://")?u[o].slice(6):u[o],Promise.resolve(m(n,r.query.meta)).then(function(e){N(e,t,!0)})})},function(e){n(e)}))}catch(e){return Promise.reject(e)}};r.get("/",function(e,r){try{var t,n,o=function(o){return t?o:j(function(){return Promise.resolve(m(n)).then(function(t){var n;"ord-fs/json"!==t.type||e.query.raw?N(t,r,!1):null==(n=e.res)||n.redirect("index.html")})},function(){r.render("pages/404")})},i=j(function(){return Promise.resolve(v(e.hostname)).then(function(e){n=e})},function(){r.render("pages/index"),t=1});return Promise.resolve(i&&i.then?i.then(o):o(i))}catch(e){return Promise.reject(e)}}),r.get("/v1/:network/block/latest",function(e,r,t){try{var n=j(function(){var t=r.json;return Promise.resolve(P(e.params.network)).then(function(e){t.call(r,e)})},function(e){t(e)});return Promise.resolve(n&&n.then?n.then(function(){}):void 0)}catch(e){return Promise.reject(e)}}),r.get("/v1/:network/block/height/:height",function(e,r,t){try{var n=j(function(){var t=r.json;return Promise.resolve(g(e.params.network,parseInt(e.params.height,10))).then(function(e){t.call(r,e)})},function(e){t(e)});return Promise.resolve(n&&n.then?n.then(function(){}):void 0)}catch(e){return Promise.reject(e)}}),r.get("/v1/:network/block/hash/:hash",function(e,r,t){try{var n=j(function(){var t=r.json;return Promise.resolve(d(e.params.network,e.params.hash)).then(function(e){t.call(r,e)})},function(e){t(e)});return Promise.resolve(n&&n.then?n.then(function(){}):void 0)}catch(e){return Promise.reject(e)}}),r.get("/v1/:network/tx/:txid",function(e,r){try{r.set("Content-type","application/octet-stream");var t=r.send;return Promise.resolve(p(e.params.network,e.params.txid)).then(function(e){t.call(r,e)})}catch(e){return Promise.reject(e)}}),r.get("/:filename",function(r,t,n){try{var o,i=r.params.filename;return Promise.resolve(j(function(){function n(e){if(o)return e;N(s,t,a)}var u,s,a=!0,c=j(function(){return Promise.resolve(m(i,r.query.meta)).then(function(e){var t;"ord-fs/json"!==(s=e).type||r.query.raw||(null==(t=r.res)||t.redirect("/"+i+"/index.html"),o=1)})},function(t){return console.error("Outpoint Error",i,t.message),Promise.resolve(v(r.hostname)).then(function(t){return u=t,Promise.resolve(m(u)).then(function(t){var n=JSON.parse(t.data.toString("utf8"));if(!n[i])throw new e.NotFound;return u=n[i].slice(6),Promise.resolve(m(u,r.query.meta)).then(function(e){s=e,a=!1})})})});return c&&c.then?c.then(n):n(c)},function(e){n(e)}))}catch(e){return Promise.reject(e)}}),r.get("/content/:pointer",function(e,r,t){try{var n=e.params.pointer;return Promise.resolve(j(function(){return Promise.resolve(m(n,e.query.meta)).then(function(t){var o;"ord-fs/json"!==t.type||e.query.raw?N(t,r,!0):null==(o=e.res)||o.redirect("/"+n+"/index.html")})},function(e){t(e)}))}catch(e){return Promise.reject(e)}}),r.get("/preview/:b64HtmlData",function(e,r,t){try{try{var n=Buffer.from(e.params.b64HtmlData,"base64").toString("utf8");r.render("pages/preview",{htmlData:n})}catch(e){t(e)}return Promise.resolve()}catch(e){return Promise.reject(e)}}),r.get("/:pointer/:filename",t),r.get("/content/:pointer/:filename",t)}export{S as RegisterRoutes,d as getBlockByHash,g as getBlockByHeight,P as getLatestBlock,p as getRawTx,m as loadInscription,v as loadPointerFromDNS,k as parseScript}; -//# sourceMappingURL=index.module.js.map diff --git a/dist/index.module.js.map b/dist/index.module.js.map deleted file mode 100644 index a3f9a86..0000000 --- a/dist/index.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.module.js","sources":["../src/provider.ts","../src/lib.ts","../src/routes.ts"],"sourcesContent":["import { JungleBusClient } from \"@gorillapool/js-junglebus\";\n// import * as Client from \"bitcoin-core\";\nimport fetch from \"cross-fetch\";\nimport createError from \"http-errors\";\nimport { Redis } from \"ioredis\";\n\nlet redis: Redis;\nif (process.env.REDIS_HOST) {\n const host = process.env.REDIS_HOST;\n const port = process.env.REDIS_PORT\n ? parseInt(process.env.REDIS_PORT, 10)\n : 6379;\n console.log(\"Connecting to redis:\", host, port);\n redis = new Redis(port, host);\n}\n\nexport interface ITxProvider {\n network: string;\n getRawTx: (string) => Promise;\n getBlockchainInfo: () => Promise<{ height: number; hash: string }>;\n getBlockByHeight: (number) => Promise<{ height: number; hash: string }>;\n getBlockByHash: (string) => Promise<{ height: number; hash: string }>;\n}\n\n// export class RpcProvider implements ITxProvider {\n// private client: Client;\n\n// constructor(\n// public network: string,\n// host: string,\n// port: string,\n// username: string,\n// password: string\n// ) {\n// this.client = new Client({\n// host,\n// port,\n// username,\n// password,\n// });\n// }\n\n// async getRawTx(txid: string): Promise {\n// let rawtx = await redis?.getBuffer(`rawtx:${txid}`);\n// if (!rawtx) {\n// rawtx = await this.client.getTransactionByHash(txid, {\n// extension: \"bin\",\n// });\n// if (!rawtx) {\n// throw new createError.NotFound();\n// }\n// redis?.set(`rawtx:${txid}`, rawtx);\n// }\n// return rawtx;\n// }\n\n// async getBlockchainInfo(): Promise<{ height: number; hash: string }> {\n// const info = await this.client.getBlockchainInfo();\n// return {\n// height: info.blocks,\n// hash: info.bestblockhash,\n// };\n// }\n\n// async getBlockByHeight(\n// height: number\n// ): Promise<{ height: number; hash: string }> {\n// const hash = await this.client.getBlockHash(height);\n// return { height, hash };\n// }\n\n// async getBlockByHash(\n// hash: string\n// ): Promise<{ height: number; hash: string }> {\n// const info = await this.client.getBlockHeader(hash);\n// return {\n// height: info.height,\n// hash,\n// };\n// }\n// }\n\nexport class JungleBusProvider implements ITxProvider {\n public network = \"bsv\";\n\n async getRawTx(txid: string): Promise {\n let rawtx = await redis?.getBuffer(`rawtx:${txid}`);\n if (!rawtx) {\n const jb = new JungleBusClient(\"https://junglebus.gorillapool.io\");\n const txnData = await jb.GetTransaction(txid);\n rawtx = Buffer.from(txnData!.transaction, \"base64\");\n redis?.set(`rawtx:${txid}`, rawtx);\n }\n return rawtx;\n }\n\n async getBlockchainInfo(): Promise<{ height: number; hash: string }> {\n const resp = await fetch(\n \"https://api.whatsonchain.com/v1/bsv/main/block/headers\"\n );\n if (!resp.ok) {\n throw createError(resp.status, resp.statusText);\n }\n const info = await resp.json();\n return {\n height: info[0].height,\n hash: info[0].hash,\n };\n }\n\n async getBlockByHeight(\n height: number\n ): Promise<{ height: number; hash: string }> {\n const resp = await fetch(\n `https://api.whatsonchain.com/v1/bsv/main/block/height/${height}`\n );\n const info = await resp.json();\n return { height, hash: info.hash };\n }\n\n async getBlockByHash(\n hash: string\n ): Promise<{ height: number; hash: string }> {\n const resp = await fetch(\n `https://api.whatsonchain.com/v1/bsv/main/block/hash/${hash}`\n );\n const info = await resp.json();\n\n return {\n height: info.height,\n hash,\n };\n }\n}\n\n// export class BtcProvider implements ITxProvider {\n// public network = \"btc\";\n\n// async getRawTx(txid: string): Promise {\n// let rawtx = await redis?.getBuffer(`rawtx:${txid}`);\n// if (!rawtx) {\n// // TODO: Make this configuration based\n// const resp = await fetch(\n// `https://ordinals.shruggr.cloud/v1/btc/tx/${txid}`\n// );\n// if (!resp.ok) {\n// throw createError(resp.status, resp.statusText);\n// }\n// rawtx = Buffer.from(await resp.arrayBuffer());\n// redis?.set(`rawtx:${txid}`, rawtx);\n// }\n// return rawtx;\n// }\n\n// async getBlockchainInfo(): Promise<{ height: number; hash: string }> {\n// // TODO: Make this configuration based\n// const resp = await fetch(\n// \"https://ordinals.shruggr.cloud/v1/btc/block/latest\"\n// );\n// if (!resp.ok) {\n// throw createError(resp.status, resp.statusText);\n// }\n\n// return resp.json();\n// }\n\n// async getBlockByHeight(\n// height: number\n// ): Promise<{ height: number; hash: string }> {\n// const resp = await fetch(\n// `https://ordinals.shruggr.cloud/v1/btc/block/height/${height}`\n// );\n// const info = await resp.json();\n// return { height, hash: info.hash };\n// }\n\n// async getBlockByHash(\n// hash: string\n// ): Promise<{ height: number; hash: string }> {\n// const resp = await fetch(\n// `https://ordinals.shruggr.cloud/v1/btc/block/hash/${hash}`\n// );\n// const info = await resp.json();\n\n// return {\n// height: info.height,\n// hash,\n// };\n// }\n// }\n","import { OpCode, Script, Tx } from \"@ts-bitcoin/core\";\n// import { Transaction } from \"bitcore-lib\";\nimport * as dns from \"dns/promises\";\nimport createError from \"http-errors\";\nimport fetch from \"cross-fetch\";\nimport {\n // BtcProvider,\n ITxProvider,\n JungleBusProvider,\n // RpcProvider,\n} from \"./provider\";\n\nconst B = Buffer.from(\"19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut\");\nconst ORD = Buffer.from(\"ord\");\n\n// let btcProvider: ITxProvider = new BtcProvider();\nlet bsvProvider: ITxProvider = new JungleBusProvider();\n\n// if (process.env.BITCOIN_HOST) {\n// bsvProvider = new RpcProvider(\n// \"bsv\",\n// process.env.BITCOIN_HOST || \"\",\n// process.env.BITCOIN_PORT || \"8332\",\n// process.env.BITCOIN_USER || \"\",\n// process.env.BITCOIN_PASS || \"\"\n// );\n// }\n\n// if (process.env.BTC_HOST) {\n// btcProvider = new RpcProvider(\n// \"btc\",\n// process.env.BTC_HOST || \"\",\n// process.env.BTC_PORT || \"8332\",\n// process.env.BTC_USER || \"\",\n// process.env.BTC_PASS || \"\"\n// );\n// }\n\nexport async function getLatestBlock(\n network: string\n): Promise<{ height: number; hash: string }> {\n switch (network) {\n // case \"btc\":\n // return btcProvider.getBlockchainInfo();\n case \"bsv\":\n return bsvProvider.getBlockchainInfo();\n default:\n throw new createError.NotFound(\"Network Not Found\");\n }\n}\n\nexport async function getBlockByHeight(\n network: string,\n height: number\n): Promise<{ height: number; hash: string }> {\n switch (network) {\n // case \"btc\":\n // return btcProvider.getBlockByHeight(height);\n case \"bsv\":\n return bsvProvider.getBlockByHeight(height);\n default:\n throw new createError.NotFound(\"Network Not Found\");\n }\n}\n\nexport async function getBlockByHash(\n network: string,\n hash: string\n): Promise<{ height: number; hash: string }> {\n switch (network) {\n // case \"btc\":\n // return btcProvider.getBlockByHash(hash);\n case \"bsv\":\n return bsvProvider.getBlockByHash(hash);\n default:\n throw new createError.NotFound(\"Network Not Found\");\n }\n}\n\nexport async function getRawTx(\n network: string,\n txid: string\n): Promise {\n switch (network) {\n // case \"btc\":\n // return btcProvider.getRawTx(txid);\n case \"bsv\":\n return bsvProvider.getRawTx(txid);\n default:\n throw new createError.NotFound(\"Network Not Found\");\n }\n}\n\nexport async function loadPointerFromDNS(hostname: string): Promise {\n const lookupDomain = `_ordfs.${hostname}`;\n const TXTs = await dns.resolveTxt(lookupDomain);\n const prefix = \"ordfs=\";\n let pointer = \"\";\n console.log(\"Lookup Up:\", lookupDomain);\n outer: for (const TXT of TXTs) {\n for (const elem of TXT) {\n if (!elem.startsWith(prefix)) continue;\n console.log(\"Elem:\", elem);\n pointer = elem.slice(prefix.length);\n console.log(\"Origin:\", pointer);\n break outer;\n }\n\n if (!pointer) {\n throw new createError.NotFound();\n }\n }\n return pointer;\n}\n\nexport async function loadInscription(pointer: string, metadata = false): Promise {\n console.log(\"loadInscription\", pointer);\n let file: File | undefined;\n if (pointer.match(/^[0-9a-fA-F]{64}_\\d*$/)) {\n const [txid, vout] = pointer.split(\"_\");\n console.log(\"BSV:\", txid, vout);\n const rawtx = await bsvProvider.getRawTx(txid);\n if (!rawtx) throw new Error(\"No raw tx found\");\n const tx = Tx.fromBuffer(rawtx);\n const v = parseInt(vout, 10);\n const script = tx.txOuts[v].script;\n if (!script) throw new createError.NotFound();\n file = parseScript(script);\n if (file && metadata) {\n try {\n const url =`https://ordinals.gorillapool.io/api/inscriptions/outpoint/${pointer}`;\n const resp = await fetch(url);\n const data = await resp.json();\n const { hash } = await bsvProvider.getBlockByHeight(data!.height);\n const meta: Meta = {\n height: data.height,\n MAP: data.MAP,\n hash,\n txid,\n v,\n };\n file.meta = meta;\n } catch {};\n }\n // } else if (pointer.match(/^[0-9a-fA-F]{64}i\\d+$/) && btcProvider) {\n // const [txid, vin] = pointer.split(\"i\");\n // console.log(\"BTC\", txid, vin);\n // const rawtx = await btcProvider.getRawTx(txid);\n // if (!rawtx) throw new Error(\"No raw tx found\");\n // const tx = new Transaction(rawtx);\n // const script = Script.fromBuffer(tx.inputs[parseInt(vin, 10)].witnesses[1]);\n // if (!script) throw new createError.NotFound();\n // file = parseScript(script);\n } else throw new Error(\"Invalid Pointer\");\n\n if (!file) throw new createError.NotFound();\n return file;\n}\n\nexport interface Meta {\n height?: number;\n hash?: string;\n txid: string;\n v: number;\n MAP?: {[key:string]:any}\n}\n\nexport interface File {\n type: string;\n data: Buffer;\n meta?: Meta;\n}\n\nexport interface OrdFS {\n [filename: string]: string;\n}\n\nexport function parseScript(script: Script): File | undefined {\n let opFalse = 0;\n let opIf = 0;\n let opORD = 0;\n\n let type = \"application/octet-stream\";\n let data = Buffer.alloc(0);\n for (const [i, chunk] of script.chunks.entries()) {\n if (chunk.buf?.equals(B) && script.chunks.length > i + 2) {\n data = script.chunks[i + 1].buf!;\n type = script.chunks[i + 2].buf!.toString();\n return { data, type };\n }\n if (chunk.opCodeNum === OpCode.OP_FALSE) {\n opFalse = i;\n }\n if (chunk.opCodeNum === OpCode.OP_IF) {\n opIf = i;\n }\n if (chunk.buf?.equals(ORD) && opFalse === i - 2 && opIf === i - 1) {\n opORD = i;\n break;\n }\n }\n\n for (let i = opORD + 1; i < script.chunks.length; i++) {\n switch (script.chunks[i].opCodeNum) {\n case OpCode.OP_FALSE:\n while (\n script.chunks[i + 1]?.opCodeNum >= 1 &&\n script.chunks[i + 1]?.opCodeNum <= OpCode.OP_PUSHDATA4\n ) {\n data = Buffer.concat([data, script.chunks[i + 1].buf!]);\n i++;\n }\n break;\n case 1:\n // treat 1 like OP_1 (BTC convention)\n // console.log(script.chunks[i].toString('hex'))\n if (script.chunks[i].buf![0] != 1) return;\n case OpCode.OP_TRUE:\n type = script.chunks[i + 1]!.buf!.toString(\"utf8\");\n // console.log(\"Type:\", type)\n i++;\n break;\n case OpCode.OP_ENDIF:\n return { type, data };\n default:\n return;\n }\n }\n\n return { type, data };\n}\n","import * as express from \"express\";\nimport { Response } from \"express\";\nimport createError from \"http-errors\";\nimport {\n File,\n OrdFS,\n getBlockByHash,\n getBlockByHeight,\n getLatestBlock,\n getRawTx,\n loadInscription,\n loadPointerFromDNS,\n} from \"./lib\";\n\nfunction sendFile(file: File, res: Response, immutable = true) {\n res.header(\"Content-Type\", file.type || \"\");\n if (file.meta) {\n res.header('ordfs-meta', JSON.stringify(file.meta))\n }\n if (immutable && !file.meta) {\n res.header(\"Cache-Control\", \"public,immutable,max-age=31536000\");\n }\n res.status(200).send(file.data);\n}\n\nexport function RegisterRoutes(app: express.Express) {\n app.get(\"/\", async (req, res) => {\n let outpoint: string;\n try {\n outpoint = await loadPointerFromDNS(req.hostname);\n } catch (e: any) {\n // DNS pointer not found\n res.render(\"pages/index\");\n return;\n }\n try {\n const file = await loadInscription(outpoint);\n if (file.type === \"ord-fs/json\" && !req.query[\"raw\"]) {\n req.res?.redirect(\"index.html\");\n return;\n }\n sendFile(file, res, false);\n } catch (err) {\n // TODO: inscription not found\n res.render(\"pages/404\");\n }\n });\n\n app.get(\"/v1/:network/block/latest\", async (req, res, next) => {\n try {\n res.json(await getLatestBlock(req.params.network));\n } catch (e) {\n next(e);\n }\n });\n\n app.get(\"/v1/:network/block/height/:height\", async (req, res, next) => {\n try {\n res.json(\n await getBlockByHeight(\n req.params.network,\n parseInt(req.params.height, 10)\n )\n );\n } catch (e) {\n next(e);\n }\n });\n\n app.get(\"/v1/:network/block/hash/:hash\", async (req, res, next) => {\n try {\n res.json(await getBlockByHash(req.params.network, req.params.hash));\n } catch (e) {\n next(e);\n }\n });\n\n app.get(\"/v1/:network/tx/:txid\", async (req, res) => {\n res.set(\"Content-type\", \"application/octet-stream\");\n res.send(await getRawTx(req.params.network, req.params.txid));\n });\n app.get(\"/:filename\", getInscriptionOrDnsFile);\n app.get(\"/content/:pointer\", getInscription);\n app.get(\"/preview/:b64HtmlData\", previewHtmlFromB64Data);\n app.get(\"/:pointer/:filename\", getOrdfsFile);\n app.get(\"/content/:pointer/:filename\", getOrdfsFile);\n\n async function previewHtmlFromB64Data(req, res, next) {\n try {\n const b64HtmlData = req.params.b64HtmlData;\n const htmlData = Buffer.from(b64HtmlData, \"base64\").toString(\"utf8\");\n res.render(\"pages/preview\", { htmlData });\n } catch (err) {\n next(err);\n }\n }\n\n async function getInscriptionOrDnsFile(req, res, next) {\n const filename = req.params.filename;\n try {\n let pointer: string;\n let file: File;\n let immutable = true;\n try {\n // check if its an ordfs directory\n file = await loadInscription(filename, req.query.meta);\n if (file.type === \"ord-fs/json\" && !req.query.raw) {\n req.res?.redirect(`/${filename}/index.html`);\n return;\n }\n } catch (e: any) {\n console.error(\"Outpoint Error\", filename, e.message);\n pointer = await loadPointerFromDNS(req.hostname);\n const dirData = await loadInscription(pointer);\n const dir = JSON.parse(dirData.data!.toString(\"utf8\"));\n if (!dir[filename]) {\n throw new createError.NotFound();\n }\n pointer = dir[filename].slice(6);\n file = await loadInscription(pointer, req.query.meta);\n immutable = false;\n }\n sendFile(file, res, immutable);\n } catch (err) {\n next(err);\n }\n }\n\n async function getInscription(req, res, next) {\n const pointer = req.params.pointer;\n try {\n const file = await loadInscription(pointer, req.query.meta);\n // check if its an ordfs directory\n if (file.type === \"ord-fs/json\" && !req.query.raw) {\n req.res?.redirect(`/${pointer}/index.html`);\n return;\n }\n sendFile(file, res, true);\n } catch (err) {\n next(err);\n }\n }\n\n async function getOrdfsFile(req, res, next) {\n try {\n let pointer = req.params.pointer;\n const filename = req.params.filename;\n const dirData = await loadInscription(pointer);\n const dir: OrdFS = JSON.parse(dirData.data!.toString(\"utf8\"));\n if (!dir[filename]) {\n throw new createError.NotFound();\n }\n if (dir[filename].startsWith(\"ord://\")) {\n pointer = dir[filename].slice(6);\n } else {\n pointer = dir[filename];\n }\n const file = await loadInscription(pointer, req.query.meta);\n sendFile(file, res, true);\n } catch (err) {\n next(err);\n }\n }\n}\n"],"names":["redis","process","env","REDIS_HOST","host","port","REDIS_PORT","parseInt","console","log","Redis","JungleBusProvider","network","_proto","prototype","getRawTx","txid","_redis","Promise","resolve","getBuffer","then","rawtx","_temp","jb","JungleBusClient","GetTransaction","txnData","_redis2","Buffer","from","transaction","set","e","reject","getBlockchainInfo","fetch","resp","ok","createError","status","statusText","json","info","height","hash","getBlockByHeight","getBlockByHash","loadInscription","pointer","metadata","file","_temp4","_result","NotFound","_temp3","match","_pointer$split","split","vout","bsvProvider","Error","tx","Tx","fromBuffer","v","script","txOuts","parseScript","_temp2","data","_ref","meta","MAP","_catch","loadPointerFromDNS","hostname","lookupDomain","dns","resolveTxt","TXTs","outer","_step","_iterator","_createForOfIteratorHelperLoose","done","_step2","_iterator2","value","elem","startsWith","slice","prefix","getLatestBlock","B","ORD","_step3","opFalse","opIf","opORD","type","alloc","_iterator3","chunks","entries","_chunk$buf","_chunk$buf2","_step3$value","i","chunk","buf","equals","length","toString","opCodeNum","OpCode","OP_FALSE","OP_IF","_script$chunks","_script$chunks2","OP_PUSHDATA4","concat","OP_TRUE","OP_ENDIF","sendFile","res","immutable","header","JSON","stringify","send","RegisterRoutes","app","getOrdfsFile","req","next","params","filename","dirData","dir","parse","query","err","get","_exit","outpoint","_req$res","redirect","render","_loadPointerFromDNS","_json","_getLatestBlock","call","_json2","_getBlockByHeight","_temp5","_json3","_getBlockByHash","_send","_getRawTx","_exit2","_temp7","_result3","_temp6","_loadInscription","_req$res2","raw","error","message","_loadPointerFromDNS2","_loadInscription2","_req$res3","htmlData","b64HtmlData"],"mappings":"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"} \ No newline at end of file diff --git a/dist/index.umd.js b/dist/index.umd.js deleted file mode 100644 index 2d45918..0000000 --- a/dist/index.umd.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("http-errors"),require("@ts-bitcoin/core"),require("dns/promises"),require("cross-fetch"),require("@gorillapool/js-junglebus"),require("ioredis")):"function"==typeof define&&define.amd?define(["exports","http-errors","@ts-bitcoin/core","dns/promises","cross-fetch","@gorillapool/js-junglebus","ioredis"],t):t((e||self).ordfsServer={},e.httpErrors,e.core,e.dns,e.crossFetch,e.jsJunglebus,e.ioredis)}(this,function(e,t,r,n,o,i,u){function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}}),t.default=e,t}var c,f=/*#__PURE__*/s(t),l=/*#__PURE__*/a(n),h=/*#__PURE__*/s(o);function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}if(process.env.REDIS_HOST){var d=process.env.REDIS_HOST,p=process.env.REDIS_PORT?parseInt(process.env.REDIS_PORT,10):6379;console.log("Connecting to redis:",d,p),c=new u.Redis(p,d)}var g=/*#__PURE__*/function(){function e(){this.network="bsv"}var t=e.prototype;return t.getRawTx=function(e){try{var t;return Promise.resolve(null==(t=c)?void 0:t.getBuffer("rawtx:"+e)).then(function(t){var r=function(){if(!t){var r=new i.JungleBusClient("https://junglebus.gorillapool.io");return Promise.resolve(r.GetTransaction(e)).then(function(r){var n;t=Buffer.from(r.transaction,"base64"),null==(n=c)||n.set("rawtx:"+e,t)})}}();return r&&r.then?r.then(function(){return t}):t})}catch(e){return Promise.reject(e)}},t.getBlockchainInfo=function(){try{return Promise.resolve(h.default("https://api.whatsonchain.com/v1/bsv/main/block/headers")).then(function(e){if(!e.ok)throw f.default(e.status,e.statusText);return Promise.resolve(e.json()).then(function(e){return{height:e[0].height,hash:e[0].hash}})})}catch(e){return Promise.reject(e)}},t.getBlockByHeight=function(e){try{return Promise.resolve(h.default("https://api.whatsonchain.com/v1/bsv/main/block/height/"+e)).then(function(t){return Promise.resolve(t.json()).then(function(t){return{height:e,hash:t.hash}})})}catch(e){return Promise.reject(e)}},t.getBlockByHash=function(e){try{return Promise.resolve(h.default("https://api.whatsonchain.com/v1/bsv/main/block/hash/"+e)).then(function(t){return Promise.resolve(t.json()).then(function(t){return{height:t.height,hash:e}})})}catch(e){return Promise.reject(e)}},e}(),P=function(e,t){void 0===t&&(t=!1);try{var n,o=function(e){if(!n)throw new f.default.NotFound;return n};console.log("loadInscription",e);var i=function(){if(e.match(/^[0-9a-fA-F]{64}_\d*$/)){var o=e.split("_"),i=o[0],u=o[1];return console.log("BSV:",i,u),Promise.resolve(N.getRawTx(i)).then(function(o){if(!o)throw new Error("No raw tx found");var s=r.Tx.fromBuffer(o),a=parseInt(u,10),c=s.txOuts[a].script;if(!c)throw new f.default.NotFound;n=S(c);var l=function(){if(n&&t){var r=function(t,r){try{var o=Promise.resolve(h.default("https://ordinals.gorillapool.io/api/inscriptions/outpoint/"+e)).then(function(e){return Promise.resolve(e.json()).then(function(e){return Promise.resolve(N.getBlockByHeight(e.height)).then(function(t){n.meta={height:e.height,MAP:e.MAP,hash:t.hash,txid:i,v:a}})})})}catch(e){return}return o&&o.then?o.then(void 0,function(){}):o}();if(r&&r.then)return r.then(function(){})}}();if(l&&l.then)return l.then(function(){})})}throw new Error("Invalid Pointer")}();return Promise.resolve(i&&i.then?i.then(o):o())}catch(e){return Promise.reject(e)}},y=function(e){try{var t="_ordfs."+e;return Promise.resolve(l.resolveTxt(t)).then(function(e){var r="";console.log("Lookup Up:",t);e:for(var n,o=v(e);!(n=o()).done;){for(var i,u=v(n.value);!(i=u()).done;){var s=i.value;if(s.startsWith("ordfs=")){console.log("Elem:",s),r=s.slice(6),console.log("Origin:",r);break e}}if(!r)throw new f.default.NotFound}return r})}catch(e){return Promise.reject(e)}},w=function(e,t){try{if("bsv"===e)return Promise.resolve(N.getRawTx(t));throw new f.default.NotFound("Network Not Found")}catch(e){return Promise.reject(e)}},b=function(e,t){try{if("bsv"===e)return Promise.resolve(N.getBlockByHash(t));throw new f.default.NotFound("Network Not Found")}catch(e){return Promise.reject(e)}},k=function(e,t){try{if("bsv"===e)return Promise.resolve(N.getBlockByHeight(t));throw new f.default.NotFound("Network Not Found")}catch(e){return Promise.reject(e)}},j=function(e){try{if("bsv"===e)return Promise.resolve(N.getBlockchainInfo());throw new f.default.NotFound("Network Not Found")}catch(e){return Promise.reject(e)}},O=Buffer.from("19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut"),B=Buffer.from("ord"),N=new g;function S(e){for(var t,n=0,o=0,i=0,u="application/octet-stream",s=Buffer.alloc(0),a=v(e.chunks.entries());!(t=a()).done;){var c,f,l=t.value,h=l[0],m=l[1];if(null!=(c=m.buf)&&c.equals(O)&&e.chunks.length>h+2)return{data:s=e.chunks[h+1].buf,type:u=e.chunks[h+2].buf.toString()};if(m.opCodeNum===r.OpCode.OP_FALSE&&(n=h),m.opCodeNum===r.OpCode.OP_IF&&(o=h),null!=(f=m.buf)&&f.equals(B)&&n===h-2&&o===h-1){i=h;break}}for(var d=i+1;d=1&&(null==(g=e.chunks[d+1])?void 0:g.opCodeNum)<=r.OpCode.OP_PUSHDATA4;){var p,g;s=Buffer.concat([s,e.chunks[d+1].buf]),d++}break;case 1:if(1!=e.chunks[d].buf[0])return;case r.OpCode.OP_TRUE:u=e.chunks[d+1].buf.toString("utf8"),d++;break;case r.OpCode.OP_ENDIF:return{type:u,data:s};default:return}return{type:u,data:s}}function x(e,t){try{var r=e()}catch(e){return t(e)}return r&&r.then?r.then(void 0,t):r}function F(e,t,r){void 0===r&&(r=!0),t.header("Content-Type",e.type||""),e.meta&&t.header("ordfs-meta",JSON.stringify(e.meta)),r&&!e.meta&&t.header("Cache-Control","public,immutable,max-age=31536000"),t.status(200).send(e.data)}e.RegisterRoutes=function(e){var t=function(e,t,r){try{return Promise.resolve(x(function(){var r=e.params.pointer,n=e.params.filename;return Promise.resolve(P(r)).then(function(o){var i=JSON.parse(o.data.toString("utf8"));if(!i[n])throw new f.default.NotFound;return r=i[n].startsWith("ord://")?i[n].slice(6):i[n],Promise.resolve(P(r,e.query.meta)).then(function(e){F(e,t,!0)})})},function(e){r(e)}))}catch(e){return Promise.reject(e)}};e.get("/",function(e,t){try{var r,n,o=function(o){return r?o:x(function(){return Promise.resolve(P(n)).then(function(r){var n;"ord-fs/json"!==r.type||e.query.raw?F(r,t,!1):null==(n=e.res)||n.redirect("index.html")})},function(){t.render("pages/404")})},i=x(function(){return Promise.resolve(y(e.hostname)).then(function(e){n=e})},function(){t.render("pages/index"),r=1});return Promise.resolve(i&&i.then?i.then(o):o(i))}catch(e){return Promise.reject(e)}}),e.get("/v1/:network/block/latest",function(e,t,r){try{var n=x(function(){var r=t.json;return Promise.resolve(j(e.params.network)).then(function(e){r.call(t,e)})},function(e){r(e)});return Promise.resolve(n&&n.then?n.then(function(){}):void 0)}catch(e){return Promise.reject(e)}}),e.get("/v1/:network/block/height/:height",function(e,t,r){try{var n=x(function(){var r=t.json;return Promise.resolve(k(e.params.network,parseInt(e.params.height,10))).then(function(e){r.call(t,e)})},function(e){r(e)});return Promise.resolve(n&&n.then?n.then(function(){}):void 0)}catch(e){return Promise.reject(e)}}),e.get("/v1/:network/block/hash/:hash",function(e,t,r){try{var n=x(function(){var r=t.json;return Promise.resolve(b(e.params.network,e.params.hash)).then(function(e){r.call(t,e)})},function(e){r(e)});return Promise.resolve(n&&n.then?n.then(function(){}):void 0)}catch(e){return Promise.reject(e)}}),e.get("/v1/:network/tx/:txid",function(e,t){try{t.set("Content-type","application/octet-stream");var r=t.send;return Promise.resolve(w(e.params.network,e.params.txid)).then(function(e){r.call(t,e)})}catch(e){return Promise.reject(e)}}),e.get("/:filename",function(e,t,r){try{var n,o=e.params.filename;return Promise.resolve(x(function(){function r(e){if(n)return e;F(u,t,s)}var i,u,s=!0,a=x(function(){return Promise.resolve(P(o,e.query.meta)).then(function(t){var r;"ord-fs/json"!==(u=t).type||e.query.raw||(null==(r=e.res)||r.redirect("/"+o+"/index.html"),n=1)})},function(t){return console.error("Outpoint Error",o,t.message),Promise.resolve(y(e.hostname)).then(function(t){return i=t,Promise.resolve(P(i)).then(function(t){var r=JSON.parse(t.data.toString("utf8"));if(!r[o])throw new f.default.NotFound;return i=r[o].slice(6),Promise.resolve(P(i,e.query.meta)).then(function(e){u=e,s=!1})})})});return a&&a.then?a.then(r):r(a)},function(e){r(e)}))}catch(e){return Promise.reject(e)}}),e.get("/content/:pointer",function(e,t,r){try{var n=e.params.pointer;return Promise.resolve(x(function(){return Promise.resolve(P(n,e.query.meta)).then(function(r){var o;"ord-fs/json"!==r.type||e.query.raw?F(r,t,!0):null==(o=e.res)||o.redirect("/"+n+"/index.html")})},function(e){r(e)}))}catch(e){return Promise.reject(e)}}),e.get("/preview/:b64HtmlData",function(e,t,r){try{try{var n=Buffer.from(e.params.b64HtmlData,"base64").toString("utf8");t.render("pages/preview",{htmlData:n})}catch(e){r(e)}return Promise.resolve()}catch(e){return Promise.reject(e)}}),e.get("/:pointer/:filename",t),e.get("/content/:pointer/:filename",t)},e.getBlockByHash=b,e.getBlockByHeight=k,e.getLatestBlock=j,e.getRawTx=w,e.loadInscription=P,e.loadPointerFromDNS=y,e.parseScript=S}); -//# sourceMappingURL=index.umd.js.map diff --git a/dist/index.umd.js.map b/dist/index.umd.js.map deleted file mode 100644 index 475770b..0000000 --- a/dist/index.umd.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.umd.js","sources":["../src/provider.ts","../src/lib.ts","../src/routes.ts"],"sourcesContent":["import { JungleBusClient } from \"@gorillapool/js-junglebus\";\n// import * as Client from \"bitcoin-core\";\nimport fetch from \"cross-fetch\";\nimport createError from \"http-errors\";\nimport { Redis } from \"ioredis\";\n\nlet redis: Redis;\nif (process.env.REDIS_HOST) {\n const host = process.env.REDIS_HOST;\n const port = process.env.REDIS_PORT\n ? parseInt(process.env.REDIS_PORT, 10)\n : 6379;\n console.log(\"Connecting to redis:\", host, port);\n redis = new Redis(port, host);\n}\n\nexport interface ITxProvider {\n network: string;\n getRawTx: (string) => Promise;\n getBlockchainInfo: () => Promise<{ height: number; hash: string }>;\n getBlockByHeight: (number) => Promise<{ height: number; hash: string }>;\n getBlockByHash: (string) => Promise<{ height: number; hash: string }>;\n}\n\n// export class RpcProvider implements ITxProvider {\n// private client: Client;\n\n// constructor(\n// public network: string,\n// host: string,\n// port: string,\n// username: string,\n// password: string\n// ) {\n// this.client = new Client({\n// host,\n// port,\n// username,\n// password,\n// });\n// }\n\n// async getRawTx(txid: string): Promise {\n// let rawtx = await redis?.getBuffer(`rawtx:${txid}`);\n// if (!rawtx) {\n// rawtx = await this.client.getTransactionByHash(txid, {\n// extension: \"bin\",\n// });\n// if (!rawtx) {\n// throw new createError.NotFound();\n// }\n// redis?.set(`rawtx:${txid}`, rawtx);\n// }\n// return rawtx;\n// }\n\n// async getBlockchainInfo(): Promise<{ height: number; hash: string }> {\n// const info = await this.client.getBlockchainInfo();\n// return {\n// height: info.blocks,\n// hash: info.bestblockhash,\n// };\n// }\n\n// async getBlockByHeight(\n// height: number\n// ): Promise<{ height: number; hash: string }> {\n// const hash = await this.client.getBlockHash(height);\n// return { height, hash };\n// }\n\n// async getBlockByHash(\n// hash: string\n// ): Promise<{ height: number; hash: string }> {\n// const info = await this.client.getBlockHeader(hash);\n// return {\n// height: info.height,\n// hash,\n// };\n// }\n// }\n\nexport class JungleBusProvider implements ITxProvider {\n public network = \"bsv\";\n\n async getRawTx(txid: string): Promise {\n let rawtx = await redis?.getBuffer(`rawtx:${txid}`);\n if (!rawtx) {\n const jb = new JungleBusClient(\"https://junglebus.gorillapool.io\");\n const txnData = await jb.GetTransaction(txid);\n rawtx = Buffer.from(txnData!.transaction, \"base64\");\n redis?.set(`rawtx:${txid}`, rawtx);\n }\n return rawtx;\n }\n\n async getBlockchainInfo(): Promise<{ height: number; hash: string }> {\n const resp = await fetch(\n \"https://api.whatsonchain.com/v1/bsv/main/block/headers\"\n );\n if (!resp.ok) {\n throw createError(resp.status, resp.statusText);\n }\n const info = await resp.json();\n return {\n height: info[0].height,\n hash: info[0].hash,\n };\n }\n\n async getBlockByHeight(\n height: number\n ): Promise<{ height: number; hash: string }> {\n const resp = await fetch(\n `https://api.whatsonchain.com/v1/bsv/main/block/height/${height}`\n );\n const info = await resp.json();\n return { height, hash: info.hash };\n }\n\n async getBlockByHash(\n hash: string\n ): Promise<{ height: number; hash: string }> {\n const resp = await fetch(\n `https://api.whatsonchain.com/v1/bsv/main/block/hash/${hash}`\n );\n const info = await resp.json();\n\n return {\n height: info.height,\n hash,\n };\n }\n}\n\n// export class BtcProvider implements ITxProvider {\n// public network = \"btc\";\n\n// async getRawTx(txid: string): Promise {\n// let rawtx = await redis?.getBuffer(`rawtx:${txid}`);\n// if (!rawtx) {\n// // TODO: Make this configuration based\n// const resp = await fetch(\n// `https://ordinals.shruggr.cloud/v1/btc/tx/${txid}`\n// );\n// if (!resp.ok) {\n// throw createError(resp.status, resp.statusText);\n// }\n// rawtx = Buffer.from(await resp.arrayBuffer());\n// redis?.set(`rawtx:${txid}`, rawtx);\n// }\n// return rawtx;\n// }\n\n// async getBlockchainInfo(): Promise<{ height: number; hash: string }> {\n// // TODO: Make this configuration based\n// const resp = await fetch(\n// \"https://ordinals.shruggr.cloud/v1/btc/block/latest\"\n// );\n// if (!resp.ok) {\n// throw createError(resp.status, resp.statusText);\n// }\n\n// return resp.json();\n// }\n\n// async getBlockByHeight(\n// height: number\n// ): Promise<{ height: number; hash: string }> {\n// const resp = await fetch(\n// `https://ordinals.shruggr.cloud/v1/btc/block/height/${height}`\n// );\n// const info = await resp.json();\n// return { height, hash: info.hash };\n// }\n\n// async getBlockByHash(\n// hash: string\n// ): Promise<{ height: number; hash: string }> {\n// const resp = await fetch(\n// `https://ordinals.shruggr.cloud/v1/btc/block/hash/${hash}`\n// );\n// const info = await resp.json();\n\n// return {\n// height: info.height,\n// hash,\n// };\n// }\n// }\n","import { OpCode, Script, Tx } from \"@ts-bitcoin/core\";\n// import { Transaction } from \"bitcore-lib\";\nimport * as dns from \"dns/promises\";\nimport createError from \"http-errors\";\nimport fetch from \"cross-fetch\";\nimport {\n // BtcProvider,\n ITxProvider,\n JungleBusProvider,\n // RpcProvider,\n} from \"./provider\";\n\nconst B = Buffer.from(\"19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut\");\nconst ORD = Buffer.from(\"ord\");\n\n// let btcProvider: ITxProvider = new BtcProvider();\nlet bsvProvider: ITxProvider = new JungleBusProvider();\n\n// if (process.env.BITCOIN_HOST) {\n// bsvProvider = new RpcProvider(\n// \"bsv\",\n// process.env.BITCOIN_HOST || \"\",\n// process.env.BITCOIN_PORT || \"8332\",\n// process.env.BITCOIN_USER || \"\",\n// process.env.BITCOIN_PASS || \"\"\n// );\n// }\n\n// if (process.env.BTC_HOST) {\n// btcProvider = new RpcProvider(\n// \"btc\",\n// process.env.BTC_HOST || \"\",\n// process.env.BTC_PORT || \"8332\",\n// process.env.BTC_USER || \"\",\n// process.env.BTC_PASS || \"\"\n// );\n// }\n\nexport async function getLatestBlock(\n network: string\n): Promise<{ height: number; hash: string }> {\n switch (network) {\n // case \"btc\":\n // return btcProvider.getBlockchainInfo();\n case \"bsv\":\n return bsvProvider.getBlockchainInfo();\n default:\n throw new createError.NotFound(\"Network Not Found\");\n }\n}\n\nexport async function getBlockByHeight(\n network: string,\n height: number\n): Promise<{ height: number; hash: string }> {\n switch (network) {\n // case \"btc\":\n // return btcProvider.getBlockByHeight(height);\n case \"bsv\":\n return bsvProvider.getBlockByHeight(height);\n default:\n throw new createError.NotFound(\"Network Not Found\");\n }\n}\n\nexport async function getBlockByHash(\n network: string,\n hash: string\n): Promise<{ height: number; hash: string }> {\n switch (network) {\n // case \"btc\":\n // return btcProvider.getBlockByHash(hash);\n case \"bsv\":\n return bsvProvider.getBlockByHash(hash);\n default:\n throw new createError.NotFound(\"Network Not Found\");\n }\n}\n\nexport async function getRawTx(\n network: string,\n txid: string\n): Promise {\n switch (network) {\n // case \"btc\":\n // return btcProvider.getRawTx(txid);\n case \"bsv\":\n return bsvProvider.getRawTx(txid);\n default:\n throw new createError.NotFound(\"Network Not Found\");\n }\n}\n\nexport async function loadPointerFromDNS(hostname: string): Promise {\n const lookupDomain = `_ordfs.${hostname}`;\n const TXTs = await dns.resolveTxt(lookupDomain);\n const prefix = \"ordfs=\";\n let pointer = \"\";\n console.log(\"Lookup Up:\", lookupDomain);\n outer: for (const TXT of TXTs) {\n for (const elem of TXT) {\n if (!elem.startsWith(prefix)) continue;\n console.log(\"Elem:\", elem);\n pointer = elem.slice(prefix.length);\n console.log(\"Origin:\", pointer);\n break outer;\n }\n\n if (!pointer) {\n throw new createError.NotFound();\n }\n }\n return pointer;\n}\n\nexport async function loadInscription(pointer: string, metadata = false): Promise {\n console.log(\"loadInscription\", pointer);\n let file: File | undefined;\n if (pointer.match(/^[0-9a-fA-F]{64}_\\d*$/)) {\n const [txid, vout] = pointer.split(\"_\");\n console.log(\"BSV:\", txid, vout);\n const rawtx = await bsvProvider.getRawTx(txid);\n if (!rawtx) throw new Error(\"No raw tx found\");\n const tx = Tx.fromBuffer(rawtx);\n const v = parseInt(vout, 10);\n const script = tx.txOuts[v].script;\n if (!script) throw new createError.NotFound();\n file = parseScript(script);\n if (file && metadata) {\n try {\n const url =`https://ordinals.gorillapool.io/api/inscriptions/outpoint/${pointer}`;\n const resp = await fetch(url);\n const data = await resp.json();\n const { hash } = await bsvProvider.getBlockByHeight(data!.height);\n const meta: Meta = {\n height: data.height,\n MAP: data.MAP,\n hash,\n txid,\n v,\n };\n file.meta = meta;\n } catch {};\n }\n // } else if (pointer.match(/^[0-9a-fA-F]{64}i\\d+$/) && btcProvider) {\n // const [txid, vin] = pointer.split(\"i\");\n // console.log(\"BTC\", txid, vin);\n // const rawtx = await btcProvider.getRawTx(txid);\n // if (!rawtx) throw new Error(\"No raw tx found\");\n // const tx = new Transaction(rawtx);\n // const script = Script.fromBuffer(tx.inputs[parseInt(vin, 10)].witnesses[1]);\n // if (!script) throw new createError.NotFound();\n // file = parseScript(script);\n } else throw new Error(\"Invalid Pointer\");\n\n if (!file) throw new createError.NotFound();\n return file;\n}\n\nexport interface Meta {\n height?: number;\n hash?: string;\n txid: string;\n v: number;\n MAP?: {[key:string]:any}\n}\n\nexport interface File {\n type: string;\n data: Buffer;\n meta?: Meta;\n}\n\nexport interface OrdFS {\n [filename: string]: string;\n}\n\nexport function parseScript(script: Script): File | undefined {\n let opFalse = 0;\n let opIf = 0;\n let opORD = 0;\n\n let type = \"application/octet-stream\";\n let data = Buffer.alloc(0);\n for (const [i, chunk] of script.chunks.entries()) {\n if (chunk.buf?.equals(B) && script.chunks.length > i + 2) {\n data = script.chunks[i + 1].buf!;\n type = script.chunks[i + 2].buf!.toString();\n return { data, type };\n }\n if (chunk.opCodeNum === OpCode.OP_FALSE) {\n opFalse = i;\n }\n if (chunk.opCodeNum === OpCode.OP_IF) {\n opIf = i;\n }\n if (chunk.buf?.equals(ORD) && opFalse === i - 2 && opIf === i - 1) {\n opORD = i;\n break;\n }\n }\n\n for (let i = opORD + 1; i < script.chunks.length; i++) {\n switch (script.chunks[i].opCodeNum) {\n case OpCode.OP_FALSE:\n while (\n script.chunks[i + 1]?.opCodeNum >= 1 &&\n script.chunks[i + 1]?.opCodeNum <= OpCode.OP_PUSHDATA4\n ) {\n data = Buffer.concat([data, script.chunks[i + 1].buf!]);\n i++;\n }\n break;\n case 1:\n // treat 1 like OP_1 (BTC convention)\n // console.log(script.chunks[i].toString('hex'))\n if (script.chunks[i].buf![0] != 1) return;\n case OpCode.OP_TRUE:\n type = script.chunks[i + 1]!.buf!.toString(\"utf8\");\n // console.log(\"Type:\", type)\n i++;\n break;\n case OpCode.OP_ENDIF:\n return { type, data };\n default:\n return;\n }\n }\n\n return { type, data };\n}\n","import * as express from \"express\";\nimport { Response } from \"express\";\nimport createError from \"http-errors\";\nimport {\n File,\n OrdFS,\n getBlockByHash,\n getBlockByHeight,\n getLatestBlock,\n getRawTx,\n loadInscription,\n loadPointerFromDNS,\n} from \"./lib\";\n\nfunction sendFile(file: File, res: Response, immutable = true) {\n res.header(\"Content-Type\", file.type || \"\");\n if (file.meta) {\n res.header('ordfs-meta', JSON.stringify(file.meta))\n }\n if (immutable && !file.meta) {\n res.header(\"Cache-Control\", \"public,immutable,max-age=31536000\");\n }\n res.status(200).send(file.data);\n}\n\nexport function RegisterRoutes(app: express.Express) {\n app.get(\"/\", async (req, res) => {\n let outpoint: string;\n try {\n outpoint = await loadPointerFromDNS(req.hostname);\n } catch (e: any) {\n // DNS pointer not found\n res.render(\"pages/index\");\n return;\n }\n try {\n const file = await loadInscription(outpoint);\n if (file.type === \"ord-fs/json\" && !req.query[\"raw\"]) {\n req.res?.redirect(\"index.html\");\n return;\n }\n sendFile(file, res, false);\n } catch (err) {\n // TODO: inscription not found\n res.render(\"pages/404\");\n }\n });\n\n app.get(\"/v1/:network/block/latest\", async (req, res, next) => {\n try {\n res.json(await getLatestBlock(req.params.network));\n } catch (e) {\n next(e);\n }\n });\n\n app.get(\"/v1/:network/block/height/:height\", async (req, res, next) => {\n try {\n res.json(\n await getBlockByHeight(\n req.params.network,\n parseInt(req.params.height, 10)\n )\n );\n } catch (e) {\n next(e);\n }\n });\n\n app.get(\"/v1/:network/block/hash/:hash\", async (req, res, next) => {\n try {\n res.json(await getBlockByHash(req.params.network, req.params.hash));\n } catch (e) {\n next(e);\n }\n });\n\n app.get(\"/v1/:network/tx/:txid\", async (req, res) => {\n res.set(\"Content-type\", \"application/octet-stream\");\n res.send(await getRawTx(req.params.network, req.params.txid));\n });\n app.get(\"/:filename\", getInscriptionOrDnsFile);\n app.get(\"/content/:pointer\", getInscription);\n app.get(\"/preview/:b64HtmlData\", previewHtmlFromB64Data);\n app.get(\"/:pointer/:filename\", getOrdfsFile);\n app.get(\"/content/:pointer/:filename\", getOrdfsFile);\n\n async function previewHtmlFromB64Data(req, res, next) {\n try {\n const b64HtmlData = req.params.b64HtmlData;\n const htmlData = Buffer.from(b64HtmlData, \"base64\").toString(\"utf8\");\n res.render(\"pages/preview\", { htmlData });\n } catch (err) {\n next(err);\n }\n }\n\n async function getInscriptionOrDnsFile(req, res, next) {\n const filename = req.params.filename;\n try {\n let pointer: string;\n let file: File;\n let immutable = true;\n try {\n // check if its an ordfs directory\n file = await loadInscription(filename, req.query.meta);\n if (file.type === \"ord-fs/json\" && !req.query.raw) {\n req.res?.redirect(`/${filename}/index.html`);\n return;\n }\n } catch (e: any) {\n console.error(\"Outpoint Error\", filename, e.message);\n pointer = await loadPointerFromDNS(req.hostname);\n const dirData = await loadInscription(pointer);\n const dir = JSON.parse(dirData.data!.toString(\"utf8\"));\n if (!dir[filename]) {\n throw new createError.NotFound();\n }\n pointer = dir[filename].slice(6);\n file = await loadInscription(pointer, req.query.meta);\n immutable = false;\n }\n sendFile(file, res, immutable);\n } catch (err) {\n next(err);\n }\n }\n\n async function getInscription(req, res, next) {\n const pointer = req.params.pointer;\n try {\n const file = await loadInscription(pointer, req.query.meta);\n // check if its an ordfs directory\n if (file.type === \"ord-fs/json\" && !req.query.raw) {\n req.res?.redirect(`/${pointer}/index.html`);\n return;\n }\n sendFile(file, res, true);\n } catch (err) {\n next(err);\n }\n }\n\n async function getOrdfsFile(req, res, next) {\n try {\n let pointer = req.params.pointer;\n const filename = req.params.filename;\n const dirData = await loadInscription(pointer);\n const dir: OrdFS = JSON.parse(dirData.data!.toString(\"utf8\"));\n if (!dir[filename]) {\n throw new createError.NotFound();\n }\n if (dir[filename].startsWith(\"ord://\")) {\n pointer = dir[filename].slice(6);\n } else {\n pointer = dir[filename];\n }\n const file = await loadInscription(pointer, req.query.meta);\n sendFile(file, res, true);\n } catch (err) {\n next(err);\n }\n }\n}\n"],"names":["redis","process","env","REDIS_HOST","host","port","REDIS_PORT","parseInt","console","log","Redis","JungleBusProvider","network","_proto","prototype","getRawTx","txid","_redis","Promise","resolve","getBuffer","then","rawtx","_temp","jb","JungleBusClient","GetTransaction","txnData","_redis2","Buffer","from","transaction","set","e","reject","getBlockchainInfo","fetch","resp","ok","createError","status","statusText","json","info","height","hash","getBlockByHeight","getBlockByHash","loadInscription","pointer","metadata","file","_temp4","_result","NotFound","_temp3","match","_pointer$split","split","vout","bsvProvider","Error","tx","Tx","fromBuffer","v","script","txOuts","parseScript","_temp2","data","_ref","meta","MAP","_catch","loadPointerFromDNS","hostname","lookupDomain","dns","resolveTxt","TXTs","outer","_step","_iterator","_createForOfIteratorHelperLoose","done","_step2","_iterator2","value","elem","startsWith","slice","prefix","getLatestBlock","B","ORD","_step3","opFalse","opIf","opORD","type","alloc","_iterator3","chunks","entries","_chunk$buf","_chunk$buf2","_step3$value","i","chunk","buf","equals","length","toString","opCodeNum","OpCode","OP_FALSE","OP_IF","_script$chunks","_script$chunks2","OP_PUSHDATA4","concat","OP_TRUE","OP_ENDIF","sendFile","res","immutable","header","JSON","stringify","send","app","getOrdfsFile","req","next","params","filename","dirData","dir","parse","query","err","get","_exit","outpoint","_req$res","redirect","render","_loadPointerFromDNS","_json","_getLatestBlock","call","_json2","_getBlockByHeight","_temp5","_json3","_getBlockByHash","_send","_getRawTx","_exit2","_temp7","_result3","_temp6","_loadInscription","_req$res2","raw","error","message","_loadPointerFromDNS2","_loadInscription2","_req$res3","htmlData","b64HtmlData"],"mappings":"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"} \ No newline at end of file diff --git a/dist/lib.d.ts b/dist/lib.d.ts deleted file mode 100644 index e87a1af..0000000 --- a/dist/lib.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -/// -import { Script } from "@ts-bitcoin/core"; -export declare function getLatestBlock(network: string): Promise<{ - height: number; - hash: string; -}>; -export declare function getBlockByHeight(network: string, height: number): Promise<{ - height: number; - hash: string; -}>; -export declare function getBlockByHash(network: string, hash: string): Promise<{ - height: number; - hash: string; -}>; -export declare function getRawTx(network: string, txid: string): Promise; -export declare function loadPointerFromDNS(hostname: string): Promise; -export declare function loadInscription(pointer: string, metadata?: boolean): Promise; -export interface Meta { - height?: number; - hash?: string; - txid: string; - v: number; - MAP?: { - [key: string]: any; - }; -} -export interface File { - type: string; - data: Buffer; - meta?: Meta; -} -export interface OrdFS { - [filename: string]: string; -} -export declare function parseScript(script: Script): File | undefined; diff --git a/dist/lib.js b/dist/lib.js deleted file mode 100644 index 89a2603..0000000 --- a/dist/lib.js +++ /dev/null @@ -1,62 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.loadInscription = exports.loadPointerFromDNS = void 0; -const dns = require("dns/promises"); -const cross_fetch_1 = require("cross-fetch"); -const http_errors_1 = require("http-errors"); -const createError = require("http-errors"); -const data_1 = require("./data"); -const outpoint_1 = require("./models/outpoint"); -async function loadPointerFromDNS(hostname) { - const lookupDomain = `_ordfs.${hostname}`; - const TXTs = await dns.resolveTxt(lookupDomain); - const prefix = "ordfs="; - let pointer = ""; - console.log("Lookup Up:", lookupDomain); - for (const TXT of TXTs) { - for (const elem of TXT) { - if (!elem.startsWith(prefix)) - continue; - console.log("Elem:", elem); - pointer = elem.slice(prefix.length); - console.log("Origin:", pointer); - return pointer; - } - } - throw new http_errors_1.NotFound(); -} -exports.loadPointerFromDNS = loadPointerFromDNS; -async function loadInscription(pointer, metadata = false, fuzzy = false) { - console.log("loadInscription", pointer); - let file; - if (pointer.match(/^[0-9a-fA-F]{64}$/)) { - file = await (0, data_1.loadFileByTxid)(pointer); - } - else if (pointer.match(/^[0-9a-fA-F]{64}i\d+$/)) { - file = await (0, data_1.loadFileByInpoint)(pointer); - } - else if (pointer.match(/^[0-9a-fA-F]{64}_\d+$/)) { - file = await (0, data_1.loadFileByOutpoint)(outpoint_1.Outpoint.fromString(pointer), fuzzy); - if (file && metadata) { - try { - const url = `https://v3.ordinals.gorillapool.io/api/txos/${pointer}`; - const resp = await (0, cross_fetch_1.default)(url); - if (!resp.ok) { - throw createError(resp.status, resp.statusText); - } - const data = await resp.json(); - const { hash } = await (0, data_1.getBlockByHeight)('bsv', data.height); - file.meta = Object.assign(Object.assign({}, data), { hash }); - } - catch (_a) { } - ; - } - } - else - throw new http_errors_1.BadRequest("Invalid Pointer"); - if (!file) - throw new http_errors_1.NotFound(); - return file; -} -exports.loadInscription = loadInscription; -//# sourceMappingURL=lib.js.map \ No newline at end of file diff --git a/dist/lib.js.map b/dist/lib.js.map deleted file mode 100644 index f41a123..0000000 --- a/dist/lib.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":";;;AAAA,oCAAoC;AACpC,6CAAgC;AAChC,6CAAmD;AACnD,2CAA2C;AAG3C,iCAAiG;AACjG,gDAA6C;AAEtC,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IACvD,MAAM,YAAY,GAAG,UAAU,QAAQ,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,QAAQ,CAAC;IACxB,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,SAAS;YACvC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC3B,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChC,OAAO,OAAO,CAAA;SACf;KACF;IACD,MAAM,IAAI,sBAAQ,EAAE,CAAC;AACvB,CAAC;AAhBD,gDAgBC;AAEM,KAAK,UAAU,eAAe,CAAC,OAAe,EAAE,QAAQ,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK;IACpF,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IACxC,IAAI,IAAsB,CAAC;IAE3B,IAAI,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE;QACtC,IAAI,GAAG,MAAM,IAAA,qBAAc,EAAC,OAAO,CAAC,CAAC;KACtC;SAAM,IAAI,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE;QACjD,IAAI,GAAG,MAAM,IAAA,wBAAiB,EAAC,OAAO,CAAC,CAAA;KACxC;SAAM,IAAI,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE;QACjD,IAAI,GAAG,MAAM,IAAA,yBAAkB,EAAC,mBAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAA;QACpE,IAAI,IAAI,IAAI,QAAQ,EAAE;YACpB,IAAI;gBACF,MAAM,GAAG,GAAE,+CAA+C,OAAO,EAAE,CAAC;gBACpE,MAAM,IAAI,GAAG,MAAM,IAAA,qBAAK,EAAC,GAAG,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;oBACZ,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;iBACjD;gBACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,uBAAgB,EAAC,KAAK,EAAE,IAAK,CAAC,MAAM,CAAC,CAAC;gBAE7D,IAAI,CAAC,IAAI,mCACJ,IAAI,KACP,IAAI,GACL,CAAC;aACH;YAAC,WAAM,GAAE;YAAA,CAAC;SACZ;KACF;;QAAM,MAAM,IAAI,wBAAU,CAAC,iBAAiB,CAAC,CAAC;IAE/C,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,sBAAQ,EAAE,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC;AA9BD,0CA8BC"} \ No newline at end of file diff --git a/dist/models/models.js b/dist/models/models.js deleted file mode 100644 index b2dccd6..0000000 --- a/dist/models/models.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=models.js.map \ No newline at end of file diff --git a/dist/models/models.js.map b/dist/models/models.js.map deleted file mode 100644 index dc75bd5..0000000 --- a/dist/models/models.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/models/models.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/models/outpoint.js b/dist/models/outpoint.js deleted file mode 100644 index c5ef866..0000000 --- a/dist/models/outpoint.js +++ /dev/null @@ -1,41 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Outpoint = void 0; -class Outpoint { - constructor(txid, vout) { - this.txid = Buffer.alloc(32); - this.vout = 0; - if (txid) - this.txid = txid; - if (vout) - this.vout = vout; - } - toString() { - return this.txid.toString('hex') + '_' + this.vout; - } - toBuffer() { - return Buffer.concat([ - this.txid, - Buffer.from(this.vout.toString(16).padStart(8, '0'), 'hex'), - ]); - } - static fromString(str) { - const origin = new Outpoint(); - if (!str.match(/^[0-9a-fA-F]{64}_\d+$/)) - throw new Error('invalid outpoint'); - origin.txid = Buffer.from(str.slice(0, 64), 'hex'); - origin.vout = parseInt(str.slice(65), 10); - return origin; - } - static fromBuffer(buf) { - const origin = new Outpoint(); - origin.txid = buf.slice(0, 32); - origin.vout = parseInt(buf.slice(32).toString('hex'), 16); - return origin; - } - toJSON() { - return this.toString(); - } -} -exports.Outpoint = Outpoint; -//# sourceMappingURL=outpoint.js.map \ No newline at end of file diff --git a/dist/models/outpoint.js.map b/dist/models/outpoint.js.map deleted file mode 100644 index a577bf7..0000000 --- a/dist/models/outpoint.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"outpoint.js","sourceRoot":"","sources":["../../src/models/outpoint.ts"],"names":[],"mappings":";;;AAAA,MAAa,QAAQ;IAIjB,YAAY,IAAa,EAAE,IAAa;QAHxC,SAAI,GAAW,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChC,SAAI,GAAW,CAAC,CAAC;QAGb,IAAG,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAC1B,IAAG,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;IACvD,CAAC;IAED,QAAQ;QACJ,OAAO,MAAM,CAAC,MAAM,CAAC;YACjB,IAAI,CAAC,IAAI;YACT,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC;SAC9D,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,GAAW;QACzB,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAG,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;QAC3E,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,GAAW;QACzB,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM;QACF,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;CACJ;AAtCD,4BAsCC"} \ No newline at end of file diff --git a/dist/provider.d.ts b/dist/provider.d.ts deleted file mode 100644 index 67df5b2..0000000 --- a/dist/provider.d.ts +++ /dev/null @@ -1,33 +0,0 @@ -/// -export interface ITxProvider { - network: string; - getRawTx: (string: any) => Promise; - getBlockchainInfo: () => Promise<{ - height: number; - hash: string; - }>; - getBlockByHeight: (number: any) => Promise<{ - height: number; - hash: string; - }>; - getBlockByHash: (string: any) => Promise<{ - height: number; - hash: string; - }>; -} -export declare class JungleBusProvider implements ITxProvider { - network: string; - getRawTx(txid: string): Promise; - getBlockchainInfo(): Promise<{ - height: number; - hash: string; - }>; - getBlockByHeight(height: number): Promise<{ - height: number; - hash: string; - }>; - getBlockByHash(hash: string): Promise<{ - height: number; - hash: string; - }>; -} diff --git a/dist/provider.js b/dist/provider.js deleted file mode 100644 index f0c731d..0000000 --- a/dist/provider.js +++ /dev/null @@ -1,143 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BtcProvider = exports.ProxyProvider = exports.RpcProvider = void 0; -const Client = require("bitcoin-core"); -require("cross-fetch/polyfill"); -const http_errors_1 = require("http-errors"); -const createError = require("http-errors"); -const ioredis_1 = require("ioredis"); -let redis; -if (process.env.REDIS_HOST) { - const host = process.env.REDIS_HOST; - const port = process.env.REDIS_PORT - ? parseInt(process.env.REDIS_PORT, 10) - : 6379; - console.log("Connecting to redis:", host, port); - redis = new ioredis_1.Redis(port, host); -} -class RpcProvider { - constructor(network, host, port, username, password) { - this.network = network; - this.client = new Client({ - host, - port, - username, - password, - }); - } - async getRawTx(txid) { - let rawtx = await (redis === null || redis === void 0 ? void 0 : redis.getBuffer(txid)); - if (!rawtx) { - rawtx = await this.client.getTransactionByHash(txid, { - extension: "bin", - }); - if (!rawtx) { - throw new http_errors_1.NotFound(); - } - redis === null || redis === void 0 ? void 0 : redis.set(txid, rawtx); - } - return rawtx; - } - async getBlockchainInfo() { - const info = await this.client.getBlockchainInfo(); - return { - height: info.blocks, - hash: info.bestblockhash, - }; - } - async getBlockByHeight(height) { - const hash = await this.client.getBlockHash(height); - return { height, hash }; - } - async getBlockByHash(hash) { - const info = await this.client.getBlockHeader(hash); - return { - height: info.height, - hash, - }; - } -} -exports.RpcProvider = RpcProvider; -class ProxyProvider { - constructor() { - this.network = "bsv"; - } - async getRawTx(txid) { - let rawtx = await (redis === null || redis === void 0 ? void 0 : redis.getBuffer(txid)); - if (!rawtx) { - const resp = await fetch(`https://junglebus.gorillapool.io/v1/transaction/get/${txid}/bin`); - if (!resp.ok) { - throw createError(resp.status, resp.statusText); - } - rawtx = Buffer.from(await resp.arrayBuffer()); - redis === null || redis === void 0 ? void 0 : redis.set(txid, rawtx); - } - return rawtx; - } - async getBlockchainInfo() { - const resp = await fetch("https://api.whatsonchain.com/v1/bsv/main/block/headers"); - if (!resp.ok) { - throw createError(resp.status, resp.statusText); - } - const info = await resp.json(); - return { - height: info[0].height, - hash: info[0].hash, - }; - } - async getBlockByHeight(height) { - const resp = await fetch(`https://api.whatsonchain.com/v1/bsv/main/block/height/${height}`); - const info = await resp.json(); - return { height, hash: info.hash }; - } - async getBlockByHash(hash) { - const resp = await fetch(`https://api.whatsonchain.com/v1/bsv/main/block/hash/${hash}`); - const info = await resp.json(); - return { - height: info.height, - hash, - }; - } -} -exports.ProxyProvider = ProxyProvider; -class BtcProvider { - constructor() { - this.network = "btc"; - } - async getRawTx(txid) { - let rawtx = await (redis === null || redis === void 0 ? void 0 : redis.getBuffer(txid)); - if (!rawtx) { - // TODO: Make this configuration based - const resp = await fetch(`https://ordinals.shruggr.cloud/v1/btc/tx/${txid}`); - if (!resp.ok) { - throw createError(resp.status, resp.statusText); - } - rawtx = Buffer.from(await resp.arrayBuffer()); - redis === null || redis === void 0 ? void 0 : redis.set(txid, rawtx); - } - return rawtx; - } - async getBlockchainInfo() { - // TODO: Make this configuration based - const resp = await fetch("https://ordinals.shruggr.cloud/v1/btc/block/latest"); - if (!resp.ok) { - throw createError(resp.status, resp.statusText); - } - return resp.json(); - } - async getBlockByHeight(height) { - const resp = await fetch(`https://ordinals.shruggr.cloud/v1/btc/block/height/${height}`); - const info = await resp.json(); - return { height, hash: info.hash }; - } - async getBlockByHash(hash) { - const resp = await fetch(`https://ordinals.shruggr.cloud/v1/btc/block/hash/${hash}`); - const info = await resp.json(); - return { - height: info.height, - hash, - }; - } -} -exports.BtcProvider = BtcProvider; -//# sourceMappingURL=provider.js.map \ No newline at end of file diff --git a/dist/provider.js.map b/dist/provider.js.map deleted file mode 100644 index dc899b4..0000000 --- a/dist/provider.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/routes.d.ts b/dist/routes.d.ts deleted file mode 100644 index 19a946f..0000000 --- a/dist/routes.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import * as express from "express"; -export declare function RegisterRoutes(app: express.Express): void; diff --git a/dist/routes.js b/dist/routes.js deleted file mode 100644 index fd1139b..0000000 --- a/dist/routes.js +++ /dev/null @@ -1,155 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RegisterRoutes = void 0; -const http_errors_1 = require("http-errors"); -const lib_1 = require("./lib"); -const data_1 = require("./data"); -const { ORDFS_DOMAINS, ORDFS_HOST } = process.env; -function sendFile(file, res, immutable = true) { - res.header("Content-Type", file.type || ""); - if (file.meta) { - res.header('ordfs-meta', JSON.stringify(file.meta)); - } - if (immutable && !file.meta) { - res.header("Cache-Control", "public,immutable,max-age=31536000"); - } - res.status(200).send(file.data); -} -function RegisterRoutes(app) { - app.get("/", async (req, res) => { - var _a; - let outpoint; - if (ORDFS_DOMAINS && req.hostname != ORDFS_HOST) { - try { - outpoint = await (0, lib_1.loadPointerFromDNS)(req.hostname); - const file = await (0, lib_1.loadInscription)(outpoint); - if (file.type === "ord-fs/json" && !req.query["raw"]) { - (_a = req.res) === null || _a === void 0 ? void 0 : _a.redirect("index.html"); - return; - } - sendFile(file, res, false); - } - catch (err) { - // TODO: inscription not found - res.render("pages/404"); - } - } - res.render("pages/index"); - }); - app.get("/v1/:network/block/latest", async (req, res, next) => { - try { - res.json(await (0, data_1.getBlockchainInfo)(req.params.network)); - } - catch (e) { - next(e); - } - }); - app.get("/v1/:network/block/height/:height", async (req, res, next) => { - try { - res.json(await (0, data_1.getBlockByHeight)(req.params.network, parseInt(req.params.height, 10))); - } - catch (e) { - next(e); - } - }); - app.get("/v1/:network/block/hash/:hash", async (req, res, next) => { - try { - res.json(await (0, data_1.getBlockByHash)(req.params.network, req.params.hash)); - } - catch (e) { - next(e); - } - }); - app.get("/v1/:network/tx/:txid", async (req, res) => { - res.set("Content-type", "application/octet-stream"); - res.send(await (0, data_1.getRawTx)(req.params.txid)); - }); - app.get("/:fileOrPointer", getInscriptionOrDnsFile); - app.get("/content/:pointer", getInscription); - app.get("/preview/:b64HtmlData", previewHtmlFromB64Data); - app.get("/:pointer/:filename", getOrdfsFile); - app.get("/content/:pointer/:filename", getOrdfsFile); - async function previewHtmlFromB64Data(req, res, next) { - try { - const b64HtmlData = req.params.b64HtmlData; - const htmlData = Buffer.from(b64HtmlData, "base64").toString("utf8"); - res.render("pages/preview", { htmlData }); - } - catch (err) { - next(err); - } - } - async function getInscriptionOrDnsFile(req, res, next) { - let pointer = req.params.fileOrPointer; - let file; - let immutable = true; - try { - try { - file = await (0, lib_1.loadInscription)(pointer, req.query.meta, true); - } - catch (err) { - if (!(err instanceof http_errors_1.BadRequest)) { - throw err; - } - if (ORDFS_DOMAINS && req.hostname != ORDFS_HOST) { - const filename = pointer; - pointer = await (0, lib_1.loadPointerFromDNS)(req.hostname); - const dirData = await (0, lib_1.loadInscription)(pointer); - const dir = JSON.parse(dirData.data.toString("utf8")); - if (!dir[filename]) { - throw new http_errors_1.NotFound(); - } - pointer = dir[filename].slice(6); - file = await (0, lib_1.loadInscription)(pointer, req.query.meta); - } - } - if (!file) { - throw new http_errors_1.NotFound(); - } - sendFile(file, res, immutable); - } - catch (err) { - next(err); - } - } - async function getInscription(req, res, next) { - var _a; - const pointer = req.params.pointer; - try { - const file = await (0, lib_1.loadInscription)(pointer, req.query.meta); - // check if its an ordfs directory - if (file.type === "ord-fs/json" && !req.query.raw) { - (_a = req.res) === null || _a === void 0 ? void 0 : _a.redirect(`/${pointer}/index.html`); - return; - } - sendFile(file, res, true); - } - catch (err) { - next(err); - } - } - async function getOrdfsFile(req, res, next) { - try { - let pointer = req.params.pointer; - const filename = req.params.filename; - const dirData = await (0, lib_1.loadInscription)(pointer); - const dir = JSON.parse(dirData.data.toString("utf8")); - if (!dir[filename]) { - throw new http_errors_1.NotFound(); - } - if (dir[filename].startsWith("ord://")) { - pointer = dir[filename].slice(6); - } - else { - pointer = dir[filename]; - } - const file = await (0, lib_1.loadInscription)(pointer, req.query.meta); - sendFile(file, res, true); - } - catch (err) { - next(err); - } - } -} -exports.RegisterRoutes = RegisterRoutes; -//# sourceMappingURL=routes.js.map \ No newline at end of file diff --git a/dist/routes.js.map b/dist/routes.js.map deleted file mode 100644 index 1fc2b63..0000000 --- a/dist/routes.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/server.d.ts b/dist/server.d.ts deleted file mode 100644 index cb0ff5c..0000000 --- a/dist/server.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/dist/server.js b/dist/server.js deleted file mode 100644 index c3f0ecd..0000000 --- a/dist/server.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const cors = require("cors"); -const dotenv = require("dotenv"); -const express = require("express"); -const http_errors_1 = require("http-errors"); -const routes_1 = require("./routes"); -dotenv.config(); -const server = express(); -async function main() { - const PORT = process.env.PORT || 8080; - server.listen(PORT, () => { - console.log(`Server listening on port ${PORT}`); - }); -} -server.set("trust proxy", true); -server.use(cors({ origin: true })); -server.set("view engine", "ejs"); -server.use("/public", express.static("public")); -server.use((req, res, next) => { - console.log(req.path, req.method); - next(); -}); -(0, routes_1.RegisterRoutes)(server); -server.use((req, res, next) => { - console.log(req.path); - next(new http_errors_1.NotFound("Not Found")); -}); -const errorMiddleware = ((err, req, res) => { - console.error(req.path, err.status || 500, err.message); - res.status(err.status || 500).json({ message: err.message }); -}); -server.use(errorMiddleware); -main().catch(console.error); -//# sourceMappingURL=server.js.map \ No newline at end of file diff --git a/dist/server.js.map b/dist/server.js.map deleted file mode 100644 index b1f3c8e..0000000 --- a/dist/server.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;AAAA,6BAA6B;AAC7B,iCAAiC;AACjC,mCAAmC;AAEnC,6CAAkD;AAClD,qCAA0C;AAC1C,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;AAEzB,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;IACtC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAChC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAEnC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AACjC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEhD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAC5B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,EAAE,CAAC;AACT,CAAC,CAAC,CAAC;AAEH,IAAA,uBAAc,EAAC,MAAM,CAAC,CAAC;AAEvB,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAC5B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,CAAC,IAAI,sBAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,CAAC,CACvB,GAA0B,EAC1B,GAAY,EACZ,GAAa,EACb,EAAE;IACF,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAG,GAAiB,CAAC,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACvE,GAAG,CAAC,MAAM,CAAE,GAAiB,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9E,CAAC,CAAwB,CAAC;AAE1B,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC5B,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"} \ No newline at end of file diff --git a/encore.app b/encore.app new file mode 100644 index 0000000..ad60b3e --- /dev/null +++ b/encore.app @@ -0,0 +1,4 @@ +{ + "id": "ordfs-server-gdui", + "lang": "typescript", +} diff --git a/index.html b/index.html index 8a98c81..3124c07 100644 --- a/index.html +++ b/index.html @@ -1,9 +1,5 @@ -
-

BTC Recursive Ordinal

- -

BSV Ordinal with ORD-FS

diff --git a/package-lock.json b/package-lock.json index f67c80d..df2bcd9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,254 +10,110 @@ "license": "ISC", "dependencies": { "@ts-bitcoin/core": "^2.2.0", - "axios": "^1.4.0", - "bitcoin-core": "^4.1.0", - "bitcore-lib": "^10.0.17", + "axios": "^1.9.0", + "bitcoin-core": "5.0.0", + "bitcore-lib": "^10.9.0", "cors": "^2.8.5", - "cross-fetch": "^4.0.0", - "dotenv": "^16.3.1", - "ejs": "^3.1.9", - "express": "^4.18.2", + "cross-fetch": "^4.1.0", + "dotenv": "^16.5.0", + "ejs": "^3.1.10", + "encore.dev": "^1.46.21", + "express": "5.1.0", "http-errors": "^2.0.0", - "ioredis": "^5.3.2" + "ioredis": "^5.6.1" }, "devDependencies": { - "@types/cors": "^2.8.13", - "@types/express": "^4.17.17", - "@types/http-errors": "^2.0.1", - "@typescript-eslint/eslint-plugin": "^5.61.0", - "@typescript-eslint/parser": "^5.61.0", - "eslint": "^8.44.0", - "nodemon": "^3.0.1", - "ts-node": "^10.9.1", - "typescript": "^5.1.6" + "@biomejs/biome": "^1.9.4", + "@types/cors": "^2.8.18", + "@types/express": "5.0.1", + "@types/http-errors": "^2.0.4", + "@types/node": "^22.15.16", + "nodemon": "^3.1.10", + "ts-node": "^10.9.2", + "typescript": "^5.8.3" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "node_modules/@biomejs/biome": { + "version": "1.9.4", "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "hasInstallScript": true, + "license": "MIT OR Apache-2.0", + "bin": { + "biome": "bin/biome" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=14.21.3" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" + "type": "opencollective", + "url": "https://opencollective.com/biome" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "1.9.4", + "@biomejs/cli-darwin-x64": "1.9.4", + "@biomejs/cli-linux-arm64": "1.9.4", + "@biomejs/cli-linux-arm64-musl": "1.9.4", + "@biomejs/cli-linux-x64": "1.9.4", + "@biomejs/cli-linux-x64-musl": "1.9.4", + "@biomejs/cli-win32-arm64": "1.9.4", + "@biomejs/cli-win32-x64": "1.9.4" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "1.9.4", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10.10.0" + "node": ">=14.21.3" } }, - "node_modules/@humanwhocodes/config-array/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" + "@jridgewell/trace-mapping": "0.3.9" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=12" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, "node_modules/@ioredis/commands": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", - "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" + "license": "MIT" }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@ts-bitcoin/core": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ts-bitcoin/core/-/core-2.2.0.tgz", - "integrity": "sha512-txOTdUXqMMoadNg1qlR+p6loMKL100IO0TpaWsBbvb2M1reqd3yrvIDwPIHHG9YZ3p2yvNdJFIOmhRrR23HovQ==", + "license": "MIT", "dependencies": { "aes": "0.1.0", "bitcoin-elliptic": "^7.0.1", @@ -272,73 +128,78 @@ }, "node_modules/@tsconfig/node10": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/body-parser": { "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" } }, + "node_modules/@types/body-parser/node_modules/@types/node": { + "version": "20.3.2", + "dev": true, + "license": "MIT" + }, "node_modules/@types/connect": { "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, + "node_modules/@types/connect/node_modules/@types/node": { + "version": "20.3.2", + "dev": true, + "license": "MIT" + }, "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.18", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, + "node_modules/@types/cors/node_modules/@types/node": { + "version": "20.3.2", + "dev": true, + "license": "MIT" + }, "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "version": "5.0.1", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", + "@types/express-serve-static-core": "^5.0.0", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "version": "5.0.6", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -346,398 +207,79 @@ "@types/send": "*" } }, - "node_modules/@types/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", - "dev": true + "node_modules/@types/express-serve-static-core/node_modules/@types/node": { + "version": "22.15.16", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true + "node_modules/@types/http-errors": { + "version": "2.0.4", + "dev": true, + "license": "MIT" }, "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", - "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==", - "dev": true + "version": "22.15.17", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } }, "node_modules/@types/qs": { "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, + "node_modules/@types/send/node_modules/@types/node": { + "version": "20.3.2", + "dev": true, + "license": "MIT" + }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/mime": "*", "@types/node": "*" } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.61.0.tgz", - "integrity": "sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.61.0", - "@typescript-eslint/type-utils": "5.61.0", - "@typescript-eslint/utils": "5.61.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.61.0.tgz", - "integrity": "sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.61.0", - "@typescript-eslint/types": "5.61.0", - "@typescript-eslint/typescript-estree": "5.61.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz", - "integrity": "sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.61.0", - "@typescript-eslint/visitor-keys": "5.61.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.61.0.tgz", - "integrity": "sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.61.0", - "@typescript-eslint/utils": "5.61.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@typescript-eslint/types": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.61.0.tgz", - "integrity": "sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.61.0.tgz", - "integrity": "sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.61.0", - "@typescript-eslint/visitor-keys": "5.61.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.61.0.tgz", - "integrity": "sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.61.0", - "@typescript-eslint/types": "5.61.0", - "@typescript-eslint/typescript-estree": "5.61.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/@types/serve-static/node_modules/@types/http-errors": { + "version": "2.0.1", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "license": "MIT" }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.61.0.tgz", - "integrity": "sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==", + "node_modules/@types/serve-static/node_modules/@types/node": { + "version": "20.3.2", "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.61.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } + "license": "MIT" }, "node_modules/@uphold/request-logger": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@uphold/request-logger/-/request-logger-2.0.0.tgz", - "integrity": "sha512-UvGS+v87C7VTtQDcFHDLfvfl1zaZaLSwSmAnV35Ne7CzAVvotmZqt9lAIoNpMpaoRpdjVIcnUDwPSeIeA//EoQ==", + "license": "MIT", "dependencies": { "uuid": "^3.0.1" }, @@ -750,26 +292,22 @@ }, "node_modules/@uphold/request-logger/node_modules/uuid": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", "bin": { "uuid": "bin/uuid" } }, "node_modules/abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "version": "2.0.0", + "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "engines": { "node": ">= 0.6" @@ -777,9 +315,8 @@ }, "node_modules/acorn": { "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -787,33 +324,21 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, "node_modules/acorn-walk": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/aes": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/aes/-/aes-0.1.0.tgz", - "integrity": "sha512-zoxY6y00WNu5EVioxSm+X1uIcx0EIRGdRPGO+C3RsccQT/JgMHo/GiGfl7ryOTdKuCtbnSHrkthTjPSME2oOjA==" + "license": "MIT" }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -825,19 +350,9 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -850,9 +365,8 @@ }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -863,167 +377,98 @@ }, "node_modules/arg": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/asn1": { "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", "dependencies": { "safer-buffer": "~2.1.0" } }, "node_modules/assert-plus": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/assertion-error": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/async": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "license": "MIT" }, "node_modules/aws-sign2": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/aws4": { "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" + "license": "MIT" }, "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "version": "1.9.0", + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "license": "MIT" }, "node_modules/base-x": { "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "license": "MIT", "dependencies": { "safe-buffer": "^5.0.1" } }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", "dependencies": { "tweetnacl": "^0.14.3" } }, "node_modules/bech32": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", - "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" - }, - "node_modules/bigi": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz", - "integrity": "sha512-ddkU+dFIuEIW8lE7ZwdIAf2UPoM90eaprg5m3YXAVVTmKlqV/9BX4A2M8BOK2yOq6/VgZFVhK6QAxJebhlbhzw==" + "license": "MIT" }, "node_modules/bignumber.js": { "version": "9.1.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", - "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/binary-extensions": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/bip-schnorr": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/bip-schnorr/-/bip-schnorr-0.6.4.tgz", - "integrity": "sha512-dNKw7Lea8B0wMIN4OjEmOk/Z5qUGqoPDY0P2QttLqGk1hmDPytLWW8PR5Pb6Vxy6CprcdEgfJpOjUu+ONQveyg==", - "dependencies": { - "bigi": "^1.4.2", - "ecurve": "^1.0.6", - "js-sha256": "^0.9.0", - "randombytes": "^2.1.0", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/bitcoin-core": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bitcoin-core/-/bitcoin-core-4.1.0.tgz", - "integrity": "sha512-hFmxLismSJz2VKoi9zXx9SHtR4in8krLhKhbP7qtG3y+QiNVtmr5VpiHXivXEkKFPIMydPh8H8wW9aqDOGSaDw==", + "version": "5.0.0", + "license": "MIT", "dependencies": { "@uphold/request-logger": "^2.0.0", "debugnyan": "^1.0.0", @@ -1037,10 +482,16 @@ "node": ">=7" } }, + "node_modules/bitcoin-core/node_modules/semver": { + "version": "5.7.1", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/bitcoin-elliptic": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/bitcoin-elliptic/-/bitcoin-elliptic-7.0.1.tgz", - "integrity": "sha512-eJIERwXIIjJK7gfVoevk0G1CbYbxezZ6ePZXIxngjyI+QQHXWqXMbY+gpxsND8FCLvWl050fw6W+PVZge5fBHw==", + "license": "MIT", "dependencies": { "bn.js": "^5.1.1", "brorand": "^1.0.1", @@ -1051,13 +502,15 @@ "minimalistic-crypto-utils": "^1.0.0" } }, + "node_modules/bitcoin-elliptic/node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, "node_modules/bitcore-lib": { - "version": "10.0.17", - "resolved": "https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-10.0.17.tgz", - "integrity": "sha512-DYU/XXMpOzjcyfcrFpR7/jAS3DinnHFbfztOQD25EArC+qj8DbvHyCfiMoL0deBMT4PtTHoNXepqsDJo/1K5JQ==", + "version": "10.9.0", + "license": "MIT", "dependencies": { "bech32": "=2.0.0", - "bip-schnorr": "=0.6.4", "bn.js": "=4.11.8", "bs58": "^4.0.1", "buffer-compare": "=1.1.1", @@ -1068,46 +521,52 @@ }, "node_modules/bitcore-lib/node_modules/bn.js": { "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "node_modules/bitcore-lib/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==" + "license": "MIT" }, "node_modules/bn.js": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "license": "MIT" }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "2.2.0", + "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=18" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, + "node_modules/body-parser/node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, "node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1115,9 +574,8 @@ }, "node_modules/braces": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -1127,29 +585,24 @@ }, "node_modules/brorand": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + "license": "MIT" }, "node_modules/bs58": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", "dependencies": { "base-x": "^3.0.2" } }, "node_modules/buffer-compare": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-compare/-/buffer-compare-1.1.1.tgz", - "integrity": "sha512-O6NvNiHZMd3mlIeMDjP6t/gPG75OqGPeiRZXoMQZJ6iy9GofCls4Ijs5YkPZZwoysizLiedhticmdyx/GyHghA==" + "version": "1.1.1" }, "node_modules/bunyan": { "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", "engines": [ "node >=0.10.0" ], + "license": "MIT", "bin": { "bunyan": "bin/bunyan" }, @@ -1162,42 +615,43 @@ }, "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/call-bind": { + "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, + "node_modules/call-bound": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/caseless": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + "license": "Apache-2.0" }, "node_modules/chai": { "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", @@ -1213,8 +667,7 @@ }, "node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1226,18 +679,32 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "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==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/chokidar": { "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "funding": [ { @@ -1245,6 +712,7 @@ "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -1261,39 +729,28 @@ "fsevents": "~2.3.2" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/cipher-base": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, + "node_modules/cipher-base/node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, "node_modules/cluster-key-slot": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "license": "Apache-2.0", "engines": { "node": ">=0.10.0" } }, "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -1303,13 +760,11 @@ }, "node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -1319,13 +774,11 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "license": "MIT" }, "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "version": "1.0.0", + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -1335,34 +788,32 @@ }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.7.1", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "version": "1.2.2", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } }, "node_modules/core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + "license": "MIT" }, "node_modules/cors": { "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -1373,8 +824,7 @@ }, "node_modules/create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -1383,10 +833,13 @@ "sha.js": "^2.4.0" } }, + "node_modules/create-hash/node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, "node_modules/create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "license": "MIT", "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -1396,38 +849,25 @@ "sha.js": "^2.4.8" } }, + "node_modules/create-hmac/node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, "node_modules/create-require": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, + "version": "4.1.0", + "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" + "node-fetch": "^2.7.0" } }, "node_modules/dashdash": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" }, @@ -1436,17 +876,23 @@ } }, "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.4", + "license": "MIT", "dependencies": { - "ms": "2.0.0" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/debugnyan": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/debugnyan/-/debugnyan-1.0.0.tgz", - "integrity": "sha512-dTvKxcLZCammDLFYi31NRVr5g6vjJ33uf1wcdbIPPxPxxnJ9/xj00Mh/YQkhFMw/VGavaG5KpjSC+4o9r/JjRg==", + "license": "MIT", "dependencies": { "bunyan": "^1.8.1", "debug": "^2.2.0" @@ -1455,10 +901,20 @@ "node": ">=4" } }, + "node_modules/debugnyan/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/debugnyan/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, "node_modules/deep-eql": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "license": "MIT", "dependencies": { "type-detect": "^4.0.0" }, @@ -1466,94 +922,49 @@ "node": ">=6" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/denque": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", "engines": { "node": ">=0.10" } }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/diff": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "version": "16.5.0", + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "url": "https://dotenvx.com" } }, "node_modules/dtrace-provider": { "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", "hasInstallScript": true, + "license": "BSD-2-Clause", "optional": true, "dependencies": { "nan": "^2.14.0" @@ -1562,440 +973,201 @@ "node": ">=0.10" } }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ecurve": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/ecurve/-/ecurve-1.0.6.tgz", - "integrity": "sha512-/BzEjNfiSuB7jIWKcS/z8FK9jNjmEWvUV2YZ4RLSmcDtP7Lq0m6FvDuSnJpBlDpGRpfRQeTLGLBI8H+kEv0r+w==", - "dependencies": { - "bigi": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, + "node_modules/dunder-proto": { + "version": "1.0.1", + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 0.4" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "node_modules/eslint/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/ee-first": { + "version": "1.1.1", + "license": "MIT" }, - "node_modules/espree": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", - "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", - "dev": true, + "node_modules/ejs": { + "version": "3.1.10", + "license": "Apache-2.0", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "jake": "^10.8.5" }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "bin": { + "ejs": "bin/cli.js" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, + "node_modules/elliptic": { + "version": "6.5.4", + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/elliptic/node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">= 0.8" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, + "node_modules/encore.dev": { + "version": "1.46.21", + "license": "MPL-2.0", "engines": { - "node": ">=4.0" + "node": ">=18.0.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, + "node_modules/es-define-property": { + "version": "1.0.1", + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">= 0.4" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, + "node_modules/es-errors": { + "version": "1.3.0", + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">= 0.4" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, + "node_modules/escape-html": { + "version": "1.0.3", + "license": "MIT" + }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/debug": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.10.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, + "node_modules/express/node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, "node_modules/extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "license": "MIT" }, "node_modules/extsprintf": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "engines": [ "node >=0.6.0" - ] + ], + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } + "license": "MIT" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } + "license": "MIT" }, "node_modules/filelist": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2003,11 +1175,17 @@ "node": ">=10" } }, + "node_modules/filelist/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/fill-range": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2016,102 +1194,48 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, + "version": "2.1.0", + "license": "MIT", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.8" } }, - "node_modules/flat-cache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, + "node_modules/finalhandler/node_modules/debug": { + "version": "4.4.0", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "ms": "^2.1.3" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "node_modules/finalhandler/node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.9", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -2123,53 +1247,58 @@ }, "node_modules/forever-agent": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "4.0.0", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.12" + "node": ">= 6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types/node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "version": "2.0.0", + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2179,44 +1308,62 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "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==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.3.0", + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/getpass": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" } }, "node_modules/glob": { "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "license": "ISC", "optional": true, "dependencies": { "inflight": "^1.0.4", @@ -2230,71 +1377,41 @@ } }, "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "version": "5.1.2", "dev": true, + "license": "ISC", "dependencies": { - "is-glob": "^4.0.3" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=10.13.0" + "node": ">= 6" } }, - "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/glob/node_modules/inherits": { + "version": "2.0.4", + "license": "ISC", + "optional": true }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, + "node_modules/gopd": { + "version": "1.2.0", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, "node_modules/har-schema": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "license": "ISC", "engines": { "node": ">=4" } }, "node_modules/har-validator": { "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", + "license": "MIT", "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -2303,40 +1420,17 @@ "node": ">=6" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "3.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2346,8 +1440,7 @@ }, "node_modules/hash-base": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -2357,19 +1450,35 @@ "node": ">=4" } }, + "node_modules/hash-base/node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, "node_modules/hash.js": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, + "node_modules/hash.js/node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/hasown": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "license": "MIT", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -2378,8 +1487,7 @@ }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -2391,10 +1499,13 @@ "node": ">= 0.8" } }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, "node_modules/http-signature": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -2406,75 +1517,36 @@ } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/ignore-by-default": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "engines": { - "node": ">=0.8.19" - } + "license": "ISC" }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "devOptional": true, + "license": "ISC", + "optional": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "version": "2.0.1", + "license": "ISC" }, "node_modules/ioredis": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz", - "integrity": "sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==", + "version": "5.6.1", + "license": "MIT", "dependencies": { "@ioredis/commands": "^1.1.1", "cluster-key-slot": "^1.1.0", @@ -2494,40 +1566,17 @@ "url": "https://opencollective.com/ioredis" } }, - "node_modules/ioredis/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/ioredis/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -2537,18 +1586,16 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -2558,48 +1605,31 @@ }, "node_modules/is-hex": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-hex/-/is-hex-1.1.3.tgz", - "integrity": "sha512-98aEziIu1Em+QAPkiGgKMKpqfS3yRdwgViS0d1TgsvWYgPvqzH22XoTWH/ngubeOd5wSH3zYY+zJ12iMCGI6Xw==", - "deprecated": "Development of this module has been stopped." + "license": "MIT" }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/is-promise": { + "version": "4.0.0", + "license": "MIT" }, "node_modules/is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "license": "MIT" }, "node_modules/isstream": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + "license": "MIT" }, "node_modules/jake": { "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -2613,61 +1643,32 @@ "node": ">=10" } }, - "node_modules/js-sha256": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", - "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/jsbn": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + "license": "MIT" }, "node_modules/json-bigint": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", "dependencies": { "bignumber.js": "^9.0.0" } }, "node_modules/json-schema": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "license": "MIT" }, "node_modules/json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + "license": "ISC" }, "node_modules/jsprim": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "license": "MIT", "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -2678,68 +1679,29 @@ "node": ">=0.6.0" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "license": "MIT" }, "node_modules/lodash.defaults": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + "license": "MIT" }, "node_modules/lodash.isarguments": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "license": "MIT" }, "node_modules/loupe": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "license": "MIT", "dependencies": { "get-func-name": "^2.0.0" } }, "node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -2749,88 +1711,58 @@ }, "node_modules/make-error": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, "node_modules/md5.js": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, + "node_modules/md5.js/node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "version": "1.1.0", + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, + "version": "2.0.0", + "license": "MIT", "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" + "node": ">=18" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.54.0", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "version": "3.0.1", + "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "^1.54.0" }, "engines": { "node": ">= 0.6" @@ -2838,18 +1770,15 @@ }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "license": "ISC" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + "license": "MIT" }, "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2859,8 +1788,7 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "optional": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2868,8 +1796,7 @@ }, "node_modules/mkdirp": { "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", "optional": true, "dependencies": { "minimist": "^1.2.6" @@ -2880,22 +1807,19 @@ }, "node_modules/moment": { "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "license": "MIT", "optional": true, "engines": { "node": "*" } }, "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "version": "2.1.2", + "license": "MIT" }, "node_modules/mv": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "license": "MIT", "optional": true, "dependencies": { "mkdirp": "~0.5.1", @@ -2908,43 +1832,27 @@ }, "node_modules/nan": { "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "license": "MIT", "optional": true }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/ncp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "license": "MIT", "optional": true, "bin": { "ncp": "bin/ncp" } }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "1.0.0", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "version": "2.7.0", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -2961,13 +1869,12 @@ } }, "node_modules/nodemon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz", - "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==", + "version": "3.1.10", "dev": true, + "license": "MIT", "dependencies": { "chokidar": "^3.5.2", - "debug": "^3.2.7", + "debug": "^4", "ignore-by-default": "^1.0.1", "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", @@ -2988,109 +1895,52 @@ "url": "https://opencollective.com/nodemon" } }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/nodemon/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/nodemon/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/nopt": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", "dev": true, + "license": "MIT", "dependencies": { "abbrev": "1" }, "bin": { "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" } }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/oauth-sign": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.4", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -3100,133 +1950,43 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "devOptional": true, + "license": "ISC", "dependencies": { "wrappy": "1" } }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "devOptional": true, + "license": "MIT", + "optional": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, + "version": "8.2.0", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=16" } }, "node_modules/pathval": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/pbkdf2": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "license": "MIT", "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -3240,14 +2000,12 @@ }, "node_modules/performance-now": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + "license": "MIT" }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -3255,19 +2013,9 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -3278,86 +2026,58 @@ }, "node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "license": "MIT" }, "node_modules/psl": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "license": "MIT" }, "node_modules/pstree.remy": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/punycode": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.14.0", + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "3.0.0", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", - "iconv-lite": "0.4.24", + "iconv-lite": "0.6.3", "unpipe": "1.0.0" }, "engines": { @@ -3366,8 +2086,7 @@ }, "node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -3377,11 +2096,14 @@ "node": ">= 6" } }, + "node_modules/readable-stream/node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -3391,16 +2113,14 @@ }, "node_modules/redis-errors": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/redis-parser": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "license": "MIT", "dependencies": { "redis-errors": "^1.0.0" }, @@ -3410,9 +2130,7 @@ }, "node_modules/request": { "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "license": "Apache-2.0", "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -3439,46 +2157,52 @@ "node": ">= 6" } }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/request/node_modules/mime-types/node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/request/node_modules/qs": { "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.6" } }, "node_modules/request/node_modules/uuid": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", "bin": { "uuid": "bin/uuid" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, "node_modules/rimraf": { "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "license": "ISC", "optional": true, "dependencies": { "glob": "^6.0.1" @@ -3489,40 +2213,51 @@ }, "node_modules/ripemd160": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/ripemd160/node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/router": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/router/node_modules/debug": { + "version": "4.4.0", + "license": "MIT", "dependencies": { - "queue-microtask": "^1.2.2" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, + "node_modules/router/node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -3536,78 +2271,91 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-json-stringify": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "license": "MIT", "optional": true }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "license": "MIT" }, "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "7.5.4", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "1.2.0", + "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/send/node_modules/debug": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.8.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/send/node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "license": "MIT" }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "2.2.0", + "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" } }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "license": "ISC" }, "node_modules/sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "license": "(MIT AND BSD-3-Clause)", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -3616,80 +2364,88 @@ "sha.js": "bin.js" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, + "node_modules/sha.js/node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, + "node_modules/side-channel-list": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "node_modules/side-channel-map": { + "version": "1.0.1", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dev": true, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "license": "MIT", "dependencies": { - "semver": "^7.5.3" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/simple-update-notifier": { + "version": "2.0.0", "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "semver": "^7.5.3" }, "engines": { "node": ">=10" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/sshpk": { "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "license": "MIT", "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -3712,76 +2468,40 @@ }, "node_modules/standard-as-callback": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" + "license": "MIT" }, "node_modules/standard-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/standard-error/-/standard-error-1.1.0.tgz", - "integrity": "sha512-4v7qzU7oLJfMI5EltUSHCaaOd65J6S4BqKRWgzMi4EYaE5fvNabPxmAPGdxpGXqrcWjhDGI/H09CIdEuUOUeXg==" + "version": "1.1.0" }, "node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "5.5.0", + "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -3791,17 +2511,15 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/touch": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "dev": true, + "license": "ISC", "dependencies": { "nopt": "~1.0.10" }, @@ -3811,8 +2529,7 @@ }, "node_modules/tough-cookie": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -3822,15 +2539,26 @@ } }, "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tr46/node_modules/punycode": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } }, "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "version": "10.9.2", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -3869,31 +2597,9 @@ } } }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, "node_modules/tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -3903,58 +2609,31 @@ }, "node_modules/tweetnacl": { "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } + "license": "Unlicense" }, "node_modules/type-detect": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "version": "2.0.1", + "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "version": "5.8.3", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3965,60 +2644,50 @@ }, "node_modules/undefsafe": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.21.0", + "dev": true, + "license": "MIT" }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } + "license": "MIT" }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/verror": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "engines": [ "node >=0.6.0" ], + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -4026,66 +2695,39 @@ } }, "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "version": "7.0.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, + "node_modules/whatwg-url": { + "version": "14.2.0", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">= 8" + "node": ">=18" } }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "devOptional": true + "license": "ISC" }, "node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yn": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } } } } diff --git a/package.json b/package.json index e73e4e0..d854563 100644 --- a/package.json +++ b/package.json @@ -5,36 +5,42 @@ "main": "index.js", "scripts": { "build": "tsc", - "start": "npm run build && node dist/server.js", + "start": "bun run build && node dist/server.js", "test": "echo \"Error: no test specified\" && exit 1", - "lint": "eslint . --ext .ts,.js", - "fix": "npm run lint -- --fix", - "dev": "nodemon src/server.ts" + "lint": "biome check src/", + "lint:fix": "biome check --write src/", + "lint:fix:unsafe": "biome check --fix --unsafe src/", + "dev": "bun run src/server.ts" }, "author": "", "license": "ISC", "devDependencies": { - "@types/cors": "^2.8.13", - "@types/express": "^4.17.17", - "@types/http-errors": "^2.0.1", - "@typescript-eslint/eslint-plugin": "^5.61.0", - "@typescript-eslint/parser": "^5.61.0", - "eslint": "^8.44.0", - "nodemon": "^3.0.1", - "ts-node": "^10.9.1", - "typescript": "^5.1.6" + "@biomejs/biome": "^1.9.4", + "@types/bitcore-lib": "^0.15.6", + "@types/cors": "^2.8.18", + "@types/ejs": "^3.1.5", + "@types/express": "5.0.1", + "@types/http-errors": "^2.0.4", + "@types/node": "^22.15.17", + "nodemon": "^3.1.10", + "ts-node": "^10.9.2", + "typescript": "^5.8.3" }, "dependencies": { "@ts-bitcoin/core": "^2.2.0", - "axios": "^1.4.0", - "bitcoin-core": "^4.1.0", - "bitcore-lib": "^10.0.17", + "axios": "^1.9.0", + "bitcoin-core": "5.0.0", + "bitcore-lib": "^10.9.0", "cors": "^2.8.5", - "cross-fetch": "^4.0.0", - "dotenv": "^16.3.1", - "ejs": "^3.1.9", - "express": "^4.18.2", + "cross-fetch": "^4.1.0", + "dotenv": "^16.5.0", + "ejs": "^3.1.10", + "encore.dev": "^1.46.21", + "express": "5.1.0", "http-errors": "^2.0.0", - "ioredis": "^5.3.2" + "ioredis": "^5.6.1" + }, + "overrides": { + "whatwg-url": "^14.0.0" } -} +} \ No newline at end of file diff --git a/plan.md b/plan.md new file mode 100644 index 0000000..667264b --- /dev/null +++ b/plan.md @@ -0,0 +1,53 @@ +# Ordfs-Server Encore Migration Plan + +This document outlines the plan for migrating the `ordfs-server` from Express.js to Encore.ts. + +## Service Structure + +1. **`bitcoinService`** + * **Purpose:** Handles all direct interactions with Bitcoin SV blockchain data, fetching and serving raw inscription content. + * **Endpoints:** + * `/:pointer` (Handles `/:txid` and `/:txid_vout`): Serves raw inscription content. + * `/content/:pointer` (Handles `/content/:txid` and `/content/:txid_vout`): Serves raw inscription content. (This is an alternative to the above, might be consolidated depending on routing capabilities). + * `/v1/bsv/block/latest`: Gets the latest block header. + * `/v1/bsv/block/height/:height`: Gets block header by height. + * `/v1/bsv/block/hash/:hash`: Gets block header by hash. + * **Status:** Partially implemented. Needs robust routing for pointer variations. + +2. **`apiService`** (or `gatewayService`) + * **Purpose:** Main public-facing interface. Serves the application's root page, handles user-friendly URLs, and orchestrates calls to other services. + * **Endpoints:** + * `/`: Serves `index.html`. + * `/:fileOrPointer`: Resolves various pointer types (TXID, TXID_VOUT, DNS names like `satoshi.bsv`) and serves the content, likely by calling `bitcoinService`. + * `/favicon.ico`, `/static/*`: Serves static assets. + * **Status:** Not yet implemented. + +3. **`inscriptionService`** (Optional - to be evaluated) + * **Purpose:** If inscription-specific logic (advanced parsing, metadata, search) becomes complex, it could be housed here. + * **Status:** Currently, logic is within `src/lib.js` and used by `bitcoinService`. + +## Key Implementation Steps + +1. **Finalize `bitcoinService` Endpoints:** + * Ensure `/:pointer` and `/content/:pointer` routes correctly extract the `txid` or `txid_vout` and pass it to `loadInscription`. + * Confirm these endpoints work correctly via `curl`, including proper `Content-Type` and content delivery. +2. **Implement `apiService` Root Endpoint (`/`):** + * Serve an `index.html` file (e.g., from a `public` or `static` directory). +3. **Implement `apiService` `/:fileOrPointer` Endpoint:** + * This will be the core intelligent routing logic: + * Determine if `fileOrPointer` is a TXID/Outpoint. + * If so, call `bitcoinService` to get the content. + * If not, attempt DNS resolution via `loadPointerFromDNS`. + * If DNS resolves to a TXID/Outpoint, call `bitcoinService`. + * Handle all error cases gracefully (404s, etc.). + * This endpoint will likely need to be `api.raw` for full control over the response. +4. **Static Asset Serving:** + * Configure Encore to serve static assets (CSS, JS, images) for `apiService`. +5. **Resolve `Content-Length: 0` Mystery:** + * The issue where some native Encore endpoints return `Content-Length: 0` with `curl` (but work via the Encore dashboard) needs to be understood and fixed. The `/encore-test-bitcoin` endpoint in `bitcoinService` is key to diagnosing this. + +## Known Issues / Questions + +* **`Content-Length: 0` with `curl`:** Affects some services/endpoints but not others. +* **Encore API for Path Parameters in `api.raw`:** The `currentRequest()` / `APICallMeta` method caused errors. Currently using `req.url` parsing, but need to confirm if this is the best/most robust Encore-idiomatic approach for raw endpoints. +* **Linter errors in `bitcoinService/index.ts`:** Unused `req`, `resp` parameters in `api.raw` handler (minor). \ No newline at end of file diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..9c39b6b --- /dev/null +++ b/public/index.html @@ -0,0 +1,12 @@ + + + + + + Ordfs Server + + +

Welcome to Ordfs Server (Encore Edition)

+

Enter a TXID, Outpoint, or DNS pointer in the URL.

+ + \ No newline at end of file diff --git a/src/apiService/index.ts b/src/apiService/index.ts new file mode 100644 index 0000000..20b17ac --- /dev/null +++ b/src/apiService/index.ts @@ -0,0 +1,306 @@ +import { readFile } from "node:fs/promises"; +// import server from "../server.js"; // Commented out Express app import +import type { IncomingMessage, ServerResponse } from "node:http"; +import { join } from "node:path"; +import ejs from "ejs"; // Import ejs +import { api } from "encore.dev/api"; +import * as bitcoinService from "../bitcoinService/index.js"; // Import the bitcoinService +import { loadInscription, loadPointerFromDNS, sendFile } from "../lib.js"; + + +// Regular expression to check for typical TXID or Outpoint format +// (64 hex chars, optionally followed by _ and one or more digits) +const txidRegex = /^[a-fA-F0-9]{64}(_[0-9]+)?$/; + +const { ORDFS_DOMAINS, ORDFS_HOST } = process.env; + +// --- Helper Function --- +// Handles calling bitcoinService and sending the response/error +async function _handlePointerLookup(pointer: string, resp: ServerResponse) { + console.log( + `apiService: [_handlePointerLookup] Calling bitcoinService with pointer: ${pointer}`, + ); + try { + const result = + await bitcoinService.loadAndPrepareInscriptionExported(pointer); + + if ("error" in result) { + console.error( + `apiService: [_handlePointerLookup] Error from bitcoinService for ${pointer}:`, + result.error, + ); + resp.writeHead(result.statusCode, { "Content-Type": "text/plain" }); + const errorMessage = + result.error instanceof Error + ? result.error.message + : String(result.error); + resp.end(`Error: ${errorMessage}`); + return; + } + + console.log( + `apiService: [_handlePointerLookup] Successfully got data from bitcoinService for ${pointer}`, + ); + resp.writeHead(200, result.headers); + resp.end(result.file.data); + } catch (serviceCallError) { + // Catch errors specifically from the service call itself or response writing + console.error( + `apiService: [_handlePointerLookup] Critical error during service call/response for ${pointer}:`, + serviceCallError, + ); + // Avoid writing headers again if they were already partially sent + if (!resp.headersSent) { + resp.writeHead(500, { "Content-Type": "text/plain" }); + resp.end("Internal Server Error during service call"); + } + } +} + +// --- API Endpoints --- + +// Serves the main index.html page using EJS +export const getRoot = api.raw( + { expose: true, method: "GET", path: "/" }, + async (_req: IncomingMessage, resp: ServerResponse) => { + try { + // Construct the full URL to parse query parameters + const host = _req.headers.host || "http://localhost"; + // Ensure the base URL has a scheme. + const base = host.startsWith("http") ? host : `http://${host}`; + const fullUrl = new URL(_req.url || "", base); + const queryParams = fullUrl.searchParams; + const rawParam = queryParams.get("raw"); // Get the 'raw' query parameter + + if (ORDFS_DOMAINS && fullUrl.hostname !== ORDFS_HOST) { + const outpoint = await loadPointerFromDNS(fullUrl.hostname); + const file = await loadInscription(outpoint); + + // Use the parsed rawParam here + if (file.type === "ord-fs/json" && rawParam === null) { // Check if rawParam is not present + resp.writeHead(302, {Location: `index.html`}) + resp.end(); + return; + } + return sendFile(file, resp, false); + } + + const viewPath = join(process.cwd(), "views", "pages", "index.ejs"); + // Data to pass to the EJS template + const templateData = { + process: { + env: { + ORDFS_NAME: process.env.ORDFS_NAME || "Ordfs Server", // Provide default + }, + }, + }; + // EJS options - specifying the root directory for includes + const ejsOptions: ejs.Options = { + root: join(process.cwd(), "views"), // Allows includes like <%- include('../partials/head'); %> + }; + + const html = await ejs.renderFile(viewPath, templateData, ejsOptions); + + resp.writeHead(200, { + "Content-Type": "text/html", + // Content-Length is tricky with dynamic rendering, let Node.js handle it by default + }); + resp.end(html); + } catch (error) { + console.error("Error rendering index.ejs:", error); + resp.writeHead(500, { "Content-Type": "text/plain" }); + resp.end("Internal Server Error rendering template"); + } + }, +); + +// Serves favicon.ico +export const getFavicon = api.raw( + { expose: true, method: "GET", path: "/favicon.ico" }, + async (_req: IncomingMessage, resp: ServerResponse) => { + try { + const filePath = join(process.cwd(), "public", "favicon.ico"); + // Determine content type based on file extension, default to image/x-icon + // For simplicity, we'll assume it's always .ico for favicon.ico + const contentType = "image/x-icon"; + const fileData = await readFile(filePath); + + resp.writeHead(200, { + "Content-Type": contentType, + "Content-Length": fileData.length, + }); + resp.end(fileData); + } catch (error) { + // If favicon.ico is not found, it's common to return a 204 No Content + // or a 404. For simplicity, let's do 404 if it's truly missing. + console.warn("favicon.ico not found:", error); + resp.writeHead(404, { "Content-Type": "text/plain" }); + resp.end("Not Found"); + } + }, +); + +// Renders HTML provided as base64 in the path parameter +export const getPreview = api.raw( + { expose: true, method: "GET", path: "/preview/:b64HtmlData" }, + async (req: IncomingMessage, resp: ServerResponse) => { + try { + if (!req.url) { + throw new Error("Request URL is missing"); + } + // Extract base64 data from path: /preview/ + const prefix = "/preview/"; + let b64HtmlData = ""; + if (req.url.startsWith(prefix)) { + b64HtmlData = req.url.substring(prefix.length); + } else { + throw new Error("Invalid preview URL format"); + } + // Remove potential query parameters + const queryIndex = b64HtmlData.indexOf("?"); + if (queryIndex !== -1) { + b64HtmlData = b64HtmlData.substring(0, queryIndex); + } + + // Decode Base64 + const htmlData = Buffer.from(b64HtmlData, "base64").toString("utf8"); + + // Render the preview template + const viewPath = join(process.cwd(), "views", "pages", "preview.ejs"); + const templateData = { htmlData }; // Pass decoded HTML to template + const ejsOptions: ejs.Options = { + root: join(process.cwd(), "views"), // For potential includes in preview.ejs + }; + + const html = await ejs.renderFile(viewPath, templateData, ejsOptions); + + resp.writeHead(200, { "Content-Type": "text/html" }); + resp.end(html); + } catch (error) { + console.error("Error rendering preview:", error); + resp.writeHead(400, { "Content-Type": "text/plain" }); // Use 400 for bad input/decode errors + resp.end(`Error rendering preview: ${(error as Error).message}`); + } + }, +); + +// Handles /content/:pointer requests specifically for TXID/Outpoints +export const getContentPointer = api.raw( + { expose: true, method: "GET", path: "/content/:pointer" }, + async (req: IncomingMessage, resp: ServerResponse) => { + let ptr = ""; // pointer + try { + if (!req.url) { + throw new Error("Request URL is missing"); + } + const prefix = "/content/"; + if (req.url.startsWith(prefix)) { + ptr = req.url.substring(prefix.length); + } else { + throw new Error("Invalid /content/ URL format"); + } + const queryIndex = ptr.indexOf("?"); + if (queryIndex !== -1) { + ptr = ptr.substring(0, queryIndex); + } + console.log(`apiService: Received request for /content/ pointer: ${ptr}`); + + if (!txidRegex.test(ptr)) { + console.warn( + `apiService: Invalid format for /content/ pointer: ${ptr}`, + ); + resp.writeHead(400, { "Content-Type": "text/plain" }); + resp.end( + "Bad Request: Invalid TXID/Outpoint format for /content/ path", + ); + return; + } + + // Call the shared handler + await _handlePointerLookup(ptr, resp); + } catch (error) { + // Catch errors from URL parsing or format validation before calling the handler + console.error( + `apiService: Error in getContentPointer wrapper for ${ptr}:`, + error, + ); + if (!resp.headersSent) { + resp.writeHead(500, { "Content-Type": "text/plain" }); + resp.end(`Internal Server Error: ${(error as Error).message}`); + } + } + }, +); + +// Handles /:fileOrPointer for inscriptions, outpoints, or DNS names +export const getFileOrPointer = api.raw( + { expose: true, method: "GET", path: "/:fileOrPointer" }, + async (req: IncomingMessage, resp: ServerResponse) => { + let fop = ""; // fileOrPointer + let finalPointer = ""; + try { + if (!req.url) { + throw new Error("Request URL is missing"); + } + fop = req.url.substring(1); + const queryIndex = fop.indexOf("?"); + if (queryIndex !== -1) { + fop = fop.substring(0, queryIndex); + } + console.log(`apiService: Received request for fileOrPointer: ${fop}`); + + if (txidRegex.test(fop)) { + console.log(`apiService: ${fop} looks like a TXID/Outpoint.`); + finalPointer = fop; + } else { + console.log( + `apiService: ${fop} does not look like a TXID/Outpoint, attempting DNS lookup.`, + ); + try { + const dnsPointer = await loadPointerFromDNS(fop); + if (dnsPointer && dnsPointer.length > 0) { + finalPointer = Array.isArray(dnsPointer) + ? dnsPointer[0] + : dnsPointer; + console.log( + `apiService: DNS lookup for ${fop} resolved to: ${finalPointer}`, + ); + if (!txidRegex.test(finalPointer)) { + throw new Error( + "DNS resolution did not return a valid TXID/Outpoint format.", + ); + } + } else { + throw new Error("DNS lookup failed or returned empty."); + } + } catch (dnsError) { + console.error(`apiService: DNS lookup for ${fop} failed:`, dnsError); + resp.writeHead(404, { "Content-Type": "text/plain" }); + resp.end( + `Not Found: DNS lookup failed for ${fop}. ${(dnsError as Error).message}`, + ); + return; + } + } + + if (!finalPointer) { + resp.writeHead(404, { "Content-Type": "text/plain" }); + resp.end(`Not Found: Could not determine a valid pointer from ${fop}`); + return; + } + + // Call the shared handler + await _handlePointerLookup(finalPointer, resp); + } catch (error) { + // Catch errors from URL parsing, format validation, or DNS resolution before calling the handler + console.error( + `apiService: Error in getFileOrPointer wrapper for ${fop}:`, + error, + ); + if (!resp.headersSent) { + resp.writeHead(500, { "Content-Type": "text/plain" }); + resp.end(`Internal Server Error: ${(error as Error).message}`); + } + } + }, +); diff --git a/src/bitcoinService/index.ts b/src/bitcoinService/index.ts new file mode 100644 index 0000000..d2c3b3d --- /dev/null +++ b/src/bitcoinService/index.ts @@ -0,0 +1,183 @@ +import type { IncomingMessage, ServerResponse } from "node:http"; +import { api } from "encore.dev/api"; +import { loadInscription, loadPointerFromDNS } from "../lib.js"; +import type { File } from "../models/models.js"; + +// Internal helper to load inscription and prepare response parts +// Renamed to be exported for use by apiService +export async function loadAndPrepareInscriptionExported( + pointer: string, +): Promise< + | { file: File; headers: Record } + | { error: any; statusCode: number } +> { + try { + const fuzzy = true; + const file = await loadInscription(pointer, fuzzy); + + if (!file || !file.data) { + return { error: new Error("File data not found"), statusCode: 404 }; + } + + const headers = { + "Content-Type": file.type || "application/octet-stream", + "Content-Length": file.data.length, + "Cache-Control": "public,immutable,max-age=31536000", + }; + return { file, headers }; + } catch (error) { + console.error(`Error in _loadAndPrepareInscription for ${pointer}:`, error); + // Check if the error has a specific status code, e.g. from a fetch response + // This is a simplistic check; real-world might need more robust error handling + if (error && typeof (error as any).status === "number") { + return { error, statusCode: (error as any).status }; + } + if (error && (error as Error).message?.includes("Not found")) { + // Heuristic for 404 from lib + return { error, statusCode: 404 }; + } + return { error, statusCode: 500 }; + } +} + +export interface BlockHeader { + height: number; + hash: string; + version: number; + merkleRoot: string; + creationTimestamp: number; + bits: number; + nonce: number; + prevBlockHash: string; +} + +export const chaintip = api( + { expose: true, method: "GET", path: "/v1/bsv/block/latest" }, + async (): Promise => { + const resp = await fetch("https://ordinals.1sat.app/v5/blocks/tip"); + if (!resp.ok) { + throw new Error(`Failed to fetch block header: ${resp.statusText}`); + } + return (await resp.json()) as BlockHeader; + }, +); + +export const byHeight = api( + { expose: true, method: "GET", path: "/v1/bsv/block/height/:height" }, + async ({ height }: { height: number }): Promise => { + const resp = await fetch( + `https://ordinals.1sat.app/v5/blocks/height/${height}`, + ); + if (!resp.ok) { + throw new Error(`Failed to fetch block header: ${resp.statusText}`); + } + return (await resp.json()) as BlockHeader; + }, +); + +export const byHash = api( + { expose: true, method: "GET", path: "/v1/bsv/block/hash/:hash" }, + async ({ hash }: { hash: string }): Promise => { + const resp = await fetch( + `https://ordinals.1sat.app/v5/blocks/hash/${hash}`, + ); + if (!resp.ok) { + throw new Error(`Failed to fetch block header: ${resp.statusText}`); + } + return (await resp.json()) as BlockHeader; + }, +); + +// Handles /:txid or /:txid_vout +export const getPointerRoot = api.raw( + { expose: true, method: "GET", path: "/internal/bitcoin/pointer/:pointer" }, + async (req: IncomingMessage, resp: ServerResponse) => { + let ptr = ""; + try { + if (!req.url) { + throw new Error("Request URL is missing"); + } + // req.url will be /internal/bitcoin/pointer/ + const prefix = "/internal/bitcoin/pointer/"; + if (req.url.startsWith(prefix)) { + ptr = req.url.substring(prefix.length); + } else { + // Fallback if something unexpected happens with routing, take last part + ptr = req.url.substring(req.url.lastIndexOf("/") + 1); + } + + const queryIndex = ptr.indexOf("?"); + if (queryIndex !== -1) { + ptr = ptr.substring(0, queryIndex); + } + console.log( + `Received raw request for root pointer: ${ptr} from req.url: ${req.url}`, + ); + + const result = await loadAndPrepareInscriptionExported(ptr); + + if ("error" in result) { + resp.writeHead(result.statusCode, { "Content-Type": "text/plain" }); + resp.end(`Error: ${(result.error as Error).message}`); + return; + } + + resp.writeHead(200, result.headers); + resp.end(result.file.data); + } catch (error) { + console.error( + `Critical error in getPointerRoot handler for ${ptr}:`, + error, + ); + resp.writeHead(500, { "Content-Type": "text/plain" }); + resp.end("Internal Server Error"); + } + }, +); + +// Handles /content/:txid or /content/:txid_vout +export const getContentPointerRoot = api.raw( + { expose: true, method: "GET", path: "/internal/bitcoin/content/:pointer" }, + async (req: IncomingMessage, resp: ServerResponse) => { + let ptr = ""; + try { + if (!req.url) { + throw new Error("Request URL is missing"); + } + // req.url will be /internal/bitcoin/content/ + const prefix = "/internal/bitcoin/content/"; + if (req.url.startsWith(prefix)) { + ptr = req.url.substring(prefix.length); + } else { + // Fallback + ptr = req.url.substring(req.url.lastIndexOf("/") + 1); + } + + const queryIndex = ptr.indexOf("?"); + if (queryIndex !== -1) { + ptr = ptr.substring(0, queryIndex); + } + console.log( + `Received raw request for content pointer: ${ptr} from req.url: ${req.url}`, + ); + + const result = await loadAndPrepareInscriptionExported(ptr); + + if ("error" in result) { + resp.writeHead(result.statusCode, { "Content-Type": "text/plain" }); + resp.end(`Error: ${(result.error as Error).message}`); + return; + } + + resp.writeHead(200, result.headers); + resp.end(result.file.data); + } catch (error) { + console.error( + `Critical error in getContentPointerRoot handler for ${ptr}:`, + error, + ); + resp.writeHead(500, { "Content-Type": "text/plain" }); + resp.end("Internal Server Error"); + } + }, +); diff --git a/src/data.ts b/src/data.ts index 55a7d37..4320293 100644 --- a/src/data.ts +++ b/src/data.ts @@ -1,33 +1,18 @@ -import { Transaction } from "bitcore-lib"; +import { OpCode, type Script, Tx } from "@ts-bitcoin/core"; import { Redis } from "ioredis"; -import { OpCode, Script, Tx } from "@ts-bitcoin/core"; -import { NotFound } from "http-errors"; -import * as createError from "http-errors"; -import { Outpoint } from "./models/outpoint"; -import { File } from "./models/models"; -import { BtcProvider, ITxProvider, ProxyProvider, RpcProvider } from "./provider"; +import type { File } from "./models/models.js"; +import type { Outpoint } from "./models/outpoint.js"; +import { type ITxProvider, ProxyProvider, RpcProvider } from "./provider.js"; let bsvProvider: ITxProvider = new ProxyProvider(); -let btcProvider: ITxProvider = new BtcProvider(); if (process.env.BITCOIN_HOST) { - bsvProvider = new RpcProvider( - "bsv", - process.env.BITCOIN_HOST || "", - process.env.BITCOIN_PORT || "8332", - process.env.BITCOIN_USER || "", - process.env.BITCOIN_PASS || "" - ); -} - -if (process.env.BTC_HOST) { - btcProvider = new RpcProvider( - "btc", - process.env.BTC_HOST || "", - process.env.BTC_PORT || "8332", - process.env.BTC_USER || "", - process.env.BTC_PASS || "" - ); + bsvProvider = new RpcProvider( + process.env.BITCOIN_HOST || "", + process.env.BITCOIN_PORT || "8332", + process.env.BITCOIN_USER || "", + process.env.BITCOIN_PASS || "", + ); } const B = Buffer.from("19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut"); @@ -35,141 +20,128 @@ const ORD = Buffer.from("ord"); let redis: Redis; if (process.env.REDIS_HOST) { - const host = process.env.REDIS_HOST; - const port = process.env.REDIS_PORT - ? parseInt(process.env.REDIS_PORT, 10) - : 6379; - console.log("Connecting to redis:", host, port); - redis = new Redis(port, host); + const host = process.env.REDIS_HOST; + const port = process.env.REDIS_PORT + ? Number.parseInt(process.env.REDIS_PORT, 10) + : 6379; + console.log("Connecting to redis:", host, port); + redis = new Redis(port, host); } +export { redis }; export async function getRawTx(txid: string): Promise { - let rawtx = await redis?.getBuffer(txid); - if (!rawtx) { - try { - rawtx = await bsvProvider.getRawTx(txid); - } catch {} - // const url = `http://${BITCOIN_HOST}:${BITCOIN_PORT}/rest/tx/${txid}.bin` - // const resp = await fetch(url); - // if (!resp.ok) { - // throw createError(resp.status, resp.statusText) - // } - // rawtx = Buffer.from(await resp.arrayBuffer()); - } - if (!rawtx) { - try { - rawtx = await btcProvider.getRawTx(txid); - } catch {} - } - if (!rawtx) { - throw new NotFound(); - } - return rawtx; + let rawtx = await redis?.getBuffer(txid); + if (!rawtx) { + try { + rawtx = await bsvProvider.getRawTx(txid); + } catch (e) { + console.warn( + `bsvProvider.getRawTx failed for ${txid}: ${(e as Error).message}`, + ); + } + } + if (!rawtx) { + throw new Error(`Transaction ${txid} not found by BSV provider`); + } + return rawtx; } export async function loadTx(txid: string): Promise { - return Tx.fromBuffer(await getRawTx(txid)); + return Tx.fromBuffer(await getRawTx(txid)); } -export async function getBlockchainInfo(network: string): Promise<{ height: number; hash: string }> { - switch (network) { - case "bsv": - return bsvProvider.getBlockchainInfo(); - case "btc": - return btcProvider.getBlockchainInfo(); - } - throw new Error("Invalid Network"); +export async function getBlockchainInfo(): Promise<{ + height: number; + hash: string; +}> { + return bsvProvider.getBlockchainInfo(); } export async function getBlockByHeight( - network: string, - height: number + height: number, ): Promise<{ height: number; hash: string }> { - switch (network) { - case "bsv": - return bsvProvider.getBlockByHeight(height); - case "btc": - return btcProvider.getBlockByHeight(height); - } - throw new Error("Invalid Network"); + return bsvProvider.getBlockByHeight(height); } export async function getBlockByHash( - network: string, - hash: string + hash: string, ): Promise<{ height: number; hash: string }> { - switch (network) { - case "bsv": - return bsvProvider.getBlockByHash(hash); - case "btc": - return btcProvider.getBlockByHash(hash); - } - throw new Error("Invalid Network"); + return bsvProvider.getBlockByHash(hash); } -export async function loadFileByOutpoint(outpoint: Outpoint, fuzzy = false): Promise { - const url = `https://v3.ordinals.gorillapool.io/content/${outpoint.toString()}${fuzzy ? '?fuzzy=true' : ''}` - const resp = await fetch(url); - if (!resp.ok) { - throw createError(resp.status, resp.statusText); - } - return { - data: Buffer.from(await resp.arrayBuffer()), - type: resp.headers.get('content-type') || '', - }; +export async function loadFileByOutpoint( + outpoint: Outpoint, + fuzzy = false, +): Promise { + const url = `https://ordinals.gorillapool.io/content/${outpoint.toString()}${ + fuzzy ? "?fuzzy=true" : "" + }`; + const resp = await fetch(url); + if (!resp.ok) { + throw new Error( + `loadFileByOutpoint fetch failed for ${outpoint}: ${resp.status} ${resp.statusText}`, + ); + } + return { + data: Buffer.from(await resp.arrayBuffer()), + type: resp.headers.get("content-type") || "", + }; } export async function loadFileByInpoint(inpoint: string): Promise { - const [txid, vout] = inpoint.split('i'); - const rawtx = await getRawTx(txid); - const tx = new Transaction(rawtx); - return parseScript(tx.txIns[parseInt(vout, 10)].script); + const [txid, vout] = inpoint.split("i"); + const rawtx = await getRawTx(txid); + const tx = Tx.fromBuffer(rawtx); + return parseScript(tx.txIns[Number.parseInt(vout, 10)].script); } export async function loadFileByTxid(txid: string): Promise { - const tx = await loadTx(txid); - for (let txOut of tx.txOuts) { - try { - const data = await parseScript(txOut.script); - if (data) return data; - } catch { } - } - throw new NotFound(); + const tx = await loadTx(txid); + for (const txOut of tx.txOuts) { + try { + const data = parseScript(txOut.script); + if (data) return data; + } catch (e) { + console.warn( + `parseScript failed for output in ${txid}: ${(e as Error).message}`, + ); + } + } + throw new Error(`Inscription not found in any output for tx ${txid}`); } export function parseScript(script: Script): File { - let opFalse = 0; - let opIf = 0; - for (let [i, chunk] of script.chunks.entries()) { - if (chunk.opCodeNum === OpCode.OP_FALSE) { - opFalse = i; - } - if (chunk.opCodeNum === OpCode.OP_IF) { - opIf = i; - } - if (chunk.buf?.equals(ORD) && opFalse === i - 2 && opIf === i - 1) { - let file = {} as File; - for (let j = i + 1; j < script.chunks.length; j += 2) { - if (script.chunks[j].buf) break; - switch (script.chunks[j].opCodeNum) { - case OpCode.OP_0: - file.data = script.chunks[j + 1].buf; - return file; - case OpCode.OP_1: - file.type = script.chunks[j + 1].buf?.toString('utf8'); - break; - case OpCode.OP_ENDIF: - break; - } - } - } - if (chunk.buf?.equals(B)) { - return { - data: script.chunks[i + 1].buf, - type: script.chunks[i + 2].buf?.toString('utf8'), - }; - } - } - throw new NotFound(); + let opFalse = 0; + let opIf = 0; + for (const [i, chunk] of script.chunks.entries()) { + if (chunk.opCodeNum === OpCode.OP_FALSE) { + opFalse = i; + } + if (chunk.opCodeNum === OpCode.OP_IF) { + opIf = i; + } + if (chunk.buf?.equals(ORD) && opFalse === i - 2 && opIf === i - 1) { + const file = {} as File; + for (let j = i + 1; j < script.chunks.length; j += 2) { + if (script.chunks[j].buf) break; + switch (script.chunks[j].opCodeNum) { + case OpCode.OP_0: + file.data = script.chunks[j + 1].buf; + return file; + case OpCode.OP_1: + file.type = script.chunks[j + 1].buf?.toString("utf8"); + break; + case OpCode.OP_ENDIF: + break; + } + } + } + if (chunk.buf?.equals(B)) { + return { + data: script.chunks[i + 1].buf, + type: script.chunks[i + 2].buf?.toString("utf8"), + }; + } + } + throw new Error("Inscription pattern not found in script"); } - diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index bb64715..0000000 --- a/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './routes'; -export * from './lib'; \ No newline at end of file diff --git a/src/lib.ts b/src/lib.ts index a8009e3..24d03ee 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -1,60 +1,143 @@ -import * as dns from "dns/promises"; +import * as dns from "node:dns/promises"; import fetch from "cross-fetch"; -import { BadRequest, NotFound } from "http-errors"; -import * as createError from "http-errors"; -import { File } from "./models/models"; -import { getBlockByHeight, loadFileByInpoint, loadFileByOutpoint, loadFileByTxid } from "./data"; -import { Outpoint } from "./models/outpoint"; +import { + getBlockByHeight, + loadFileByInpoint, + loadFileByOutpoint, + loadFileByTxid, + redis, +} from "./data.js"; +import { type File } from "./models/models.js"; +import { Outpoint } from "./models/outpoint.js"; +import { ServerResponse } from "node:http"; -export async function loadPointerFromDNS(hostname: string): Promise { - const lookupDomain = `_ordfs.${hostname}`; - const TXTs = await dns.resolveTxt(lookupDomain); - const prefix = "ordfs="; - let pointer = ""; - console.log("Lookup Up:", lookupDomain); - for (const TXT of TXTs) { - for (const elem of TXT) { - if (!elem.startsWith(prefix)) continue; - console.log("Elem:", elem); - pointer = elem.slice(prefix.length); - console.log("Origin:", pointer); - return pointer - } - } - throw new NotFound(); +const CACHE_TTL_SECONDS = 60 * 60 * 24; // 24 hours + +export function sendFile(file: File, res: ServerResponse, immutable = true) { + const headers: Record = {} + if (file.type) { + headers["Content-Type"] = file.type; + } + if (immutable) { + headers["Cache-Control"] = "public,immutable,max-age=31536000"; + } + + res.writeHead(200, headers); + res.end(file.data); } -export async function loadInscription(pointer: string, metadata = false, fuzzy = false): Promise { - console.log("loadInscription", pointer); - let file: File | undefined; - - if (pointer.match(/^[0-9a-fA-F]{64}$/)) { - file = await loadFileByTxid(pointer); - } else if (pointer.match(/^[0-9a-fA-F]{64}i\d+$/)) { - file = await loadFileByInpoint(pointer) - } else if (pointer.match(/^[0-9a-fA-F]{64}_\d+$/)) { - file = await loadFileByOutpoint(Outpoint.fromString(pointer), fuzzy) - if (file && metadata) { - try { - const url =`https://v3.ordinals.gorillapool.io/api/txos/${pointer}`; - const resp = await fetch(url); - if (!resp.ok) { - throw createError(resp.status, resp.statusText); - } - const data = await resp.json(); - const { hash } = await getBlockByHeight('bsv', data!.height); - - file.meta = { - ...data, - hash - }; - } catch {}; - } - } else throw new BadRequest("Invalid Pointer"); - - if (!file) throw new NotFound(); - return file; +export async function loadPointerFromDNS(hostname: string): Promise { + const lookupDomain = `_ordfs.${hostname}`; + const TXTs = await dns.resolveTxt(lookupDomain); + const prefix = "ordfs="; + let pointer = ""; + console.log("Lookup Up:", lookupDomain); + for (const TXT of TXTs) { + for (const elem of TXT) { + if (!elem.startsWith(prefix)) continue; + console.log("Elem:", elem); + pointer = elem.slice(prefix.length); + console.log("Origin:", pointer); + return pointer; + } + } + throw new Error("ordfs= TXT record not found in DNS"); } -export { File }; +export async function loadInscription( + pointer: string, + fuzzy = false, +): Promise { + console.log("loadInscription", pointer, { fuzzy }); + if (redis) { + try { + const cached = await redis.hgetall(`f:${pointer}`) + if (cached) { + console.log(`Cache HIT for pointer: ${pointer}`); + return { + type: cached.type, + data: Buffer.from(cached.data, 'base64') + }; + } + console.log(`Cache MISS for pointer: ${pointer}`); + } catch (err) { + console.error( + `Redis error during cache read for ${pointer}: ${(err as Error).message}`, + ); + } + } + + let file: File | undefined; + let effectivePointer = pointer; + + if (pointer.match(/^[0-9a-fA-F]{64}$/)) { + console.log( + `Raw TXID detected: ${pointer}. Attempting TXID_0 with fuzzy=${fuzzy}`, + ); + effectivePointer = `${pointer}_0`; + try { + console.log( + `Calling loadFileByOutpoint for ${effectivePointer} with fuzzy=${fuzzy}`, + ); + file = await loadFileByOutpoint( + Outpoint.fromString(effectivePointer), + fuzzy, + ); + console.log( + `loadFileByOutpoint succeeded for ${effectivePointer}. File type: ${file?.type}, Data length: ${file?.data?.length}`, + ); + } catch (err) { + console.warn( + `loadFileByOutpoint for ${effectivePointer} failed with fuzzy=${fuzzy}. Error: ${(err as Error).message}. Falling back to loadFileByTxid.`, + ); + try { + console.log(`Calling fallback loadFileByTxid for ${pointer}`); + file = await loadFileByTxid(pointer); + console.log( + `Fallback loadFileByTxid succeeded for ${pointer}. File type: ${file?.type}, Data length: ${file?.data?.length}`, + ); + } catch (finalErr) { + console.error( + `Fallback loadFileByTxid for ${pointer} also failed. Error: ${(finalErr as Error).message}`, + ); + throw finalErr; + } + } + } else if (pointer.match(/^[0-9a-fA-F]{64}i\d+$/)) { + file = await loadFileByInpoint(pointer); + } else if (pointer.match(/^[0-9a-fA-F]{64}_\d+$/)) { + console.log( + `Outpoint detected: ${pointer}. Calling loadFileByOutpoint with fuzzy=${fuzzy}`, + ); + file = await loadFileByOutpoint(Outpoint.fromString(pointer), fuzzy); + console.log( + `loadFileByOutpoint succeeded for outpoint ${pointer}. File type: ${file?.type}, Data length: ${file?.data?.length}`, + ); + } else throw new Error("Invalid Pointer"); + + if (!file) { + console.error(`No file found for pointer ${pointer} after all attempts.`); + throw new Error("Inscription Not Found"); + } + + if (redis && file.data && file.type) { + try { + await redis.multi() + .hset(`f:${pointer}`, { + type: file.type, + data: file.data.toString("base64"), + }) + .expire(`f:${pointer}`, CACHE_TTL_SECONDS) + .exec(); + console.log(`Stored in cache: ${pointer}`); + } catch (err) { + console.error( + `Redis error during cache write for ${pointer}: ${(err as Error).message}`, + ); + } + } + + console.log(`Returning file for pointer ${pointer}. Type: ${file.type}`); + return file; +} diff --git a/src/models/models.ts b/src/models/models.ts index 5f1deff..74eb47b 100644 --- a/src/models/models.ts +++ b/src/models/models.ts @@ -1,18 +1,17 @@ export interface Meta { - height?: number; - hash?: string; - txid: string; - v: number; - MAP?: {[key:string]:any} - } - - export interface File { - type?: string; - data?: Buffer; - meta?: Meta; - } - - export interface OrdFS { - [filename: string]: string; - } - \ No newline at end of file + height?: number; + hash?: string; + txid: string; + v: number; + MAP?: { [key: string]: any }; +} + +export interface File { + type?: string; + data?: Buffer; + meta?: Meta; +} + +export interface OrdFS { + [filename: string]: string; +} diff --git a/src/models/outpoint.ts b/src/models/outpoint.ts index 5633714..e53a2fb 100644 --- a/src/models/outpoint.ts +++ b/src/models/outpoint.ts @@ -1,39 +1,40 @@ export class Outpoint { - txid: Buffer = Buffer.alloc(32); - vout: number = 0; + txid: Buffer = Buffer.alloc(32); + vout: number = 0; - constructor(txid?: Buffer, vout?: number) { - if(txid) this.txid = txid; - if(vout) this.vout = vout; - } - - toString() { - return this.txid.toString('hex') + '_' + this.vout; - } + constructor(txid?: Buffer, vout?: number) { + if (txid) this.txid = txid; + if (vout) this.vout = vout; + } - toBuffer() { - return Buffer.concat([ - this.txid, - Buffer.from(this.vout.toString(16).padStart(8, '0'), 'hex'), - ]); - } + toString() { + return this.txid.toString("hex") + "_" + this.vout; + } - static fromString(str: string) { - const origin = new Outpoint(); - if(!str.match(/^[0-9a-fA-F]{64}_\d+$/)) throw new Error('invalid outpoint') - origin.txid = Buffer.from(str.slice(0, 64), 'hex'); - origin.vout = parseInt(str.slice(65), 10); - return origin; - } + toBuffer() { + return Buffer.concat([ + this.txid, + Buffer.from(this.vout.toString(16).padStart(8, "0"), "hex"), + ]); + } - static fromBuffer(buf: Buffer) { - const origin = new Outpoint(); - origin.txid = buf.slice(0, 32); - origin.vout = parseInt(buf.slice(32).toString('hex'), 16); - return origin; - } + static fromString(str: string) { + const origin = new Outpoint(); + if (!str.match(/^[0-9a-fA-F]{64}_\d+$/)) + throw new Error("invalid outpoint"); + origin.txid = Buffer.from(str.slice(0, 64), "hex"); + origin.vout = parseInt(str.slice(65), 10); + return origin; + } - toJSON() { - return this.toString(); - } -} \ No newline at end of file + static fromBuffer(buf: Buffer) { + const origin = new Outpoint(); + origin.txid = buf.slice(0, 32); + origin.vout = parseInt(buf.slice(32).toString("hex"), 16); + return origin; + } + + toJSON() { + return this.toString(); + } +} diff --git a/src/provider.ts b/src/provider.ts index 3ea0cd2..4b82bd3 100644 --- a/src/provider.ts +++ b/src/provider.ts @@ -1,192 +1,209 @@ -import * as Client from "bitcoin-core"; -import "cross-fetch/polyfill"; -import { NotFound } from "http-errors"; -import * as createError from "http-errors"; +import Client from "bitcoin-core"; +import "cross-fetch/dist/node-polyfill.js"; import { Redis } from "ioredis"; let redis: Redis; if (process.env.REDIS_HOST) { - const host = process.env.REDIS_HOST; - const port = process.env.REDIS_PORT - ? parseInt(process.env.REDIS_PORT, 10) - : 6379; - console.log("Connecting to redis:", host, port); - redis = new Redis(port, host); + const host = process.env.REDIS_HOST; + const port = process.env.REDIS_PORT + ? Number.parseInt(process.env.REDIS_PORT, 10) + : 6379; + console.log("Connecting to redis:", host, port); + redis = new Redis(port, host); } export interface ITxProvider { - network: string; - getRawTx: (string) => Promise; - getBlockchainInfo: () => Promise<{ height: number; hash: string }>; - getBlockByHeight: (number) => Promise<{ height: number; hash: string }>; - getBlockByHash: (string) => Promise<{ height: number; hash: string }>; + // network: string; // Removed network field + getRawTx: (rawtx: string) => Promise; + getBlockchainInfo: () => Promise<{ height: number; hash: string }>; + getBlockByHeight: ( + height: number, + ) => Promise<{ height: number; hash: string }>; + getBlockByHash: (hash: string) => Promise<{ height: number; hash: string }>; } export class RpcProvider implements ITxProvider { - private client: Client; - - constructor( - public network: string, - host: string, - port: string, - username: string, - password: string - ) { - this.client = new Client({ - host, - port, - username, - password, - }); - } - - async getRawTx(txid: string): Promise { - let rawtx = await redis?.getBuffer(txid); - if (!rawtx) { - rawtx = await this.client.getTransactionByHash(txid, { - extension: "bin", - }); - if (!rawtx) { - throw new NotFound(); - } - redis?.set(txid, rawtx); - } - return rawtx; - } - - async getBlockchainInfo(): Promise<{ height: number; hash: string }> { - const info = await this.client.getBlockchainInfo(); - return { - height: info.blocks, - hash: info.bestblockhash, - }; - } - - async getBlockByHeight( - height: number - ): Promise<{ height: number; hash: string }> { - const hash = await this.client.getBlockHash(height); - return { height, hash }; - } - - async getBlockByHash( - hash: string - ): Promise<{ height: number; hash: string }> { - const info = await this.client.getBlockHeader(hash); - return { - height: info.height, - hash, - }; - } + private client: Client; + + constructor( + // public network: string, // Removed network parameter + host: string, + port: string, + username: string, + password: string, + ) { + this.client = new Client({ + host: `${host}:${port}`, + username, + password, + }); + } + + async getRawTx(txid: string): Promise { + let rawtx = await redis?.getBuffer(txid); + if (!rawtx) { + rawtx = await this.client.getTransactionByHash(txid, { + extension: "bin", + }); + if (!rawtx) { + throw new Error("RpcProvider: Transaction not found"); + } + redis?.set(txid, rawtx); + } + return rawtx; + } + + async getBlockchainInfo(): Promise<{ height: number; hash: string }> { + const info = await this.client.getBlockchainInformation(); + return { + height: info.blocks, + hash: info.bestblockhash, + }; + } + + async getBlockByHeight( + height: number, + ): Promise<{ height: number; hash: string }> { + const hash = await this.client.command({ + method: "getblockhash", + parameters: [height], + }); + return { height, hash }; + } + + async getBlockByHash( + hash: string, + ): Promise<{ height: number; hash: string }> { + const info = await this.client.command({ + method: "getblockheader", + parameters: [hash, true], + }); + return { + height: info.height, + hash, + }; + } } export class ProxyProvider implements ITxProvider { - public network = "bsv"; - - async getRawTx(txid: string): Promise { - let rawtx = await redis?.getBuffer(txid); - if (!rawtx) { - const resp = await fetch(`https://junglebus.gorillapool.io/v1/transaction/get/${txid}/bin`); - if (!resp.ok) { - throw createError(resp.status, resp.statusText); - } - rawtx = Buffer.from(await resp.arrayBuffer()); - redis?.set(txid, rawtx); - } - return rawtx; - } - - async getBlockchainInfo(): Promise<{ height: number; hash: string }> { - const resp = await fetch( - "https://api.whatsonchain.com/v1/bsv/main/block/headers" - ); - if (!resp.ok) { - throw createError(resp.status, resp.statusText); - } - const info = await resp.json(); - return { - height: info[0].height, - hash: info[0].hash, - }; - } - - async getBlockByHeight( - height: number - ): Promise<{ height: number; hash: string }> { - const resp = await fetch( - `https://api.whatsonchain.com/v1/bsv/main/block/height/${height}` - ); - const info = await resp.json(); - return { height, hash: info.hash }; - } - - async getBlockByHash( - hash: string - ): Promise<{ height: number; hash: string }> { - const resp = await fetch( - `https://api.whatsonchain.com/v1/bsv/main/block/hash/${hash}` - ); - const info = await resp.json(); - - return { - height: info.height, - hash, - }; - } + // public network = "bsv"; // No longer needed + + async getRawTx(txid: string): Promise { + let rawtx = await redis?.getBuffer(txid); + if (!rawtx) { + const resp = await fetch( + `https://junglebus.gorillapool.io/v1/transaction/get/${txid}/bin`, + ); + if (!resp.ok) { + throw new Error( + `ProxyProvider: Fetch failed: ${resp.status} ${resp.statusText}`, + ); + } + rawtx = Buffer.from(await resp.arrayBuffer()); + redis?.set(txid, rawtx); + } + return rawtx; + } + + async getBlockchainInfo(): Promise<{ height: number; hash: string }> { + const resp = await fetch( + "https://api.whatsonchain.com/v1/bsv/main/block/headers", + ); + if (!resp.ok) { + throw new Error( + `ProxyProvider: GetBlockchainInfo failed: ${resp.status} ${resp.statusText}`, + ); + } + const info = await resp.json(); + return { + height: info[0].height, + hash: info[0].hash, + }; + } + + async getBlockByHeight( + height: number, + ): Promise<{ height: number; hash: string }> { + const resp = await fetch( + `https://api.whatsonchain.com/v1/bsv/main/block/height/${height}`, + ); + const info = await resp.json(); + return { height, hash: info.hash }; + } + + async getBlockByHash( + hash: string, + ): Promise<{ height: number; hash: string }> { + const resp = await fetch( + `https://api.whatsonchain.com/v1/bsv/main/block/hash/${hash}`, + ); + const info = await resp.json(); + + return { + height: info.height, + hash, + }; + } } +/* // Remove BtcProvider export class BtcProvider implements ITxProvider { - public network = "btc"; - - async getRawTx(txid: string): Promise { - let rawtx = await redis?.getBuffer(txid); - if (!rawtx) { - // TODO: Make this configuration based - const resp = await fetch( - `https://ordinals.shruggr.cloud/v1/btc/tx/${txid}` - ); - if (!resp.ok) { - throw createError(resp.status, resp.statusText); - } - rawtx = Buffer.from(await resp.arrayBuffer()); - redis?.set(txid, rawtx); - } - return rawtx; - } - - async getBlockchainInfo(): Promise<{ height: number; hash: string }> { - // TODO: Make this configuration based - const resp = await fetch( - "https://ordinals.shruggr.cloud/v1/btc/block/latest" - ); - if (!resp.ok) { - throw createError(resp.status, resp.statusText); - } - - return resp.json(); - } - - async getBlockByHeight( - height: number - ): Promise<{ height: number; hash: string }> { - const resp = await fetch( - `https://ordinals.shruggr.cloud/v1/btc/block/height/${height}` - ); - const info = await resp.json(); - return { height, hash: info.hash }; - } - - async getBlockByHash( - hash: string - ): Promise<{ height: number; hash: string }> { - const resp = await fetch( - `https://ordinals.shruggr.cloud/v1/btc/block/hash/${hash}` - ); - const info = await resp.json(); - - return { - height: info.height, - hash, - }; - } + public network = "btc"; + + async getRawTx(txid: string): Promise { + let rawtx = await redis?.getBuffer(txid); + if (!rawtx) { + // TODO: Make this configuration based + const resp = await fetch( + `https://ordfs.gorillapool.io/v1/btc/tx/${txid}`, + ); + if (!resp.ok) { + throw new Error( + `BtcProvider: Fetch failed for ${txid}: ${resp.status} ${resp.statusText}`, + ); + } + rawtx = Buffer.from(await resp.arrayBuffer()); + redis?.set(txid, rawtx); + } + return rawtx; + } + + async getBlockchainInfo(): Promise<{ height: number; hash: string }> { + // TODO: Make this configuration based + const resp = await fetch( + "https://ordfs.gorillapool.io/v1/btc/block/latest", + ); + if (!resp.ok) { + throw new Error( + `BtcProvider: getBlockchainInfo failed: ${resp.status} ${resp.statusText}`, + ); + } + + return resp.json(); + } + + async getBlockByHeight( + height: number, + ): Promise<{ height: number; hash: string }> { + const resp = await fetch( + `https://ordfs.gorillapool.io/v1/btc/block/height/${height}`, + ); + const info = await resp.json(); + return { height, hash: info.hash }; + } + + async getBlockByHash( + hash: string, + ): Promise<{ height: number; hash: string }> { + const resp = await fetch( + `https://ordfs.gorillapool.io/v1/btc/block/hash/${hash}`, + ); + const info = await resp.json(); + + return { + height: info.height, + hash, + }; + } } +*/ diff --git a/src/routes.ts b/src/routes.ts deleted file mode 100644 index 09acd46..0000000 --- a/src/routes.ts +++ /dev/null @@ -1,156 +0,0 @@ -import * as express from "express"; -import { Response } from "express"; -import { BadRequest, NotFound } from "http-errors"; -import { File, OrdFS } from "./models/models"; -import { loadInscription, loadPointerFromDNS } from "./lib"; -import { getBlockByHash, getBlockByHeight, getBlockchainInfo, getRawTx } from "./data"; - -const { ORDFS_DOMAINS, ORDFS_HOST } = process.env; -function sendFile(file: File, res: Response, immutable = true) { - res.header("Content-Type", file.type || ""); - if (file.meta) { - res.header('ordfs-meta', JSON.stringify(file.meta)) - } - if (immutable && !file.meta) { - res.header("Cache-Control", "public,immutable,max-age=31536000"); - } - res.status(200).send(file.data); -} - -export function RegisterRoutes(app: express.Express) { - app.get("/", async (req, res) => { - let outpoint: string; - if (ORDFS_DOMAINS && req.hostname != ORDFS_HOST) { - try { - outpoint = await loadPointerFromDNS(req.hostname); - const file = await loadInscription(outpoint); - if (file.type === "ord-fs/json" && !req.query["raw"]) { - req.res?.redirect("index.html"); - return; - } - sendFile(file, res, false); - } catch (err) { - // TODO: inscription not found - res.render("pages/404"); - } - } - res.render("pages/index"); - }); - - app.get("/v1/:network/block/latest", async (req, res, next) => { - try { - res.json(await getBlockchainInfo(req.params.network)); - } catch (e) { - next(e); - } - }); - - app.get("/v1/:network/block/height/:height", async (req, res, next) => { - try { - res.json( - await getBlockByHeight( - req.params.network, - parseInt(req.params.height, 10) - ) - ); - } catch (e) { - next(e); - } - }); - - app.get("/v1/:network/block/hash/:hash", async (req, res, next) => { - try { - res.json(await getBlockByHash(req.params.network, req.params.hash)); - } catch (e) { - next(e); - } - }); - - app.get("/v1/:network/tx/:txid", async (req, res) => { - res.set("Content-type", "application/octet-stream"); - res.send(await getRawTx(req.params.txid)); - }); - app.get("/:fileOrPointer", getInscriptionOrDnsFile); - app.get("/content/:pointer", getInscription); - app.get("/preview/:b64HtmlData", previewHtmlFromB64Data); - app.get("/:pointer/:filename", getOrdfsFile); - app.get("/content/:pointer/:filename", getOrdfsFile); - - async function previewHtmlFromB64Data(req, res, next) { - try { - const b64HtmlData = req.params.b64HtmlData; - const htmlData = Buffer.from(b64HtmlData, "base64").toString("utf8"); - res.render("pages/preview", { htmlData }); - } catch (err) { - next(err); - } - } - - async function getInscriptionOrDnsFile(req, res, next) { - let pointer = req.params.fileOrPointer!; - let file: File | undefined; - let immutable = true; - try { - try { - file = await loadInscription(pointer, req.query.meta, true); - } catch (err) { - if (!(err instanceof BadRequest)) { - throw err; - } - if (ORDFS_DOMAINS && req.hostname != ORDFS_HOST) { - const filename = pointer; - pointer = await loadPointerFromDNS(req.hostname); - const dirData = await loadInscription(pointer); - const dir = JSON.parse(dirData.data!.toString("utf8")); - if (!dir[filename]) { - throw new NotFound(); - } - pointer = dir[filename].slice(6); - file = await loadInscription(pointer, req.query.meta); - } - } - if (!file) { - throw new NotFound(); - } - sendFile(file, res, immutable); - } catch (err) { - next(err); - } - } - - async function getInscription(req, res, next) { - const pointer = req.params.pointer; - try { - const file = await loadInscription(pointer, req.query.meta); - // check if its an ordfs directory - if (file.type === "ord-fs/json" && !req.query.raw) { - req.res?.redirect(`/${pointer}/index.html`); - return; - } - sendFile(file, res, true); - } catch (err) { - next(err); - } - } - - async function getOrdfsFile(req, res, next) { - try { - let pointer = req.params.pointer; - const filename = req.params.filename; - const dirData = await loadInscription(pointer); - const dir: OrdFS = JSON.parse(dirData.data!.toString("utf8")); - if (!dir[filename]) { - throw new NotFound(); - } - if (dir[filename].startsWith("ord://")) { - pointer = dir[filename].slice(6); - } else { - pointer = dir[filename]; - } - const file = await loadInscription(pointer, req.query.meta); - sendFile(file, res, true); - } catch (err) { - next(err); - } - } -} diff --git a/src/server.ts b/src/server.ts deleted file mode 100644 index 6ac1fe2..0000000 --- a/src/server.ts +++ /dev/null @@ -1,46 +0,0 @@ -import * as cors from "cors"; -import * as dotenv from "dotenv"; -import * as express from "express"; -import { ErrorRequestHandler, Request, Response } from "express"; -import { HttpError, NotFound } from "http-errors"; -import { RegisterRoutes } from "./routes"; -dotenv.config(); - -const server = express(); - -async function main() { - const PORT = process.env.PORT || 8080; - server.listen(PORT, () => { - console.log(`Server listening on port ${PORT}`); - }); -} - -server.set("trust proxy", true); -server.use(cors({ origin: true })); - -server.set("view engine", "ejs"); -server.use("/public", express.static("public")); - -server.use((req, res, next) => { - console.log(req.path, req.method); - next(); -}); - -RegisterRoutes(server); - -server.use((req, res, next) => { - console.log(req.path); - next(new NotFound("Not Found")); -}); - -const errorMiddleware = (( - err: TypeError | HttpError, - req: Request, - res: Response -) => { - console.error(req.path, (err as HttpError).status || 500, err.message); - res.status((err as HttpError).status || 500).json({ message: err.message }); -}) as ErrorRequestHandler; - -server.use(errorMiddleware); -main().catch(console.error); diff --git a/src/testService/index.ts b/src/testService/index.ts new file mode 100644 index 0000000..8fe42a4 --- /dev/null +++ b/src/testService/index.ts @@ -0,0 +1,8 @@ +import { api } from "encore.dev/api"; + +export const testEndpoint = api( + { expose: true, method: "GET", path: "/isolated-test" }, + () => { + return { result: "Hello from isolated service!" }; + }, +); diff --git a/tests/bsv.ts b/tests/bsv.ts index a2fb772..cec6060 100644 --- a/tests/bsv.ts +++ b/tests/bsv.ts @@ -1,9 +1,12 @@ import { loadInscription } from "../src/lib"; // '562d43da46e8510a045cb2f16a287a9828a24a132d15a1d47e23b1fa69b65828_0' async function main() { - const file = await loadInscription('a65e3c97a87c179b8689619c063eb9bc0066b550c4a13a8ac471af29089165fa_0'); - console.log('File:', file); + const file = await loadInscription( + "a65e3c97a87c179b8689619c063eb9bc0066b550c4a13a8ac471af29089165fa_0", + ); + console.log("File:", file); } -main().catch(console.error) - .then(() => process.exit()) \ No newline at end of file +main() + .catch(console.error) + .then(() => process.exit()); diff --git a/tests/btc.ts b/tests/btc.ts index 7432fcb..af3b02c 100644 --- a/tests/btc.ts +++ b/tests/btc.ts @@ -1,11 +1,13 @@ import { loadInscription } from "../src/lib"; async function main() { - const file = await loadInscription('7286fc9119a7630bad27f98459d81802ad2e100f78ba0ab993bbf0546ad9f730i0'); - console.log('File:', file); - console.log(file.data.toString()) + const file = await loadInscription( + "7286fc9119a7630bad27f98459d81802ad2e100f78ba0ab993bbf0546ad9f730i0", + ); + console.log("File:", file); + console.log(file.data.toString()); } -main().catch(console.error) - .then(() => process.exit()) - +main() + .catch(console.error) + .then(() => process.exit()); diff --git a/tsconfig.json b/tsconfig.json index 51c8953..6fc8b18 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,21 +1,25 @@ { - "compilerOptions": { - "module": "commonjs", - "noImplicitReturns": true, - "noImplicitAny": false, - "noUnusedLocals": true, - "outDir": "dist", - "sourceMap": true, - "strict": true, - "target": "es2017", - "allowJs": true, - "experimentalDecorators": true, - "resolveJsonModule": true, - "allowSyntheticDefaultImports": true, - }, - "compileOnSave": true, - "include": [ - "src" - ] - } - \ No newline at end of file + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "lib": ["ES2022"], + "target": "ES2022", + "module": "ES2022", + "types": ["node"], + "paths": { + "~encore/*": ["./encore.gen/*"] + }, + "composite": true, + "strict": true, + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "isolatedModules": true, + "sourceMap": true, + "declaration": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, + "outDir": "dist" + }, + "compileOnSave": true, + "include": ["src", "encore.app"] +} diff --git a/views/partials/footer.ejs b/views/partials/footer.ejs index 75f2bf6..6914621 100644 --- a/views/partials/footer.ejs +++ b/views/partials/footer.ejs @@ -19,7 +19,7 @@ - BSV Inscription - - - `; @@ -147,17 +143,17 @@
  • Access inscriptions across chains
  • -
  • /{inscriptionId}
  • +
  • /{inscriptionId | txid}
  • Preview your code before broadcasting
  • /preview/{b64Html}
  • - Get blockchain info. Network can be 'bsv' or 'btc' + Get blockchain info. Network is 'bsv'
  • /v1/{network}/block/latest
  • /v1/{network}/block/hash/{blockHash}
  • /v1/{network}/block/height/{blockHeight}
  • - Compatible with BTC recursive inscriptions + Compatible with recursive inscriptions
  • /content/{inscriptionId}