From 194377dbd9534a367cb33ec28984b354852b3d54 Mon Sep 17 00:00:00 2001 From: CJ_Clippy Date: Tue, 4 Jun 2024 15:06:47 -0800 Subject: [PATCH] TDD on scout --- ARCHITECHTURE.md | 8 +- charts/fp/templates/scout.yaml | 7 + packages/capture/index.js | 1 - packages/common/.mocharc.json | 4 - packages/common/package.json | 19 - packages/common/pnpm-lock.yaml | 621 --- packages/common/src/fansly.js | 23 - packages/common/src/main.js | 5 - .../next/app/components/streams-table.tsx | 47 +- packages/next/app/lib/streams.ts | 2 +- packages/scout/README.md | 19 +- packages/scout/package.json | 12 +- packages/scout/pnpm-lock.yaml | 3691 ++++++++++++++++- packages/scout/src/fansly.js | 38 + packages/{common => scout}/src/fansly.spec.js | 0 packages/scout/src/fixtures/sample.webp | Bin 0 -> 26312 bytes packages/scout/src/image.js | 16 + packages/scout/src/image.spec.js | 25 + packages/scout/src/index.email.js | 6 +- packages/scout/src/s3.js | 59 + packages/scout/src/s3.spec.js | 19 + packages/scout/src/signals.js | 71 +- packages/scout/src/twitter.js | 66 + packages/scout/src/twitter.spec.js | 30 + packages/scout/src/ua.js | 1 + packages/scout/src/utils.js | 70 + packages/scout/src/utils.spec.js | 27 + packages/scout/src/vtuber.js | 47 + packages/scout/src/vtuber.spec.js | 38 + .../stream/content-types/stream/lifecycles.js | 8 + scripts/k8s-secrets.sh | 2 + t.wip.tiltfile | 35 +- 32 files changed, 4291 insertions(+), 726 deletions(-) delete mode 100644 packages/common/.mocharc.json delete mode 100644 packages/common/package.json delete mode 100644 packages/common/pnpm-lock.yaml delete mode 100644 packages/common/src/fansly.js delete mode 100644 packages/common/src/main.js create mode 100644 packages/scout/src/fansly.js rename packages/{common => scout}/src/fansly.spec.js (100%) create mode 100644 packages/scout/src/fixtures/sample.webp create mode 100644 packages/scout/src/image.js create mode 100644 packages/scout/src/image.spec.js create mode 100644 packages/scout/src/s3.js create mode 100644 packages/scout/src/s3.spec.js create mode 100644 packages/scout/src/twitter.js create mode 100644 packages/scout/src/twitter.spec.js create mode 100644 packages/scout/src/ua.js create mode 100644 packages/scout/src/utils.js create mode 100644 packages/scout/src/utils.spec.js create mode 100644 packages/scout/src/vtuber.js create mode 100644 packages/scout/src/vtuber.spec.js diff --git a/ARCHITECHTURE.md b/ARCHITECHTURE.md index 4d6341d..331a4f9 100644 --- a/ARCHITECHTURE.md +++ b/ARCHITECHTURE.md @@ -1,6 +1,6 @@ git monorepo. -pnpm required for workspaces. +pnpm for workspaces. Kubernetes for Development using Tiltfile @@ -12,4 +12,8 @@ dokku for Production, deployed with `git push`. Kubernetes for Production, deployed using FluxCD -direnv for loading .envrc \ No newline at end of file +direnv for loading .envrc + + +Domain Driven Development +Test Driven Development diff --git a/charts/fp/templates/scout.yaml b/charts/fp/templates/scout.yaml index 8a255f7..4fde129 100644 --- a/charts/fp/templates/scout.yaml +++ b/charts/fp/templates/scout.yaml @@ -44,6 +44,13 @@ spec: key: postgresRealtimeConnectionString - name: STRAPI_URL value: https://strapi.piko.sbtp.xyz + - name: SCOUT_NITTER_ACCESS_KEY + valueFrom: + secretKeyRef: + name: scout + key: nitterAccessKey + - NAME: SCOUT_NITTER_URL + value: https://nitter.sbtp.xyz - name: SCOUT_RECENTS_TOKEN valueFrom: secretKeyRef: diff --git a/packages/capture/index.js b/packages/capture/index.js index 949bc16..d7c8f14 100755 --- a/packages/capture/index.js +++ b/packages/capture/index.js @@ -10,7 +10,6 @@ import os from 'os' import fs from 'node:fs' import { loggerFactory } from "./src/logger.js" import { verifyStorage } from './src/disk.js' -import faye from 'faye' import { record, assertDependencyDirectory, checkFFmpeg } from './src/record.js' import fastq from 'fastq' import pRetry from 'p-retry'; diff --git a/packages/common/.mocharc.json b/packages/common/.mocharc.json deleted file mode 100644 index 88b151f..0000000 --- a/packages/common/.mocharc.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extension": ["js"], - "spec": "src/**/*.spec.js" -} \ No newline at end of file diff --git a/packages/common/package.json b/packages/common/package.json deleted file mode 100644 index f6dd750..0000000 --- a/packages/common/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "common", - "type": "module", - "version": "1.0.0", - "description": "regular expressions, constants, and helper functions which are used app-wide", - "scripts": { - "test": "mocha" - }, - "exports": { - "./fansly": "./src/fansly.js" - }, - "keywords": [], - "author": "@CJ_Clippy", - "license": "Unlicense", - "dependencies": { - "chai": "^5.1.1", - "mocha": "^10.4.0" - } -} diff --git a/packages/common/pnpm-lock.yaml b/packages/common/pnpm-lock.yaml deleted file mode 100644 index d119a0e..0000000 --- a/packages/common/pnpm-lock.yaml +++ /dev/null @@ -1,621 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - chai: - specifier: ^5.1.1 - version: 5.1.1 - mocha: - specifier: ^10.4.0 - version: 10.4.0 - -packages: - - ansi-colors@4.1.1: - resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} - engines: {node: '>=6'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - browser-stdout@1.3.1: - resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - chai@5.1.1: - resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} - engines: {node: '>=12'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} - - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - - cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decamelize@4.0.0: - resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} - engines: {node: '>=10'} - - deep-eql@5.0.1: - resolution: {integrity: sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==} - engines: {node: '>=6'} - - diff@5.0.0: - resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} - engines: {node: '>=0.3.1'} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - deprecated: Glob versions prior to v9 are no longer supported - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - - loupe@3.1.1: - resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} - - minimatch@5.0.1: - resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} - engines: {node: '>=10'} - - mocha@10.4.0: - resolution: {integrity: sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==} - engines: {node: '>= 14.0.0'} - hasBin: true - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} - engines: {node: '>= 14.16'} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - serialize-javascript@6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - workerpool@6.2.1: - resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yargs-parser@20.2.4: - resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} - engines: {node: '>=10'} - - yargs-unparser@2.0.0: - resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} - engines: {node: '>=10'} - - yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - -snapshots: - - ansi-colors@4.1.1: {} - - ansi-regex@5.0.1: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - argparse@2.0.1: {} - - assertion-error@2.0.1: {} - - balanced-match@1.0.2: {} - - binary-extensions@2.3.0: {} - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - browser-stdout@1.3.1: {} - - camelcase@6.3.0: {} - - chai@5.1.1: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.1 - loupe: 3.1.1 - pathval: 2.0.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - check-error@2.1.1: {} - - chokidar@3.5.3: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - cliui@7.0.4: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - debug@4.3.4(supports-color@8.1.1): - dependencies: - ms: 2.1.2 - optionalDependencies: - supports-color: 8.1.1 - - decamelize@4.0.0: {} - - deep-eql@5.0.1: {} - - diff@5.0.0: {} - - emoji-regex@8.0.0: {} - - escalade@3.1.2: {} - - escape-string-regexp@4.0.0: {} - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat@5.0.2: {} - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - get-caller-file@2.0.5: {} - - get-func-name@2.0.2: {} - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob@8.1.0: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.0.1 - once: 1.4.0 - - has-flag@4.0.0: {} - - he@1.2.0: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - - is-extglob@2.1.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-number@7.0.0: {} - - is-plain-obj@2.1.0: {} - - is-unicode-supported@0.1.0: {} - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - - loupe@3.1.1: - dependencies: - get-func-name: 2.0.2 - - minimatch@5.0.1: - dependencies: - brace-expansion: 2.0.1 - - mocha@10.4.0: - dependencies: - ansi-colors: 4.1.1 - browser-stdout: 1.3.1 - chokidar: 3.5.3 - debug: 4.3.4(supports-color@8.1.1) - diff: 5.0.0 - escape-string-regexp: 4.0.0 - find-up: 5.0.0 - glob: 8.1.0 - he: 1.2.0 - js-yaml: 4.1.0 - log-symbols: 4.1.0 - minimatch: 5.0.1 - ms: 2.1.3 - serialize-javascript: 6.0.0 - strip-json-comments: 3.1.1 - supports-color: 8.1.1 - workerpool: 6.2.1 - yargs: 16.2.0 - yargs-parser: 20.2.4 - yargs-unparser: 2.0.0 - - ms@2.1.2: {} - - ms@2.1.3: {} - - normalize-path@3.0.0: {} - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - path-exists@4.0.0: {} - - pathval@2.0.0: {} - - picomatch@2.3.1: {} - - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - require-directory@2.1.1: {} - - safe-buffer@5.2.1: {} - - serialize-javascript@6.0.0: - dependencies: - randombytes: 2.1.0 - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-json-comments@3.1.1: {} - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - workerpool@6.2.1: {} - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrappy@1.0.2: {} - - y18n@5.0.8: {} - - yargs-parser@20.2.4: {} - - yargs-unparser@2.0.0: - dependencies: - camelcase: 6.3.0 - decamelize: 4.0.0 - flat: 5.0.2 - is-plain-obj: 2.1.0 - - yargs@16.2.0: - dependencies: - cliui: 7.0.4 - escalade: 3.1.2 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.4 - - yocto-queue@0.1.0: {} diff --git a/packages/common/src/fansly.js b/packages/common/src/fansly.js deleted file mode 100644 index 921b231..0000000 --- a/packages/common/src/fansly.js +++ /dev/null @@ -1,23 +0,0 @@ - -const regex = { - username: new RegExp(/^https:\/\/fansly\.com\/(?:live\/)?([^\/]+)/) -} - -const normalize = (url) => { - if (!url) throw new Error('normalized received a null or undefined url.'); - return fromUsername(fansly.regex.username.exec(url).at(1)) -} - -const fromUsername = (username) => `https://fansly.com/${username}` - -const url = { - normalize, - fromUsername -} - -const fansly = { - regex, - url -} - -export default fansly \ No newline at end of file diff --git a/packages/common/src/main.js b/packages/common/src/main.js deleted file mode 100644 index 4523926..0000000 --- a/packages/common/src/main.js +++ /dev/null @@ -1,5 +0,0 @@ -import fansly from './fansly.js' - -export default { - fansly -} \ No newline at end of file diff --git a/packages/next/app/components/streams-table.tsx b/packages/next/app/components/streams-table.tsx index e29e7bd..e8ee028 100644 --- a/packages/next/app/components/streams-table.tsx +++ b/packages/next/app/components/streams-table.tsx @@ -7,8 +7,8 @@ import { QueryClient, useQuery, } from '@tanstack/react-query' - - +import { format } from 'date-fns' +import Image from 'next/image' import { PaginationState, useReactTable, @@ -39,28 +39,57 @@ export default function StreamsTable() { const rerender = React.useReducer(() => ({}), {})[1] - // name + // image & name // title // platform - // date + // date & time // archiveStatus const columns = React.useMemo[]>( () => [ { - header: 'VTuber', - accessorFn: d => d.attributes.vtuber.data?.attributes?.displayName, + header: 'VTuber', + accessorFn: d => ({ + displayName: d.attributes.vtuber.data?.attributes?.displayName, + image: d.attributes.vtuber.data?.attributes.image, + imageBlur: d.attributes.vtuber.data?.attributes.imageBlur + }), + cell: info => { + const { displayName, image, imageBlur } = info.getValue<{ displayName: string, image: string, imageBlur: string }>(); + return ( + <> +
+
+
+ {displayName} +
+
+
+ {displayName} +
+
+ + ) + } }, { header: 'Date', - accessorFn: d => new Date(d.attributes.date2).toISOString().split('T').at(0), - cell: info => {info.getValue() as string} + accessorFn: d => format(new Date(d.attributes.date2), 'yyyy-MM-dd HH:mm'), + cell: info => ({info.getValue() as string}) }, { header: 'Platform', accessorFn: d => [ (d.attributes.isChaturbateStream && 'CB'), (d.attributes.isFanslyStream && 'Fansly') - ].filter(Boolean).join(', ') || '???' + ].filter(Boolean).join(' ') || '???' }, { header: 'Status', diff --git a/packages/next/app/lib/streams.ts b/packages/next/app/lib/streams.ts index 380aa55..b8d8a18 100644 --- a/packages/next/app/lib/streams.ts +++ b/packages/next/app/lib/streams.ts @@ -321,7 +321,7 @@ export async function fetchStreamData({ pageIndex, pageSize }: { pageIndex: numb const query = qs.stringify({ populate: { vtuber: { - fields: ['slug', 'displayName', 'publishedAt'] + fields: ['slug', 'displayName', 'publishedAt', 'image', 'imageBlur'] } }, filters: { diff --git a/packages/scout/README.md b/packages/scout/README.md index 76f692b..7afbb66 100644 --- a/packages/scout/README.md +++ b/packages/scout/README.md @@ -1,10 +1,19 @@ # scout -Watches an e-mail inbox for going live notifications +Vtuber data acquisition. + +## Features + + * [x] Ingests going live notification e-mails + * [ ] Sends `startRecording` signals to @futureporn/capture + * [ ] Fetches vtuber data from platform + * [ ] image + * [ ] themeColor + * [x] displayName + * [ ] Platform Support + * [ ] fansly + * [ ] chaturbate -Support for - * [ ] Chaturbate - * [ ] Fansly ## Design requirements @@ -18,7 +27,7 @@ Support for * [ ] throws errors when unable to connect * [ ] runs browser headless * [ ] runs in the cloud - * [ ] runs in k8s cluster + * [x] runs in k8s cluster diff --git a/packages/scout/package.json b/packages/scout/package.json index b75ae69..366d21a 100644 --- a/packages/scout/package.json +++ b/packages/scout/package.json @@ -2,7 +2,7 @@ "name": "scout", "type": "module", "version": "3.3.0", - "description": "detect when a stream goes live", + "description": "vtuber data acquisition", "main": "src/index.email.js", "scripts": { "test": "mocha", @@ -13,18 +13,26 @@ "author": "@CJ_Clippy", "license": "Unlicense", "dependencies": { + "@aws-sdk/client-s3": "^3.583.0", + "@aws-sdk/lib-storage": "^3.588.0", + "@aws-sdk/s3-request-presigner": "^3.588.0", + "@book000/twitterts": "^0.62.50", + "@paralleldrive/cuid2": "^2.2.2", "cheerio": "1.0.0-rc.12", - "common": "workspace:*", "concurrently": "^8.2.2", "date-fns": "^3.6.0", "dotenv": "^16.4.5", "fastq": "^1.17.1", "faye": "^1.4.0", + "htmlparser2": "^9.1.0", "imapflow": "^1.0.160", "limiter": "2.0.1", "mailparser": "^3.7.1", + "node-vibrant": "3.2.1-alpha.1", + "p-retry": "^5.1.2", "pg-pubsub": "workspace:*", "qs": "^6.12.1", + "sharp": "^0.33.4", "slugify": "^1.6.6", "xpath": "^0.0.34" }, diff --git a/packages/scout/pnpm-lock.yaml b/packages/scout/pnpm-lock.yaml index 2e45f1a..cbda639 100644 --- a/packages/scout/pnpm-lock.yaml +++ b/packages/scout/pnpm-lock.yaml @@ -8,12 +8,24 @@ importers: .: dependencies: + '@aws-sdk/client-s3': + specifier: ^3.583.0 + version: 3.588.0 + '@aws-sdk/lib-storage': + specifier: ^3.588.0 + version: 3.588.0(@aws-sdk/client-s3@3.588.0) + '@aws-sdk/s3-request-presigner': + specifier: ^3.588.0 + version: 3.588.0 + '@book000/twitterts': + specifier: ^0.62.50 + version: 0.62.50 + '@paralleldrive/cuid2': + specifier: ^2.2.2 + version: 2.2.2 cheerio: specifier: 1.0.0-rc.12 version: 1.0.0-rc.12 - common: - specifier: workspace:* - version: link:../common concurrently: specifier: ^8.2.2 version: 8.2.2 @@ -29,6 +41,9 @@ importers: faye: specifier: ^1.4.0 version: 1.4.0 + htmlparser2: + specifier: ^9.1.0 + version: 9.1.0 imapflow: specifier: ^1.0.160 version: 1.0.162 @@ -38,12 +53,21 @@ importers: mailparser: specifier: ^3.7.1 version: 3.7.1 + node-vibrant: + specifier: 3.2.1-alpha.1 + version: 3.2.1-alpha.1 + p-retry: + specifier: ^5.1.2 + version: 5.1.2 pg-pubsub: specifier: workspace:* version: link:../pg-pubsub qs: specifier: ^6.12.1 version: 6.12.1 + sharp: + specifier: ^0.33.4 + version: 0.33.4 slugify: specifier: ^1.6.6 version: 1.6.6 @@ -60,17 +84,673 @@ importers: packages: + '@apidevtools/json-schema-ref-parser@11.6.3': + resolution: {integrity: sha512-lzKdPBz+Eo7xo7GUB2buWl4sqvUhHnMXrde1aRnj2kgbol6S8ZaHviDhKIif5M/q9E0A5ZVp3P9ZBPZnENcUHQ==} + engines: {node: '>= 16'} + + '@aws-crypto/crc32@3.0.0': + resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} + + '@aws-crypto/crc32c@3.0.0': + resolution: {integrity: sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==} + + '@aws-crypto/ie11-detection@3.0.0': + resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} + + '@aws-crypto/sha1-browser@3.0.0': + resolution: {integrity: sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==} + + '@aws-crypto/sha256-browser@3.0.0': + resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} + + '@aws-crypto/sha256-js@3.0.0': + resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} + + '@aws-crypto/supports-web-crypto@3.0.0': + resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} + + '@aws-crypto/util@3.0.0': + resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} + + '@aws-sdk/client-s3@3.588.0': + resolution: {integrity: sha512-MyJs3sbgRtVOdT2xxdg/CmLk+t+dMg26nfEZucBFeJKFAHfTA74sjef9y+GQ2xFUNq+kqG1CnP8JGMiGx2ht0w==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/client-sso-oidc@3.588.0': + resolution: {integrity: sha512-CTbgtLSg0y2jIOtESuQKkRIqRe/FQmKuyzFWc+Qy6yGcbk1Pyusfz2BC+GGwpYU+1BlBBSNnLQHpx3XY87+aSA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/client-sso@3.588.0': + resolution: {integrity: sha512-zKS+xUkBLfwjbh77ZjtRUoG/vR/fyDteSE6rOAzwlmHQL8p+QUX+zNUNvCInvPi62zGBhEwXOvzs8zvnT4NzfQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/client-sts@3.588.0': + resolution: {integrity: sha512-UIMjcUikgG9NIENQxSyJNTHMD8TaTfK6Jjf1iuZSyQRyTrcGy0/xcDxrmwZQFAPkOPUf6w9KqydLkMLcYOBdPQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/core@3.588.0': + resolution: {integrity: sha512-O1c2+9ce46Z+iiid+W3iC1IvPbfIo5ev9CBi54GdNB9SaI8/3+f8MJcux0D6c9toCF0ArMersN/gp8ek57e9uQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-env@3.587.0': + resolution: {integrity: sha512-Hyg/5KFECIk2k5o8wnVEiniV86yVkhn5kzITUydmNGCkXdBFHMHRx6hleQ1bqwJHbBskyu8nbYamzcwymmGwmw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-http@3.587.0': + resolution: {integrity: sha512-Su1SRWVRCuR1e32oxX3C1V4c5hpPN20WYcRfdcr2wXwHqSvys5DrnmuCC+JoEnS/zt3adUJhPliTqpfKgSdMrA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-ini@3.588.0': + resolution: {integrity: sha512-tP/YmEKvYpmp7pCR2OuhoOhAOtm6BbZ1hbeG9Sw9RFZi55dbGPHqMmfvvzHFAGsJ20z4/oDS+UnHaWVhRnV82w==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.588.0 + + '@aws-sdk/credential-provider-node@3.588.0': + resolution: {integrity: sha512-8s4Ruo6q1YIrj8AZKBiUQG42051ytochDMSqdVOEZGxskfvmt2XALyi5SsWd0Ve3zR95zi+EtRBNPn2EU8sQpA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-process@3.587.0': + resolution: {integrity: sha512-V4xT3iCqkF8uL6QC4gqBJg/2asd/damswP1h9HCfqTllmPWzImS+8WD3VjgTLw5b0KbTy+ZdUhKc0wDnyzkzxg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-sso@3.588.0': + resolution: {integrity: sha512-1GstMCyFzenVeppK7hWazMvo3P1DXKP70XkXAjH8H2ELBVg5X8Zt043cnQ7CMt4XjCV+ettHAtc9kz/gJTkDNQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.587.0': + resolution: {integrity: sha512-XqIx/I2PG7kyuw3WjAP9wKlxy8IvFJwB8asOFT1xPFoVfZYKIogjG9oLP5YiRtfvDkWIztHmg5MlVv3HdJDGRw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.587.0 + + '@aws-sdk/lib-storage@3.588.0': + resolution: {integrity: sha512-NwGw5XWxUnBRdUg08PoNN7XWF+N9lzbCBTRRmxV8FTJnzqiJEYkb4GKv5GeaeeL5Wp4qtMLMwunCxM4rhx2fsg==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-s3': ^3.588.0 + + '@aws-sdk/middleware-bucket-endpoint@3.587.0': + resolution: {integrity: sha512-HkFXLPl8pr6BH/Q0JpOESqEKL0ZK3sk7aSZ1S6GE4RXET7H5R94THULXqQFZzD48gZcyFooO/yNKZTqrZFaWKg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-expect-continue@3.577.0': + resolution: {integrity: sha512-6dPp8Tv4F0of4un5IAyG6q++GrRrNQQ4P2NAMB1W0VO4JoEu1C8GievbbDLi88TFIFmtKpnHB0ODCzwnoe8JsA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-flexible-checksums@3.587.0': + resolution: {integrity: sha512-URMwp/budDvKhIvZ4a6zIBfFTun/iDlPWXqsGKYjEtHt8jz27OSjCZtDtIeqW4WTBdKL8KZgQcl+DdaE5M1qiQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-host-header@3.577.0': + resolution: {integrity: sha512-9ca5MJz455CODIVXs0/sWmJm7t3QO4EUa1zf8pE8grLpzf0J94bz/skDWm37Pli13T3WaAQBHCTiH2gUVfCsWg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-location-constraint@3.577.0': + resolution: {integrity: sha512-DKPTD2D2s+t2QUo/IXYtVa/6Un8GZ+phSTBkyBNx2kfZz4Kwavhl/JJzSqTV3GfCXkVdFu7CrjoX7BZ6qWeTUA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-logger@3.577.0': + resolution: {integrity: sha512-aPFGpGjTZcJYk+24bg7jT4XdIp42mFXSuPt49lw5KygefLyJM/sB0bKKqPYYivW0rcuZ9brQ58eZUNthrzYAvg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.577.0': + resolution: {integrity: sha512-pn3ZVEd2iobKJlR3H+bDilHjgRnNrQ6HMmK9ZzZw89Ckn3Dcbv48xOv4RJvu0aU8SDLl/SNCxppKjeLDTPGBNA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-sdk-s3@3.587.0': + resolution: {integrity: sha512-vtXTGEiw1E9Fax4LmcU2Z208gbrC8ShrdsSLmGcRPpu5NPOGBFBSDG5sy5EDNClrFxIl/Le8coQnD0EDBtx+uQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-signing@3.587.0': + resolution: {integrity: sha512-tiZaTDj4RvhXGRAlncFn7CSEfL3iNPO67WSaxAq+Ls5j1VgczPhu5262cWONNoMgth3nXR1hhLC4ITSl/a6AzA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-ssec@3.577.0': + resolution: {integrity: sha512-i2BPJR+rp8xmRVIGc0h1kDRFcM2J9GnClqqpc+NLSjmYadlcg4mPklisz9HzwFVcRPJ5XcGf3U4BYs5G8+iTyg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-user-agent@3.587.0': + resolution: {integrity: sha512-SyDomN+IOrygLucziG7/nOHkjUXES5oH5T7p8AboO8oakMQJdnudNXiYWTicQWO52R51U6CR27rcMPTGeMedYA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/region-config-resolver@3.587.0': + resolution: {integrity: sha512-93I7IPZtulZQoRK+O20IJ4a1syWwYPzoO2gc3v+/GNZflZPV3QJXuVbIm0pxBsu0n/mzKGUKqSOLPIaN098HcQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/s3-request-presigner@3.588.0': + resolution: {integrity: sha512-yZBNzRBayL3H2yUQzkoHdiGRDqCfxhfOYYgwW0ZP9UkI6GF/kIkeuvCH5IANGxtXKNRvz8sGW+xjsVOMN6S7Yg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/signature-v4-multi-region@3.587.0': + resolution: {integrity: sha512-TR9+ZSjdXvXUz54ayHcCihhcvxI9W7102J1OK6MrLgBlPE7uRhAx42BR9L5lLJ86Xj3LuqPWf//o9d/zR9WVIg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/token-providers@3.587.0': + resolution: {integrity: sha512-ULqhbnLy1hmJNRcukANBWJmum3BbjXnurLPSFXoGdV0llXYlG55SzIla2VYqdveQEEjmsBuTZdFvXAtNpmS5Zg==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sso-oidc': ^3.587.0 + + '@aws-sdk/types@3.577.0': + resolution: {integrity: sha512-FT2JZES3wBKN/alfmhlo+3ZOq/XJ0C7QOZcDNrpKjB0kqYoKjhVKZ/Hx6ArR0czkKfHzBBEs6y40ebIHx2nSmA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-arn-parser@3.568.0': + resolution: {integrity: sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-endpoints@3.587.0': + resolution: {integrity: sha512-8I1HG6Em8wQWqKcRW6m358mqebRVNpL8XrrEoT4In7xqkKkmYtHRNVYP6lcmiQh5pZ/c/FXu8dSchuFIWyEtqQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-format-url@3.577.0': + resolution: {integrity: sha512-SyEGC2J+y/krFRuPgiF02FmMYhqbiIkOjDE6k4nYLJQRyS6XEAGxZoG+OHeOVEM+bsDgbxokXZiM3XKGu6qFIg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-locate-window@3.568.0': + resolution: {integrity: sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-user-agent-browser@3.577.0': + resolution: {integrity: sha512-zEAzHgR6HWpZOH7xFgeJLc6/CzMcx4nxeQolZxVZoB5pPaJd3CjyRhZN0xXeZB0XIRCWmb4yJBgyiugXLNMkLA==} + + '@aws-sdk/util-user-agent-node@3.587.0': + resolution: {integrity: sha512-Pnl+DUe/bvnbEEDHP3iVJrOtE3HbFJBPgsD6vJ+ml/+IYk1Eq49jEG+EHZdNTPz3SDG0kbp2+7u41MKYJHR/iQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@aws-sdk/util-utf8-browser@3.259.0': + resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} + + '@aws-sdk/xml-builder@3.575.0': + resolution: {integrity: sha512-cWgAwmbFYNCFzPwxL705+lWps0F3ZvOckufd2KKoEZUmtpVw9/txUXNrPySUXSmRTSRhoatIMABNfStWR043bQ==} + engines: {node: '>=16.0.0'} + '@babel/runtime@7.24.5': resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} engines: {node: '>=6.9.0'} + '@book000/node-utils@1.13.91': + resolution: {integrity: sha512-LiOKbUJ3pLWRDtGNfH45NFwJVB2ZEKcbbx3YN32+56j8YILFVDpwAQ3MRMMAbMX0LTHo6QUiXJPIRxH9kPhu6Q==} + + '@book000/twitterts@0.62.50': + resolution: {integrity: sha512-Ysy729JHJSQf8eeQNYYCceU5cJeVLIHE1M/bjDgGKBWk9no5kXlqlqByZBK6YELYAl60cfy9VQzBMDzm85ui0Q==} + + '@colors/colors@1.6.0': + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} + engines: {node: '>=0.1.90'} + + '@dabh/diagnostics@2.0.3': + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + + '@emnapi/runtime@1.2.0': + resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==} + + '@img/sharp-darwin-arm64@0.33.4': + resolution: {integrity: sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==} + engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.4': + resolution: {integrity: sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==} + engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.2': + resolution: {integrity: sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==} + engines: {macos: '>=11', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.2': + resolution: {integrity: sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==} + engines: {macos: '>=10.13', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.2': + resolution: {integrity: sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==} + engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.2': + resolution: {integrity: sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==} + engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.2': + resolution: {integrity: sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==} + engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.2': + resolution: {integrity: sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==} + engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.2': + resolution: {integrity: sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==} + engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.2': + resolution: {integrity: sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==} + engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.4': + resolution: {integrity: sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==} + engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.4': + resolution: {integrity: sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==} + engines: {glibc: '>=2.28', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.4': + resolution: {integrity: sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==} + engines: {glibc: '>=2.31', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.4': + resolution: {integrity: sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==} + engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.4': + resolution: {integrity: sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==} + engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.4': + resolution: {integrity: sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==} + engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.4': + resolution: {integrity: sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.4': + resolution: {integrity: sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.4': + resolution: {integrity: sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [win32] + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jimp/bmp@0.16.13': + resolution: {integrity: sha512-9edAxu7N2FX7vzkdl5Jo1BbACfycUtBQX+XBMcHA2bk62P8R0otgkHg798frgAk/WxQIzwxqOH6wMiCwrlAzdQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/core@0.16.13': + resolution: {integrity: sha512-qXpA1tzTnlkTku9yqtuRtS/wVntvE6f3m3GNxdTdtmc+O+Wcg9Xo2ABPMh7Nc0AHbMKzwvwgB2JnjZmlmJEObg==} + + '@jimp/custom@0.16.13': + resolution: {integrity: sha512-LTATglVUPGkPf15zX1wTMlZ0+AU7cGEGF6ekVF1crA8eHUWsGjrYTB+Ht4E3HTrCok8weQG+K01rJndCp/l4XA==} + + '@jimp/gif@0.16.13': + resolution: {integrity: sha512-yFAMZGv3o+YcjXilMWWwS/bv1iSqykFahFMSO169uVMtfQVfa90kt4/kDwrXNR6Q9i6VHpFiGZMlF2UnHClBvg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/jpeg@0.16.13': + resolution: {integrity: sha512-BJHlDxzTlCqP2ThqP8J0eDrbBfod7npWCbJAcfkKqdQuFk0zBPaZ6KKaQKyKxmWJ87Z6ohANZoMKEbtvrwz1AA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-resize@0.16.13': + resolution: {integrity: sha512-qoqtN8LDknm3fJm9nuPygJv30O3vGhSBD2TxrsCnhtOsxKAqVPJtFVdGd/qVuZ8nqQANQmTlfqTiK9mVWQ7MiQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/png@0.16.13': + resolution: {integrity: sha512-8cGqINvbWJf1G0Her9zbq9I80roEX0A+U45xFby3tDWfzn+Zz8XKDF1Nv9VUwVx0N3zpcG1RPs9hfheG4Cq2kg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/tiff@0.16.13': + resolution: {integrity: sha512-oJY8d9u95SwW00VPHuCNxPap6Q1+E/xM5QThb9Hu+P6EGuu6lIeLaNBMmFZyblwFbwrH+WBOZlvIzDhi4Dm/6Q==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/types@0.16.13': + resolution: {integrity: sha512-mC0yVNUobFDjoYLg4hoUwzMKgNlxynzwt3cDXzumGvRJ7Kb8qQGOWJQjQFo5OxmGExqzPphkirdbBF88RVLBCg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/utils@0.16.13': + resolution: {integrity: sha512-VyCpkZzFTHXtKgVO35iKN0sYR10psGpV6SkcSeV4oF7eSYlR8Bl6aQLCzVeFjvESF7mxTmIiI3/XrMobVrtxDA==} + + '@jsdevtools/ono@7.1.3': + resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@otplib/core@12.0.1': + resolution: {integrity: sha512-4sGntwbA/AC+SbPhbsziRiD+jNDdIzsZ3JUyfZwjtKyc/wufl1pnSIaG4Uqx8ymPagujub0o92kgBnB89cuAMA==} + + '@otplib/plugin-crypto@12.0.1': + resolution: {integrity: sha512-qPuhN3QrT7ZZLcLCyKOSNhuijUi9G5guMRVrxq63r9YNOxxQjPm59gVxLM+7xGnHnM6cimY57tuKsjK7y9LM1g==} + + '@otplib/plugin-thirty-two@12.0.1': + resolution: {integrity: sha512-MtT+uqRso909UkbrrYpJ6XFjj9D+x2Py7KjTO9JDPhL0bJUYVu5kFP4TFZW4NFAywrAtFRxOVY261u0qwb93gA==} + + '@otplib/preset-default@12.0.1': + resolution: {integrity: sha512-xf1v9oOJRyXfluBhMdpOkr+bsE+Irt+0D5uHtvg6x1eosfmHCsCC6ej/m7FXiWqdo0+ZUI6xSKDhJwc8yfiOPQ==} + + '@otplib/preset-v11@12.0.1': + resolution: {integrity: sha512-9hSetMI7ECqbFiKICrNa4w70deTUfArtwXykPUvSHWOdzOlfa9ajglu7mNCntlvxycTiOAXkQGwjQCzzDEMRMg==} + + '@paralleldrive/cuid2@2.2.2': + resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@puppeteer/browsers@2.2.3': + resolution: {integrity: sha512-bJ0UBsk0ESOs6RFcLXOt99a3yTDcOKlzfjad+rhFwdaG1Lu/Wzq58GHYCDTlZ9z6mldf4g+NTb+TXEfe0PpnsQ==} + engines: {node: '>=18'} + hasBin: true + '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} + '@smithy/abort-controller@3.0.0': + resolution: {integrity: sha512-p6GlFGBt9K4MYLu72YuJ523NVR4A8oHlC5M2JO6OmQqN8kAc/uh1JqLE+FizTokrSJGg0CSvC+BrsmGzKtsZKA==} + engines: {node: '>=16.0.0'} + + '@smithy/chunked-blob-reader-native@3.0.0': + resolution: {integrity: sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==} + + '@smithy/chunked-blob-reader@3.0.0': + resolution: {integrity: sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==} + + '@smithy/config-resolver@3.0.1': + resolution: {integrity: sha512-hbkYJc20SBDz2qqLzttjI/EqXemtmWk0ooRznLsiXp3066KQRTvuKHa7U4jCZCJq6Dozqvy0R1/vNESC9inPJg==} + engines: {node: '>=16.0.0'} + + '@smithy/core@2.1.1': + resolution: {integrity: sha512-0vbIwwUcg0FMhTVJgMhbsRSAFL0rwduy/OQz7Xq1pJXJOyaGv+PGjj1iGawRlzBUPA5BkJv7S6q+YU2U8gk/WA==} + engines: {node: '>=16.0.0'} + + '@smithy/credential-provider-imds@3.1.0': + resolution: {integrity: sha512-q4A4d38v8pYYmseu/jTS3Z5I3zXlEOe5Obi+EJreVKgSVyWUHOd7/yaVCinC60QG4MRyCs98tcxBH1IMC0bu7Q==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-codec@3.0.0': + resolution: {integrity: sha512-PUtyEA0Oik50SaEFCZ0WPVtF9tz/teze2fDptW6WRXl+RrEenH8UbEjudOz8iakiMl3lE3lCVqYf2Y+znL8QFQ==} + + '@smithy/eventstream-serde-browser@3.0.0': + resolution: {integrity: sha512-NB7AFiPN4NxP/YCAnrvYR18z2/ZsiHiF7VtG30gshO9GbFrIb1rC8ep4NGpJSWrz6P64uhPXeo4M0UsCLnZKqw==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-serde-config-resolver@3.0.0': + resolution: {integrity: sha512-RUQG3vQ3LX7peqqHAbmayhgrF5aTilPnazinaSGF1P0+tgM3vvIRWPHmlLIz2qFqB9LqFIxditxc8O2Z6psrRw==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-serde-node@3.0.0': + resolution: {integrity: sha512-baRPdMBDMBExZXIUAoPGm/hntixjt/VFpU6+VmCyiYJYzRHRxoaI1MN+5XE+hIS8AJ2GCHLMFEIOLzq9xx1EgQ==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-serde-universal@3.0.0': + resolution: {integrity: sha512-HNFfShmotWGeAoW4ujP8meV9BZavcpmerDbPIjkJbxKbN8RsUcpRQ/2OyIxWNxXNH2GWCAxuSB7ynmIGJlQ3Dw==} + engines: {node: '>=16.0.0'} + + '@smithy/fetch-http-handler@3.0.1': + resolution: {integrity: sha512-uaH74i5BDj+rBwoQaXioKpI0SHBJFtOVwzrCpxZxphOW0ki5jhj7dXvDMYM2IJem8TpdFvS2iC08sjOblfFGFg==} + + '@smithy/hash-blob-browser@3.0.0': + resolution: {integrity: sha512-/Wbpdg+bwJvW7lxR/zpWAc1/x/YkcqguuF2bAzkJrvXriZu1vm8r+PUdE4syiVwQg7PPR2dXpi3CLBb9qRDaVQ==} + + '@smithy/hash-node@3.0.0': + resolution: {integrity: sha512-84qXstNemP3XS5jcof0el6+bDfjzuvhJPQTEfro3lgtbCtKgzPm3MgiS6ehXVPjeQ5+JS0HqmTz8f/RYfzHVxw==} + engines: {node: '>=16.0.0'} + + '@smithy/hash-stream-node@3.0.0': + resolution: {integrity: sha512-J0i7de+EgXDEGITD4fxzmMX8CyCNETTIRXlxjMiNUvvu76Xn3GJ31wQR85ynlPk2wI1lqoknAFJaD1fiNDlbIA==} + engines: {node: '>=16.0.0'} + + '@smithy/invalid-dependency@3.0.0': + resolution: {integrity: sha512-F6wBBaEFgJzj0s4KUlliIGPmqXemwP6EavgvDqYwCH40O5Xr2iMHvS8todmGVZtuJCorBkXsYLyTu4PuizVq5g==} + + '@smithy/is-array-buffer@3.0.0': + resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==} + engines: {node: '>=16.0.0'} + + '@smithy/md5-js@3.0.0': + resolution: {integrity: sha512-Tm0vrrVzjlD+6RCQTx7D3Ls58S3FUH1ZCtU1MIh/qQmaOo1H9lMN2as6CikcEwgattnA9SURSdoJJ27xMcEfMA==} + + '@smithy/middleware-content-length@3.0.0': + resolution: {integrity: sha512-3C4s4d/iGobgCtk2tnWW6+zSTOBg1PRAm2vtWZLdriwTroFbbWNSr3lcyzHdrQHnEXYCC5K52EbpfodaIUY8sg==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-endpoint@3.0.1': + resolution: {integrity: sha512-lQ/UOdGD4KM5kLZiAl0q8Qy3dPbynvAXKAdXnYlrA1OpaUwr+neSsVokDZpY6ZVb5Yx8jnus29uv6XWpM9P4SQ==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-retry@3.0.3': + resolution: {integrity: sha512-Wve1qzJb83VEU/6q+/I0cQdAkDnuzELC6IvIBwDzUEiGpKqXgX1v10FUuZGbRS6Ov/P+HHthcAoHOJZQvZNAkA==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-serde@3.0.0': + resolution: {integrity: sha512-I1vKG1foI+oPgG9r7IMY1S+xBnmAn1ISqployvqkwHoSb8VPsngHDTOgYGYBonuOKndaWRUGJZrKYYLB+Ane6w==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-stack@3.0.0': + resolution: {integrity: sha512-+H0jmyfAyHRFXm6wunskuNAqtj7yfmwFB6Fp37enytp2q047/Od9xetEaUbluyImOlGnGpaVGaVfjwawSr+i6Q==} + engines: {node: '>=16.0.0'} + + '@smithy/node-config-provider@3.1.0': + resolution: {integrity: sha512-ngfB8QItUfTFTfHMvKuc2g1W60V1urIgZHqD1JNFZC2tTWXahqf2XvKXqcBS7yZqR7GqkQQZy11y/lNOUWzq7Q==} + engines: {node: '>=16.0.0'} + + '@smithy/node-http-handler@3.0.0': + resolution: {integrity: sha512-3trD4r7NOMygwLbUJo4eodyQuypAWr7uvPnebNJ9a70dQhVn+US8j/lCnvoJS6BXfZeF7PkkkI0DemVJw+n+eQ==} + engines: {node: '>=16.0.0'} + + '@smithy/property-provider@3.1.0': + resolution: {integrity: sha512-Tj3+oVhqdZgemjCiWjFlADfhvLF4C/uKDuKo7/tlEsRQ9+3emCreR2xndj970QSRSsiCEU8hZW3/8JQu+n5w4Q==} + engines: {node: '>=16.0.0'} + + '@smithy/protocol-http@4.0.0': + resolution: {integrity: sha512-qOQZOEI2XLWRWBO9AgIYuHuqjZ2csyr8/IlgFDHDNuIgLAMRx2Bl8ck5U5D6Vh9DPdoaVpuzwWMa0xcdL4O/AQ==} + engines: {node: '>=16.0.0'} + + '@smithy/querystring-builder@3.0.0': + resolution: {integrity: sha512-bW8Fi0NzyfkE0TmQphDXr1AmBDbK01cA4C1Z7ggwMAU5RDz5AAv/KmoRwzQAS0kxXNf/D2ALTEgwK0U2c4LtRg==} + engines: {node: '>=16.0.0'} + + '@smithy/querystring-parser@3.0.0': + resolution: {integrity: sha512-UzHwthk0UEccV4dHzPySnBy34AWw3V9lIqUTxmozQ+wPDAO9csCWMfOLe7V9A2agNYy7xE+Pb0S6K/J23JSzfQ==} + engines: {node: '>=16.0.0'} + + '@smithy/service-error-classification@3.0.0': + resolution: {integrity: sha512-3BsBtOUt2Gsnc3X23ew+r2M71WwtpHfEDGhHYHSDg6q1t8FrWh15jT25DLajFV1H+PpxAJ6gqe9yYeRUsmSdFA==} + engines: {node: '>=16.0.0'} + + '@smithy/shared-ini-file-loader@3.1.0': + resolution: {integrity: sha512-dAM7wSX0NR3qTNyGVN/nwwpEDzfV9T/3AN2eABExWmda5VqZKSsjlINqomO5hjQWGv+IIkoXfs3u2vGSNz8+Rg==} + engines: {node: '>=16.0.0'} + + '@smithy/signature-v4@3.0.0': + resolution: {integrity: sha512-kXFOkNX+BQHe2qnLxpMEaCRGap9J6tUGLzc3A9jdn+nD4JdMwCKTJ+zFwQ20GkY+mAXGatyTw3HcoUlR39HwmA==} + engines: {node: '>=16.0.0'} + + '@smithy/smithy-client@3.1.1': + resolution: {integrity: sha512-tj4Ku7MpzZR8cmVuPcSbrLFVxmptWktmJMwST/uIEq4sarabEdF8CbmQdYB7uJ/X51Qq2EYwnRsoS7hdR4B7rA==} + engines: {node: '>=16.0.0'} + + '@smithy/types@3.0.0': + resolution: {integrity: sha512-VvWuQk2RKFuOr98gFhjca7fkBS+xLLURT8bUjk5XQoV0ZLm7WPwWPPY3/AwzTLuUBDeoKDCthfe1AsTUWaSEhw==} + engines: {node: '>=16.0.0'} + + '@smithy/url-parser@3.0.0': + resolution: {integrity: sha512-2XLazFgUu+YOGHtWihB3FSLAfCUajVfNBXGGYjOaVKjLAuAxx3pSBY3hBgLzIgB17haf59gOG3imKqTy8mcrjw==} + + '@smithy/util-base64@3.0.0': + resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-body-length-browser@3.0.0': + resolution: {integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==} + + '@smithy/util-body-length-node@3.0.0': + resolution: {integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-buffer-from@3.0.0': + resolution: {integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-config-provider@3.0.0': + resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-defaults-mode-browser@3.0.3': + resolution: {integrity: sha512-3DFON2bvXJAukJe+qFgPV/rorG7ZD3m4gjCXHD1V5z/tgKQp5MCTCLntrd686tX6tj8Uli3lefWXJudNg5WmCA==} + engines: {node: '>= 10.0.0'} + + '@smithy/util-defaults-mode-node@3.0.3': + resolution: {integrity: sha512-D0b8GJXecT00baoSQ3Iieu3k3mZ7GY8w1zmg8pdogYrGvWJeLcIclqk2gbkG4K0DaBGWrO6v6r20iwIFfDYrmA==} + engines: {node: '>= 10.0.0'} + + '@smithy/util-endpoints@2.0.1': + resolution: {integrity: sha512-ZRT0VCOnKlVohfoABMc8lWeQo/JEFuPWctfNRXgTHbyOVssMOLYFUNWukxxiHRGVAhV+n3c0kPW+zUqckjVPEA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-hex-encoding@3.0.0': + resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-middleware@3.0.0': + resolution: {integrity: sha512-q5ITdOnV2pXHSVDnKWrwgSNTDBAMHLptFE07ua/5Ty5WJ11bvr0vk2a7agu7qRhrCFRQlno5u3CneU5EELK+DQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-retry@3.0.0': + resolution: {integrity: sha512-nK99bvJiziGv/UOKJlDvFF45F00WgPLKVIGUfAK+mDhzVN2hb/S33uW2Tlhg5PVBoqY7tDVqL0zmu4OxAHgo9g==} + engines: {node: '>=16.0.0'} + + '@smithy/util-stream@3.0.1': + resolution: {integrity: sha512-7F7VNNhAsfMRA8I986YdOY5fE0/T1/ZjFF6OLsqkvQVNP3vZ/szYDfGCyphb7ioA09r32K/0qbSFfNFU68aSzA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-uri-escape@3.0.0': + resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==} + engines: {node: '>=16.0.0'} + + '@smithy/util-utf8@3.0.0': + resolution: {integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-waiter@3.0.0': + resolution: {integrity: sha512-+fEXJxGDLCoqRKVSmo0auGxaqbiCo+8oph+4auefYjaNxjOLKSY2MxVQfRzo65PaZv4fr+5lWg+au7vSuJJ/zw==} + engines: {node: '>=16.0.0'} + + '@sqltools/formatter@1.2.5': + resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/lodash@4.17.4': + resolution: {integrity: sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==} + + '@types/node@10.17.60': + resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} + + '@types/node@16.9.1': + resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} + + '@types/retry@0.12.1': + resolution: {integrity: sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==} + + '@types/triple-beam@1.3.5': + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@vibrant/color@3.2.1-alpha.1': + resolution: {integrity: sha512-cvm+jAPwao2NerTr3d1JttYyLhp3eD/AQBeevxF7KT6HctToWZCwr2AeTr003/wKgbjzdOV1qySnbyOeu+R+Jw==} + + '@vibrant/core@3.2.1-alpha.1': + resolution: {integrity: sha512-X9Oa9WfPEQnZ6L+5dLRlh+IlsxJkYTw9b/g3stFKoNXbVRKCeXHmH48l7jIBBOg3VcXOGUdsYBqsTwPNkIveaA==} + + '@vibrant/generator-default@3.2.1-alpha.1': + resolution: {integrity: sha512-BWnQhDaz92UhyHnpdAzKXHQecY+jvyMXtzjKYbveFxThm6+HVoLjwONlbck7oyOpFzV2OM7V11XuR85BxaHvjw==} + + '@vibrant/generator@3.2.1-alpha.1': + resolution: {integrity: sha512-luS5YvMhwMqG01YTj1dJ+cmkuIw1VCByOR6zIaCOwQqI/mcOs88JBWcA1r2TywJTOPlVpjfnDvAlyaKBKh4dMA==} + + '@vibrant/image-browser@3.2.1-alpha.1': + resolution: {integrity: sha512-6xWvQfB20sE6YtCWylgEAHuee3iD8h3aFIDbCS2yj7jIelKcYTrrp5jg2d2BhOOB6pC5JzF+QfpCrm0DmAIlgQ==} + + '@vibrant/image-node@3.2.1-alpha.1': + resolution: {integrity: sha512-/Io/Rpo4EkO6AhaXdcxUXkbOFhSFtjm0LSAM4c0AyGA5EbC8PyZqjk8b11bQAEMCaYaweFQfTdGD7oVbXe21CQ==} + + '@vibrant/image@3.2.1-alpha.1': + resolution: {integrity: sha512-4aF5k79QfyhZOqRovJpbnIjWfe3uuWhY8voqVdd4/qgu4o70/AwVlM+pYmCaJVzI45VWNWWHYA5QlYuKsXnBqQ==} + + '@vibrant/quantizer-mmcq@3.2.1-alpha.1': + resolution: {integrity: sha512-Wuk9PTZtxr8qsWTcgP6lcrrmrq36syVwxf+BUxdgQYntBcQ053SaN34lVGOJ0WPdK5vABoxbYljhceCgiILtZw==} + + '@vibrant/quantizer@3.2.1-alpha.1': + resolution: {integrity: sha512-iHnPx/+n4iLtYLm1GClSfyg2fFbMatFG0ipCyp9M6tXNIPAg+pSvUJSGBnVnH7Nl/bR8Gkkj1h0pJ4RsKcdIrQ==} + + '@vibrant/types@3.2.1-alpha.1': + resolution: {integrity: sha512-ts9u7nsrENoYI5s0MmPOeY5kCLFKvQndKVDOPFCbTA0z493uhDp8mpiQhjFYTf3kPbS04z9zbHLE2luFC7x4KQ==} + + '@vibrant/worker@3.2.1-alpha.1': + resolution: {integrity: sha512-mtSlBdHkFNr4FOnMtqtHJxy9z5AsUcZzGlpiHzvWOoaoN9lNTDPwxOBd0q4VTYWuGPrIm6Fuq5m7aRbLv7KqiQ==} + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} + agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + ansi-colors@4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} engines: {node: '>=6'} @@ -79,14 +759,32 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-base@1.1.0: + resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + app-root-path@3.1.0: + resolution: {integrity: sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==} + engines: {node: '>= 6.0.0'} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -97,23 +795,64 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + + async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} + axios@1.7.2: + resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==} + + b4a@1.6.6: + resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + bare-events@2.3.1: + resolution: {integrity: sha512-sJnSOTVESURZ61XgEleqmP255T6zTYwHPwE4r6SssIh0U9/uDvfpdoJYpVUerJJZH2fueO+CdT8ZT+OC/7aZDA==} + + bare-fs@2.3.1: + resolution: {integrity: sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==} + + bare-os@2.3.0: + resolution: {integrity: sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg==} + + bare-path@2.1.3: + resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==} + + bare-stream@2.0.1: + resolution: {integrity: sha512-ubLyoDqPnUf5o0kSFp709HC0WRZuxVuh4pbte5eY95Xvx5bdvz07c2JFmXBfqqe60q+9PJ8S4X5GRvmcNSKMxg==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + bmp-js@0.1.0: + resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==} + boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} @@ -124,6 +863,19 @@ packages: browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-equal@0.0.1: + resolution: {integrity: sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==} + engines: {node: '>=0.4.0'} + + buffer@5.6.0: + resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} @@ -158,6 +910,20 @@ packages: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} + chromium-bidi@0.5.19: + resolution: {integrity: sha512-UA6zL77b7RYCjJkZBsZ0wlvCTD+jTjllZ8f6wdO4buevXgTZYjV+XLB9CiEa2OuuTGGTLnI7eN9I60YxuALGQg==} + peerDependencies: + devtools-protocol: '*' + + cli-color@2.0.4: + resolution: {integrity: sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==} + engines: {node: '>=0.10'} + + cli-highlight@2.1.11: + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -165,18 +931,45 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + colorspace@1.1.4: + resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + concurrently@8.2.2: resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} engines: {node: ^14.13.0 || >=16.0.0} hasBin: true + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + csprng@0.1.2: resolution: {integrity: sha512-D3WAbvvgUVIqSxUfdvLeGjuotsB32bvfVPd+AaaTWMtyUeC9zgCnw5xs94no89yFLVsafvY9dMZEhTwsY/ZecA==} engines: {node: '>=0.6.0'} @@ -188,6 +981,22 @@ packages: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} + cycle@1.0.3: + resolution: {integrity: sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==} + engines: {node: '>=0.4.0'} + + d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} + + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + date-fns@2.30.0: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} @@ -195,6 +1004,9 @@ packages: date-fns@3.6.0: resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} + dayjs@1.11.11: + resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} + debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -220,6 +1032,25 @@ packages: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + denque@2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + devtools-protocol@0.0.1286932: + resolution: {integrity: sha512-wu58HMQll9voDjR4NlPyoDEw1syfzaBNHymMMZ/QOXiHRNluOnDgu9hp1yHOKYoMlxCh4lSSiugLITe6Fvu1eA==} + diff@5.0.0: resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} engines: {node: '>=0.3.1'} @@ -227,6 +1058,9 @@ packages: dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} @@ -241,9 +1075,18 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + enabled@2.0.0: + resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} + encoding-japanese@2.0.0: resolution: {integrity: sha512-++P0RhebUC8MJAwJOsT93dT+5oc5oPImp1HubZpAuCZ5kTLnhuuBhKHj2jJeO/Gj93idPBWmIuQ9QWMe5rX3pQ==} engines: {node: '>=8.10.0'} @@ -252,6 +1095,9 @@ packages: resolution: {integrity: sha512-58XySVxUgVlBikBTbQ8WdDxBDHIdXucB16LO5PBHR8t75D54wQrNo4cg+58+R1CtJfKnsVsvt9XlteRaR8xw1w==} engines: {node: '>=8.10.0'} + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -264,6 +1110,20 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + engines: {node: '>=0.10'} + + es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + + es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} + + es6-weak-map@2.0.3: + resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -272,6 +1132,31 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} @@ -280,10 +1165,28 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + exif-parser@0.1.12: + resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} + + ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-redact@3.5.0: resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} engines: {node: '>=6'} + fast-xml-parser@4.2.5: + resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} + hasBin: true + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -295,6 +1198,23 @@ packages: resolution: {integrity: sha512-kRrIg4be8VNYhycS2PY//hpBJSzZPr/DBbcy9VWelhZMW3KhyLkQR0HL0k0MNpmVoNFF4EdfMFkNAWjTP65g6w==} engines: {node: '>=0.8.0'} + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + + file-stream-rotator@0.6.1: + resolution: {integrity: sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==} + + file-type@16.5.4: + resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} + engines: {node: '>=10'} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -307,6 +1227,34 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true + fn.name@1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -318,6 +1266,12 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + generate-function@2.3.1: + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + + genson-js@0.0.8: + resolution: {integrity: sha512-4NUusDTwF+lzYh72uKV+Uvpky9iPO+YDIMpGImA5pbHfLV9HwgRCA4hYjGu78V4J4Cx2IZRTFfRERn9aUs74mw==} + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -329,17 +1283,39 @@ packages: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-uri@6.0.3: + resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} + engines: {node: '>= 14'} + + gifwrap@0.9.4: + resolution: {integrity: sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} + glob@10.4.1: + resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} + engines: {node: '>=16 || 14 >=14.18'} + hasBin: true + glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} + global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -363,6 +1339,9 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + html-to-text@9.0.5: resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} engines: {node: '>=14'} @@ -370,9 +1349,20 @@ packages: htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + http-parser-js@0.5.8: resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.4: + resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} + engines: {node: '>= 14'} + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -380,6 +1370,9 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + image-q@4.0.0: + resolution: {integrity: sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==} + imapflow@1.0.162: resolution: {integrity: sha512-pfx45n2gEIC9MeXAadcfehu5MboUzXqgQiZviKbnIxI6a/QkonOSAMXvBBkWbXQ5FXc9M5IpziJs6TP7jikBrg==} @@ -394,6 +1387,9 @@ packages: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} engines: {node: '>= 12'} + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -406,6 +1402,9 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-function@1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -418,10 +1417,30 @@ packages: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} + is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + + is-property@1.0.2: + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.1.2: + resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==} + engines: {node: '>=14'} + + jpeg-js@0.4.4: + resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -429,9 +1448,23 @@ packages: jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + json-schema-to-typescript@14.0.5: + resolution: {integrity: sha512-JmHsbgY0KKo8Pw0HRXpGzAlZYxlu+M5kFhSzhNkUSrVJ4sCXPdAGIdSpzva5ev2/Kybz10S6AfnNdF4o3Pzt3A==} + engines: {node: '>=16.0.0'} + hasBin: true + + jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + just-performance@4.2.0: resolution: {integrity: sha512-4TikKSf+Gb+Et5SnA4ppyrxLSf9qWFq+SqfdDdrgHE1KLwSch/Zi1AQB0TrE4ppYjZdUrHnwdx+6dyx0cx/HyA==} + kuler@2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + leac@0.6.0: resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} @@ -459,6 +1492,9 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + load-bmfont@1.4.1: + resolution: {integrity: sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -470,30 +1506,139 @@ packages: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} + logform@2.6.0: + resolution: {integrity: sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==} + engines: {node: '>= 12.0.0'} + + long@5.2.3: + resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + loupe@3.1.1: resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} + lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} + engines: {node: 14 || >=16.14} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + lru-cache@8.0.5: + resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==} + engines: {node: '>=16.14'} + + lru-queue@0.1.0: + resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} + mailparser@3.7.1: resolution: {integrity: sha512-RCnBhy5q8XtB3mXzxcAfT1huNqN93HTYYyL6XawlIKycfxM/rXPg9tXoZ7D46+SgCS1zxKzw+BayDQSvncSTTw==} mailsplit@5.4.0: resolution: {integrity: sha512-wnYxX5D5qymGIPYLwnp6h8n1+6P6vz/MJn5AzGjZ8pwICWssL+CCQjWBIToOVHASmATot4ktvlLo6CyLfOXWYA==} + memoizee@0.4.17: + resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==} + engines: {node: '>=0.12'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + min-document@2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + minimatch@5.0.1: resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} engines: {node: '>=10'} + minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@2.1.6: + resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==} + engines: {node: '>=10'} + hasBin: true + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + mocha@10.4.0: resolution: {integrity: sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==} engines: {node: '>= 14.0.0'} hasBin: true + moment-timezone@0.5.45: + resolution: {integrity: sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==} + + moment@2.30.1: + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mysql2@3.10.0: + resolution: {integrity: sha512-qx0mfWYt1DpTPkw8mAcHW/OwqqyNqBLBHvY5IjN8+icIYTjt6znrgYJ+gxqNNRpVknb5Wc/gcCM4XjbCR0j5tw==} + engines: {node: '>= 8.0'} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + named-placeholders@1.1.3: + resolution: {integrity: sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==} + engines: {node: '>=12.0.0'} + + netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + + next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + node-vibrant@3.2.1-alpha.1: + resolution: {integrity: sha512-EQergCp7fvbvUCE0VMCBnvaAV0lGWSP8SXLmuWQIBzQK5M5pIwcd9fIOXuzFkJx/8hUiiiLvAzzGDS/bIy2ikA==} + nodemailer@6.9.13: resolution: {integrity: sha512-7o38Yogx6krdoBf3jCAqnIN4oSQFx+fMa0I7dK1D+me9kBxx12D+/33wSb+fhOCtIxvYJ+4x4IMEhmhCKfAiOA==} engines: {node: '>=6.0.0'} @@ -505,9 +1650,20 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + omggif@1.0.10: + resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} + on-exit-leak-free@2.1.2: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} @@ -515,6 +1671,12 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + one-time@1.0.0: + resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + + otplib@12.0.1: + resolution: {integrity: sha512-xDGvUOQjop7RDgxTQ+o4pOol0/3xSZzawTiPKRrHnQWAy0WjhNs/5HdIDJCrqC4MBynmjXgULc6YfioaxZeFgg==} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -523,9 +1685,45 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + p-retry@5.1.2: + resolution: {integrity: sha512-couX95waDu98NfNZV+i/iLt+fdVxmI7CbrrdC2uDWfPdUAApyxT4wmDlyOtR5KtTDmkDO0zDScDjDou9YHhd9g==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + pac-proxy-agent@7.0.1: + resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==} + engines: {node: '>= 14'} + + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + parse-bmfont-ascii@1.0.6: + resolution: {integrity: sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==} + + parse-bmfont-binary@1.0.6: + resolution: {integrity: sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==} + + parse-bmfont-xml@1.1.6: + resolution: {integrity: sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==} + + parse-headers@2.0.5: + resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} + + parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + parse5-htmlparser2-tree-adapter@7.0.0: resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} + parse5@5.1.1: + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} @@ -536,6 +1734,14 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + pathval@2.0.0: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} @@ -543,6 +1749,17 @@ packages: peberminta@0.9.0: resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} + peek-readable@4.1.0: + resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} + engines: {node: '>=8'} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + phin@2.9.3: + resolution: {integrity: sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -557,6 +1774,19 @@ packages: resolution: {integrity: sha512-uI1ThkzTShNSwvsUM6b4ND8ANzWURk9zTELMztFkmnCQeR/4wkomJ+echHee5GMWGovoSfjwdeu80DsFIt7mbA==} hasBin: true + pixelmatch@4.0.2: + resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} + hasBin: true + + pngjs@3.4.0: + resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} + engines: {node: '>=4.0.0'} + + prettier@3.3.0: + resolution: {integrity: sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==} + engines: {node: '>=14'} + hasBin: true + process-warning@3.0.0: resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} @@ -564,17 +1794,38 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + proxy-agent@6.4.0: + resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} + engines: {node: '>= 14'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} + punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + puppeteer-core@22.10.0: + resolution: {integrity: sha512-I54J4Vy4I07UHsgB1QSmuFoF7KNQjJWcvFBPhtY+ezMdBfwgGDr8dzYrJa11aPgP9kxIUHjhktcMmmfJkOAtTw==} + engines: {node: '>=18'} + qs@6.12.1: resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} engines: {node: '>=0.6'} @@ -582,16 +1833,27 @@ packages: querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + queue-tick@1.0.1: + resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + readable-stream@4.5.2: resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + readable-web-to-node-stream@3.0.2: + resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} + engines: {node: '>=8'} + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -600,6 +1862,12 @@ packages: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} @@ -610,6 +1878,10 @@ packages: requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -627,9 +1899,25 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + selderee@0.11.0: resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} + semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + + semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + engines: {node: '>=10'} + hasBin: true + + seq-queue@0.0.5: + resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} + sequin@0.1.1: resolution: {integrity: sha512-hJWMZRwP75ocoBM+1/YaCsvS0j5MTPeBHJkS2/wruehl9xwtX30HlDF1Gt6UZ8HHHY8SJa2/IL+jo+JJCd59rA==} engines: {node: '>=0.4.0'} @@ -641,6 +1929,22 @@ packages: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} + sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + + sharp@0.33.4: + resolution: {integrity: sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==} + engines: {libvips: '>=8.15.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + shell-quote@1.8.1: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} @@ -648,6 +1952,13 @@ packages: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + slugify@1.6.6: resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} engines: {node: '>=8.0.0'} @@ -656,6 +1967,10 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + socks-proxy-agent@8.0.3: + resolution: {integrity: sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==} + engines: {node: '>= 14'} + socks@2.8.3: resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} @@ -663,6 +1978,10 @@ packages: sonic-boom@3.8.1: resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + spawn-command@0.0.2: resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} @@ -673,10 +1992,27 @@ packages: sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + sqlstring@2.3.3: + resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} + engines: {node: '>= 0.6'} + + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + + stream-browserify@3.0.0: + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + + streamx@2.18.0: + resolution: {integrity: sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -684,10 +2020,21 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + + strtok3@6.3.0: + resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} + engines: {node: '>=10'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -696,9 +2043,44 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} + tar-fs@3.0.5: + resolution: {integrity: sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + text-decoder@1.1.0: + resolution: {integrity: sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==} + + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + thirty-two@1.0.2: + resolution: {integrity: sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==} + engines: {node: '>=0.2.6'} + thread-stream@2.7.0: resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==} + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + timers-ext@0.1.7: + resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} + + timm@1.7.1: + resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} + + tinycolor2@1.6.0: + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + tlds@1.252.0: resolution: {integrity: sha512-GA16+8HXvqtfEnw/DTcwB0UU354QE1n3+wh08oFjr6Znl7ZLAeUgYzCcK+/CCrOyE0vnHR8/pu3XXG3vDijXpQ==} hasBin: true @@ -707,6 +2089,10 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + token-types@4.2.1: + resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} + engines: {node: '>=10'} + tough-cookie@4.1.4: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} @@ -715,22 +2101,125 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true + triple-beam@1.4.1: + resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} + engines: {node: '>= 14.0.0'} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + twitter-d@0.6.0: + resolution: {integrity: sha512-ql/rKDYwQ3qkSYAvOAQ8KzAUx0HxsaM/JpcM6AZ8RzLoHSdNy5f0W6KHQ8xKDO7sstaFwqq1qd97GUEQHR/IZg==} + + type@2.7.3: + resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} + + typeorm-naming-strategies@4.1.0: + resolution: {integrity: sha512-vPekJXzZOTZrdDvTl1YoM+w+sUIfQHG4kZTpbFYoTsufyv9NIBRe4Q+PdzhEAFA2std3D9LZHEb1EjE9zhRpiQ==} + peerDependencies: + typeorm: ^0.2.0 || ^0.3.0 + + typeorm@0.3.20: + resolution: {integrity: sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q==} + engines: {node: '>=16.13.0'} + hasBin: true + peerDependencies: + '@google-cloud/spanner': ^5.18.0 + '@sap/hana-client': ^2.12.25 + better-sqlite3: ^7.1.2 || ^8.0.0 || ^9.0.0 + hdb-pool: ^0.1.6 + ioredis: ^5.0.4 + mongodb: ^5.8.0 + mssql: ^9.1.1 || ^10.0.1 + mysql2: ^2.2.5 || ^3.0.1 + oracledb: ^6.3.0 + pg: ^8.5.1 + pg-native: ^3.0.0 + pg-query-stream: ^4.0.0 + redis: ^3.1.1 || ^4.0.0 + sql.js: ^1.4.0 + sqlite3: ^5.0.3 + ts-node: ^10.7.0 + typeorm-aurora-data-api-driver: ^2.0.0 + peerDependenciesMeta: + '@google-cloud/spanner': + optional: true + '@sap/hana-client': + optional: true + better-sqlite3: + optional: true + hdb-pool: + optional: true + ioredis: + optional: true + mongodb: + optional: true + mssql: + optional: true + mysql2: + optional: true + oracledb: + optional: true + pg: + optional: true + pg-native: + optional: true + pg-query-stream: + optional: true + redis: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + ts-node: + optional: true + typeorm-aurora-data-api-driver: + optional: true + uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + url@0.11.3: + resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} + + urlpattern-polyfill@10.0.0: + resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} + + utif@2.0.1: + resolution: {integrity: sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + websocket-driver@0.7.4: resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} engines: {node: '>=0.8.0'} @@ -739,6 +2228,25 @@ packages: resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + winston-daily-rotate-file@5.0.0: + resolution: {integrity: sha512-JDjiXXkM5qvwY06733vf09I2wnMXpZEhxEVOSPenZMii+g7pcDcTBt2MRugnoi8BwVSuCT2jfRXBUy+n1Zz/Yw==} + engines: {node: '>=8'} + peerDependencies: + winston: ^3 + + winston-transport@4.7.0: + resolution: {integrity: sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==} + engines: {node: '>= 12.0.0'} + + winston@3.13.0: + resolution: {integrity: sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==} + engines: {node: '>= 12.0.0'} + workerpool@6.2.1: resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} @@ -746,17 +2254,54 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xhr@2.6.0: + resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + + xml-parse-from-string@1.0.1: + resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==} + + xml2js@0.5.0: + resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} + engines: {node: '>=4.0.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + xpath@0.0.34: resolution: {integrity: sha512-FxF6+rkr1rNSQrhUNYrAFJpRXNzlDoMxeXN5qI84939ylEv3qqPFKa85Oxr6tDaJKqwW6KKyo2v26TSv3k6LeA==} engines: {node: '>=0.6.0'} + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yargs-parser@20.2.4: resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} engines: {node: '>=10'} @@ -777,54 +2322,1320 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + snapshots: + '@apidevtools/json-schema-ref-parser@11.6.3': + dependencies: + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + js-yaml: 4.1.0 + + '@aws-crypto/crc32@3.0.0': + dependencies: + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.577.0 + tslib: 1.14.1 + + '@aws-crypto/crc32c@3.0.0': + dependencies: + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.577.0 + tslib: 1.14.1 + + '@aws-crypto/ie11-detection@3.0.0': + dependencies: + tslib: 1.14.1 + + '@aws-crypto/sha1-browser@3.0.0': + dependencies: + '@aws-crypto/ie11-detection': 3.0.0 + '@aws-crypto/supports-web-crypto': 3.0.0 + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-locate-window': 3.568.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + + '@aws-crypto/sha256-browser@3.0.0': + dependencies: + '@aws-crypto/ie11-detection': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-crypto/supports-web-crypto': 3.0.0 + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-locate-window': 3.568.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + + '@aws-crypto/sha256-js@3.0.0': + dependencies: + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.577.0 + tslib: 1.14.1 + + '@aws-crypto/supports-web-crypto@3.0.0': + dependencies: + tslib: 1.14.1 + + '@aws-crypto/util@3.0.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + + '@aws-sdk/client-s3@3.588.0': + dependencies: + '@aws-crypto/sha1-browser': 3.0.0 + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0) + '@aws-sdk/client-sts': 3.588.0 + '@aws-sdk/core': 3.588.0 + '@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0) + '@aws-sdk/middleware-bucket-endpoint': 3.587.0 + '@aws-sdk/middleware-expect-continue': 3.577.0 + '@aws-sdk/middleware-flexible-checksums': 3.587.0 + '@aws-sdk/middleware-host-header': 3.577.0 + '@aws-sdk/middleware-location-constraint': 3.577.0 + '@aws-sdk/middleware-logger': 3.577.0 + '@aws-sdk/middleware-recursion-detection': 3.577.0 + '@aws-sdk/middleware-sdk-s3': 3.587.0 + '@aws-sdk/middleware-signing': 3.587.0 + '@aws-sdk/middleware-ssec': 3.577.0 + '@aws-sdk/middleware-user-agent': 3.587.0 + '@aws-sdk/region-config-resolver': 3.587.0 + '@aws-sdk/signature-v4-multi-region': 3.587.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.587.0 + '@aws-sdk/util-user-agent-browser': 3.577.0 + '@aws-sdk/util-user-agent-node': 3.587.0 + '@aws-sdk/xml-builder': 3.575.0 + '@smithy/config-resolver': 3.0.1 + '@smithy/core': 2.1.1 + '@smithy/eventstream-serde-browser': 3.0.0 + '@smithy/eventstream-serde-config-resolver': 3.0.0 + '@smithy/eventstream-serde-node': 3.0.0 + '@smithy/fetch-http-handler': 3.0.1 + '@smithy/hash-blob-browser': 3.0.0 + '@smithy/hash-node': 3.0.0 + '@smithy/hash-stream-node': 3.0.0 + '@smithy/invalid-dependency': 3.0.0 + '@smithy/md5-js': 3.0.0 + '@smithy/middleware-content-length': 3.0.0 + '@smithy/middleware-endpoint': 3.0.1 + '@smithy/middleware-retry': 3.0.3 + '@smithy/middleware-serde': 3.0.0 + '@smithy/middleware-stack': 3.0.0 + '@smithy/node-config-provider': 3.1.0 + '@smithy/node-http-handler': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/smithy-client': 3.1.1 + '@smithy/types': 3.0.0 + '@smithy/url-parser': 3.0.0 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.3 + '@smithy/util-defaults-mode-node': 3.0.3 + '@smithy/util-endpoints': 2.0.1 + '@smithy/util-retry': 3.0.0 + '@smithy/util-stream': 3.0.1 + '@smithy/util-utf8': 3.0.0 + '@smithy/util-waiter': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0)': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sts': 3.588.0 + '@aws-sdk/core': 3.588.0 + '@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0) + '@aws-sdk/middleware-host-header': 3.577.0 + '@aws-sdk/middleware-logger': 3.577.0 + '@aws-sdk/middleware-recursion-detection': 3.577.0 + '@aws-sdk/middleware-user-agent': 3.587.0 + '@aws-sdk/region-config-resolver': 3.587.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.587.0 + '@aws-sdk/util-user-agent-browser': 3.577.0 + '@aws-sdk/util-user-agent-node': 3.587.0 + '@smithy/config-resolver': 3.0.1 + '@smithy/core': 2.1.1 + '@smithy/fetch-http-handler': 3.0.1 + '@smithy/hash-node': 3.0.0 + '@smithy/invalid-dependency': 3.0.0 + '@smithy/middleware-content-length': 3.0.0 + '@smithy/middleware-endpoint': 3.0.1 + '@smithy/middleware-retry': 3.0.3 + '@smithy/middleware-serde': 3.0.0 + '@smithy/middleware-stack': 3.0.0 + '@smithy/node-config-provider': 3.1.0 + '@smithy/node-http-handler': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/smithy-client': 3.1.1 + '@smithy/types': 3.0.0 + '@smithy/url-parser': 3.0.0 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.3 + '@smithy/util-defaults-mode-node': 3.0.3 + '@smithy/util-endpoints': 2.0.1 + '@smithy/util-middleware': 3.0.0 + '@smithy/util-retry': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - aws-crt + + '@aws-sdk/client-sso@3.588.0': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/core': 3.588.0 + '@aws-sdk/middleware-host-header': 3.577.0 + '@aws-sdk/middleware-logger': 3.577.0 + '@aws-sdk/middleware-recursion-detection': 3.577.0 + '@aws-sdk/middleware-user-agent': 3.587.0 + '@aws-sdk/region-config-resolver': 3.587.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.587.0 + '@aws-sdk/util-user-agent-browser': 3.577.0 + '@aws-sdk/util-user-agent-node': 3.587.0 + '@smithy/config-resolver': 3.0.1 + '@smithy/core': 2.1.1 + '@smithy/fetch-http-handler': 3.0.1 + '@smithy/hash-node': 3.0.0 + '@smithy/invalid-dependency': 3.0.0 + '@smithy/middleware-content-length': 3.0.0 + '@smithy/middleware-endpoint': 3.0.1 + '@smithy/middleware-retry': 3.0.3 + '@smithy/middleware-serde': 3.0.0 + '@smithy/middleware-stack': 3.0.0 + '@smithy/node-config-provider': 3.1.0 + '@smithy/node-http-handler': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/smithy-client': 3.1.1 + '@smithy/types': 3.0.0 + '@smithy/url-parser': 3.0.0 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.3 + '@smithy/util-defaults-mode-node': 3.0.3 + '@smithy/util-endpoints': 2.0.1 + '@smithy/util-middleware': 3.0.0 + '@smithy/util-retry': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sts@3.588.0': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0) + '@aws-sdk/core': 3.588.0 + '@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0) + '@aws-sdk/middleware-host-header': 3.577.0 + '@aws-sdk/middleware-logger': 3.577.0 + '@aws-sdk/middleware-recursion-detection': 3.577.0 + '@aws-sdk/middleware-user-agent': 3.587.0 + '@aws-sdk/region-config-resolver': 3.587.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.587.0 + '@aws-sdk/util-user-agent-browser': 3.577.0 + '@aws-sdk/util-user-agent-node': 3.587.0 + '@smithy/config-resolver': 3.0.1 + '@smithy/core': 2.1.1 + '@smithy/fetch-http-handler': 3.0.1 + '@smithy/hash-node': 3.0.0 + '@smithy/invalid-dependency': 3.0.0 + '@smithy/middleware-content-length': 3.0.0 + '@smithy/middleware-endpoint': 3.0.1 + '@smithy/middleware-retry': 3.0.3 + '@smithy/middleware-serde': 3.0.0 + '@smithy/middleware-stack': 3.0.0 + '@smithy/node-config-provider': 3.1.0 + '@smithy/node-http-handler': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/smithy-client': 3.1.1 + '@smithy/types': 3.0.0 + '@smithy/url-parser': 3.0.0 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.3 + '@smithy/util-defaults-mode-node': 3.0.3 + '@smithy/util-endpoints': 2.0.1 + '@smithy/util-middleware': 3.0.0 + '@smithy/util-retry': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.588.0': + dependencies: + '@smithy/core': 2.1.1 + '@smithy/protocol-http': 4.0.0 + '@smithy/signature-v4': 3.0.0 + '@smithy/smithy-client': 3.1.1 + '@smithy/types': 3.0.0 + fast-xml-parser: 4.2.5 + tslib: 2.6.2 + + '@aws-sdk/credential-provider-env@3.587.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.1.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/credential-provider-http@3.587.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/fetch-http-handler': 3.0.1 + '@smithy/node-http-handler': 3.0.0 + '@smithy/property-provider': 3.1.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/smithy-client': 3.1.1 + '@smithy/types': 3.0.0 + '@smithy/util-stream': 3.0.1 + tslib: 2.6.2 + + '@aws-sdk/credential-provider-ini@3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0)': + dependencies: + '@aws-sdk/client-sts': 3.588.0 + '@aws-sdk/credential-provider-env': 3.587.0 + '@aws-sdk/credential-provider-http': 3.587.0 + '@aws-sdk/credential-provider-process': 3.587.0 + '@aws-sdk/credential-provider-sso': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0)) + '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.588.0) + '@aws-sdk/types': 3.577.0 + '@smithy/credential-provider-imds': 3.1.0 + '@smithy/property-provider': 3.1.0 + '@smithy/shared-ini-file-loader': 3.1.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-node@3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0)': + dependencies: + '@aws-sdk/credential-provider-env': 3.587.0 + '@aws-sdk/credential-provider-http': 3.587.0 + '@aws-sdk/credential-provider-ini': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0) + '@aws-sdk/credential-provider-process': 3.587.0 + '@aws-sdk/credential-provider-sso': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0)) + '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.588.0) + '@aws-sdk/types': 3.577.0 + '@smithy/credential-provider-imds': 3.1.0 + '@smithy/property-provider': 3.1.0 + '@smithy/shared-ini-file-loader': 3.1.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + + '@aws-sdk/credential-provider-process@3.587.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.1.0 + '@smithy/shared-ini-file-loader': 3.1.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/credential-provider-sso@3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))': + dependencies: + '@aws-sdk/client-sso': 3.588.0 + '@aws-sdk/token-providers': 3.587.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0)) + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.1.0 + '@smithy/shared-ini-file-loader': 3.1.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.587.0(@aws-sdk/client-sts@3.588.0)': + dependencies: + '@aws-sdk/client-sts': 3.588.0 + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.1.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/lib-storage@3.588.0(@aws-sdk/client-s3@3.588.0)': + dependencies: + '@aws-sdk/client-s3': 3.588.0 + '@smithy/abort-controller': 3.0.0 + '@smithy/middleware-endpoint': 3.0.1 + '@smithy/smithy-client': 3.1.1 + buffer: 5.6.0 + events: 3.3.0 + stream-browserify: 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-bucket-endpoint@3.587.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-arn-parser': 3.568.0 + '@smithy/node-config-provider': 3.1.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/types': 3.0.0 + '@smithy/util-config-provider': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-expect-continue@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-flexible-checksums@3.587.0': + dependencies: + '@aws-crypto/crc32': 3.0.0 + '@aws-crypto/crc32c': 3.0.0 + '@aws-sdk/types': 3.577.0 + '@smithy/is-array-buffer': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/types': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-host-header@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-location-constraint@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-logger@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-recursion-detection@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-sdk-s3@3.587.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-arn-parser': 3.568.0 + '@smithy/node-config-provider': 3.1.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/signature-v4': 3.0.0 + '@smithy/smithy-client': 3.1.1 + '@smithy/types': 3.0.0 + '@smithy/util-config-provider': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-signing@3.587.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.1.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/signature-v4': 3.0.0 + '@smithy/types': 3.0.0 + '@smithy/util-middleware': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-ssec@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-user-agent@3.587.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.587.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/region-config-resolver@3.587.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/node-config-provider': 3.1.0 + '@smithy/types': 3.0.0 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/s3-request-presigner@3.588.0': + dependencies: + '@aws-sdk/signature-v4-multi-region': 3.587.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-format-url': 3.577.0 + '@smithy/middleware-endpoint': 3.0.1 + '@smithy/protocol-http': 4.0.0 + '@smithy/smithy-client': 3.1.1 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/signature-v4-multi-region@3.587.0': + dependencies: + '@aws-sdk/middleware-sdk-s3': 3.587.0 + '@aws-sdk/types': 3.577.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/signature-v4': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/token-providers@3.587.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))': + dependencies: + '@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0) + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.1.0 + '@smithy/shared-ini-file-loader': 3.1.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/types@3.577.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/util-arn-parser@3.568.0': + dependencies: + tslib: 2.6.2 + + '@aws-sdk/util-endpoints@3.587.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/types': 3.0.0 + '@smithy/util-endpoints': 2.0.1 + tslib: 2.6.2 + + '@aws-sdk/util-format-url@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/querystring-builder': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/util-locate-window@3.568.0': + dependencies: + tslib: 2.6.2 + + '@aws-sdk/util-user-agent-browser@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/types': 3.0.0 + bowser: 2.11.0 + tslib: 2.6.2 + + '@aws-sdk/util-user-agent-node@3.587.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/node-config-provider': 3.1.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/util-utf8-browser@3.259.0': + dependencies: + tslib: 2.6.2 + + '@aws-sdk/xml-builder@3.575.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + '@babel/runtime@7.24.5': dependencies: regenerator-runtime: 0.14.1 + '@book000/node-utils@1.13.91': + dependencies: + axios: 1.7.2 + cycle: 1.0.3 + form-data: 4.0.0 + jsonc-parser: 3.2.1 + moment-timezone: 0.5.45 + winston: 3.13.0 + winston-daily-rotate-file: 5.0.0(winston@3.13.0) + transitivePeerDependencies: + - debug + + '@book000/twitterts@0.62.50': + dependencies: + '@book000/node-utils': 1.13.91 + genson-js: 0.0.8 + json-schema-to-typescript: 14.0.5 + mysql2: 3.10.0 + otplib: 12.0.1 + puppeteer-core: 22.10.0 + twitter-d: 0.6.0 + typeorm: 0.3.20(mysql2@3.10.0) + typeorm-naming-strategies: 4.1.0(typeorm@0.3.20(mysql2@3.10.0)) + transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 + - bufferutil + - debug + - hdb-pool + - ioredis + - mongodb + - mssql + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - sqlite3 + - supports-color + - ts-node + - typeorm-aurora-data-api-driver + - utf-8-validate + + '@colors/colors@1.6.0': {} + + '@dabh/diagnostics@2.0.3': + dependencies: + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 + + '@emnapi/runtime@1.2.0': + dependencies: + tslib: 2.6.2 + optional: true + + '@img/sharp-darwin-arm64@0.33.4': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.2 + optional: true + + '@img/sharp-darwin-x64@0.33.4': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.2 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.2': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.2': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.2': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.2': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.2': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.2': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.2': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.2': + optional: true + + '@img/sharp-linux-arm64@0.33.4': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.2 + optional: true + + '@img/sharp-linux-arm@0.33.4': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.2 + optional: true + + '@img/sharp-linux-s390x@0.33.4': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.2 + optional: true + + '@img/sharp-linux-x64@0.33.4': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.2 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.4': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.2 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.4': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.2 + optional: true + + '@img/sharp-wasm32@0.33.4': + dependencies: + '@emnapi/runtime': 1.2.0 + optional: true + + '@img/sharp-win32-ia32@0.33.4': + optional: true + + '@img/sharp-win32-x64@0.33.4': + optional: true + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jimp/bmp@0.16.13(@jimp/custom@0.16.13)': + dependencies: + '@babel/runtime': 7.24.5 + '@jimp/custom': 0.16.13 + '@jimp/utils': 0.16.13 + bmp-js: 0.1.0 + + '@jimp/core@0.16.13': + dependencies: + '@babel/runtime': 7.24.5 + '@jimp/utils': 0.16.13 + any-base: 1.1.0 + buffer: 5.7.1 + exif-parser: 0.1.12 + file-type: 16.5.4 + load-bmfont: 1.4.1 + mkdirp: 0.5.6 + phin: 2.9.3 + pixelmatch: 4.0.2 + tinycolor2: 1.6.0 + + '@jimp/custom@0.16.13': + dependencies: + '@babel/runtime': 7.24.5 + '@jimp/core': 0.16.13 + + '@jimp/gif@0.16.13(@jimp/custom@0.16.13)': + dependencies: + '@babel/runtime': 7.24.5 + '@jimp/custom': 0.16.13 + '@jimp/utils': 0.16.13 + gifwrap: 0.9.4 + omggif: 1.0.10 + + '@jimp/jpeg@0.16.13(@jimp/custom@0.16.13)': + dependencies: + '@babel/runtime': 7.24.5 + '@jimp/custom': 0.16.13 + '@jimp/utils': 0.16.13 + jpeg-js: 0.4.4 + + '@jimp/plugin-resize@0.16.13(@jimp/custom@0.16.13)': + dependencies: + '@babel/runtime': 7.24.5 + '@jimp/custom': 0.16.13 + '@jimp/utils': 0.16.13 + + '@jimp/png@0.16.13(@jimp/custom@0.16.13)': + dependencies: + '@babel/runtime': 7.24.5 + '@jimp/custom': 0.16.13 + '@jimp/utils': 0.16.13 + pngjs: 3.4.0 + + '@jimp/tiff@0.16.13(@jimp/custom@0.16.13)': + dependencies: + '@babel/runtime': 7.24.5 + '@jimp/custom': 0.16.13 + utif: 2.0.1 + + '@jimp/types@0.16.13(@jimp/custom@0.16.13)': + dependencies: + '@babel/runtime': 7.24.5 + '@jimp/bmp': 0.16.13(@jimp/custom@0.16.13) + '@jimp/custom': 0.16.13 + '@jimp/gif': 0.16.13(@jimp/custom@0.16.13) + '@jimp/jpeg': 0.16.13(@jimp/custom@0.16.13) + '@jimp/png': 0.16.13(@jimp/custom@0.16.13) + '@jimp/tiff': 0.16.13(@jimp/custom@0.16.13) + timm: 1.7.1 + + '@jimp/utils@0.16.13': + dependencies: + '@babel/runtime': 7.24.5 + regenerator-runtime: 0.13.11 + + '@jsdevtools/ono@7.1.3': {} + + '@noble/hashes@1.4.0': {} + + '@otplib/core@12.0.1': {} + + '@otplib/plugin-crypto@12.0.1': + dependencies: + '@otplib/core': 12.0.1 + + '@otplib/plugin-thirty-two@12.0.1': + dependencies: + '@otplib/core': 12.0.1 + thirty-two: 1.0.2 + + '@otplib/preset-default@12.0.1': + dependencies: + '@otplib/core': 12.0.1 + '@otplib/plugin-crypto': 12.0.1 + '@otplib/plugin-thirty-two': 12.0.1 + + '@otplib/preset-v11@12.0.1': + dependencies: + '@otplib/core': 12.0.1 + '@otplib/plugin-crypto': 12.0.1 + '@otplib/plugin-thirty-two': 12.0.1 + + '@paralleldrive/cuid2@2.2.2': + dependencies: + '@noble/hashes': 1.4.0 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@puppeteer/browsers@2.2.3': + dependencies: + debug: 4.3.4(supports-color@8.1.1) + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.4.0 + semver: 7.6.0 + tar-fs: 3.0.5 + unbzip2-stream: 1.4.3 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + '@selderee/plugin-htmlparser2@0.11.0': dependencies: domhandler: 5.0.3 selderee: 0.11.0 + '@smithy/abort-controller@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/chunked-blob-reader-native@3.0.0': + dependencies: + '@smithy/util-base64': 3.0.0 + tslib: 2.6.2 + + '@smithy/chunked-blob-reader@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/config-resolver@3.0.1': + dependencies: + '@smithy/node-config-provider': 3.1.0 + '@smithy/types': 3.0.0 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.0 + tslib: 2.6.2 + + '@smithy/core@2.1.1': + dependencies: + '@smithy/middleware-endpoint': 3.0.1 + '@smithy/middleware-retry': 3.0.3 + '@smithy/middleware-serde': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/smithy-client': 3.1.1 + '@smithy/types': 3.0.0 + '@smithy/util-middleware': 3.0.0 + tslib: 2.6.2 + + '@smithy/credential-provider-imds@3.1.0': + dependencies: + '@smithy/node-config-provider': 3.1.0 + '@smithy/property-provider': 3.1.0 + '@smithy/types': 3.0.0 + '@smithy/url-parser': 3.0.0 + tslib: 2.6.2 + + '@smithy/eventstream-codec@3.0.0': + dependencies: + '@aws-crypto/crc32': 3.0.0 + '@smithy/types': 3.0.0 + '@smithy/util-hex-encoding': 3.0.0 + tslib: 2.6.2 + + '@smithy/eventstream-serde-browser@3.0.0': + dependencies: + '@smithy/eventstream-serde-universal': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/eventstream-serde-config-resolver@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/eventstream-serde-node@3.0.0': + dependencies: + '@smithy/eventstream-serde-universal': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/eventstream-serde-universal@3.0.0': + dependencies: + '@smithy/eventstream-codec': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/fetch-http-handler@3.0.1': + dependencies: + '@smithy/protocol-http': 4.0.0 + '@smithy/querystring-builder': 3.0.0 + '@smithy/types': 3.0.0 + '@smithy/util-base64': 3.0.0 + tslib: 2.6.2 + + '@smithy/hash-blob-browser@3.0.0': + dependencies: + '@smithy/chunked-blob-reader': 3.0.0 + '@smithy/chunked-blob-reader-native': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/hash-node@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + + '@smithy/hash-stream-node@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + + '@smithy/invalid-dependency@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/is-array-buffer@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/md5-js@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + + '@smithy/middleware-content-length@3.0.0': + dependencies: + '@smithy/protocol-http': 4.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/middleware-endpoint@3.0.1': + dependencies: + '@smithy/middleware-serde': 3.0.0 + '@smithy/node-config-provider': 3.1.0 + '@smithy/shared-ini-file-loader': 3.1.0 + '@smithy/types': 3.0.0 + '@smithy/url-parser': 3.0.0 + '@smithy/util-middleware': 3.0.0 + tslib: 2.6.2 + + '@smithy/middleware-retry@3.0.3': + dependencies: + '@smithy/node-config-provider': 3.1.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/service-error-classification': 3.0.0 + '@smithy/smithy-client': 3.1.1 + '@smithy/types': 3.0.0 + '@smithy/util-middleware': 3.0.0 + '@smithy/util-retry': 3.0.0 + tslib: 2.6.2 + uuid: 9.0.1 + + '@smithy/middleware-serde@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/middleware-stack@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/node-config-provider@3.1.0': + dependencies: + '@smithy/property-provider': 3.1.0 + '@smithy/shared-ini-file-loader': 3.1.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/node-http-handler@3.0.0': + dependencies: + '@smithy/abort-controller': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/querystring-builder': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/property-provider@3.1.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/protocol-http@4.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/querystring-builder@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + '@smithy/util-uri-escape': 3.0.0 + tslib: 2.6.2 + + '@smithy/querystring-parser@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/service-error-classification@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + + '@smithy/shared-ini-file-loader@3.1.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/signature-v4@3.0.0': + dependencies: + '@smithy/is-array-buffer': 3.0.0 + '@smithy/types': 3.0.0 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-middleware': 3.0.0 + '@smithy/util-uri-escape': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + + '@smithy/smithy-client@3.1.1': + dependencies: + '@smithy/middleware-endpoint': 3.0.1 + '@smithy/middleware-stack': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/types': 3.0.0 + '@smithy/util-stream': 3.0.1 + tslib: 2.6.2 + + '@smithy/types@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/url-parser@3.0.0': + dependencies: + '@smithy/querystring-parser': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-base64@3.0.0': + dependencies: + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-body-length-browser@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/util-body-length-node@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/util-buffer-from@3.0.0': + dependencies: + '@smithy/is-array-buffer': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-config-provider@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/util-defaults-mode-browser@3.0.3': + dependencies: + '@smithy/property-provider': 3.1.0 + '@smithy/smithy-client': 3.1.1 + '@smithy/types': 3.0.0 + bowser: 2.11.0 + tslib: 2.6.2 + + '@smithy/util-defaults-mode-node@3.0.3': + dependencies: + '@smithy/config-resolver': 3.0.1 + '@smithy/credential-provider-imds': 3.1.0 + '@smithy/node-config-provider': 3.1.0 + '@smithy/property-provider': 3.1.0 + '@smithy/smithy-client': 3.1.1 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-endpoints@2.0.1': + dependencies: + '@smithy/node-config-provider': 3.1.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-hex-encoding@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/util-middleware@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-retry@3.0.0': + dependencies: + '@smithy/service-error-classification': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-stream@3.0.1': + dependencies: + '@smithy/fetch-http-handler': 3.0.1 + '@smithy/node-http-handler': 3.0.0 + '@smithy/types': 3.0.0 + '@smithy/util-base64': 3.0.0 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-uri-escape@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/util-utf8@3.0.0': + dependencies: + '@smithy/util-buffer-from': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-waiter@3.0.0': + dependencies: + '@smithy/abort-controller': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@sqltools/formatter@1.2.5': {} + + '@tokenizer/token@0.3.0': {} + + '@tootallnate/quickjs-emscripten@0.23.0': {} + + '@types/json-schema@7.0.15': {} + + '@types/lodash@4.17.4': {} + + '@types/node@10.17.60': {} + + '@types/node@16.9.1': {} + + '@types/retry@0.12.1': {} + + '@types/triple-beam@1.3.5': {} + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 16.9.1 + optional: true + + '@vibrant/color@3.2.1-alpha.1': {} + + '@vibrant/core@3.2.1-alpha.1': + dependencies: + '@vibrant/color': 3.2.1-alpha.1 + '@vibrant/generator': 3.2.1-alpha.1 + '@vibrant/image': 3.2.1-alpha.1 + '@vibrant/quantizer': 3.2.1-alpha.1 + '@vibrant/types': 3.2.1-alpha.1 + '@vibrant/worker': 3.2.1-alpha.1 + + '@vibrant/generator-default@3.2.1-alpha.1': + dependencies: + '@vibrant/color': 3.2.1-alpha.1 + '@vibrant/generator': 3.2.1-alpha.1 + + '@vibrant/generator@3.2.1-alpha.1': + dependencies: + '@vibrant/color': 3.2.1-alpha.1 + '@vibrant/types': 3.2.1-alpha.1 + + '@vibrant/image-browser@3.2.1-alpha.1': + dependencies: + '@vibrant/image': 3.2.1-alpha.1 + + '@vibrant/image-node@3.2.1-alpha.1': + dependencies: + '@jimp/custom': 0.16.13 + '@jimp/plugin-resize': 0.16.13(@jimp/custom@0.16.13) + '@jimp/types': 0.16.13(@jimp/custom@0.16.13) + '@vibrant/image': 3.2.1-alpha.1 + + '@vibrant/image@3.2.1-alpha.1': + dependencies: + '@vibrant/color': 3.2.1-alpha.1 + '@vibrant/types': 3.2.1-alpha.1 + + '@vibrant/quantizer-mmcq@3.2.1-alpha.1': + dependencies: + '@vibrant/color': 3.2.1-alpha.1 + '@vibrant/image': 3.2.1-alpha.1 + '@vibrant/quantizer': 3.2.1-alpha.1 + + '@vibrant/quantizer@3.2.1-alpha.1': + dependencies: + '@vibrant/color': 3.2.1-alpha.1 + '@vibrant/image': 3.2.1-alpha.1 + '@vibrant/types': 3.2.1-alpha.1 + + '@vibrant/types@3.2.1-alpha.1': {} + + '@vibrant/worker@3.2.1-alpha.1': + dependencies: + '@vibrant/types': 3.2.1-alpha.1 + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 + agent-base@7.1.1: + dependencies: + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + ansi-colors@4.1.1: {} ansi-regex@5.0.1: {} + ansi-regex@6.0.1: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + ansi-styles@6.2.1: {} + + any-base@1.1.0: {} + + any-promise@1.3.0: {} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 + app-root-path@3.1.0: {} + argparse@2.0.1: {} asap@2.0.6: {} assertion-error@2.0.1: {} + ast-types@0.13.4: + dependencies: + tslib: 2.6.2 + + async@3.2.5: {} + + asynckit@0.4.0: {} + atomic-sleep@1.0.0: {} + axios@1.7.2: + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + b4a@1.6.6: {} + balanced-match@1.0.2: {} + bare-events@2.3.1: + optional: true + + bare-fs@2.3.1: + dependencies: + bare-events: 2.3.1 + bare-path: 2.1.3 + bare-stream: 2.0.1 + optional: true + + bare-os@2.3.0: + optional: true + + bare-path@2.1.3: + dependencies: + bare-os: 2.3.0 + optional: true + + bare-stream@2.0.1: + dependencies: + streamx: 2.18.0 + optional: true + base64-js@1.5.1: {} + basic-ftp@5.0.5: {} + binary-extensions@2.3.0: {} + bmp-js@0.1.0: {} + boolbase@1.0.0: {} + bowser@2.11.0: {} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 @@ -835,6 +3646,20 @@ snapshots: browser-stdout@1.3.1: {} + buffer-crc32@0.2.13: {} + + buffer-equal@0.0.1: {} + + buffer@5.6.0: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + buffer@6.0.3: dependencies: base64-js: 1.5.1 @@ -896,6 +3721,30 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chromium-bidi@0.5.19(devtools-protocol@0.0.1286932): + dependencies: + devtools-protocol: 0.0.1286932 + mitt: 3.0.1 + urlpattern-polyfill: 10.0.0 + zod: 3.22.4 + + cli-color@2.0.4: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-iterator: 2.0.3 + memoizee: 0.4.17 + timers-ext: 0.1.7 + + cli-highlight@2.1.11: + dependencies: + chalk: 4.1.2 + highlight.js: 10.7.3 + mz: 2.7.0 + parse5: 5.1.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + yargs: 16.2.0 + cliui@7.0.4: dependencies: string-width: 4.2.3 @@ -908,12 +3757,42 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + color-convert@2.0.1: dependencies: color-name: 1.1.4 + color-name@1.1.3: {} + color-name@1.1.4: {} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + + colorspace@1.1.4: + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + concurrently@8.2.2: dependencies: chalk: 4.1.2 @@ -926,6 +3805,12 @@ snapshots: tree-kill: 1.2.2 yargs: 17.7.2 + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + csprng@0.1.2: dependencies: sequin: 0.1.1 @@ -940,12 +3825,25 @@ snapshots: css-what@6.1.0: {} + cycle@1.0.3: {} + + d@1.0.2: + dependencies: + es5-ext: 0.10.64 + type: 2.7.3 + + data-uri-to-buffer@4.0.1: {} + + data-uri-to-buffer@6.0.2: {} + date-fns@2.30.0: dependencies: '@babel/runtime': 7.24.5 date-fns@3.6.0: {} + dayjs@1.11.11: {} + debug@4.3.4(supports-color@8.1.1): dependencies: ms: 2.1.2 @@ -964,6 +3862,20 @@ snapshots: es-errors: 1.3.0 gopd: 1.0.1 + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + + delayed-stream@1.0.0: {} + + denque@2.1.0: {} + + detect-libc@2.0.3: {} + + devtools-protocol@0.0.1286932: {} + diff@5.0.0: {} dom-serializer@2.0.0: @@ -972,6 +3884,8 @@ snapshots: domhandler: 5.0.3 entities: 4.5.0 + dom-walk@0.1.2: {} + domelementtype@2.3.0: {} domhandler@5.0.3: @@ -986,12 +3900,22 @@ snapshots: dotenv@16.4.5: {} + eastasianwidth@0.2.0: {} + emoji-regex@8.0.0: {} + emoji-regex@9.2.2: {} + + enabled@2.0.0: {} + encoding-japanese@2.0.0: {} encoding-japanese@2.1.0: {} + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + entities@4.5.0: {} es-define-property@1.0.0: @@ -1000,16 +3924,89 @@ snapshots: es-errors@1.3.0: {} + es5-ext@0.10.64: + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 + next-tick: 1.1.0 + + es6-iterator@2.0.3: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 + + es6-symbol@3.1.4: + dependencies: + d: 1.0.2 + ext: 1.7.0 + + es6-weak-map@2.0.3: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + escalade@3.1.2: {} escape-string-regexp@4.0.0: {} + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + esniff@2.0.1: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.3 + + esprima@4.0.1: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + event-emitter@0.3.5: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-target-shim@5.0.1: {} events@3.3.0: {} + exif-parser@0.1.12: {} + + ext@1.7.0: + dependencies: + type: 2.7.3 + + extract-zip@2.0.1: + dependencies: + debug: 4.3.4(supports-color@8.1.1) + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + + fast-fifo@1.3.2: {} + fast-redact@3.5.0: {} + fast-xml-parser@4.2.5: + dependencies: + strnum: 1.0.5 + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -1027,6 +4024,27 @@ snapshots: tough-cookie: 4.1.4 tunnel-agent: 0.6.0 + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + fecha@4.2.3: {} + + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + + file-stream-rotator@0.6.1: + dependencies: + moment: 2.30.1 + + file-type@16.5.4: + dependencies: + readable-web-to-node-stream: 3.0.2 + strtok3: 6.3.0 + token-types: 4.2.1 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -1038,6 +4056,31 @@ snapshots: flat@5.0.2: {} + fn.name@1.1.0: {} + + follow-redirects@1.15.6: {} + + foreground-child@3.1.1: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + + fs-extra@11.2.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -1045,6 +4088,12 @@ snapshots: function-bind@1.1.2: {} + generate-function@2.3.1: + dependencies: + is-property: 1.0.2 + + genson-js@0.0.8: {} + get-caller-file@2.0.5: {} get-func-name@2.0.2: {} @@ -1057,10 +4106,36 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 + get-stream@5.2.0: + dependencies: + pump: 3.0.0 + + get-uri@6.0.3: + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.3.4(supports-color@8.1.1) + fs-extra: 11.2.0 + transitivePeerDependencies: + - supports-color + + gifwrap@0.9.4: + dependencies: + image-q: 4.0.0 + omggif: 1.0.10 + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 + glob@10.4.1: + dependencies: + foreground-child: 3.1.1 + jackspeak: 3.1.2 + minimatch: 9.0.4 + minipass: 7.1.2 + path-scurry: 1.11.1 + glob@8.1.0: dependencies: fs.realpath: 1.0.0 @@ -1069,10 +4144,17 @@ snapshots: minimatch: 5.0.1 once: 1.4.0 + global@4.4.0: + dependencies: + min-document: 2.19.0 + process: 0.11.10 + gopd@1.0.1: dependencies: get-intrinsic: 1.2.4 + graceful-fs@4.2.11: {} + has-flag@4.0.0: {} has-property-descriptors@1.0.2: @@ -1089,6 +4171,8 @@ snapshots: he@1.2.0: {} + highlight.js@10.7.3: {} + html-to-text@9.0.5: dependencies: '@selderee/plugin-htmlparser2': 0.11.0 @@ -1104,14 +4188,39 @@ snapshots: domutils: 3.1.0 entities: 4.5.0 + htmlparser2@9.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + http-parser-js@0.5.8: {} + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.1 + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.4: + dependencies: + agent-base: 7.1.1 + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 ieee754@1.2.1: {} + image-q@4.0.0: + dependencies: + '@types/node': 16.9.1 + imapflow@1.0.162: dependencies: encoding-japanese: 2.1.0 @@ -1136,6 +4245,8 @@ snapshots: jsbn: 1.1.0 sprintf-js: 1.1.3 + is-arrayish@0.3.2: {} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 @@ -1144,6 +4255,8 @@ snapshots: is-fullwidth-code-point@3.0.0: {} + is-function@1.0.2: {} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -1152,16 +4265,58 @@ snapshots: is-plain-obj@2.1.0: {} + is-promise@2.2.2: {} + + is-property@1.0.2: {} + + is-stream@2.0.1: {} + is-unicode-supported@0.1.0: {} + isexe@2.0.0: {} + + jackspeak@3.1.2: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jpeg-js@0.4.4: {} + js-yaml@4.1.0: dependencies: argparse: 2.0.1 jsbn@1.1.0: {} + json-schema-to-typescript@14.0.5: + dependencies: + '@apidevtools/json-schema-ref-parser': 11.6.3 + '@types/json-schema': 7.0.15 + '@types/lodash': 4.17.4 + cli-color: 2.0.4 + glob: 10.4.1 + is-glob: 4.0.3 + js-yaml: 4.1.0 + lodash: 4.17.21 + minimist: 1.2.8 + mkdirp: 3.0.1 + mz: 2.7.0 + node-fetch: 3.3.2 + prettier: 3.3.0 + + jsonc-parser@3.2.1: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + just-performance@4.2.0: {} + kuler@2.0.0: {} + leac@0.6.0: {} libbase64@1.2.1: {} @@ -1194,6 +4349,17 @@ snapshots: dependencies: uc.micro: 2.1.0 + load-bmfont@1.4.1: + dependencies: + buffer-equal: 0.0.1 + mime: 1.6.0 + parse-bmfont-ascii: 1.0.6 + parse-bmfont-binary: 1.0.6 + parse-bmfont-xml: 1.1.6 + phin: 2.9.3 + xhr: 2.6.0 + xtend: 4.0.2 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -1205,10 +4371,35 @@ snapshots: chalk: 4.1.2 is-unicode-supported: 0.1.0 + logform@2.6.0: + dependencies: + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.4.3 + triple-beam: 1.4.1 + + long@5.2.3: {} + loupe@3.1.1: dependencies: get-func-name: 2.0.2 + lru-cache@10.2.2: {} + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + lru-cache@7.18.3: {} + + lru-cache@8.0.5: {} + + lru-queue@0.1.0: + dependencies: + es5-ext: 0.10.64 + mailparser@3.7.1: dependencies: encoding-japanese: 2.1.0 @@ -1228,10 +4419,51 @@ snapshots: libmime: 5.2.0 libqp: 2.0.1 + memoizee@0.4.17: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-weak-map: 2.0.3 + event-emitter: 0.3.5 + is-promise: 2.2.2 + lru-queue: 0.1.0 + next-tick: 1.1.0 + timers-ext: 0.1.7 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + min-document@2.19.0: + dependencies: + dom-walk: 0.1.2 + minimatch@5.0.1: dependencies: brace-expansion: 2.0.1 + minimatch@9.0.4: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + mitt@3.0.1: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mkdirp@2.1.6: {} + + mkdirp@3.0.1: {} + mocha@10.4.0: dependencies: ansi-colors: 4.1.1 @@ -1255,10 +4487,59 @@ snapshots: yargs-parser: 20.2.4 yargs-unparser: 2.0.0 + moment-timezone@0.5.45: + dependencies: + moment: 2.30.1 + + moment@2.30.1: {} + ms@2.1.2: {} ms@2.1.3: {} + mysql2@3.10.0: + dependencies: + denque: 2.1.0 + generate-function: 2.3.1 + iconv-lite: 0.6.3 + long: 5.2.3 + lru-cache: 8.0.5 + named-placeholders: 1.1.3 + seq-queue: 0.0.5 + sqlstring: 2.3.3 + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + named-placeholders@1.1.3: + dependencies: + lru-cache: 7.18.3 + + netmask@2.0.2: {} + + next-tick@1.1.0: {} + + node-domexception@1.0.0: {} + + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + + node-vibrant@3.2.1-alpha.1: + dependencies: + '@types/node': 10.17.60 + '@vibrant/core': 3.2.1-alpha.1 + '@vibrant/generator-default': 3.2.1-alpha.1 + '@vibrant/image-browser': 3.2.1-alpha.1 + '@vibrant/image-node': 3.2.1-alpha.1 + '@vibrant/quantizer-mmcq': 3.2.1-alpha.1 + url: 0.11.3 + nodemailer@6.9.13: {} normalize-path@3.0.0: {} @@ -1267,14 +4548,30 @@ snapshots: dependencies: boolbase: 1.0.0 + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + object-inspect@1.13.1: {} + omggif@1.0.10: {} + on-exit-leak-free@2.1.2: {} once@1.4.0: dependencies: wrappy: 1.0.2 + one-time@1.0.0: + dependencies: + fn.name: 1.1.0 + + otplib@12.0.1: + dependencies: + '@otplib/core': 12.0.1 + '@otplib/preset-default': 12.0.1 + '@otplib/preset-v11': 12.0.1 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -1283,11 +4580,55 @@ snapshots: dependencies: p-limit: 3.1.0 + p-retry@5.1.2: + dependencies: + '@types/retry': 0.12.1 + retry: 0.13.1 + + pac-proxy-agent@7.0.1: + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.1 + debug: 4.3.4(supports-color@8.1.1) + get-uri: 6.0.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.4 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.3 + transitivePeerDependencies: + - supports-color + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + + pako@1.0.11: {} + + parse-bmfont-ascii@1.0.6: {} + + parse-bmfont-binary@1.0.6: {} + + parse-bmfont-xml@1.1.6: + dependencies: + xml-parse-from-string: 1.0.1 + xml2js: 0.5.0 + + parse-headers@2.0.5: {} + + parse5-htmlparser2-tree-adapter@6.0.1: + dependencies: + parse5: 6.0.1 + parse5-htmlparser2-tree-adapter@7.0.0: dependencies: domhandler: 5.0.3 parse5: 7.1.2 + parse5@5.1.1: {} + + parse5@6.0.1: {} + parse5@7.1.2: dependencies: entities: 4.5.0 @@ -1299,10 +4640,23 @@ snapshots: path-exists@4.0.0: {} + path-key@3.1.1: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.2.2 + minipass: 7.1.2 + pathval@2.0.0: {} peberminta@0.9.0: {} + peek-readable@4.1.0: {} + + pend@1.2.0: {} + + phin@2.9.3: {} + picomatch@2.3.1: {} pino-abstract-transport@1.2.0: @@ -1326,28 +4680,80 @@ snapshots: sonic-boom: 3.8.1 thread-stream: 2.7.0 + pixelmatch@4.0.2: + dependencies: + pngjs: 3.4.0 + + pngjs@3.4.0: {} + + prettier@3.3.0: {} + process-warning@3.0.0: {} process@0.11.10: {} + progress@2.0.3: {} + + proxy-agent@6.4.0: + dependencies: + agent-base: 7.1.1 + debug: 4.3.4(supports-color@8.1.1) + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.4 + lru-cache: 7.18.3 + pac-proxy-agent: 7.0.1 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.3 + transitivePeerDependencies: + - supports-color + + proxy-from-env@1.1.0: {} + psl@1.9.0: {} + pump@3.0.0: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + punycode.js@2.3.1: {} + punycode@1.4.1: {} + punycode@2.3.1: {} + puppeteer-core@22.10.0: + dependencies: + '@puppeteer/browsers': 2.2.3 + chromium-bidi: 0.5.19(devtools-protocol@0.0.1286932) + debug: 4.3.4(supports-color@8.1.1) + devtools-protocol: 0.0.1286932 + ws: 8.17.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + qs@6.12.1: dependencies: side-channel: 1.0.6 querystringify@2.2.0: {} + queue-tick@1.0.1: {} + quick-format-unescaped@4.0.4: {} randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + readable-stream@4.5.2: dependencies: abort-controller: 3.0.0 @@ -1356,18 +4762,28 @@ snapshots: process: 0.11.10 string_decoder: 1.3.0 + readable-web-to-node-stream@3.0.2: + dependencies: + readable-stream: 3.6.2 + readdirp@3.6.0: dependencies: picomatch: 2.3.1 real-require@0.2.0: {} + reflect-metadata@0.2.2: {} + + regenerator-runtime@0.13.11: {} + regenerator-runtime@0.14.1: {} require-directory@2.1.1: {} requires-port@1.0.0: {} + retry@0.13.1: {} + reusify@1.0.4: {} rxjs@7.8.1: @@ -1380,10 +4796,20 @@ snapshots: safer-buffer@2.1.2: {} + sax@1.4.1: {} + selderee@0.11.0: dependencies: parseley: 0.12.1 + semver@7.6.0: + dependencies: + lru-cache: 6.0.0 + + semver@7.6.2: {} + + seq-queue@0.0.5: {} + sequin@0.1.1: {} serialize-javascript@6.0.0: @@ -1399,6 +4825,43 @@ snapshots: gopd: 1.0.1 has-property-descriptors: 1.0.2 + sha.js@2.4.11: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + sharp@0.33.4: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.6.2 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.4 + '@img/sharp-darwin-x64': 0.33.4 + '@img/sharp-libvips-darwin-arm64': 1.0.2 + '@img/sharp-libvips-darwin-x64': 1.0.2 + '@img/sharp-libvips-linux-arm': 1.0.2 + '@img/sharp-libvips-linux-arm64': 1.0.2 + '@img/sharp-libvips-linux-s390x': 1.0.2 + '@img/sharp-libvips-linux-x64': 1.0.2 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.2 + '@img/sharp-libvips-linuxmusl-x64': 1.0.2 + '@img/sharp-linux-arm': 0.33.4 + '@img/sharp-linux-arm64': 0.33.4 + '@img/sharp-linux-s390x': 0.33.4 + '@img/sharp-linux-x64': 0.33.4 + '@img/sharp-linuxmusl-arm64': 0.33.4 + '@img/sharp-linuxmusl-x64': 0.33.4 + '@img/sharp-wasm32': 0.33.4 + '@img/sharp-win32-ia32': 0.33.4 + '@img/sharp-win32-x64': 0.33.4 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + shell-quote@1.8.1: {} side-channel@1.0.6: @@ -1408,10 +4871,24 @@ snapshots: get-intrinsic: 1.2.4 object-inspect: 1.13.1 + signal-exit@4.1.0: {} + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + slugify@1.6.6: {} smart-buffer@4.2.0: {} + socks-proxy-agent@8.0.3: + dependencies: + agent-base: 7.1.1 + debug: 4.3.4(supports-color@8.1.1) + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + socks@2.8.3: dependencies: ip-address: 9.0.5 @@ -1421,18 +4898,44 @@ snapshots: dependencies: atomic-sleep: 1.0.0 + source-map@0.6.1: + optional: true + spawn-command@0.0.2: {} split2@4.2.0: {} sprintf-js@1.1.3: {} + sqlstring@2.3.3: {} + + stack-trace@0.0.10: {} + + stream-browserify@3.0.0: + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + + streamx@2.18.0: + dependencies: + fast-fifo: 1.3.2 + queue-tick: 1.0.1 + text-decoder: 1.1.0 + optionalDependencies: + bare-events: 2.3.1 + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 @@ -1441,8 +4944,19 @@ snapshots: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 + strip-json-comments@3.1.1: {} + strnum@1.0.5: {} + + strtok3@6.3.0: + dependencies: + '@tokenizer/token': 0.3.0 + peek-readable: 4.1.0 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -1451,16 +4965,62 @@ snapshots: dependencies: has-flag: 4.0.0 + tar-fs@3.0.5: + dependencies: + pump: 3.0.0 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 2.3.1 + bare-path: 2.1.3 + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.6 + fast-fifo: 1.3.2 + streamx: 2.18.0 + + text-decoder@1.1.0: + dependencies: + b4a: 1.6.6 + + text-hex@1.0.0: {} + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + thirty-two@1.0.2: {} + thread-stream@2.7.0: dependencies: real-require: 0.2.0 + through@2.3.8: {} + + timers-ext@0.1.7: + dependencies: + es5-ext: 0.10.64 + next-tick: 1.1.0 + + timm@1.7.1: {} + + tinycolor2@1.6.0: {} + tlds@1.252.0: {} to-regex-range@5.0.1: dependencies: is-number: 7.0.0 + token-types@4.2.1: + dependencies: + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + tough-cookie@4.1.4: dependencies: psl: 1.9.0 @@ -1470,21 +5030,79 @@ snapshots: tree-kill@1.2.2: {} + triple-beam@1.4.1: {} + + tslib@1.14.1: {} + tslib@2.6.2: {} tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 + twitter-d@0.6.0: {} + + type@2.7.3: {} + + typeorm-naming-strategies@4.1.0(typeorm@0.3.20(mysql2@3.10.0)): + dependencies: + typeorm: 0.3.20(mysql2@3.10.0) + + typeorm@0.3.20(mysql2@3.10.0): + dependencies: + '@sqltools/formatter': 1.2.5 + app-root-path: 3.1.0 + buffer: 6.0.3 + chalk: 4.1.2 + cli-highlight: 2.1.11 + dayjs: 1.11.11 + debug: 4.3.4(supports-color@8.1.1) + dotenv: 16.4.5 + glob: 10.4.1 + mkdirp: 2.1.6 + reflect-metadata: 0.2.2 + sha.js: 2.4.11 + tslib: 2.6.2 + uuid: 9.0.1 + yargs: 17.7.2 + optionalDependencies: + mysql2: 3.10.0 + transitivePeerDependencies: + - supports-color + uc.micro@2.1.0: {} + unbzip2-stream@1.4.3: + dependencies: + buffer: 5.7.1 + through: 2.3.8 + universalify@0.2.0: {} + universalify@2.0.1: {} + url-parse@1.5.10: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 + url@0.11.3: + dependencies: + punycode: 1.4.1 + qs: 6.12.1 + + urlpattern-polyfill@10.0.0: {} + + utif@2.0.1: + dependencies: + pako: 1.0.11 + + util-deprecate@1.0.2: {} + + uuid@9.0.1: {} + + web-streams-polyfill@3.3.3: {} + websocket-driver@0.7.4: dependencies: http-parser-js: 0.5.8 @@ -1493,6 +5111,38 @@ snapshots: websocket-extensions@0.1.4: {} + which@2.0.2: + dependencies: + isexe: 2.0.0 + + winston-daily-rotate-file@5.0.0(winston@3.13.0): + dependencies: + file-stream-rotator: 0.6.1 + object-hash: 3.0.0 + triple-beam: 1.4.1 + winston: 3.13.0 + winston-transport: 4.7.0 + + winston-transport@4.7.0: + dependencies: + logform: 2.6.0 + readable-stream: 3.6.2 + triple-beam: 1.4.1 + + winston@3.13.0: + dependencies: + '@colors/colors': 1.6.0 + '@dabh/diagnostics': 2.0.3 + async: 3.2.5 + is-stream: 2.0.1 + logform: 2.6.0 + one-time: 1.0.0 + readable-stream: 3.6.2 + safe-stable-stringify: 2.4.3 + stack-trace: 0.0.10 + triple-beam: 1.4.1 + winston-transport: 4.7.0 + workerpool@6.2.1: {} wrap-ansi@7.0.0: @@ -1501,12 +5151,40 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + wrappy@1.0.2: {} + ws@8.17.0: {} + + xhr@2.6.0: + dependencies: + global: 4.4.0 + is-function: 1.0.2 + parse-headers: 2.0.5 + xtend: 4.0.2 + + xml-parse-from-string@1.0.1: {} + + xml2js@0.5.0: + dependencies: + sax: 1.4.1 + xmlbuilder: 11.0.1 + + xmlbuilder@11.0.1: {} + xpath@0.0.34: {} + xtend@4.0.2: {} + y18n@5.0.8: {} + yallist@4.0.0: {} + yargs-parser@20.2.4: {} yargs-parser@21.1.1: {} @@ -1538,4 +5216,11 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + yocto-queue@0.1.0: {} + + zod@3.22.4: {} diff --git a/packages/scout/src/fansly.js b/packages/scout/src/fansly.js new file mode 100644 index 0000000..baca4cd --- /dev/null +++ b/packages/scout/src/fansly.js @@ -0,0 +1,38 @@ +import { download } from './utils.js'; +import { getTmpFile } from './utils.js'; + +const regex = { + username: new RegExp(/^https:\/\/fansly\.com\/(?:live\/)?([^\/]+)/) +} + +const normalize = (url) => { + if (!url) throw new Error('normalized received a null or undefined url.'); + return fromUsername(fansly.regex.username.exec(url).at(1)) +} + +const fromUsername = (username) => `https://fansly.com/${username}` + +const image = async function image (limiter, fanslyUserId) { + if (!limiter) throw new Error(`first arg passed to fansly.data.image must be a node-rate-limiter instance`); + if (!fanslyUserId) throw new Error(`second arg passed to fansly.data.image must be a {string} fanslyUserId`); + const url = `https://api.fansly.com/api/v1/account/${fanslyUserId}/avatar` + const filePath = getTmpFile('avatar.jpg') + return download({ filePath, limiter, url }) +} + +const url = { + normalize, + fromUsername +} + +const data = { + image +} + +const fansly = { + regex, + url, + data, +} + +export default fansly \ No newline at end of file diff --git a/packages/common/src/fansly.spec.js b/packages/scout/src/fansly.spec.js similarity index 100% rename from packages/common/src/fansly.spec.js rename to packages/scout/src/fansly.spec.js diff --git a/packages/scout/src/fixtures/sample.webp b/packages/scout/src/fixtures/sample.webp new file mode 100644 index 0000000000000000000000000000000000000000..16ea7aaa4e061d982af4a8db6526e560062bf0da GIT binary patch literal 26312 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

}TbvEtXERuOo@&Pj~DF3+n`z z1(xl%x;-VRh^+6AMZCKzU5}xadCL%7v;p*;>bjT&*p3 zN;ufhcB66(P%V`Fpi#zZ^65ZVI6r|ybpd2Poa8jX?!EHl?QT*qnBy;kUCv0EC!l0A zEigqmK=e|#;X-^ZvZPTn!1TXa$6<-uj(W}VS3nvYwjS2YEt0O@#~?A$r?6u>?aU&e&_@j2$vvPRgUykA+B1VOKKTQR0h=cxm` zwwUx@%)*AUu0F{l7JP3kq zA6y{fIL);3L=`V2=edcg**4HmivzNj-HA*AU!*6ejr0hHt759rGkf$(KBS2_fUTKe PcvTlrQomb^qyPW_nWi}~ literal 0 HcmV?d00001 diff --git a/packages/scout/src/image.js b/packages/scout/src/image.js new file mode 100644 index 0000000..fa085d3 --- /dev/null +++ b/packages/scout/src/image.js @@ -0,0 +1,16 @@ +// import ColorThief from 'colorthief' +import sharp from 'sharp' + + + + + +export async function getProminentColor(imageFile) { + const { dominant } = await sharp(imageFile).stats(); + const { r, g, b } = dominant; + return rgbToHex(r, g, b) +} + +export function rgbToHex(r, g, b) { + return "#" + (1 << 24 | r << 16 | g << 8 | b).toString(16).slice(1); +} \ No newline at end of file diff --git a/packages/scout/src/image.spec.js b/packages/scout/src/image.spec.js new file mode 100644 index 0000000..09cbb46 --- /dev/null +++ b/packages/scout/src/image.spec.js @@ -0,0 +1,25 @@ + +import { getProminentColor, rgbToHex } from './image.js' +import { expect } from 'chai' +import { describe } from 'mocha' +import path from 'node:path' + + +describe('image', function () { + describe('getProminentColor', function () { + it('should get a {String} hex code color', async function () { + const color = await getProminentColor(path.join(import.meta.dirname, './fixtures/sample.webp')) + expect(color).to.equal('#0878a8') + }) + }) + describe('rgbToHex', function () { + it('should convert color to hex {String} hexidecimal code', function () { + const mulberry = [255, 87, 51] + const screaminGreen = [77, 255, 106] + const amaranth = [227, 64, 81] + expect(rgbToHex(...mulberry)).to.equal('#ff5733') + expect(rgbToHex(...screaminGreen)).to.equal('#4dff6a') + expect(rgbToHex(...amaranth)).to.equal('#e34051') + }) + }) +}) \ No newline at end of file diff --git a/packages/scout/src/index.email.js b/packages/scout/src/index.email.js index 4676bd9..74ad87a 100644 --- a/packages/scout/src/index.email.js +++ b/packages/scout/src/index.email.js @@ -18,14 +18,14 @@ async function handleMessage({email, msg}) { const body = await email.loadMessage(msg.uid) console.log(' ✏️ checking e-mail') - const { isMatch, url, platform, channel, displayName, date, userId } = (await checkEmail(body)) + const { isMatch, url, platform, channel, displayName, date, userId, avatar } = (await checkEmail(body)) if (isMatch) { console.log(' ✏️✏️ signalling realtime') - await signalRealtime({ url, platform, channel, displayName, date, userId }) + await signalRealtime({ url, platform, channel, displayName, date, userId, avatar }) console.log(' ✏️✏️ creating stream entry in db') - await createStreamInDb({ source: 'email', platform, channel, date, url, userId }) + await createStreamInDb({ source: 'email', platform, channel, date, url, userId, avatar }) } console.log(' ✏️ archiving e-mail') diff --git a/packages/scout/src/s3.js b/packages/scout/src/s3.js new file mode 100644 index 0000000..5c58274 --- /dev/null +++ b/packages/scout/src/s3.js @@ -0,0 +1,59 @@ +import dotenv from 'dotenv' +dotenv.config({ + path: '../../.env' +}) +import { S3Client } from "@aws-sdk/client-s3" +import { Upload } from "@aws-sdk/lib-storage" +// import { getSignedUrl } from "@aws-sdk/s3-request-presigner" +import { createId } from '@paralleldrive/cuid2' +import { basename } from 'node:path' +import fs from 'node:fs' + +if (!process.env.S3_BUCKET_NAME) throw new Error('S3_BUCKET was undefined in env'); +if (!process.env.SCOUT_NITTER_URL) throw new Error('SCOUT_NITTER_URL was undefined in env'); + + + +export async function uploadFile(filePath) { + if (!filePath) throw new Error("first argument, 'filePath' is undefined"); + const client = new S3Client({ + endpoint: 'https://s3.us-west-000.backblazeb2.com', + region:'us-west-000', + credentials:{ + accessKeyId: process.env.S3_BUCKET_KEY_ID, + secretAccessKey: process.env.S3_BUCKET_APPLICATION_KEY + } + }); + const target = { + Bucket: process.env.S3_BUCKET_NAME, + Key: `${createId()}-${basename(filePath)}`, + Body: fs.createReadStream(filePath) + } + + // greets https://stackoverflow.com/a/70159394/1004931 + try { + const parallelUploads3 = new Upload({ + client: client, + //tags: [...], // optional tags + queueSize: 4, // optional concurrency configuration + leavePartsOnError: false, // optional manually handle dropped parts + params: target, + }); + + // parallelUploads3.on("httpUploadProgress", (progress) => { + // console.log(progress); + // }); + + const res = await parallelUploads3.done(); + return res + + } catch (e) { + console.error(`while uploading a file to s3, we encountered an error`) + throw new Error(e); + } + +} + + + + diff --git a/packages/scout/src/s3.spec.js b/packages/scout/src/s3.spec.js new file mode 100644 index 0000000..dfce1cd --- /dev/null +++ b/packages/scout/src/s3.spec.js @@ -0,0 +1,19 @@ +import { describe } from 'mocha' +import { expect } from 'chai'; +import { uploadFile } from './s3.js' +import path from 'node:path' + +describe('s3', function () { + this.timeout(1000*30) + describe('uploadFile', function () { + it('should upload a file to specified bucket and return the storage data', async function () { + const data = await uploadFile(path.join(import.meta.dirname, './fixtures/sample.webp')) + expect(data).to.have.property('VersionId') + expect(data).to.have.property('ETag') + expect(data).to.have.property('Bucket') + expect(data).to.have.property('Key') + expect(data).to.have.property('Location') + expect(data).to.have.property('$metadata') + }) + }) +}) \ No newline at end of file diff --git a/packages/scout/src/signals.js b/packages/scout/src/signals.js index 1a144f6..5680e57 100644 --- a/packages/scout/src/signals.js +++ b/packages/scout/src/signals.js @@ -4,7 +4,10 @@ import 'dotenv/config' import { PgPubSub } from 'pg-pubsub' import qs from 'qs' import { subMinutes, addMinutes } from 'date-fns' -import slugify from 'slugify' +import { fpSlugify, download } from './utils.js' +import { getProminentColor } from './image.js' +import { RateLimiter } from "limiter" +import { getImage } from './vtuber.js' // alternative js libraries for postgres notify/wait // * https://github.com/imqueue/pg-pubsub @@ -15,6 +18,7 @@ if (!process.env.SCOUT_STRAPI_API_KEY) throw new Error('SCOUT_STRAPI_API_KEY is if (!process.env.STRAPI_URL) throw new Error('STRAPI_URL is missing from env'); if (!process.env.SCOUT_RECENTS_TOKEN) throw new Error('SCOUT_RECENTS_TOKEN is undefined in env'); if (!process.env.POSTGRES_REALTIME_CONNECTION_STRING) throw new Error('POSTGRES_REALTIME_CONNECTION_STRING is undefined in env'); +if (!process.env.CDN_BUCKET_URL) throw new Error('CDN_BUCKET_URL is undefined in env'); console.log(`process.env.POSTGRES_REALTIME_CONNECTION_STRING=${process.env.POSTGRES_REALTIME_CONNECTION_STRING}`) @@ -51,10 +55,11 @@ export async function signalRealtime ({ url, platform, channel, displayName, dat * It's a 3 step process, with each step outlined in the function body. */ export async function createStreamInDb ({ source, platform, channel, date, url, userId }) { - + + const limiter = new RateLimiter({ tokensPerInterval: 0.3, interval: "second" }); let vtuberId, streamId - console.log('>># Step 1') + console.log('>> # Step 1') // # Step 1. // First we find or create the vtuber // The vtuber may already be in the db, so we look for that record. All we need is the Vtuber ID. @@ -98,6 +103,43 @@ export async function createStreamInDb ({ source, platform, channel, date, url, if (!vtuberId) { console.log('>> vtuberId was not found so we create') + + /** + * We are creating a vtuber record. + * We need a few things. + * * image URL + * * themeColor + * + * To get an image, we have to do a few things. + * * [x] download image from platform + * * [x] get themeColor from image + * * [x] upload image to b2 + * * [x] get B2 cdn link to image + * + * To get themeColor, we need the image locally where we can then run + */ + + // download image from platform + // vtuber.getImage expects a vtuber object, which we don't have yet, so we create a dummy one + const dummyVtuber = { + attributes: { + slug: fpSlugify(channel), + fansly: fansly.url.fromUsername(channel) + } + } + const platformImageUrl = await getImage(limiter, dummyVtuber) + const imageFile = await download({ limiter, url: platformImageUrl }) + + // get themeColor from image + const themeColor = await getProminentColor(imageFile) + + // upload image to b2 + const b2FileData = await s3.uploadFile(imageFile) + + // get b2 cdn link to image + const imageCdnLink = `https://${process.env.CDN_BUCKET_URL}/${b2FileData.Key}` + + const createVtuberRes = await fetch(`${process.env.STRAPI_URL}/api/vtubers`, { method: 'POST', headers: { @@ -110,10 +152,10 @@ export async function createStreamInDb ({ source, platform, channel, date, url, fansly: (platform === 'fansly') ? url : null, fanslyId: (platform === 'fansly') ? userId : null, chaturbate: (platform === 'chaturbate') ? url : null, - slug: slugify(channel), + slug: fpSlugify(channel), description1: ' ', - image: 'https://futureporn-b2.b-cdn.net/200x200.png', - themeColor: '#dde1ec' + image: imageCdnLink, + themeColor: themeColor || '#dde1ec' } }) }) @@ -168,22 +210,6 @@ export async function createStreamInDb ({ source, platform, channel, date, url, // For now, the rule is 30 minutes of separation. // Anything <=30m is interpreted as the same stream. Anything >30m is interpreted as a different stream. // If the stream is not in the db, we create the stream record - - - - // qs.stringify({ - // populate: '*', - // filters: { - // isFanslyStream: { - // "$eq": true - // }, - // } - // }, { - // encode: false - // }) - - - const dateSinceRange = subMinutes(new Date(date), 30) const dateUntilRange = addMinutes(new Date(date), 30) console.log(`Find a stream within + or - 30 mins of the notif date=${new Date(date).toISOString()}. dateSinceRange=${dateSinceRange.toISOString()}, dateUntilRange=${dateUntilRange.toISOString()}`) @@ -246,7 +272,6 @@ export async function createStreamInDb ({ source, platform, channel, date, url, if (updateStreamJson?.error) throw new Error(updateStreamJson); console.log(`>> assuming a successful update to the stream record. response as follows.`) console.log(JSON.stringify(updateStreamJson, null, 2)) - } if (!streamId) { diff --git a/packages/scout/src/twitter.js b/packages/scout/src/twitter.js new file mode 100644 index 0000000..e6bb2d0 --- /dev/null +++ b/packages/scout/src/twitter.js @@ -0,0 +1,66 @@ + +import * as htmlparser2 from "htmlparser2"; +import { load } from 'cheerio' +import { download } from './utils.js'; +import pRetry, { AbortError } from 'p-retry'; + +if (!process.env.SCOUT_NITTER_ACCESS_KEY) throw new Error('SCOUT_NITTER_ACCESS_KEY was undefined in env'); +if (!process.env.SCOUT_NITTER_URL) throw new Error('SCOUT_NITTER_URL was undefined in env'); + + + +const regex = { + username: new RegExp(/https:\/\/(?:twitter\.com|x\.com)\/([a-zA-Z0-9_]+)/i) +} + +const normalize = (url) => { + if (!url) throw new Error('normalized received a null or undefined url.'); + return fromUsername(twitter.regex.username.exec(url).at(1)) +} + + +const image = async function image (limiter, twitterUsername) { + if (!limiter) throw new Error('first arg to twitter.data.image must be an instance of node-rate-limiter'); + if (!twitterUsername) throw new Error('second arg to twitter.data.image must be a twitterUsername. It was undefined.'); + const requestDataFromNitter = async () => { + const url = `${process.env.SCOUT_NITTER_URL}/${twitterUsername}/rss?key=${process.env.SCOUT_NITTER_ACCESS_KEY}` + // console.log(`fetching from url=${url}`) + const response = await fetch(url); + // Abort retrying if the resource doesn't exist + if (response.status === 404) { + throw new AbortError(response.statusText); + } + return response.text(); + } + const body = await pRetry(requestDataFromNitter, { retries: 5 }); + try { + const dom = htmlparser2.parseDocument(body); + const $ = load(dom, { _useHtmlParser2: true }) + const urls = $('url:contains("profile_images")').first() + const downloadedImageFile = await download({ limiter, url: urls.text() }) + return downloadedImageFile + } catch (e) { + console.error(`while fetching rss from nitter, the following error was encountered.`) + console.error(e) + } +} + +const fromUsername = (username) => `https://x.com/${username}` + +const url = { + normalize, + fromUsername +} + +const data = { + image +} + +const twitter = { + regex, + url, + data, +} + + +export default twitter \ No newline at end of file diff --git a/packages/scout/src/twitter.spec.js b/packages/scout/src/twitter.spec.js new file mode 100644 index 0000000..62b28aa --- /dev/null +++ b/packages/scout/src/twitter.spec.js @@ -0,0 +1,30 @@ +import { expect } from 'chai' +import twitter from './twitter.js' +import { describe } from 'mocha' +import { tmpFileRegex } from './utils.js' +import { RateLimiter } from 'limiter' + +describe('twitter', function () { + describe('regex', function () { + describe('username', function () { + it('should get the username of the channel', function () { + expect(twitter.regex.username.exec('https://twitter.com/18Plus').at(1)).to.equal('18Plus') + expect(twitter.regex.username.exec('https://twitter.com/projektmelody').at(1)).to.equal('projektmelody') + expect(twitter.regex.username.exec('https://twitter.com/GoodKittenVR').at(1)).to.equal('GoodKittenVR') + expect(twitter.regex.username.exec('https://x.com/projektmelody').at(1)).to.equal('projektmelody') + expect(twitter.regex.username.exec('https://x.com/18Plus').at(1)).to.equal('18Plus') + expect(twitter.regex.username.exec('https://x.com/GoodKittenVR').at(1)).to.equal('GoodKittenVR') + }) + }) + }) + describe('data', function () { + this.timeout(1000*30) + const limiter = new RateLimiter({ tokensPerInterval: 10, interval: "second" }) + describe('image', function () { + it("should download the twitter users's avatar and save it to disk", async function () { + const imgFile = await twitter.data.image(limiter, 'projektmelody') + expect(imgFile).to.match(tmpFileRegex) + }) + }) + }) +}) \ No newline at end of file diff --git a/packages/scout/src/ua.js b/packages/scout/src/ua.js new file mode 100644 index 0000000..7d643f8 --- /dev/null +++ b/packages/scout/src/ua.js @@ -0,0 +1 @@ +export const ua0 = 'Mozilla/5.0 (X11; Linux x86_64; rv:105.0) Gecko/20100101 Firefox/105.0' \ No newline at end of file diff --git a/packages/scout/src/utils.js b/packages/scout/src/utils.js new file mode 100644 index 0000000..60fb388 --- /dev/null +++ b/packages/scout/src/utils.js @@ -0,0 +1,70 @@ + +import slugify from 'slugify' +import path, { basename } from 'node:path' +import os from 'node:os' +import fs from 'node:fs' +import { createId } from '@paralleldrive/cuid2' +import { ua0 } from './ua.js' +import { Readable } from 'stream' +import { finished } from 'stream/promises' +import pRetry from 'p-retry' + +export function fpSlugify(str) { + return slugify(str, { + lower: true, + strict: true, + locale: 'en', + trim: true + }) +} + +export function getTmpFile(str) { + return path.join(os.tmpdir(), `${createId()}_${basename(str)}`) +} + +/** + * + * @param {Object} limiter [https://github.com/jhurliman/node-rate-limiter](node-rate-limiter) instance + * @param {String} url + * @returns {String} filePath + * + * greetz https://stackoverflow.com/a/74722818/1004931 + */ +export async function download({ limiter, url, filePath }) { + if (!limiter) throw new Error(`first arg passed to download() must be a node-rate-limiter instance.`); + if (!url) throw new Error(`second arg passed to download() must be a {string} url`); + const fileBaseName = basename(url) + filePath = filePath || path.join(os.tmpdir(), `${createId()}_${fileBaseName}`) + const stream = fs.createWriteStream(filePath) + await limiter.removeTokens(1); + + const requestData = async () => { + const response = await fetch(url, { + headers: { + 'user-agent': ua0 + } + }) + + const { body } = response + await finished(Readable.fromWeb(body).pipe(stream)) + + // Abort retrying if the resource doesn't exist + if (response.status === 404) { + throw new AbortError(response.statusText); + } + + return + } + + try { + await pRetry(requestData, { retries: 3 }) + } catch (e) { + console.error(`utils.download failed to download ${url}`) + console.error(e) + return null + } + return filePath +} + + +export const tmpFileRegex = /^\/tmp\/.*\.jpg$/ \ No newline at end of file diff --git a/packages/scout/src/utils.spec.js b/packages/scout/src/utils.spec.js new file mode 100644 index 0000000..3a5f179 --- /dev/null +++ b/packages/scout/src/utils.spec.js @@ -0,0 +1,27 @@ +import { fpSlugify, getTmpFile, download } from './utils.js' +import { expect } from 'chai' +import { describe } from 'mocha' +import { RateLimiter } from "limiter" + + +describe('utils', function () { + describe('fpSlugify', function () { + it('should remove all capitalization and uppercase and spaces and special characters', function () { + expect(fpSlugify('ProjektMelody')).to.equal('projektmelody') + expect(fpSlugify('CJ_Clippy')).to.equal('cjclippy') + }) + }) + describe('getTmpFile', function () { + it('should give a /tmp/_ path', function () { + expect(getTmpFile('my-cool-image.webp')).to.match(/\/tmp\/.*_my-cool-image\.webp/) + expect(getTmpFile('video.mp4')).to.match(/\/tmp\/.*_video\.mp4/) + }) + }), + describe('download', function () { + const limiter = new RateLimiter({ tokensPerInterval: 100, interval: "second" }) + it('should get the file', async function () { + const file = await download({ limiter, url: 'https://futureporn-b2.b-cdn.net/sample.webp' }) + expect(file).to.match(/\/tmp\/.*sample\.webp$/) + }) + }) +}) \ No newline at end of file diff --git a/packages/scout/src/vtuber.js b/packages/scout/src/vtuber.js new file mode 100644 index 0000000..d99c283 --- /dev/null +++ b/packages/scout/src/vtuber.js @@ -0,0 +1,47 @@ + +import dotenv from 'dotenv' +dotenv.config({ + path: '../../.env' +}) +import twitter from './twitter.js' +import fansly from './fansly.js' + + +/** + * Acquire a vtuber image from the www + * + * Sources preference + * 1. Twitter + * 2. Fansly + * + * Our task is to download an avatar image of the vtuber. + * A slug is good for pulling a record from the database. From there, we can see any social medias such as Twitter or Fansly. + * Twitter is preferred. + * + * We depend on one of these social media URLs. If there is neither Twitter or fansly listed, we throw an error. + * + * @param {Object} limiter -- instance of node-rate-limiter + * @param {Object} vtuber -- vtuber instance from strapi + * @returns {String} filePath -- path on disk where the image was saved + */ +export async function getImage(limiter, vtuber) { + if (!limiter) throw new Error('first arg must be node-rate-limiter instace'); + if (!vtuber) throw new Error('second arg must be vtuber instance'); + await limiter.removeTokens(1); + + const { twitter: twitterUrl, fanslyId: fanslyId } = vtuber.attributes + const twitterUsername = twitterUrl && twitter.regex.username.exec(twitterUrl).at(1) + + let img; + if (twitterUrl) { + img = await twitter.data.image(limiter, twitterUsername) + } else if (fanslyId) { + img = await fansly.data.image(limiter, fanslyId) + } else { + const msg = 'while attempting to get vtuber image, there was neither twitter nor fansly listed. One of these must exist for us to download an image.' + console.error(msg) + throw new Error(msg) + } + return img + +} \ No newline at end of file diff --git a/packages/scout/src/vtuber.spec.js b/packages/scout/src/vtuber.spec.js new file mode 100644 index 0000000..fe8812f --- /dev/null +++ b/packages/scout/src/vtuber.spec.js @@ -0,0 +1,38 @@ + +import { expect } from 'chai' +import { describe } from 'mocha' +import { RateLimiter } from 'limiter' +import { getImage } from './vtuber.js' +import { tmpFileRegex } from './utils.js' + +const vtuberFixture0 = { + id: 0, + attributes: { + slug: 'projektmelody', + twitter: 'https://x.com/projektmelody', + fansly: 'https://fansly.com/projektmelody' + } +} +const vtuberFixture1 = { + id: 0, + attributes: { + slug: 'projektmelody', + twitter: undefined, + fanslyId: '284824898138812416' + } +} + +describe('vtuber', function () { + this.timeout(1000*60) + describe('getImage', function () { + const limiter = new RateLimiter({ tokensPerInterval: 1, interval: "second" }) + it('should download an avatar image from twitter', async function () { + const file = await getImage(limiter, vtuberFixture0) + expect(file).to.match(tmpFileRegex) + }) + it('should download an avatar image from fansly', async function () { + const file = await getImage(limiter, vtuberFixture1) + expect(file).to.match(tmpFileRegex) + }) + }) +}) \ No newline at end of file diff --git a/packages/strapi/src/api/stream/content-types/stream/lifecycles.js b/packages/strapi/src/api/stream/content-types/stream/lifecycles.js index 9134ba4..464dc68 100644 --- a/packages/strapi/src/api/stream/content-types/stream/lifecycles.js +++ b/packages/strapi/src/api/stream/content-types/stream/lifecycles.js @@ -20,6 +20,14 @@ module.exports = { }, async afterUpdate(event) { + + + /** + * NOTE + * + * These hooks do not fire in response to API calls. They only fire in response to UI saves. + */ + console.log(`>>>>>>>>>>>>>> STREAM is afterUpdate !!!!!!!!!!!!`); const { data, where, select, populate } = event.params; console.log(data); diff --git a/scripts/k8s-secrets.sh b/scripts/k8s-secrets.sh index 2b408d0..c98ca26 100755 --- a/scripts/k8s-secrets.sh +++ b/scripts/k8s-secrets.sh @@ -39,6 +39,7 @@ kubectl --namespace futureporn create secret generic scout \ --from-literal=imapUsername=${SCOUT_IMAP_USERNAME} \ --from-literal=imapPassword=${SCOUT_IMAP_PASSWORD} \ --from-literal=imapAccessToken=${SCOUT_IMAP_ACCESS_TOKEN} \ +--from-literal=nitterAccessKey=${SCOUT_NITTER_ACCESS_KEY} kubectl --namespace futureporn delete secret link2cid --ignore-not-found kubectl --namespace futureporn create secret generic link2cid \ @@ -85,3 +86,4 @@ kubectl --namespace futureporn create secret generic strapi \ kubectl --namespace futureporn delete secret realtime --ignore-not-found kubectl --namespace futureporn create secret generic realtime \ --from-literal=postgresRealtimeConnectionString=${POSTGRES_REALTIME_CONNECTION_STRING} + diff --git a/t.wip.tiltfile b/t.wip.tiltfile index b1eae40..c182c3c 100644 --- a/t.wip.tiltfile +++ b/t.wip.tiltfile @@ -24,7 +24,23 @@ dotenv(fn='.env') # args=['--default_config_file=%s' % os.getenv('TILT_NGROK_DEFAULT_CONFIG_FILE')] -# load('ext://helm_remote', 'helm_remote') +load('ext://helm_remote', 'helm_remote') +# helm_remote( +# 'redis', +# repo_name='redis', +# repo_url='https://charts.bitnami.com/bitnami', +# namespace='futureporn', +# version='19.5.0', +# values=['./charts/nitter/redis.values.yaml'] +# ) + +# helm_remote( +# 'nitter', +# repo_name='truecharts', +# repo_url='https://charts.truecharts.org', +# namespace='futureporn', +# version='7.1.4', +# ) # helm_remote( # 'frp-operator', # repo_name='frp-operator', @@ -45,6 +61,11 @@ dotenv(fn='.env') # ) +# k8s_yaml(helm( +# './charts/nitter', +# values=['./charts/nitter/values.yaml'], +# )) + k8s_yaml(helm( './charts/fp', values=['./charts/fp/values-dev.yaml'], @@ -187,8 +208,12 @@ k8s_resource( port_forwards=['5432'] ) -k8s_resource( - workload='pgadmin', - port_forwards=['5050'] -) +# k8s_resource( +# workload='pgadmin', +# port_forwards=['5050'] +# ) +# k8s_resource( +# workload='nitter', +# port_forwards=['6060:10606'], +# ) \ No newline at end of file