From 1b234e15d092826a83784901543e1fea65bf5f04 Mon Sep 17 00:00:00 2001 From: Feavy Date: Sun, 9 Mar 2025 00:29:20 +0100 Subject: [PATCH 01/75] fix lib --- packages/cli/package.json | 3 +- packages/cli/src/index.ts | 7 +- packages/cli/src/lib | 1 - packages/lib/package.json | 23 + packages/lib/src/index.ts | 3 + packages/lib/test.ts | 3 - packages/lib/tsconfig.json | 18 + packages/lib/vite.config.js | 14 + pnpm-lock.yaml | 1057 +++++++++++++++++++++++++++++++++++ 9 files changed, 1123 insertions(+), 6 deletions(-) delete mode 120000 packages/cli/src/lib create mode 100644 packages/lib/package.json create mode 100644 packages/lib/src/index.ts delete mode 100644 packages/lib/test.ts create mode 100644 packages/lib/tsconfig.json create mode 100644 packages/lib/vite.config.js diff --git a/packages/cli/package.json b/packages/cli/package.json index 5d2b24f..0a4c638 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -19,6 +19,7 @@ "@vercel/ncc": "^0.38.3", "yaml": "^2.7.0", "zod": "^3.24.2", - "zod-validation-error": "^3.4.0" + "zod-validation-error": "^3.4.0", + "lib": "workspace:*" } } diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index d311628..03fcc02 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -3,7 +3,12 @@ import { fromError } from 'zod-validation-error'; import KubernetesWorkspace from './kubernetes/KubernetesWorkspace'; import * as yaml from 'yaml' import * as dotenv from 'dotenv'; -import lib from "./lib/test"; +import { lib } from "lib"; + +/* +CLI Parameters: +--regenerate -r: Regenerate passwords + */ dotenv.config(); diff --git a/packages/cli/src/lib b/packages/cli/src/lib deleted file mode 120000 index 58677dd..0000000 --- a/packages/cli/src/lib +++ /dev/null @@ -1 +0,0 @@ -../../lib \ No newline at end of file diff --git a/packages/lib/package.json b/packages/lib/package.json new file mode 100644 index 0000000..8453c39 --- /dev/null +++ b/packages/lib/package.json @@ -0,0 +1,23 @@ +{ + "name": "lib", + "version": "1.0.0", + "main": "dist/index.js", + "type": "module", + "exports": { + ".": { + "import": "./dist/index.js", + "types": "./types/index.d.ts" + } + }, + "scripts": { + "build": "run-p build:vite build:types", + "build:vite": "vite build", + "build:types": "tsc" + }, + "keywords": [], + "devDependencies": { + "npm-run-all": "^4.1.5", + "typescript": "^5.7.3", + "vite": "^6.2.1" + } +} diff --git a/packages/lib/src/index.ts b/packages/lib/src/index.ts new file mode 100644 index 0000000..ad9f7d3 --- /dev/null +++ b/packages/lib/src/index.ts @@ -0,0 +1,3 @@ +export function lib() { + return "lib"; +} \ No newline at end of file diff --git a/packages/lib/test.ts b/packages/lib/test.ts deleted file mode 100644 index 27251bc..0000000 --- a/packages/lib/test.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default function lib() { - return "lib"; -} \ No newline at end of file diff --git a/packages/lib/tsconfig.json b/packages/lib/tsconfig.json new file mode 100644 index 0000000..7aa1248 --- /dev/null +++ b/packages/lib/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "es2018", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "lib": ["DOM", "ESNext"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + "module": "ESNext", /* Specify what module code is generated. */ + "moduleResolution": "bundler", /* Specify how TypeScript looks up a file from a given module specifier. */ + "outDir": "./types", /* Specify an output folder for all emitted files. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + "emitDeclarationOnly": true, + "strict": true, /* Enable all strict type-checking options. */ + "skipLibCheck": true, /* Skip type checking all .d.ts files. */ + "declaration": true + }, + "include": [ + "src/**/*.ts" + ] +} diff --git a/packages/lib/vite.config.js b/packages/lib/vite.config.js new file mode 100644 index 0000000..0d8639c --- /dev/null +++ b/packages/lib/vite.config.js @@ -0,0 +1,14 @@ +import { resolve } from 'path' +import { defineConfig } from 'vite' + +export default defineConfig({ + build: { + lib: { + entry: resolve(__dirname, 'src/index.ts'), + name: 'index', + fileName: 'index', + // formats: ["es"], + // formats: ["iife"] + } + } +}) \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ea851c8..75a4eec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,6 +36,9 @@ importers: '@vercel/ncc': specifier: ^0.38.3 version: 0.38.3 + lib: + specifier: workspace:* + version: link:../lib yaml: specifier: ^2.7.0 version: 2.7.0 @@ -46,6 +49,18 @@ importers: specifier: ^3.4.0 version: 3.4.0(zod@3.24.2) + packages/lib: + devDependencies: + npm-run-all: + specifier: ^4.1.5 + version: 4.1.5 + typescript: + specifier: ^5.7.3 + version: 5.8.2 + vite: + specifier: ^6.2.1 + version: 6.2.1(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + packages/server: dependencies: '@solidjs/meta': @@ -1631,6 +1646,10 @@ packages: resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -1658,6 +1677,14 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + arrify@2.0.1: resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} engines: {node: '>=8'} @@ -1670,6 +1697,10 @@ packages: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} @@ -1682,6 +1713,10 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} @@ -1724,6 +1759,9 @@ packages: resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} engines: {node: '>=14.16'} + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} @@ -1761,6 +1799,14 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + camelcase@7.0.1: resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} @@ -1771,6 +1817,10 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + chalk@5.4.1: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} @@ -1815,10 +1865,16 @@ packages: resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} + 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==} @@ -1845,6 +1901,9 @@ packages: resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} engines: {node: '>= 14'} + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} @@ -1880,6 +1939,10 @@ packages: resolution: {integrity: sha512-onMB0OkDjkXunhdW9htFjEhqrD54+M94i6ackoUkjHKbRnXdyEyKRelp4nJ1kAz32+s27jP1FsebpJCVl0BsvA==} engines: {node: '>=18.0'} + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} + engines: {node: '>=4.8'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -1890,6 +1953,18 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + dax-sh@0.39.2: resolution: {integrity: sha512-gpuGEkBQM+5y6p4cWaw9+ePy5TNon+fdwFVtTI8leU3UhwhsBfPewRxMXGuQNC+M2b/MDGMlfgpqynkcd0C3FQ==} @@ -1945,10 +2020,18 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} @@ -2052,9 +2135,16 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + engines: {node: '>= 0.4'} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -2074,6 +2164,10 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + esbuild@0.20.2: resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} @@ -2096,6 +2190,10 @@ packages: escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -2192,6 +2290,10 @@ packages: debug: optional: true + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -2220,9 +2322,16 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + functional-red-black-tree@1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + gaxios@6.7.1: resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} engines: {node: '>=14'} @@ -2254,6 +2363,10 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + get-tsconfig@4.10.0: resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} @@ -2273,6 +2386,10 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + globby@14.1.0: resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} engines: {node: '>=18'} @@ -2310,6 +2427,21 @@ packages: h3@1.15.1: resolution: {integrity: sha512-+ORaOBttdUm1E2Uu/obAyCguiI7MbBvsLTndc3gyK3zU+SYLoZXlyCP9Xgy0gikkGufFLTZXCXD6+4BsufnmHA==} + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -2331,6 +2463,9 @@ packages: hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + html-entities@2.3.3: resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} @@ -2394,6 +2529,10 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + ioredis@5.6.0: resolution: {integrity: sha512-tBZlIIWbndeWBWCXWZiqtOF/yxf6yZX3tAlTJ7nfo5jhd6dctNxF7QnYlZLZ1a0o0pDoen7CgZqO+zjNaFbJAg==} engines: {node: '>=12.22.0'} @@ -2401,14 +2540,45 @@ packages: iron-webcrypto@1.2.1: resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} @@ -2423,10 +2593,18 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -2436,9 +2614,17 @@ packages: engines: {node: '>=14.16'} hasBin: true + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -2446,6 +2632,18 @@ packages: is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -2454,6 +2652,30 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + is-what@4.1.16: resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} engines: {node: '>=12.13'} @@ -2473,6 +2695,9 @@ packages: isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2528,6 +2753,9 @@ packages: json-bigint@1.0.0: resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -2646,6 +2874,10 @@ packages: resolution: {integrity: sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==} hasBin: true + load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + local-pkg@1.1.1: resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} engines: {node: '>=14'} @@ -2718,6 +2950,10 @@ packages: mdast-util-to-hast@13.2.0: resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + merge-anything@5.1.7: resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} engines: {node: '>=12.13'} @@ -2775,6 +3011,9 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@5.1.6: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} @@ -2814,6 +3053,9 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + nitropack@2.11.4: resolution: {integrity: sha512-m0mSdvTAd/VKJK/B84JUtfKgFKIdqDFjJh5XoVvdeRhprldSvA3hs5G+Q1FlitP92UyBV4//F4D4zky7EIyxJw==} engines: {node: ^16.11.0 || >=17.0.0} @@ -2858,10 +3100,18 @@ packages: engines: {node: ^18.17.0 || >=20.5.0} hasBin: true + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + npm-run-all@4.1.5: + resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} + engines: {node: '>= 4'} + hasBin: true + npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2878,6 +3128,18 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + ofetch@1.4.1: resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} @@ -2914,6 +3176,10 @@ packages: openid-client@6.3.3: resolution: {integrity: sha512-lTK8AV8SjqCM4qznLX0asVESAwzV39XTVdfMAM185ekuaZCnkWdPzcxMTXNlsm9tsUAMa1Q30MBmKAykdT1LWw==} + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -2921,6 +3187,10 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + parse-json@8.1.0: resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} engines: {node: '>=18'} @@ -2932,6 +3202,10 @@ packages: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -2950,6 +3224,10 @@ packages: path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + path-type@3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + path-type@6.0.0: resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} engines: {node: '>=18'} @@ -2974,6 +3252,15 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + pidtree@0.3.1: + resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} + engines: {node: '>=0.10'} + hasBin: true + + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} @@ -2984,6 +3271,10 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + postcss@8.5.3: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} @@ -3029,6 +3320,10 @@ packages: rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + read-pkg@3.0.0: + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} + readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -3063,6 +3358,10 @@ packages: resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} engines: {node: '>=4'} + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + regex-recursion@5.1.1: resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==} @@ -3072,6 +3371,10 @@ packages: regex@5.1.1: resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==} + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -3135,15 +3438,31 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + scule@1.3.0: resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -3177,20 +3496,60 @@ packages: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shell-quote@1.8.2: + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} + engines: {node: '>= 0.4'} + shiki@1.29.2: resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==} + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -3234,6 +3593,18 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + stackframe@1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} @@ -3268,6 +3639,22 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string.prototype.padend@3.1.6: + resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -3285,6 +3672,10 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} @@ -3298,6 +3689,10 @@ packages: stubs@3.0.0: resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + supports-color@9.4.0: resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} engines: {node: '>=12'} @@ -3393,6 +3788,22 @@ packages: resolution: {integrity: sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==} engines: {node: '>=16'} + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + typescript@5.8.2: resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} @@ -3404,6 +3815,10 @@ packages: ultrahtml@1.5.3: resolution: {integrity: sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==} + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -3571,6 +3986,9 @@ packages: validate-html-nesting@1.2.2: resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} @@ -3699,6 +4117,26 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.18: + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -5411,6 +5849,10 @@ snapshots: ansi-regex@6.1.0: {} + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -5446,6 +5888,21 @@ snapshots: argparse@2.0.1: {} + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + arrify@2.0.1: optional: true @@ -5455,6 +5912,8 @@ snapshots: astring@1.9.0: {} + async-function@1.0.0: {} + async-retry@1.3.3: dependencies: retry: 0.13.1 @@ -5466,6 +5925,10 @@ snapshots: asynckit@0.4.0: {} + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + b4a@1.6.7: {} babel-dead-code-elimination@1.0.9: @@ -5520,6 +5983,11 @@ snapshots: widest-line: 4.0.1 wrap-ansi: 8.1.0 + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 @@ -5568,12 +6036,30 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + camelcase@7.0.1: {} caniuse-lite@1.0.30001702: {} ccount@2.0.1: {} + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + chalk@5.4.1: {} change-case@5.4.4: {} @@ -5620,10 +6106,16 @@ snapshots: cluster-key-slot@1.1.2: {} + 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: {} colorette@1.4.0: {} @@ -5648,6 +6140,8 @@ snapshots: normalize-path: 3.0.0 readable-stream: 4.7.0 + concat-map@0.0.1: {} + confbox@0.1.8: {} confbox@0.2.1: {} @@ -5671,6 +6165,14 @@ snapshots: croner@9.0.0: {} + cross-spawn@6.0.6: + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.2 + shebang-command: 1.2.0 + which: 1.3.1 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -5683,6 +6185,24 @@ snapshots: csstype@3.1.3: {} + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + dax-sh@0.39.2: dependencies: '@deno/shim-deno': 0.19.2 @@ -5704,8 +6224,20 @@ snapshots: deepmerge@4.3.1: {} + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + define-lazy-prop@2.0.0: {} + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + defu@6.1.4: {} delayed-stream@1.0.0: {} @@ -5786,10 +6318,68 @@ snapshots: entities@4.5.0: {} + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + error-stack-parser@2.1.4: dependencies: stackframe: 1.3.4 + es-abstract@1.23.9: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.18 + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -5807,6 +6397,12 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + esbuild@0.20.2: optionalDependencies: '@esbuild/aix-ppc64': 0.20.2 @@ -5893,6 +6489,8 @@ snapshots: escape-html@1.0.3: {} + escape-string-regexp@1.0.5: {} + escape-string-regexp@5.0.0: {} esprima@4.0.1: {} @@ -6018,6 +6616,10 @@ snapshots: follow-redirects@1.15.9: {} + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -6052,9 +6654,20 @@ snapshots: function-bind@1.1.2: {} + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + functional-red-black-tree@1.0.1: optional: true + functions-have-names@1.2.3: {} + gaxios@6.7.1: dependencies: extend: 3.0.2 @@ -6101,6 +6714,12 @@ snapshots: get-stream@8.0.1: {} + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + get-tsconfig@4.10.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -6129,6 +6748,11 @@ snapshots: globals@11.12.0: {} + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + globby@14.1.0: dependencies: '@sindresorhus/merge-streams': 2.3.0 @@ -6212,6 +6836,18 @@ snapshots: ufo: 1.5.4 uncrypto: 0.1.3 + has-bigints@1.1.0: {} + + has-flag@3.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -6242,6 +6878,8 @@ snapshots: hookable@5.5.3: {} + hosted-git-info@2.8.9: {} + html-entities@2.3.3: {} html-entities@2.5.2: @@ -6309,6 +6947,12 @@ snapshots: inherits@2.0.4: {} + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + ioredis@5.6.0: dependencies: '@ioredis/commands': 1.2.0 @@ -6325,22 +6969,71 @@ snapshots: iron-webcrypto@1.2.1: {} + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-arrayish@0.2.1: {} + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + is-core-module@2.16.1: dependencies: hasown: 2.0.2 + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-docker@2.2.1: {} is-docker@3.0.0: {} is-extglob@2.1.1: {} + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + is-fullwidth-code-point@3.0.0: {} + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -6349,18 +7042,64 @@ snapshots: dependencies: is-docker: 3.0.0 + is-map@2.0.3: {} + is-module@1.0.0: {} + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-number@7.0.0: {} is-reference@1.2.1: dependencies: '@types/estree': 1.0.6 + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + is-stream@2.0.1: {} is-stream@3.0.0: {} + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.18 + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-what@4.1.16: {} is-wsl@2.2.0: @@ -6377,6 +7116,8 @@ snapshots: isarray@1.0.0: {} + isarray@2.0.5: {} + isexe@2.0.0: {} isexe@3.1.1: {} @@ -6417,6 +7158,8 @@ snapshots: dependencies: bignumber.js: 9.1.2 + json-parse-better-errors@1.0.2: {} + json-schema-traverse@1.0.0: {} json5@2.2.3: {} @@ -6555,6 +7298,13 @@ snapshots: untun: 0.1.3 uqr: 0.1.2 + load-json-file@4.0.0: + dependencies: + graceful-fs: 4.2.11 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + local-pkg@1.1.1: dependencies: mlly: 1.7.4 @@ -6632,6 +7382,8 @@ snapshots: unist-util-visit: 5.0.0 vfile: 6.0.3 + memorystream@0.3.1: {} + merge-anything@5.1.7: dependencies: is-what: 4.1.16 @@ -6676,6 +7428,10 @@ snapshots: mimic-fn@4.0.0: {} + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + minimatch@5.1.6: dependencies: brace-expansion: 2.0.1 @@ -6708,6 +7464,8 @@ snapshots: nanoid@3.3.8: {} + nice-try@1.0.5: {} + nitropack@2.11.4(typescript@5.8.2): dependencies: '@cloudflare/kv-asset-handler': 0.3.4 @@ -6831,8 +7589,27 @@ snapshots: dependencies: abbrev: 3.0.0 + normalize-package-data@2.5.0: + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.10 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + normalize-path@3.0.0: {} + npm-run-all@4.1.5: + dependencies: + ansi-styles: 3.2.1 + chalk: 2.4.2 + cross-spawn: 6.0.6 + memorystream: 0.3.1 + minimatch: 3.1.2 + pidtree: 0.3.1 + read-pkg: 3.0.0 + shell-quote: 1.8.2 + string.prototype.padend: 3.1.6 + npm-run-path@5.3.0: dependencies: path-key: 4.0.0 @@ -6850,6 +7627,19 @@ snapshots: object-hash@3.0.0: optional: true + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + ofetch@1.4.1: dependencies: destr: 2.0.3 @@ -6899,6 +7689,12 @@ snapshots: jose: 6.0.8 oauth4webapi: 3.3.0 + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -6906,6 +7702,11 @@ snapshots: package-json-from-dist@1.0.1: {} + parse-json@4.0.0: + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + parse-json@8.1.0: dependencies: '@babel/code-frame': 7.26.2 @@ -6918,6 +7719,8 @@ snapshots: parseurl@1.3.3: {} + path-key@2.0.1: {} + path-key@3.1.1: {} path-key@4.0.0: {} @@ -6931,6 +7734,10 @@ snapshots: path-to-regexp@6.3.0: {} + path-type@3.0.0: + dependencies: + pify: 3.0.0 + path-type@6.0.0: {} pathe@1.1.2: {} @@ -6945,6 +7752,10 @@ snapshots: picomatch@4.0.2: {} + pidtree@0.3.1: {} + + pify@3.0.0: {} + pkg-types@1.3.1: dependencies: confbox: 0.1.8 @@ -6959,6 +7770,8 @@ snapshots: pluralize@8.0.0: {} + possible-typed-array-names@1.1.0: {} + postcss@8.5.3: dependencies: nanoid: 3.3.8 @@ -7010,6 +7823,12 @@ snapshots: defu: 6.1.4 destr: 2.0.3 + read-pkg@3.0.0: + dependencies: + load-json-file: 4.0.0 + normalize-package-data: 2.5.0 + path-type: 3.0.0 + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -7059,6 +7878,17 @@ snapshots: dependencies: redis-errors: 1.2.0 + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + regex-recursion@5.1.1: dependencies: regex: 5.1.1 @@ -7070,6 +7900,15 @@ snapshots: dependencies: regex-utilities: 2.3.0 + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -7145,12 +7984,33 @@ snapshots: dependencies: queue-microtask: 1.2.3 + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + scule@1.3.0: {} + semver@5.7.2: {} + semver@6.3.1: {} semver@7.7.1: {} @@ -7196,14 +8056,44 @@ snapshots: transitivePeerDependencies: - supports-color + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + setprototypeof@1.2.0: {} + shebang-command@1.2.0: + dependencies: + shebang-regex: 1.0.0 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 + shebang-regex@1.0.0: {} + shebang-regex@3.0.0: {} + shell-quote@1.8.2: {} + shiki@1.29.2: dependencies: '@shikijs/core': 1.29.2 @@ -7215,6 +8105,34 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + signal-exit@4.1.0: {} slash@5.1.0: {} @@ -7253,6 +8171,20 @@ snapshots: space-separated-tokens@2.0.2: {} + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.21 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.21 + + spdx-license-ids@3.0.21: {} + stackframe@1.3.4: {} standard-as-callback@2.1.0: {} @@ -7290,6 +8222,36 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + string.prototype.padend@3.1.6: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -7311,6 +8273,8 @@ snapshots: dependencies: ansi-regex: 6.1.0 + strip-bom@3.0.0: {} + strip-final-newline@3.0.0: {} strip-literal@3.0.0: @@ -7323,6 +8287,10 @@ snapshots: stubs@3.0.0: optional: true + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + supports-color@9.4.0: {} supports-preserve-symlinks-flag@1.0.0: {} @@ -7416,12 +8384,52 @@ snapshots: type-fest@4.37.0: {} + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + typescript@5.8.2: {} ufo@1.5.4: {} ultrahtml@1.5.3: {} + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + uncrypto@0.1.3: {} unctx@2.4.1: @@ -7576,6 +8584,11 @@ snapshots: validate-html-nesting@1.2.2: {} + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + vfile-message@4.0.2: dependencies: '@types/unist': 3.0.3 @@ -7729,6 +8742,50 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.18 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.18: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@1.3.1: + dependencies: + isexe: 2.0.0 + which@2.0.2: dependencies: isexe: 2.0.0 From 7824282a4552aee7c391995a13471eef9737892f Mon Sep 17 00:00:00 2001 From: Feavy Date: Sun, 9 Mar 2025 00:30:25 +0100 Subject: [PATCH 02/75] add path parameter to YamlRenderer functions --- .../cli/src/config/WorkspaceConfigRenderer.ts | 8 ++++--- packages/cli/src/config/YamlRenderer.ts | 23 ++++++++++--------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/packages/cli/src/config/WorkspaceConfigRenderer.ts b/packages/cli/src/config/WorkspaceConfigRenderer.ts index fc0f1d5..44e77c5 100644 --- a/packages/cli/src/config/WorkspaceConfigRenderer.ts +++ b/packages/cli/src/config/WorkspaceConfigRenderer.ts @@ -23,7 +23,7 @@ export default class WorkspaceConfigRenderer { const renderedConfig = YamlRenderer.fromObject(this.ymlConfig) .with({ env: process.env }) .withFunction("randomPassword", this.randomPassword) - .withFunction("host", this.host.bind(this)) + .withFunction("host", this.host) .excludeFromEvaluation("secrets.*") .preRenderOrFail("secrets") .renderOrFail(); @@ -61,12 +61,14 @@ export default class WorkspaceConfigRenderer { } - public randomPassword(length: number = 32) { + public randomPassword = (length: number = 32) => (path: string) => { + // TODO reuse existing password from secrets if it exists const alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + console.log("Generating random password for", path); return Array.from({ length }, () => alphabet[Math.floor(Math.random() * alphabet.length)]).join(''); } - public host(host: string) { + public host = (host: string) => (path: string) => { return `${host.replace(".", "-")}.${this.ymlConfig.namespace}.svc.cluster.local`; } } \ No newline at end of file diff --git a/packages/cli/src/config/YamlRenderer.ts b/packages/cli/src/config/YamlRenderer.ts index d9e8efa..70eed59 100644 --- a/packages/cli/src/config/YamlRenderer.ts +++ b/packages/cli/src/config/YamlRenderer.ts @@ -28,16 +28,16 @@ export default class YamlRenderer { public preRenderOrFail(prop: string) { // @ts-ignore - this.yaml[prop] = this.renderVariables(this.yaml[prop], "fail"); + this.yaml[prop] = this.renderVariables(this.yaml[prop], prop, "fail"); return this; } public render() { - return this.renderVariables(this.yaml); + return this.renderVariables(this.yaml, ""); } public renderOrFail() { - return this.renderVariables(this.yaml, "fail"); + return this.renderVariables(this.yaml, "", "fail"); } private overrideObject(object: any, override: any) { @@ -59,18 +59,19 @@ export default class YamlRenderer { return object; } - private renderVariables(object: any, ifUndefined: "let" | "fail" = "let") { + private renderVariables(object: any, path: string, ifUndefined: "let" | "fail" = "let") { if (typeof object === 'string') { return object.replace(YamlRenderer.VARIABLE_REGEX, (match, variable) => { // console.log(" ", variable, "->", this.variables.evaluateOrLet(variable)); - return this.evaluate(variable, ifUndefined); + return this.evaluate(variable, path, ifUndefined); }); } else if (typeof object === 'object') { for (const key in object) { - if (typeof object[key] === 'string') { - object[key] = this.renderVariables(object[key], ifUndefined); - } else if (typeof object[key] === 'object') { - object[key] = this.renderVariables(object[key], ifUndefined); + const subPath = path.length === 0 ? key : path + "." + key; + if (typeof object[key] === 'object') { + object[key] = this.renderVariables(object[key], subPath, ifUndefined); + } else { + object[key] = this.renderVariables(object[key].toString(), subPath, ifUndefined); } } return object; @@ -81,7 +82,7 @@ export default class YamlRenderer { return get(this.yaml, accessor); } - public evaluate(variable: string, ifUndefined: "let" | "fail" = "let") { + public evaluate(variable: string, path: string, ifUndefined: "let" | "fail" = "let") { variable = this.processAccessor(variable); for(const regex of this.excludedFromEvaluation) { if(variable.match(regex)) { @@ -90,7 +91,7 @@ export default class YamlRenderer { } if(variable.includes("(")) { try { - const fn = new Function('functions', `return functions.${variable}`); + const fn = new Function('functions', `return functions.${variable}("${path}")`); return fn(this.functions); } catch (e) { } From d100107af8d948cd08f4e74257c0678288e3e448 Mon Sep 17 00:00:00 2001 From: Feavy Date: Sun, 9 Mar 2025 00:37:40 +0100 Subject: [PATCH 03/75] Update README.md --- README.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e118c99..2d04349 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,14 @@ ## Roadmap - [x] Workspace specification file. -- [ ] Workspace components to Kubernetes. -- [ ] Deploy Theia IDE. +- [ ] Create Kubernetes namespace, serviceaccount, deployments, services, configmaps, secrets, ingress. +- [ ] Create web server to handle routing and authentication. + - [ ] Requires Firebase serviceAccountKey.json for authentication. + - [ ] Authentication with GitHub. + - [ ] Home page listing deployed services and their secrets. + - [ ] Email whitelist. +- [ ] Deploy Docker image featuring Theia IDE & custom web server. - [ ] Mount repositories to workspace and Theia pods. + - [ ] Clone with SSH key. - [ ] Include template from GitHub and arbitrary URL. -- [ ] Authentication / SSO / Email whitelist. -- [ ] Build and run custom Dockerfile from repository. -- [ ] Secret access web page. -- [ ] Enable true collaboration in Theia IDE. +- [ ] Create a Theia IDE extension to enable live collaboration client/server mode. From f17e32edda43ff85d8a8afa3703f5dd9559f45fe Mon Sep 17 00:00:00 2001 From: Feavy Date: Sun, 9 Mar 2025 12:03:23 +0100 Subject: [PATCH 04/75] Reuse existing secret for randomPassword() --- packages/cli/package.json | 1 + .../cli/src/config/WorkspaceConfigRenderer.ts | 15 +++++--- .../cli/src/config/types/WorkspaceConfig.ts | 11 +++--- packages/cli/src/index.ts | 36 +++++++++++------- .../cli/src/kubernetes/KubernetesClient.ts | 38 +++++++++++++++++++ .../src/kubernetes/objects/K8sConfigMap.ts | 19 +++++++++- .../cli/src/kubernetes/objects/K8sResource.ts | 12 +++++- .../cli/src/kubernetes/objects/K8sSecret.ts | 25 ++++++++++-- packages/cli/src/test.ts | 8 ++++ packages/cli/src/utils/ObjectUtils.ts | 14 +++++++ 10 files changed, 147 insertions(+), 32 deletions(-) create mode 100644 packages/cli/src/kubernetes/KubernetesClient.ts create mode 100644 packages/cli/src/test.ts diff --git a/packages/cli/package.json b/packages/cli/package.json index 0a4c638..1648dc0 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -6,6 +6,7 @@ "scripts": { "build": "ncc build src/index.ts -o dist", "dev": "tsx src/index.ts --mode development", + "test": "tsx src/test.ts --mode development", "test-k8s": "tsx src/index-k8s.ts" }, "keywords": [], diff --git a/packages/cli/src/config/WorkspaceConfigRenderer.ts b/packages/cli/src/config/WorkspaceConfigRenderer.ts index 44e77c5..b7fcbeb 100644 --- a/packages/cli/src/config/WorkspaceConfigRenderer.ts +++ b/packages/cli/src/config/WorkspaceConfigRenderer.ts @@ -8,14 +8,16 @@ import {map, toArray} from "../utils/ObjectUtils"; import {componentToWorkspaceComponent, WorkspaceConfig} from "./types/WorkspaceConfig"; export default class WorkspaceConfigRenderer { - private ymlConfig: WorkspaceFileYaml; + public ymlConfig: WorkspaceFileYaml; + private existingSecrets: Record = {}; public constructor(workspaceFile: string) { const workspaceYml = fs.readFileSync(workspaceFile, 'utf8'); this.ymlConfig = yaml.parse(workspaceYml); } - public render() { + public render(existingSecrets: Record) { + this.existingSecrets = existingSecrets; this.ymlConfig = workspaceSchema.parse(this.ymlConfig); this.ymlConfig.app.initScripts = this.ymlConfig.app.initScripts.map((script) => "include" in script ? this.renderScriptInclude(script) : script); this.ymlConfig.dependencies = Object.fromEntries(Object.entries(this.ymlConfig.dependencies).flatMap(([key, value]) => "include" in value ? this.renderDependencyInclude(value, key) : [[key, value]])); @@ -24,7 +26,6 @@ export default class WorkspaceConfigRenderer { .with({ env: process.env }) .withFunction("randomPassword", this.randomPassword) .withFunction("host", this.host) - .excludeFromEvaluation("secrets.*") .preRenderOrFail("secrets") .renderOrFail(); @@ -35,7 +36,7 @@ export default class WorkspaceConfigRenderer { subdomainFormat: this.ymlConfig.subdomainFormat, repositories: this.ymlConfig.repositories, nodeSelector: this.ymlConfig.nodeSelector, - components: [{...renderedConfig.app, name: "app"}, ...toArray(renderedConfig.dependencies, 'name')].map((component) => componentToWorkspaceComponent(component, component.name, this.ymlConfig.namespace)), + components: [{...renderedConfig.app, name: "app"}, ...toArray(renderedConfig.dependencies, 'name')].map((component) => componentToWorkspaceComponent(component, component.name, this.ymlConfig.namespace, this.ymlConfig.secrets)), secrets: this.ymlConfig.secrets, } @@ -62,9 +63,11 @@ export default class WorkspaceConfigRenderer { public randomPassword = (length: number = 32) => (path: string) => { - // TODO reuse existing password from secrets if it exists + const key = path.replace("secrets.", ""); + if(key in this.existingSecrets) { + return this.existingSecrets[key]; + } const alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - console.log("Generating random password for", path); return Array.from({ length }, () => alphabet[Math.floor(Math.random() * alphabet.length)]).join(''); } diff --git a/packages/cli/src/config/types/WorkspaceConfig.ts b/packages/cli/src/config/types/WorkspaceConfig.ts index c46ed7f..7b74118 100644 --- a/packages/cli/src/config/types/WorkspaceConfig.ts +++ b/packages/cli/src/config/types/WorkspaceConfig.ts @@ -30,7 +30,11 @@ export interface WorkspaceConfig { components: Array; } -export function componentToWorkspaceComponent(component: Component, name: string, namespace: string): WorkspaceComponent { +export function componentToWorkspaceComponent(component: Component, name: string, namespace: string, secrets: Record = {}): WorkspaceComponent { + function isSecret(value: string): boolean { + return Object.values(secrets).includes(value); + } + const {ports, env, ...rest} = component; return { ...rest, @@ -41,8 +45,3 @@ export function componentToWorkspaceComponent(component: Component, name: string ports: Object.entries(component.ports || {}).map(([name, port]) => ({...port, name})), }; } - -function isSecret(value: string): boolean { - const match = value.toString().matchAll(YamlRenderer.VARIABLE_REGEX); - return match.some((m) => m[1].startsWith('secrets.')); -} \ No newline at end of file diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 03fcc02..b1c18e5 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,9 +1,10 @@ import WorkspaceConfigRenderer from './config/WorkspaceConfigRenderer'; import { fromError } from 'zod-validation-error'; import KubernetesWorkspace from './kubernetes/KubernetesWorkspace'; -import * as yaml from 'yaml' +import * as yaml from 'yaml'; import * as dotenv from 'dotenv'; import { lib } from "lib"; +import KubernetesClient from "./kubernetes/KubernetesClient"; /* CLI Parameters: @@ -19,17 +20,26 @@ if(isDev) { console.log(lib()); -try { - const configRenderer = new WorkspaceConfigRenderer('workspace.yml'); - const workspaceConfig = configRenderer.render(); +(async () => { + try { + const configRenderer = new WorkspaceConfigRenderer('workspace.yml'); + const client = new KubernetesClient(configRenderer.ymlConfig.namespace); + let existingSecret: Record = {}; + if(!process.argv.includes('--regenerate') && await client.workspaceExists()) { + const secret = await client.getSecret('feaspace-secrets'); + if(secret) existingSecret = secret.stringData; + } - // console.log(yaml.stringify(workspaceConfig)); + const workspaceConfig = configRenderer.render(existingSecret); - const kubernetesWorkspace = new KubernetesWorkspace(workspaceConfig); - const resources = kubernetesWorkspace.getResources(); - console.log(resources.map(resource => yaml.stringify(resource.config)).join('---\n')); -} catch (error: any) { - const validationError = fromError(error); - console.error(error); - console.error(validationError.toString()); -} \ No newline at end of file + // console.log(yaml.stringify(workspaceConfig)); + + const kubernetesWorkspace = new KubernetesWorkspace(workspaceConfig); + const resources = kubernetesWorkspace.getResources(); + // console.log(resources.map(resource => yaml.stringify(resource.config)).join('---\n')); + } catch (error: any) { + const validationError = fromError(error); + console.error(error); + console.error(validationError.toString()); + } +})(); diff --git a/packages/cli/src/kubernetes/KubernetesClient.ts b/packages/cli/src/kubernetes/KubernetesClient.ts new file mode 100644 index 0000000..7f1e890 --- /dev/null +++ b/packages/cli/src/kubernetes/KubernetesClient.ts @@ -0,0 +1,38 @@ +import * as k8s from '@kubernetes/client-node'; +import K8sSecret from "./objects/K8sSecret"; + +export default class KubernetesClient { + private readonly k8sApi: k8s.CoreV1Api; + private readonly k8sObjectApi: k8s.KubernetesObjectApi; + + public constructor(public readonly namespace: string) { + const kc = new k8s.KubeConfig(); + kc.loadFromDefault(); + + this.k8sApi = kc.makeApiClient(k8s.CoreV1Api); + this.k8sObjectApi = k8s.KubernetesObjectApi.makeApiClient(kc); + } + + public async workspaceExists() { + return await this.try(this.k8sApi.readNamespace({ + name: this.namespace + })) !== undefined; + } + + public async getSecret(name: string): Promise { + const secret: k8s.V1Secret | undefined = await this.try(this.k8sObjectApi.read(K8sSecret.head(name, this.namespace))); + return secret && new K8sSecret({ + name, + namespace: this.namespace, + data: secret.data! + }, true); + } + + private async try(resource: Promise) { + try { + return await resource; + } catch { + return undefined; + } + } +} \ No newline at end of file diff --git a/packages/cli/src/kubernetes/objects/K8sConfigMap.ts b/packages/cli/src/kubernetes/objects/K8sConfigMap.ts index 1460a65..2017f45 100644 --- a/packages/cli/src/kubernetes/objects/K8sConfigMap.ts +++ b/packages/cli/src/kubernetes/objects/K8sConfigMap.ts @@ -1,7 +1,8 @@ import K8sResource from "./K8sResource"; +import {V1ConfigMap} from "@kubernetes/client-node"; export default class K8sConfigMap extends K8sResource { - public constructor({ name, namespace, data}: {name: string, namespace: string, data: { [key: string]: any }}) { + public constructor({ name, namespace, data}: {name: string, namespace: string, data: Record}) { super({ apiVersion: "v1", kind: "ConfigMap", @@ -10,11 +11,25 @@ export default class K8sConfigMap extends K8sResource { }); } - private static dataValuesToString(data: { [key: string]: any }): { [key: string]: string } { + private static dataValuesToString(data: Record): Record { return Object.entries(data).reduce((acc, [key, value]) => { // @ts-ignore acc[key] = value + ""; return acc; }, {}); } +} + +export function createK8sConfigMap(): V1ConfigMap { + return { + apiVersion: "v1", + kind: "ConfigMap", + metadata: { + name: "test", + namespace: "test" + }, + data: { + "key": "value" + } + }; } \ No newline at end of file diff --git a/packages/cli/src/kubernetes/objects/K8sResource.ts b/packages/cli/src/kubernetes/objects/K8sResource.ts index 1af719f..ceffc8e 100644 --- a/packages/cli/src/kubernetes/objects/K8sResource.ts +++ b/packages/cli/src/kubernetes/objects/K8sResource.ts @@ -1,7 +1,17 @@ +import * as k8s from '@kubernetes/client-node'; + +interface KubernetesObject extends k8s.KubernetesObject { + metadata: { + name: string; + namespace?: string; + }, + [key: string]: any; +} + export default abstract class K8sResource { public readonly name: string; - public constructor(public readonly config: { apiVersion: string, kind: string, metadata: any} & { [key: string]: any }) { + public constructor(public readonly config: KubernetesObject) { this.name = config.metadata.name; } } \ No newline at end of file diff --git a/packages/cli/src/kubernetes/objects/K8sSecret.ts b/packages/cli/src/kubernetes/objects/K8sSecret.ts index ccd6a67..70718a1 100644 --- a/packages/cli/src/kubernetes/objects/K8sSecret.ts +++ b/packages/cli/src/kubernetes/objects/K8sSecret.ts @@ -1,20 +1,37 @@ import K8sResource from "./K8sResource"; export default class K8sSecret extends K8sResource { - public constructor({ name, namespace, data}: {name: string, namespace: string, data: { [key: string]: any }}) { + public readonly stringData: Record; + + public constructor({ name, namespace, data}: {name: string, namespace: string, data: Record}, base64 = false) { super({ + ...K8sSecret.head(name, namespace), + data: base64 ? data : K8sSecret.dataValuesToBase64(data) + }); + this.stringData = base64 ? K8sSecret.dataValuesFromBase64(data) : data; + } + + public static head(name: string, namespace: string) { + return { apiVersion: "v1", kind: "Secret", metadata: { name, namespace }, - data: K8sSecret.dataValuesToBase64(data) - }); + } } - private static dataValuesToBase64(data: { [key: string]: any }): { [key: string]: string } { + private static dataValuesToBase64(data: Record): Record { return Object.entries(data).reduce((acc, [key, value]) => { // @ts-ignore acc[key] = btoa(value.toString()); return acc; }, {}); } + + private static dataValuesFromBase64(data: Record): Record { + return Object.entries(data).reduce((acc, [key, value]) => { + // @ts-ignore + acc[key] = atob(value.toString()); + return acc; + }, {}); + } } \ No newline at end of file diff --git a/packages/cli/src/test.ts b/packages/cli/src/test.ts new file mode 100644 index 0000000..c2a23d2 --- /dev/null +++ b/packages/cli/src/test.ts @@ -0,0 +1,8 @@ +import {merge} from "./utils/ObjectUtils"; +import KubernetesClient from "./kubernetes/KubernetesClient"; + +(async () => { + const client = new KubernetesClient("ppbo"); + console.log(await client.workspaceExists()); + console.log(await client.getSecret("ppbo-secrets")); +})(); \ No newline at end of file diff --git a/packages/cli/src/utils/ObjectUtils.ts b/packages/cli/src/utils/ObjectUtils.ts index e85bf2c..3ec416a 100644 --- a/packages/cli/src/utils/ObjectUtils.ts +++ b/packages/cli/src/utils/ObjectUtils.ts @@ -35,4 +35,18 @@ export function toArray(object: Record, keyName: string = 'key') { return []; } return Object.entries(object).map(([key, value]) => ({ [keyName]: key, ...value })); +} + +export function merge(target: any, source: any) { + for (const key in source) { + if (typeof source[key] === "object") { + if (!target[key]) { + Object.assign(target, { [key]: {} }); + } + merge(target[key], source[key]); + } else { + Object.assign(target, { [key]: source[key] }); + } + } + return target; } \ No newline at end of file From ccb6cc8f876ce6c9a9cdf4e30cce2f57820ab13f Mon Sep 17 00:00:00 2001 From: Feavy Date: Sun, 9 Mar 2025 15:15:54 +0100 Subject: [PATCH 05/75] setup ci to build docker image --- .github/workflows/publish-server-image.yaml | 58 +++++++++++++++++++++ packages/server/.docker/Dockerfile | 14 ++++- packages/server/.docker/entrypoint.sh | 4 ++ packages/server/package.json | 2 +- 4 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/publish-server-image.yaml create mode 100644 packages/server/.docker/entrypoint.sh diff --git a/.github/workflows/publish-server-image.yaml b/.github/workflows/publish-server-image.yaml new file mode 100644 index 0000000..8265fdf --- /dev/null +++ b/.github/workflows/publish-server-image.yaml @@ -0,0 +1,58 @@ +## Create a boilerplate of a github workflow to build and publish a docker image to ghcr.io +name: Publish Server Image + +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 10 + run_install: false + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: 'pnpm' + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + platforms: linux/amd64,linux/arm64 + + - name: Configure Docker Buildx + run: | + docker buildx create --name mybuilder + docker buildx use mybuilder + docker buildx inspect --bootstrap + + - name: Login to GitHub Container Registry + run: echo ${{ secrets.PAT }} | docker login ghcr.io --username feavy --password-stdin + + - name: Build server + run: | + cd packages/server + echo "Building server" + pnpm i --frozen-lockfile + pnpm run build + echo "Resolving symlinks" + find ./.output -type l -exec sh -c 'for i in "$@"; do dest=$(readlink -f "$i"); rm -rf "$i"; cp -r $dest $i; done' sh {} + + echo "Building Docker image" + docker buildx build . -f .docker/Dockerfile --platform=linux/arm64,linux/amd64 -t ${DOCKER_IMAGE} + docker push ${DOCKER_IMAGE} + env: + DOCKER_IMAGE: ghcr.io/feavy/feaspace:latest diff --git a/packages/server/.docker/Dockerfile b/packages/server/.docker/Dockerfile index 6ff7432..b8bb135 100644 --- a/packages/server/.docker/Dockerfile +++ b/packages/server/.docker/Dockerfile @@ -66,12 +66,22 @@ RUN curl -L https://raw.github.com/git/git/master/contrib/completion/git-prompt. echo "source ~/.bash_git;PS1='\[\033[01;32m\]\u\[\033[00m\] \[\033[01;34m\]\w\[\033[00m\]\$(__git_ps1 \" (%s)\") $ '" >> .bashrc && \ echo "source ~/.bashrc" >> .bash_profile -COPY --chown=theia:theia default.gitconfig .gitconfig +COPY --chown=theia:theia .docker/default.gitconfig .gitconfig ###### END CUSTOMIZATION ################################################################################# +###### FEASPACE SERVER ################################################################################### + +COPY --chown=theia:theia .output /home/theia/feaspace +COPY --chown=theia:theia .docker/entrypoint.sh /home/theia/entrypoint.sh + +ENV NITRO_PORT=3001 +EXPOSE 3001 + +###### END FEASPACE SERVER ############################################################################## + # Launch the backend application via node -ENTRYPOINT [ "node", "/home/theia/applications/browser/lib/backend/main.js" ] +ENTRYPOINT [ "/home/theia/entrypoint.sh" ] # Arguments passed to the application CMD [ "/workspace", "--hostname=0.0.0.0" ] diff --git a/packages/server/.docker/entrypoint.sh b/packages/server/.docker/entrypoint.sh new file mode 100644 index 0000000..06d9041 --- /dev/null +++ b/packages/server/.docker/entrypoint.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +node /home/theia/feaspace/server/index.mjs & +node /home/theia/applications/browser/lib/backend/main.js $@ diff --git a/packages/server/package.json b/packages/server/package.json index b194cc3..34cbe70 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -3,7 +3,7 @@ "type": "module", "scripts": { "dev": "vinxi dev", - "build": "vinxi build", + "build": "vinxi build --preset node-server", "start": "vinxi start", "version": "vinxi version" }, From cd61c5ecf4a9385a46385033dd0862ae74a640c1 Mon Sep 17 00:00:00 2001 From: Feavy Date: Sun, 9 Mar 2025 15:34:04 +0100 Subject: [PATCH 06/75] setup ci to build docker image --- .github/workflows/publish-server-image.yaml | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/.github/workflows/publish-server-image.yaml b/.github/workflows/publish-server-image.yaml index 8265fdf..6123029 100644 --- a/.github/workflows/publish-server-image.yaml +++ b/.github/workflows/publish-server-image.yaml @@ -40,6 +40,13 @@ jobs: docker buildx use mybuilder docker buildx inspect --bootstrap + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Login to GitHub Container Registry run: echo ${{ secrets.PAT }} | docker login ghcr.io --username feavy --password-stdin @@ -51,8 +58,11 @@ jobs: pnpm run build echo "Resolving symlinks" find ./.output -type l -exec sh -c 'for i in "$@"; do dest=$(readlink -f "$i"); rm -rf "$i"; cp -r $dest $i; done' sh {} + - echo "Building Docker image" - docker buildx build . -f .docker/Dockerfile --platform=linux/arm64,linux/amd64 -t ${DOCKER_IMAGE} - docker push ${DOCKER_IMAGE} - env: - DOCKER_IMAGE: ghcr.io/feavy/feaspace:latest + + - name: Build and push Docker Image + uses: docker/build-push-action@v6 + with: + context: ./packages/server + file: ./packages/server/.docker/Dockerfile + push: true + tags: ghcr.io/feavy/workspace/feaspace:latest \ No newline at end of file From 55db565cadce92fc23314f3f141ad086a290e9fd Mon Sep 17 00:00:00 2001 From: Feavy Date: Sun, 9 Mar 2025 16:06:21 +0100 Subject: [PATCH 07/75] setup ci to build docker image --- .github/workflows/publish-server-image.yaml | 2 +- packages/cli/src/index.ts | 2 +- packages/server/.docker/Dockerfile | 10 +++++++--- packages/server/.docker/entrypoint.sh | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/publish-server-image.yaml b/.github/workflows/publish-server-image.yaml index 6123029..ba2d0ba 100644 --- a/.github/workflows/publish-server-image.yaml +++ b/.github/workflows/publish-server-image.yaml @@ -65,4 +65,4 @@ jobs: context: ./packages/server file: ./packages/server/.docker/Dockerfile push: true - tags: ghcr.io/feavy/workspace/feaspace:latest \ No newline at end of file + tags: ghcr.io/feavy/workspace/workspace-server:latest \ No newline at end of file diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index b1c18e5..d895ec6 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -26,7 +26,7 @@ console.log(lib()); const client = new KubernetesClient(configRenderer.ymlConfig.namespace); let existingSecret: Record = {}; if(!process.argv.includes('--regenerate') && await client.workspaceExists()) { - const secret = await client.getSecret('feaspace-secrets'); + const secret = await client.getSecret('workspace-secrets'); if(secret) existingSecret = secret.stringData; } diff --git a/packages/server/.docker/Dockerfile b/packages/server/.docker/Dockerfile index b8bb135..950d5a8 100644 --- a/packages/server/.docker/Dockerfile +++ b/packages/server/.docker/Dockerfile @@ -4,6 +4,10 @@ FROM ghcr.io/eclipse-theia/theia-ide/theia-ide:1.59.1 # Inspired by gitpod base image: https://github.com/gitpod-io/workspace-images/blob/main/base/Dockerfile +LABEL org.opencontainers.image.source=https://github.com/feavy/workspace +LABEL org.opencontainers.image.description="Workspace Server Docker Image" +LABEL org.opencontainers.image.licenses=MIT + USER root RUN apt-get -y update && \ @@ -70,15 +74,15 @@ COPY --chown=theia:theia .docker/default.gitconfig .gitconfig ###### END CUSTOMIZATION ################################################################################# -###### FEASPACE SERVER ################################################################################### +###### WORKSPACE SERVER ################################################################################### -COPY --chown=theia:theia .output /home/theia/feaspace +COPY --chown=theia:theia .output /home/theia/workspace COPY --chown=theia:theia .docker/entrypoint.sh /home/theia/entrypoint.sh ENV NITRO_PORT=3001 EXPOSE 3001 -###### END FEASPACE SERVER ############################################################################## +###### END WORKSPACE SERVER ############################################################################## # Launch the backend application via node ENTRYPOINT [ "/home/theia/entrypoint.sh" ] diff --git a/packages/server/.docker/entrypoint.sh b/packages/server/.docker/entrypoint.sh index 06d9041..23cd985 100644 --- a/packages/server/.docker/entrypoint.sh +++ b/packages/server/.docker/entrypoint.sh @@ -1,4 +1,4 @@ #!/bin/bash -node /home/theia/feaspace/server/index.mjs & +node /home/theia/workspace/server/index.mjs & node /home/theia/applications/browser/lib/backend/main.js $@ From aa0e17e061e1fc8c23d4d5dfd56cc349ead32719 Mon Sep 17 00:00:00 2001 From: Feavy Date: Sun, 9 Mar 2025 16:13:45 +0100 Subject: [PATCH 08/75] entrypoint.sh +x --- packages/server/.docker/entrypoint.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 packages/server/.docker/entrypoint.sh diff --git a/packages/server/.docker/entrypoint.sh b/packages/server/.docker/entrypoint.sh old mode 100644 new mode 100755 From f4afaa3ea15c9cdcc5d40321454030de519843de Mon Sep 17 00:00:00 2001 From: Feavy Date: Tue, 11 Mar 2025 22:44:50 +0100 Subject: [PATCH 09/75] Don't cast evaluated value to string. add readFile, parseYaml, parseJson functions. Add users to schema --- .../cli/src/config/WorkspaceConfigRenderer.ts | 23 ++++++++---- packages/cli/src/config/YamlRenderer.ts | 37 +++++++++++-------- .../src/config/types/WorkspaceFileSchema.ts | 2 + workspace.yml | 1 + 4 files changed, 40 insertions(+), 23 deletions(-) diff --git a/packages/cli/src/config/WorkspaceConfigRenderer.ts b/packages/cli/src/config/WorkspaceConfigRenderer.ts index b7fcbeb..1e6db4c 100644 --- a/packages/cli/src/config/WorkspaceConfigRenderer.ts +++ b/packages/cli/src/config/WorkspaceConfigRenderer.ts @@ -18,16 +18,14 @@ export default class WorkspaceConfigRenderer { public render(existingSecrets: Record) { this.existingSecrets = existingSecrets; + + this.ymlConfig = this.renderYaml(this.ymlConfig); this.ymlConfig = workspaceSchema.parse(this.ymlConfig); + this.ymlConfig.app.initScripts = this.ymlConfig.app.initScripts.map((script) => "include" in script ? this.renderScriptInclude(script) : script); this.ymlConfig.dependencies = Object.fromEntries(Object.entries(this.ymlConfig.dependencies).flatMap(([key, value]) => "include" in value ? this.renderDependencyInclude(value, key) : [[key, value]])); - const renderedConfig = YamlRenderer.fromObject(this.ymlConfig) - .with({ env: process.env }) - .withFunction("randomPassword", this.randomPassword) - .withFunction("host", this.host) - .preRenderOrFail("secrets") - .renderOrFail(); + this.ymlConfig = this.renderYaml(this.ymlConfig); const config: WorkspaceConfig = { version: this.ymlConfig.version, @@ -36,7 +34,7 @@ export default class WorkspaceConfigRenderer { subdomainFormat: this.ymlConfig.subdomainFormat, repositories: this.ymlConfig.repositories, nodeSelector: this.ymlConfig.nodeSelector, - components: [{...renderedConfig.app, name: "app"}, ...toArray(renderedConfig.dependencies, 'name')].map((component) => componentToWorkspaceComponent(component, component.name, this.ymlConfig.namespace, this.ymlConfig.secrets)), + components: [{...this.ymlConfig.app, name: "app"}, ...toArray(this.ymlConfig.dependencies, 'name')].map((component) => componentToWorkspaceComponent(component, component.name, this.ymlConfig.namespace, this.ymlConfig.secrets)), secrets: this.ymlConfig.secrets, } @@ -61,6 +59,15 @@ export default class WorkspaceConfigRenderer { return {title, script}; } + private renderYaml(yaml: any) { + return YamlRenderer.fromObject(yaml) + .with({ env: process.env }) + .withFunction("randomPassword", this.randomPassword) + .withFunction("host", this.host.bind(this)) + .preRenderOrFail("secrets") + .renderOrFail(); + } + public randomPassword = (length: number = 32) => (path: string) => { const key = path.replace("secrets.", ""); @@ -71,7 +78,7 @@ export default class WorkspaceConfigRenderer { return Array.from({ length }, () => alphabet[Math.floor(Math.random() * alphabet.length)]).join(''); } - public host = (host: string) => (path: string) => { + public host(host: string) { return `${host.replace(".", "-")}.${this.ymlConfig.namespace}.svc.cluster.local`; } } \ No newline at end of file diff --git a/packages/cli/src/config/YamlRenderer.ts b/packages/cli/src/config/YamlRenderer.ts index 70eed59..9c16ac6 100644 --- a/packages/cli/src/config/YamlRenderer.ts +++ b/packages/cli/src/config/YamlRenderer.ts @@ -1,11 +1,16 @@ -import * as yaml from 'yaml'; +import * as YAML from 'yaml'; import * as z from 'zod'; import * as fs from 'fs'; import { get, set } from '../utils/ObjectUtils'; export default class YamlRenderer { public static readonly VARIABLE_REGEX = /\{\{ *(?[^ }]+) *}}/gi; - private functions: Record = {}; + private functions: Record = { + readFile: fs.readFileSync, + parseYaml: YAML.parse, + parseJson: JSON.parse + }; + private excludedFromEvaluation: string[] = []; public constructor(private yaml: any) { @@ -61,17 +66,22 @@ export default class YamlRenderer { private renderVariables(object: any, path: string, ifUndefined: "let" | "fail" = "let") { if (typeof object === 'string') { - return object.replace(YamlRenderer.VARIABLE_REGEX, (match, variable) => { - // console.log(" ", variable, "->", this.variables.evaluateOrLet(variable)); - return this.evaluate(variable, path, ifUndefined); - }); + const matches = object.matchAll(YamlRenderer.VARIABLE_REGEX); + for (const match of matches) { + if(match[0] === object) { + return this.evaluate(match.groups!["variable"], path, ifUndefined); + } else { + object = object.replace(match[0], this.evaluate(match.groups!["variable"], path, ifUndefined)); + } + } + return object; } else if (typeof object === 'object') { for (const key in object) { const subPath = path.length === 0 ? key : path + "." + key; if (typeof object[key] === 'object') { object[key] = this.renderVariables(object[key], subPath, ifUndefined); - } else { - object[key] = this.renderVariables(object[key].toString(), subPath, ifUndefined); + } else if(typeof object[key] === 'string') { + object[key] = this.renderVariables(object[key], subPath, ifUndefined); } } return object; @@ -89,12 +99,9 @@ export default class YamlRenderer { return `{{ ${variable} }}`; } } - if(variable.includes("(")) { - try { - const fn = new Function('functions', `return functions.${variable}("${path}")`); - return fn(this.functions); - } catch (e) { - } + if(variable.match(/^[a-zA-Z]+\([^)]*\)$/)) { + const fn = new Function('functions', `const res = functions.${variable}; return typeof res === "function" ? res("${path}") : res;`); + return fn(this.functions); } const value = this.get(variable); @@ -113,7 +120,7 @@ export default class YamlRenderer { public static fromFile(fileName: string, schema?: z.ZodObject) { const fileContent = fs.readFileSync(fileName, 'utf8'); - let yml = yaml.parse(fileContent); + let yml = YAML.parse(fileContent); if(schema) { yml = schema.parse(yml); } diff --git a/packages/cli/src/config/types/WorkspaceFileSchema.ts b/packages/cli/src/config/types/WorkspaceFileSchema.ts index dc7567c..505fbdc 100644 --- a/packages/cli/src/config/types/WorkspaceFileSchema.ts +++ b/packages/cli/src/config/types/WorkspaceFileSchema.ts @@ -6,6 +6,7 @@ export interface WorkspaceFileYaml { namespace: string; domain: string; subdomainFormat: string; + users: string[]; nodeSelector?: Record; repositories: Repository[]; secrets?: Record; @@ -57,6 +58,7 @@ export const workspaceSchema = z.object({ namespace: z.string(), domain: z.string(), subdomainFormat: z.string(), + users: z.array(z.string()), nodeSelector: z.record(z.string()).optional(), repositories: z.array(z.object({ url: z.string(), diff --git a/workspace.yml b/workspace.yml index ce72c98..de33db5 100644 --- a/workspace.yml +++ b/workspace.yml @@ -4,6 +4,7 @@ domain: ppbo.ws.feavy.fr subdomainFormat: "%s-" # %s will be replaced by the subdomain nodeSelector: kubernetes.io/hostname: "contabo" +users: "{{ parseYaml('[test@gmail.com]')}}" repositories: # Repositories to clone in the workspace - url: https://github.com/Feavy/ppbo.git branch: main From c1e1a97cb2d8aa877023666f9cfb5af7d0f0c013 Mon Sep 17 00:00:00 2001 From: Feavy Date: Thu, 13 Mar 2025 22:57:47 +0100 Subject: [PATCH 10/75] Refacto k8s utils & add serviceAccount --- packages/cli/src/index.ts | 5 +- .../cli/src/kubernetes/KubernetesClient.ts | 17 ++--- .../cli/src/kubernetes/KubernetesComponent.ts | 27 ++++---- .../cli/src/kubernetes/KubernetesWorkspace.ts | 32 +++++++-- .../src/kubernetes/objects/K8sConfigMap.ts | 35 ---------- .../src/kubernetes/objects/K8sDeployment.ts | 60 ----------------- .../src/kubernetes/objects/K8sNamespace.ts | 11 ---- .../objects/K8sPersistentVolumeClaim.ts | 26 -------- .../cli/src/kubernetes/objects/K8sResource.ts | 17 ----- .../cli/src/kubernetes/objects/K8sSecret.ts | 37 ----------- .../cli/src/kubernetes/objects/K8sService.ts | 24 ------- .../cli/src/kubernetes/types/K8sObject.ts | 8 +++ packages/cli/src/kubernetes/utils/base64.ts | 15 +++++ .../src/kubernetes/utils/createConfigMap.ts | 19 ++++++ .../src/kubernetes/utils/createDeployment.ts | 66 +++++++++++++++++++ .../src/kubernetes/utils/createNamespace.ts | 11 ++++ .../utils/createPersistentVolumeClaim.ts | 31 +++++++++ .../cli/src/kubernetes/utils/createSecret.ts | 22 +++++++ .../cli/src/kubernetes/utils/createService.ts | 34 ++++++++++ .../kubernetes/utils/createServiceAccount.ts | 53 +++++++++++++++ packages/cli/src/kubernetes/utils/index.ts | 8 +++ 21 files changed, 317 insertions(+), 241 deletions(-) delete mode 100644 packages/cli/src/kubernetes/objects/K8sConfigMap.ts delete mode 100644 packages/cli/src/kubernetes/objects/K8sDeployment.ts delete mode 100644 packages/cli/src/kubernetes/objects/K8sNamespace.ts delete mode 100644 packages/cli/src/kubernetes/objects/K8sPersistentVolumeClaim.ts delete mode 100644 packages/cli/src/kubernetes/objects/K8sResource.ts delete mode 100644 packages/cli/src/kubernetes/objects/K8sSecret.ts delete mode 100644 packages/cli/src/kubernetes/objects/K8sService.ts create mode 100644 packages/cli/src/kubernetes/types/K8sObject.ts create mode 100644 packages/cli/src/kubernetes/utils/base64.ts create mode 100644 packages/cli/src/kubernetes/utils/createConfigMap.ts create mode 100644 packages/cli/src/kubernetes/utils/createDeployment.ts create mode 100644 packages/cli/src/kubernetes/utils/createNamespace.ts create mode 100644 packages/cli/src/kubernetes/utils/createPersistentVolumeClaim.ts create mode 100644 packages/cli/src/kubernetes/utils/createSecret.ts create mode 100644 packages/cli/src/kubernetes/utils/createService.ts create mode 100644 packages/cli/src/kubernetes/utils/createServiceAccount.ts create mode 100644 packages/cli/src/kubernetes/utils/index.ts diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index d895ec6..20d305a 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -5,6 +5,7 @@ import * as yaml from 'yaml'; import * as dotenv from 'dotenv'; import { lib } from "lib"; import KubernetesClient from "./kubernetes/KubernetesClient"; +import {dataValuesFromBase64} from "./kubernetes/utils/base64"; /* CLI Parameters: @@ -27,7 +28,7 @@ console.log(lib()); let existingSecret: Record = {}; if(!process.argv.includes('--regenerate') && await client.workspaceExists()) { const secret = await client.getSecret('workspace-secrets'); - if(secret) existingSecret = secret.stringData; + if(secret) existingSecret = dataValuesFromBase64(secret.data || {}); } const workspaceConfig = configRenderer.render(existingSecret); @@ -36,7 +37,7 @@ console.log(lib()); const kubernetesWorkspace = new KubernetesWorkspace(workspaceConfig); const resources = kubernetesWorkspace.getResources(); - // console.log(resources.map(resource => yaml.stringify(resource.config)).join('---\n')); + console.log(resources.map(resource => yaml.stringify(resource)).join('---\n')); } catch (error: any) { const validationError = fromError(error); console.error(error); diff --git a/packages/cli/src/kubernetes/KubernetesClient.ts b/packages/cli/src/kubernetes/KubernetesClient.ts index 7f1e890..8c3b018 100644 --- a/packages/cli/src/kubernetes/KubernetesClient.ts +++ b/packages/cli/src/kubernetes/KubernetesClient.ts @@ -1,5 +1,7 @@ import * as k8s from '@kubernetes/client-node'; -import K8sSecret from "./objects/K8sSecret"; +import {KubernetesObject} from "@kubernetes/client-node/dist/types"; +import {V1Secret} from "@kubernetes/client-node"; +import {dataValuesFromBase64} from "./utils/base64"; export default class KubernetesClient { private readonly k8sApi: k8s.CoreV1Api; @@ -19,13 +21,12 @@ export default class KubernetesClient { })) !== undefined; } - public async getSecret(name: string): Promise { - const secret: k8s.V1Secret | undefined = await this.try(this.k8sObjectApi.read(K8sSecret.head(name, this.namespace))); - return secret && new K8sSecret({ - name, - namespace: this.namespace, - data: secret.data! - }, true); + public async getObject(apiVersion: string, kind: string, name: string): Promise { + return await this.try(this.k8sObjectApi.read({apiVersion, kind, name, namespace: this.namespace})) as unknown as T; + } + + public async getSecret(name: string): Promise { + return await this.try(this.getObject('v1', 'Secret', name)); } private async try(resource: Promise) { diff --git a/packages/cli/src/kubernetes/KubernetesComponent.ts b/packages/cli/src/kubernetes/KubernetesComponent.ts index 76bcae4..198950f 100644 --- a/packages/cli/src/kubernetes/KubernetesComponent.ts +++ b/packages/cli/src/kubernetes/KubernetesComponent.ts @@ -1,31 +1,27 @@ -import K8sConfigMap from "./objects/K8sConfigMap"; -import K8sDeployment from "./objects/K8sDeployment"; -import K8sPersistentVolumeClaim from "./objects/K8sPersistentVolumeClaim"; -import K8sResource from "./objects/K8sResource"; -import K8sService from "./objects/K8sService"; import {WorkspaceComponent} from "../config/types/WorkspaceConfig"; -import K8sSecret from "./objects/K8sSecret"; +import * as K8SUtils from "./utils"; +import K8sObject from "./types/K8sObject"; export default class KubernetesComponent { public constructor(private readonly config: WorkspaceComponent) { } - public getResources(): K8sResource[] { + public getResources(): Array { const formattedName = this.format(this.config.name); - const configMap = this.config.config ? new K8sConfigMap({ + const configMap = this.config.config && K8SUtils.createConfigMap({ name: `${formattedName}-config`, namespace: this.config.namespace, data: this.config.config - }) : undefined; + }); - const secret = this.config.secrets ? new K8sSecret({ + const secret = this.config.secrets && K8SUtils.createSecret({ name: `${formattedName}-secret`, namespace: this.config.namespace, - data: this.config.secrets - }) : undefined; + stringData: this.config.secrets + }); - const persistentVolumeClaims = (Object.entries(this.config.volumes || {})).map(([name, volume]) => new K8sPersistentVolumeClaim({ + const persistentVolumeClaims = (Object.entries(this.config.volumes || {})).map(([name, volume]) => K8SUtils.createPersistentVolumeClaim({ name: `${formattedName}-${this.format(name)}`, namespace: this.config.namespace, accessModes: ["ReadWriteOnce"], @@ -34,10 +30,11 @@ export default class KubernetesComponent { mountPath: volume.mountPath })); - const deployment = new K8sDeployment({ + const deployment = K8SUtils.createDeployment({ name: formattedName, namespace: this.config.namespace, image: this.config.image, + replicas: 1, ports: this.config.ports, nodeSelector: this.config.nodeSelector, configMap, @@ -45,7 +42,7 @@ export default class KubernetesComponent { persistentVolumeClaims }); - const service = new K8sService({ + const service = K8SUtils.createService({ name: formattedName, namespace: this.config.namespace, deployment diff --git a/packages/cli/src/kubernetes/KubernetesWorkspace.ts b/packages/cli/src/kubernetes/KubernetesWorkspace.ts index 5b1e71a..3beb6dc 100644 --- a/packages/cli/src/kubernetes/KubernetesWorkspace.ts +++ b/packages/cli/src/kubernetes/KubernetesWorkspace.ts @@ -1,8 +1,7 @@ -import * as k8s from '@kubernetes/client-node'; -import K8sNamespace from "./objects/K8sNamespace"; -import K8sResource from "./objects/K8sResource"; import KubernetesComponent from "./KubernetesComponent"; import {WorkspaceConfig} from "../config/types/WorkspaceConfig"; +import K8sObject from "./types/K8sObject"; +import {createNamespace, createServiceAccount} from "./utils"; export default class KubernetesWorkspace { // private k8sApi: k8s.CoreV1Api; @@ -14,9 +13,30 @@ export default class KubernetesWorkspace { // this.k8sApi = kc.makeApiClient(k8s.CoreV1Api); } - public getResources(): Array { - const resources: Array = []; - resources.push(new K8sNamespace({ name: this.config.namespace })); + public getResources(): Array { + const resources: Array = []; + resources.push(createNamespace(this.config.namespace)); + resources.push(...createServiceAccount({ + name: this.config.namespace, + namespace: this.config.namespace, + rules: [ + { + apiGroups: [""], + resources: ["pods", "services", "configmaps", "secrets"], + verbs: ["create", "get", "list", "watch", "update", "patch", "delete"] + }, + { + apiGroups: ["apps"], + resources: ["deployments", "statefulsets", "daemonsets"], + verbs: ["create", "get", "list", "watch", "update", "patch", "delete"] + }, + { + apiGroups: ["traefik.io"], + resources: ["ingressroutes"], + verbs: ["create", "get", "list", "watch", "update", "patch", "delete"] + } + ] + })); resources.push(...this.config.components.flatMap(component => new KubernetesComponent({ ...component, namespace: this.config.namespace, diff --git a/packages/cli/src/kubernetes/objects/K8sConfigMap.ts b/packages/cli/src/kubernetes/objects/K8sConfigMap.ts deleted file mode 100644 index 2017f45..0000000 --- a/packages/cli/src/kubernetes/objects/K8sConfigMap.ts +++ /dev/null @@ -1,35 +0,0 @@ -import K8sResource from "./K8sResource"; -import {V1ConfigMap} from "@kubernetes/client-node"; - -export default class K8sConfigMap extends K8sResource { - public constructor({ name, namespace, data}: {name: string, namespace: string, data: Record}) { - super({ - apiVersion: "v1", - kind: "ConfigMap", - metadata: { name, namespace }, - data: K8sConfigMap.dataValuesToString(data) - }); - } - - private static dataValuesToString(data: Record): Record { - return Object.entries(data).reduce((acc, [key, value]) => { - // @ts-ignore - acc[key] = value + ""; - return acc; - }, {}); - } -} - -export function createK8sConfigMap(): V1ConfigMap { - return { - apiVersion: "v1", - kind: "ConfigMap", - metadata: { - name: "test", - namespace: "test" - }, - data: { - "key": "value" - } - }; -} \ No newline at end of file diff --git a/packages/cli/src/kubernetes/objects/K8sDeployment.ts b/packages/cli/src/kubernetes/objects/K8sDeployment.ts deleted file mode 100644 index a66ac2f..0000000 --- a/packages/cli/src/kubernetes/objects/K8sDeployment.ts +++ /dev/null @@ -1,60 +0,0 @@ -import K8sConfigMap from "./K8sConfigMap"; -import K8sPersistentVolumeClaim from "./K8sPersistentVolumeClaim"; -import K8sResource from "./K8sResource"; -import {NamedPort} from "../../config/types/WorkspaceConfig"; -import K8sSecret from "./K8sSecret"; - -export default class K8sDeployment extends K8sResource { - public readonly ports: NamedPort[]; - - public constructor( - {name, namespace, image, ports, nodeSelector, configMap, secret, persistentVolumeClaims}: - {name: string, namespace: string, image: string, ports: NamedPort[], nodeSelector?: Record, configMap?: K8sConfigMap, secret?: K8sSecret, persistentVolumeClaims?: K8sPersistentVolumeClaim[]} - ) { - super({ - apiVersion: 'apps/v1', - kind: 'Deployment', - metadata: { name, namespace }, - spec: { - selector: { - matchLabels: { - app: name - } - }, - replicas: 1, - template: { - metadata: { - labels: { - app: name - } - }, - spec: { - ...(nodeSelector ? {nodeSelector} : {}), - containers: [{ - name, - image, - ports: ports.map(port => ({ - containerPort: port.number, - name: port.name - })), - ...(configMap ? {envFrom: [{configMapRef: {name: configMap.name}}] } : {}), - ...(secret ? {envFrom: [{secretRef: {name: secret.name}}] } : {}), - ...(persistentVolumeClaims?.length ? {volumeMounts: persistentVolumeClaims.map(pvc => ({ - name: pvc.name, - mountPath: pvc.mountPath - }))} : {}) - }], - ...(persistentVolumeClaims?.length ? {volumes: persistentVolumeClaims.map(pvc => ({ - name: pvc.name, - persistentVolumeClaim: { - claimName: pvc.name - } - }))} : {}) - } - } - } - }); - - this.ports = ports; - } -} \ No newline at end of file diff --git a/packages/cli/src/kubernetes/objects/K8sNamespace.ts b/packages/cli/src/kubernetes/objects/K8sNamespace.ts deleted file mode 100644 index 0f23e13..0000000 --- a/packages/cli/src/kubernetes/objects/K8sNamespace.ts +++ /dev/null @@ -1,11 +0,0 @@ -import K8sResource from "./K8sResource"; - -export default class K8sNamespace extends K8sResource { - public constructor({ name }: {name: string}) { - super({ - apiVersion: "v1", - kind: "Namespace", - metadata: { name } - }); - } -} \ No newline at end of file diff --git a/packages/cli/src/kubernetes/objects/K8sPersistentVolumeClaim.ts b/packages/cli/src/kubernetes/objects/K8sPersistentVolumeClaim.ts deleted file mode 100644 index 0fa06b9..0000000 --- a/packages/cli/src/kubernetes/objects/K8sPersistentVolumeClaim.ts +++ /dev/null @@ -1,26 +0,0 @@ -import K8sResource from "./K8sResource"; - -export default class K8sPersistentVolumeClaim extends K8sResource { - public readonly mountPath: string; - - public constructor( - { name, namespace, storageClassName, accessModes, size, mountPath }: - {name: string, namespace: string, storageClassName: string, accessModes: string[], size: string, mountPath: string} - ) { - super({ - apiVersion: "v1", - kind: "PersistentVolumeClaim", - metadata: { name, namespace }, - spec: { - storageClassName, - accessModes, - resources: { - requests: { - storage: size - } - } - } - }); - this.mountPath = mountPath; - } -} \ No newline at end of file diff --git a/packages/cli/src/kubernetes/objects/K8sResource.ts b/packages/cli/src/kubernetes/objects/K8sResource.ts deleted file mode 100644 index ceffc8e..0000000 --- a/packages/cli/src/kubernetes/objects/K8sResource.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as k8s from '@kubernetes/client-node'; - -interface KubernetesObject extends k8s.KubernetesObject { - metadata: { - name: string; - namespace?: string; - }, - [key: string]: any; -} - -export default abstract class K8sResource { - public readonly name: string; - - public constructor(public readonly config: KubernetesObject) { - this.name = config.metadata.name; - } -} \ No newline at end of file diff --git a/packages/cli/src/kubernetes/objects/K8sSecret.ts b/packages/cli/src/kubernetes/objects/K8sSecret.ts deleted file mode 100644 index 70718a1..0000000 --- a/packages/cli/src/kubernetes/objects/K8sSecret.ts +++ /dev/null @@ -1,37 +0,0 @@ -import K8sResource from "./K8sResource"; - -export default class K8sSecret extends K8sResource { - public readonly stringData: Record; - - public constructor({ name, namespace, data}: {name: string, namespace: string, data: Record}, base64 = false) { - super({ - ...K8sSecret.head(name, namespace), - data: base64 ? data : K8sSecret.dataValuesToBase64(data) - }); - this.stringData = base64 ? K8sSecret.dataValuesFromBase64(data) : data; - } - - public static head(name: string, namespace: string) { - return { - apiVersion: "v1", - kind: "Secret", - metadata: { name, namespace }, - } - } - - private static dataValuesToBase64(data: Record): Record { - return Object.entries(data).reduce((acc, [key, value]) => { - // @ts-ignore - acc[key] = btoa(value.toString()); - return acc; - }, {}); - } - - private static dataValuesFromBase64(data: Record): Record { - return Object.entries(data).reduce((acc, [key, value]) => { - // @ts-ignore - acc[key] = atob(value.toString()); - return acc; - }, {}); - } -} \ No newline at end of file diff --git a/packages/cli/src/kubernetes/objects/K8sService.ts b/packages/cli/src/kubernetes/objects/K8sService.ts deleted file mode 100644 index ca39992..0000000 --- a/packages/cli/src/kubernetes/objects/K8sService.ts +++ /dev/null @@ -1,24 +0,0 @@ -import K8sDeployment from "./K8sDeployment"; -import K8sResource from "./K8sResource"; - -export default class K8sService extends K8sResource { - public constructor({ name, namespace, deployment }: {name: string, namespace: string, deployment: K8sDeployment}) { - const ports = deployment.ports; - super({ - apiVersion: "v1", - kind: "Service", - metadata: { name, namespace }, - spec: { - selector: { - app: deployment.name - }, - ports: ports.map(({ name, number, protocol }) => ({ - port: number, - targetPort: number, - protocol: protocol || "TCP", - name, - })) - } - }); - } -} \ No newline at end of file diff --git a/packages/cli/src/kubernetes/types/K8sObject.ts b/packages/cli/src/kubernetes/types/K8sObject.ts new file mode 100644 index 0000000..62147d8 --- /dev/null +++ b/packages/cli/src/kubernetes/types/K8sObject.ts @@ -0,0 +1,8 @@ +export default interface K8sObject { + apiVersion?: string; + kind?: string; + metadata?: { + name?: string; + namespace?: string; + }; +} \ No newline at end of file diff --git a/packages/cli/src/kubernetes/utils/base64.ts b/packages/cli/src/kubernetes/utils/base64.ts new file mode 100644 index 0000000..ddbad9f --- /dev/null +++ b/packages/cli/src/kubernetes/utils/base64.ts @@ -0,0 +1,15 @@ +export function dataValuesToBase64(data: Record): Record { + return Object.entries(data).reduce((acc, [key, value]) => { + // @ts-ignore + acc[key] = btoa(value.toString()); + return acc; + }, {}); +} + +export function dataValuesFromBase64(data: Record): Record { + return Object.entries(data).reduce((acc, [key, value]) => { + // @ts-ignore + acc[key] = atob(value.toString()); + return acc; + }, {}); +} \ No newline at end of file diff --git a/packages/cli/src/kubernetes/utils/createConfigMap.ts b/packages/cli/src/kubernetes/utils/createConfigMap.ts new file mode 100644 index 0000000..65d6c9d --- /dev/null +++ b/packages/cli/src/kubernetes/utils/createConfigMap.ts @@ -0,0 +1,19 @@ +import {V1ConfigMap} from "@kubernetes/client-node"; + +interface ConfigMapDefinition { + name: string; + namespace: string; + data?: Record; +} + +export default function createConfigMap({ name, namespace, data }: ConfigMapDefinition): V1ConfigMap { + return { + apiVersion: 'v1', + kind: 'ConfigMap', + metadata: { + name, + namespace, + }, + data + }; +} diff --git a/packages/cli/src/kubernetes/utils/createDeployment.ts b/packages/cli/src/kubernetes/utils/createDeployment.ts new file mode 100644 index 0000000..87550e4 --- /dev/null +++ b/packages/cli/src/kubernetes/utils/createDeployment.ts @@ -0,0 +1,66 @@ +import {V1ConfigMap, V1Deployment, V1PersistentVolumeClaim, V1Secret} from "@kubernetes/client-node"; +import {NamedPort} from "../../config/types/WorkspaceConfig"; + +interface DeploymentDefinition { + name: string; + namespace: string; + image: string; + replicas: number; + ports: NamedPort[]; + nodeSelector?: Record; + configMap?: V1ConfigMap; + secret?: V1Secret; + persistentVolumeClaims?: V1PersistentVolumeClaim[]; +} + +export default function createDeployment(definition: DeploymentDefinition): V1Deployment { + return { + apiVersion: "apps/v1", + kind: "Deployment", + metadata: { + name: definition.name, + namespace: definition.namespace + }, + spec: { + replicas: definition.replicas, + selector: { + matchLabels: { + app: definition.name + } + }, + template: { + metadata: { + labels: { + app: definition.name + } + }, + spec: { + ...definition.nodeSelector && { + nodeSelector: definition.nodeSelector + }, + containers: [ + { + name: definition.name, + image: definition.image, + ports: definition.ports.map(port => ({ + containerPort: port.number, + name: port.name, + protocol: port.protocol || "TCP" + })), + ...definition.configMap && {envFrom: [{configMapRef: {name: definition.configMap.metadata?.name!}}]}, + ...definition.secret && {envFrom: [{secretRef: {name: definition.secret.metadata?.name!}}]} + } + ], + ...definition.persistentVolumeClaims && { + volumes: definition.persistentVolumeClaims.map(pvc => ({ + name: pvc.metadata?.name!, + persistentVolumeClaim: { + claimName: pvc.metadata?.name! + } + })) + } + } + } + } + }; +} \ No newline at end of file diff --git a/packages/cli/src/kubernetes/utils/createNamespace.ts b/packages/cli/src/kubernetes/utils/createNamespace.ts new file mode 100644 index 0000000..1be3ff2 --- /dev/null +++ b/packages/cli/src/kubernetes/utils/createNamespace.ts @@ -0,0 +1,11 @@ +import {V1Namespace} from "@kubernetes/client-node"; + +export default function createNamespace(namespace: string): V1Namespace { + return { + apiVersion: "v1", + kind: "Namespace", + metadata: { + name: namespace + } + }; +}; \ No newline at end of file diff --git a/packages/cli/src/kubernetes/utils/createPersistentVolumeClaim.ts b/packages/cli/src/kubernetes/utils/createPersistentVolumeClaim.ts new file mode 100644 index 0000000..f40dcf1 --- /dev/null +++ b/packages/cli/src/kubernetes/utils/createPersistentVolumeClaim.ts @@ -0,0 +1,31 @@ +import {V1PersistentVolumeClaim} from "@kubernetes/client-node"; + +interface PersistentVolumeClaimDefinition { + name: string; + namespace: string; + storageClassName: string; + accessModes: string[]; + size: string; + mountPath: string; +} + +export default function createPersistentVolumeClaim(definition: PersistentVolumeClaimDefinition): V1PersistentVolumeClaim { + return { + apiVersion: 'v1', + kind: 'PersistentVolumeClaim', + metadata: { + name: definition.name, + namespace: definition.namespace, + }, + spec: { + storageClassName: definition.storageClassName, + accessModes: definition.accessModes, + resources: { + requests: { + storage: definition.size, + }, + }, + volumeMode: 'Filesystem', + }, + }; +} \ No newline at end of file diff --git a/packages/cli/src/kubernetes/utils/createSecret.ts b/packages/cli/src/kubernetes/utils/createSecret.ts new file mode 100644 index 0000000..c1d1139 --- /dev/null +++ b/packages/cli/src/kubernetes/utils/createSecret.ts @@ -0,0 +1,22 @@ +import {V1Secret} from "@kubernetes/client-node"; +import {dataValuesFromBase64, dataValuesToBase64} from "./base64"; + +interface SecretDefinition { + name: string; + namespace: string; + data?: Record; + stringData?: Record; +} + +export default function createSecret(definition: SecretDefinition): V1Secret { + return { + apiVersion: "v1", + kind: "Secret", + metadata: { + name: definition.name, + namespace: definition.namespace + }, + data: definition.data || dataValuesToBase64(definition.stringData || {}), + // stringData: definition.stringData || dataValuesFromBase64(definition.data || {}) + }; +} diff --git a/packages/cli/src/kubernetes/utils/createService.ts b/packages/cli/src/kubernetes/utils/createService.ts new file mode 100644 index 0000000..340158c --- /dev/null +++ b/packages/cli/src/kubernetes/utils/createService.ts @@ -0,0 +1,34 @@ +import {V1Deployment, V1Service} from "@kubernetes/client-node"; + +interface ServiceDefinition { + name: string; + namespace: string; + deployment: V1Deployment; +} + +export default function createService(definition: ServiceDefinition): V1Service { + const ports = definition.deployment.spec?.template.spec?.containers[0].ports; + if (!ports) { + throw new Error("No ports found in deployment"); + } + + return { + apiVersion: "v1", + kind: "Service", + metadata: { + name: definition.name, + namespace: definition.namespace + }, + spec: { + selector: { + app: definition.name + }, + ports: ports.map(port => ({ + port: port.containerPort, + targetPort: port.containerPort, + protocol: port.protocol || "TCP", + name: port.name + })) + } + }; +} \ No newline at end of file diff --git a/packages/cli/src/kubernetes/utils/createServiceAccount.ts b/packages/cli/src/kubernetes/utils/createServiceAccount.ts new file mode 100644 index 0000000..049e8c6 --- /dev/null +++ b/packages/cli/src/kubernetes/utils/createServiceAccount.ts @@ -0,0 +1,53 @@ +import {V1Role, V1RoleBinding, V1ServiceAccount} from "@kubernetes/client-node"; + +interface ServiceAccountDefinition { + name: string; + namespace: string; + rules?: Array<{ + apiGroups: string[]; + resources: string[]; + verbs: string[]; + }>; +} + +export default function createServiceAccount(def: ServiceAccountDefinition): [V1ServiceAccount, V1Role, V1RoleBinding] { + const role = { + apiVersion: "rbac.authorization.k8s.io/v1", + kind: "Role", + metadata: { + name: def.name, + namespace: def.namespace + }, + rules: def.rules || [] + }; + + const roleBinding = { + apiVersion: "rbac.authorization.k8s.io/v1", + kind: "RoleBinding", + metadata: { + name: def.name, + namespace: def.namespace + }, + subjects: [{ + kind: "ServiceAccount", + name: def.name, + namespace: def.namespace + }], + roleRef: { + kind: "Role", + name: def.name, + apiGroup: "rbac.authorization.k8s.io" + } + }; + + const serviceAccount = { + apiVersion: "v1", + kind: "ServiceAccount", + metadata: { + name: def.name, + namespace: def.namespace + } + }; + + return [serviceAccount, role, roleBinding]; +} \ No newline at end of file diff --git a/packages/cli/src/kubernetes/utils/index.ts b/packages/cli/src/kubernetes/utils/index.ts new file mode 100644 index 0000000..3579321 --- /dev/null +++ b/packages/cli/src/kubernetes/utils/index.ts @@ -0,0 +1,8 @@ +export { default as createDeployment } from "./createDeployment"; +export { default as createService } from "./createService"; +// export { default as createIngress } from "./createIngress"; +export { default as createNamespace } from "./createNamespace"; +export { default as createSecret } from "./createSecret"; +export { default as createConfigMap } from "./createConfigMap"; +export { default as createPersistentVolumeClaim } from "./createPersistentVolumeClaim"; +export { default as createServiceAccount } from "./createServiceAccount"; From 1520cf36ed23e9bd8117412396f9751f7d08406c Mon Sep 17 00:00:00 2001 From: Feavy Date: Mon, 31 Mar 2025 21:10:20 +0200 Subject: [PATCH 11/75] Add dotenv --- .gitignore | 4 ++++ packages/cli/.env | 3 ++- packages/cli/package.json | 5 +++-- packages/cli/src/index.ts | 1 + packages/server/.npmrc | 4 ++++ packages/server/public/favicon.ico | Bin 0 -> 664 bytes pnpm-lock.yaml | 3 +++ 7 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 packages/server/.npmrc create mode 100644 packages/server/public/favicon.ico diff --git a/.gitignore b/.gitignore index eb79dd5..0ff29db 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,6 @@ node_modules .idea +packages/*/dist +packages/*/types +Dockerfile.*bak* +serviceAccountKey.json diff --git a/packages/cli/.env b/packages/cli/.env index 083c815..162aabd 100644 --- a/packages/cli/.env +++ b/packages/cli/.env @@ -1 +1,2 @@ -NODE_ENV=development \ No newline at end of file +NODE_ENV=development +DISCORD_TOKEN=test-token \ No newline at end of file diff --git a/packages/cli/package.json b/packages/cli/package.json index 1648dc0..744bab2 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -18,9 +18,10 @@ "@actions/github": "^6.0.0", "@kubernetes/client-node": "^1.0.0", "@vercel/ncc": "^0.38.3", + "dotenv": "^16.4.7", + "lib": "workspace:*", "yaml": "^2.7.0", "zod": "^3.24.2", - "zod-validation-error": "^3.4.0", - "lib": "workspace:*" + "zod-validation-error": "^3.4.0" } } diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 20d305a..7a8bcc4 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,3 +1,4 @@ +import 'dotenv/config'; import WorkspaceConfigRenderer from './config/WorkspaceConfigRenderer'; import { fromError } from 'zod-validation-error'; import KubernetesWorkspace from './kubernetes/KubernetesWorkspace'; diff --git a/packages/server/.npmrc b/packages/server/.npmrc new file mode 100644 index 0000000..adfa313 --- /dev/null +++ b/packages/server/.npmrc @@ -0,0 +1,4 @@ +strict-peer-dependencies=false +auto-install-peers=true +hoist=false +node-linker=hoisted diff --git a/packages/server/public/favicon.ico b/packages/server/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..fb282da0719ef6ab4c1732df93be6216b0d85520 GIT binary patch literal 664 zcmV;J0%!e+P)m9ebk1R zejT~~6f_`?;`cEd!+`7(hw@%%2;?RN8gX-L?z6cM( zKoG@&w+0}f@Pfvwc+deid)qgE!L$ENKYjViZC_Zcr>L(`2oXUT8f0mRQ(6-=HN_Ai zeBBEz3WP+1Cw`m!49Wf!MnZzp5bH8VkR~BcJ1s-j90TAS2Yo4j!J|KodxYR%3Numw zA?gq6e`5@!W~F$_De3yt&uspo&2yLb$(NwcPPI-4LGc!}HdY%jfq@AFs8LiZ4k(p} zZ!c9o+qbWYs-Mg zgdyTALzJX&7QXHdI_DPTFL33;w}88{e6Zk)MX0kN{3DX9uz#O_L58&XRH$Nvvu;fO zf&)7@?C~$z1K<>j0ga$$MIg+5xN;eQ?1-CA=`^Y169@Ab6!vcaNP=hxfKN%@Ly^R* zK1iv*s1Yl6_dVyz8>ZqYhz6J4|3fQ@2LQeX@^%W(B~8>=MoEmBEGGD1;gHXlpX>!W ym)!leA2L@`cpb^hy)P75=I!`pBYxP7<2VfQ3j76qLgzIA0000 Date: Mon, 31 Mar 2025 23:22:36 +0200 Subject: [PATCH 12/75] Deploy to cluster --- packages/cli/src/index.ts | 8 +++++-- .../cli/src/kubernetes/KubernetesClient.ts | 22 +++++++++++++++++-- .../cli/src/kubernetes/KubernetesComponent.ts | 7 ++++-- .../cli/src/kubernetes/KubernetesWorkspace.ts | 7 +++++- .../src/kubernetes/utils/createConfigMap.ts | 5 +++-- .../src/kubernetes/utils/createDeployment.ts | 16 +++++++++++--- .../cli/src/kubernetes/utils/createSecret.ts | 2 +- .../utils/{base64.ts => encoding.ts} | 9 +++++++- templates/mongo.yml | 7 ++++-- workspace.yml | 8 +++---- 10 files changed, 71 insertions(+), 20 deletions(-) rename packages/cli/src/kubernetes/utils/{base64.ts => encoding.ts} (67%) diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 7a8bcc4..d74ff97 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -6,7 +6,7 @@ import * as yaml from 'yaml'; import * as dotenv from 'dotenv'; import { lib } from "lib"; import KubernetesClient from "./kubernetes/KubernetesClient"; -import {dataValuesFromBase64} from "./kubernetes/utils/base64"; +import {dataValuesFromBase64} from "./kubernetes/utils/encoding"; /* CLI Parameters: @@ -38,7 +38,11 @@ console.log(lib()); const kubernetesWorkspace = new KubernetesWorkspace(workspaceConfig); const resources = kubernetesWorkspace.getResources(); - console.log(resources.map(resource => yaml.stringify(resource)).join('---\n')); + // console.log(resources.map(resource => yaml.stringify(resource)).join('---\n')); + + console.log("Deploying workspace..."); + await client.deploy(kubernetesWorkspace); + console.log("Workspace deployed successfully!"); } catch (error: any) { const validationError = fromError(error); console.error(error); diff --git a/packages/cli/src/kubernetes/KubernetesClient.ts b/packages/cli/src/kubernetes/KubernetesClient.ts index 8c3b018..dd293de 100644 --- a/packages/cli/src/kubernetes/KubernetesClient.ts +++ b/packages/cli/src/kubernetes/KubernetesClient.ts @@ -1,7 +1,8 @@ import * as k8s from '@kubernetes/client-node'; import {KubernetesObject} from "@kubernetes/client-node/dist/types"; import {V1Secret} from "@kubernetes/client-node"; -import {dataValuesFromBase64} from "./utils/base64"; +import KubernetesWorkspace from './KubernetesWorkspace'; + export default class KubernetesClient { private readonly k8sApi: k8s.CoreV1Api; @@ -15,6 +16,20 @@ export default class KubernetesClient { this.k8sObjectApi = k8s.KubernetesObjectApi.makeApiClient(kc); } + public async deploy(workspace: KubernetesWorkspace) { + const resources = workspace.getResources(); + for(const resource of resources) { + const existing = await this.getObject(resource.apiVersion!, resource.kind!, resource.metadata?.name!); + if(existing) { + await this.k8sObjectApi.patch(resource); + console.log(`${resource.kind} ${resource.metadata?.name} updated`); + } else { + await this.k8sObjectApi.create(resource); + console.log(`${resource.kind} ${resource.metadata?.name} created`); + } + } + } + public async workspaceExists() { return await this.try(this.k8sApi.readNamespace({ name: this.namespace @@ -22,7 +37,10 @@ export default class KubernetesClient { } public async getObject(apiVersion: string, kind: string, name: string): Promise { - return await this.try(this.k8sObjectApi.read({apiVersion, kind, name, namespace: this.namespace})) as unknown as T; + if(kind === 'Namespace') { + return this.try(this.k8sApi.readNamespace({name})) as unknown as T; + } + return await this.try(this.k8sObjectApi.read({apiVersion, kind, metadata: {name, namespace: this.namespace}})) as unknown as T; } public async getSecret(name: string): Promise { diff --git a/packages/cli/src/kubernetes/KubernetesComponent.ts b/packages/cli/src/kubernetes/KubernetesComponent.ts index 198950f..b4399a7 100644 --- a/packages/cli/src/kubernetes/KubernetesComponent.ts +++ b/packages/cli/src/kubernetes/KubernetesComponent.ts @@ -4,6 +4,9 @@ import K8sObject from "./types/K8sObject"; export default class KubernetesComponent { public constructor(private readonly config: WorkspaceComponent) { + if(config.name === "app") { + config.image = "ghcr.io/feavy/workspace/workspace-server:latest"; + } } public getResources(): Array { @@ -42,13 +45,13 @@ export default class KubernetesComponent { persistentVolumeClaims }); - const service = K8SUtils.createService({ + let service = this.config.ports?.length && K8SUtils.createService({ name: formattedName, namespace: this.config.namespace, deployment }); - return [configMap, secret, ...persistentVolumeClaims, deployment, service].filter(resource => resource !== undefined); + return [configMap, secret, ...persistentVolumeClaims, deployment, service].filter(Boolean) as K8sObject[]; } /** diff --git a/packages/cli/src/kubernetes/KubernetesWorkspace.ts b/packages/cli/src/kubernetes/KubernetesWorkspace.ts index 3beb6dc..1ee079c 100644 --- a/packages/cli/src/kubernetes/KubernetesWorkspace.ts +++ b/packages/cli/src/kubernetes/KubernetesWorkspace.ts @@ -1,7 +1,7 @@ import KubernetesComponent from "./KubernetesComponent"; import {WorkspaceConfig} from "../config/types/WorkspaceConfig"; import K8sObject from "./types/K8sObject"; -import {createNamespace, createServiceAccount} from "./utils"; +import {createNamespace, createSecret, createServiceAccount} from "./utils"; export default class KubernetesWorkspace { // private k8sApi: k8s.CoreV1Api; @@ -37,6 +37,11 @@ export default class KubernetesWorkspace { } ] })); + resources.push(createSecret({ + name: "workspace-secrets", + namespace: this.config.namespace, + stringData: this.config.secrets + })); resources.push(...this.config.components.flatMap(component => new KubernetesComponent({ ...component, namespace: this.config.namespace, diff --git a/packages/cli/src/kubernetes/utils/createConfigMap.ts b/packages/cli/src/kubernetes/utils/createConfigMap.ts index 65d6c9d..3dca7ac 100644 --- a/packages/cli/src/kubernetes/utils/createConfigMap.ts +++ b/packages/cli/src/kubernetes/utils/createConfigMap.ts @@ -1,9 +1,10 @@ import {V1ConfigMap} from "@kubernetes/client-node"; +import { valuesToString } from "./encoding"; interface ConfigMapDefinition { name: string; namespace: string; - data?: Record; + data: Record; } export default function createConfigMap({ name, namespace, data }: ConfigMapDefinition): V1ConfigMap { @@ -14,6 +15,6 @@ export default function createConfigMap({ name, namespace, data }: ConfigMapDefi name, namespace, }, - data + data: valuesToString(data) }; } diff --git a/packages/cli/src/kubernetes/utils/createDeployment.ts b/packages/cli/src/kubernetes/utils/createDeployment.ts index 87550e4..aa94345 100644 --- a/packages/cli/src/kubernetes/utils/createDeployment.ts +++ b/packages/cli/src/kubernetes/utils/createDeployment.ts @@ -1,4 +1,4 @@ -import {V1ConfigMap, V1Deployment, V1PersistentVolumeClaim, V1Secret} from "@kubernetes/client-node"; +import {V1ConfigMap, V1Deployment, V1EnvFromSource, V1PersistentVolumeClaim, V1Secret} from "@kubernetes/client-node"; import {NamedPort} from "../../config/types/WorkspaceConfig"; interface DeploymentDefinition { @@ -47,8 +47,7 @@ export default function createDeployment(definition: DeploymentDefinition): V1De name: port.name, protocol: port.protocol || "TCP" })), - ...definition.configMap && {envFrom: [{configMapRef: {name: definition.configMap.metadata?.name!}}]}, - ...definition.secret && {envFrom: [{secretRef: {name: definition.secret.metadata?.name!}}]} + envFrom: envFrom(definition.configMap, definition.secret) } ], ...definition.persistentVolumeClaims && { @@ -63,4 +62,15 @@ export default function createDeployment(definition: DeploymentDefinition): V1De } } }; +} + +function envFrom(configMap?: V1ConfigMap, secret?: V1Secret): V1EnvFromSource[] { + const env = []; + if(configMap) { + env.push({configMapRef: {name: configMap.metadata?.name!}}); + } + if(secret) { + env.push({secretRef: {name: secret.metadata?.name!}}); + } + return env; } \ No newline at end of file diff --git a/packages/cli/src/kubernetes/utils/createSecret.ts b/packages/cli/src/kubernetes/utils/createSecret.ts index c1d1139..6a34107 100644 --- a/packages/cli/src/kubernetes/utils/createSecret.ts +++ b/packages/cli/src/kubernetes/utils/createSecret.ts @@ -1,5 +1,5 @@ import {V1Secret} from "@kubernetes/client-node"; -import {dataValuesFromBase64, dataValuesToBase64} from "./base64"; +import {dataValuesToBase64} from "./encoding"; interface SecretDefinition { name: string; diff --git a/packages/cli/src/kubernetes/utils/base64.ts b/packages/cli/src/kubernetes/utils/encoding.ts similarity index 67% rename from packages/cli/src/kubernetes/utils/base64.ts rename to packages/cli/src/kubernetes/utils/encoding.ts index ddbad9f..f7d7640 100644 --- a/packages/cli/src/kubernetes/utils/base64.ts +++ b/packages/cli/src/kubernetes/utils/encoding.ts @@ -12,4 +12,11 @@ export function dataValuesFromBase64(data: Record): Record): Record { + return Object.entries(data).reduce((acc, [key, value]) => { + // @ts-ignore + acc[key] = value.toString(); + return acc; + }, {});} \ No newline at end of file diff --git a/templates/mongo.yml b/templates/mongo.yml index a2729cf..6e4ecf8 100644 --- a/templates/mongo.yml +++ b/templates/mongo.yml @@ -23,11 +23,14 @@ components: ingress: subdomain: mongo env: + ME_CONFIG_MONGODB_URL: "mongodb://{{ host('mongo') }}:{{ @mongo.ports.mongo.number }}" ME_CONFIG_MONGODB_SERVER: "{{ host('mongo') }}" ME_CONFIG_MONGODB_PORT: "{{ @mongo.ports.mongo.number }}" ME_CONFIG_MONGODB_ENABLE_ADMIN: true - ME_CONFIG_MONGODB_ADMINUSERNAME: admin - ME_CONFIG_MONGODB_ADMINPASSWORD: "{{ args.express_password }}" + ME_CONFIG_MONGODB_ADMINUSERNAME: root + ME_CONFIG_MONGODB_ADMINPASSWORD: "{{ args.mongo_password }}" + ME_CONFIG_BASICAUTH_USERNAME: "admin" + ME_CONFIG_BASICAUTH_PASSWORD: "{{ args.express_password }}" volumes: expressData: mountPath: /data/db diff --git a/workspace.yml b/workspace.yml index de33db5..a2d8b07 100644 --- a/workspace.yml +++ b/workspace.yml @@ -40,7 +40,7 @@ dependencies: components: mongo: volumes.mongoData.size: 10Gi - discord-bot: - image: x - env: - DISCORD_TOKEN: "{{ secrets.DISCORD_TOKEN }}" + # discord-bot: + # image: x + # env: + # DISCORD_TOKEN: "{{ secrets.DISCORD_TOKEN }}" From e3ebe7f91d53fb085fda06d3a92ae455093ecee9 Mon Sep 17 00:00:00 2001 From: Feavy Date: Fri, 4 Apr 2025 22:42:30 +0200 Subject: [PATCH 13/75] Server entrypoints: writes FIREBASE_SERVICE_ACCOUNT_KEY to file --- packages/server/.docker/entrypoint.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/server/.docker/entrypoint.sh b/packages/server/.docker/entrypoint.sh index 23cd985..38fbc61 100755 --- a/packages/server/.docker/entrypoint.sh +++ b/packages/server/.docker/entrypoint.sh @@ -1,4 +1,6 @@ #!/bin/bash +echo "${FIREBASE_SERVICE_ACCOUNT_KEY}" > /home/theia/workspace/server/serviceAccountKey.json + node /home/theia/workspace/server/index.mjs & node /home/theia/applications/browser/lib/backend/main.js $@ From d596669e95da71f9adae64c4dce80d7b11dbf3d6 Mon Sep 17 00:00:00 2001 From: Feavy Date: Fri, 4 Apr 2025 22:45:10 +0200 Subject: [PATCH 14/75] App component WIP --- .../cli/src/config/WorkspaceConfigRenderer.ts | 12 +++- packages/cli/src/config/YamlRenderer.ts | 2 +- .../cli/src/config/types/WorkspaceConfig.ts | 20 +++--- .../src/config/types/WorkspaceFileSchema.ts | 2 + .../src/kubernetes/KubernetesAppComponent.ts | 52 ++++++++++++++++ .../cli/src/kubernetes/KubernetesClient.ts | 32 ++++++---- .../cli/src/kubernetes/KubernetesComponent.ts | 16 ++--- .../cli/src/kubernetes/KubernetesWorkspace.ts | 26 +++++--- .../cli/src/kubernetes/utils/createIngress.ts | 61 +++++++++++++++++++ packages/cli/src/kubernetes/utils/index.ts | 2 +- workspace.yml | 4 +- 11 files changed, 187 insertions(+), 42 deletions(-) create mode 100644 packages/cli/src/kubernetes/KubernetesAppComponent.ts create mode 100644 packages/cli/src/kubernetes/utils/createIngress.ts diff --git a/packages/cli/src/config/WorkspaceConfigRenderer.ts b/packages/cli/src/config/WorkspaceConfigRenderer.ts index 1e6db4c..4dca691 100644 --- a/packages/cli/src/config/WorkspaceConfigRenderer.ts +++ b/packages/cli/src/config/WorkspaceConfigRenderer.ts @@ -1,11 +1,12 @@ import * as fs from 'fs'; import * as yaml from 'yaml'; -import { DependencyInclude, ScriptInclude, workspaceSchema, WorkspaceFileYaml } from './types/WorkspaceFileSchema'; +import { DependencyInclude, ScriptInclude, workspaceSchema, WorkspaceFileYaml, App } from './types/WorkspaceFileSchema'; import { dependencyFileSchema } from './types/DependencyFileSchema'; import { scriptFileSchema } from './types/ScriptFileSchema'; import YamlRenderer from './YamlRenderer'; import {map, toArray} from "../utils/ObjectUtils"; import {componentToWorkspaceComponent, WorkspaceConfig} from "./types/WorkspaceConfig"; +import { Component, Ingress } from './types/ComponentSchema'; export default class WorkspaceConfigRenderer { public ymlConfig: WorkspaceFileYaml; @@ -23,19 +24,24 @@ export default class WorkspaceConfigRenderer { this.ymlConfig = workspaceSchema.parse(this.ymlConfig); this.ymlConfig.app.initScripts = this.ymlConfig.app.initScripts.map((script) => "include" in script ? this.renderScriptInclude(script) : script); - this.ymlConfig.dependencies = Object.fromEntries(Object.entries(this.ymlConfig.dependencies).flatMap(([key, value]) => "include" in value ? this.renderDependencyInclude(value, key) : [[key, value]])); + this.ymlConfig.dependencies = Object.fromEntries(Object.entries(this.ymlConfig.dependencies) + .flatMap(([key, value]) => "include" in value ? this.renderDependencyInclude(value, key) : [[key, value]])); this.ymlConfig = this.renderYaml(this.ymlConfig); + const components: (Component & { name: string })[] = [{...this.ymlConfig.app, name: "app"}, ...toArray(this.ymlConfig.dependencies, 'name')]; + const config: WorkspaceConfig = { version: this.ymlConfig.version, namespace: this.ymlConfig.namespace, domain: this.ymlConfig.domain, + firebaseServiceAccountKey: this.ymlConfig.firebaseServiceAccountKey, subdomainFormat: this.ymlConfig.subdomainFormat, repositories: this.ymlConfig.repositories, nodeSelector: this.ymlConfig.nodeSelector, - components: [{...this.ymlConfig.app, name: "app"}, ...toArray(this.ymlConfig.dependencies, 'name')].map((component) => componentToWorkspaceComponent(component, component.name, this.ymlConfig.namespace, this.ymlConfig.secrets)), + components: components.map((component) => componentToWorkspaceComponent(component, component.name, this.ymlConfig.namespace, this.ymlConfig.secrets)), secrets: this.ymlConfig.secrets, + ingresses: components.flatMap(component => Object.values(component.ports || {})).map(port => port.ingress).filter(Boolean) as Ingress[] } return config; diff --git a/packages/cli/src/config/YamlRenderer.ts b/packages/cli/src/config/YamlRenderer.ts index 9c16ac6..5f745a0 100644 --- a/packages/cli/src/config/YamlRenderer.ts +++ b/packages/cli/src/config/YamlRenderer.ts @@ -6,7 +6,7 @@ import { get, set } from '../utils/ObjectUtils'; export default class YamlRenderer { public static readonly VARIABLE_REGEX = /\{\{ *(?[^ }]+) *}}/gi; private functions: Record = { - readFile: fs.readFileSync, + readFile: (path: string) => fs.readFileSync(path, 'utf8'), parseYaml: YAML.parse, parseJson: JSON.parse }; diff --git a/packages/cli/src/config/types/WorkspaceConfig.ts b/packages/cli/src/config/types/WorkspaceConfig.ts index 7b74118..3165b2c 100644 --- a/packages/cli/src/config/types/WorkspaceConfig.ts +++ b/packages/cli/src/config/types/WorkspaceConfig.ts @@ -1,5 +1,5 @@ -import {App, Repository} from "./WorkspaceFileSchema"; -import {Component, Port} from "./ComponentSchema"; +import { App, Repository } from "./WorkspaceFileSchema"; +import { Component, Ingress, Port } from "./ComponentSchema"; import YamlRenderer from "../YamlRenderer"; export interface NamedPort extends Port { @@ -15,8 +15,12 @@ export interface WorkspaceComponent extends Omit, 'env' secrets?: Record; } -export interface AppComponent extends Omit { +export interface WorkspaceAppComponent extends Omit { name: "app"; + domain: string; + firebaseServiceAccountKey: string; + subdomainFormat: string; + ingresses: Array; } export interface WorkspaceConfig { @@ -24,10 +28,12 @@ export interface WorkspaceConfig { namespace: string; domain: string; subdomainFormat: string; + firebaseServiceAccountKey: string; nodeSelector?: { [key: string]: string }; secrets?: Record; repositories: Array; components: Array; + ingresses: Array; } export function componentToWorkspaceComponent(component: Component, name: string, namespace: string, secrets: Record = {}): WorkspaceComponent { @@ -35,13 +41,13 @@ export function componentToWorkspaceComponent(component: Component, name: string return Object.values(secrets).includes(value); } - const {ports, env, ...rest} = component; + const { ports, env, ...rest } = component; return { ...rest, name, namespace, - config: Object.entries(env || {}).filter(([_, value]) => !isSecret(value)).reduce((acc, [key, value]) => ({...acc, [key]: value}), {}), - secrets: Object.entries(env || {}).filter(([_, value]) => isSecret(value)).reduce((acc, [key, value]) => ({...acc, [key]: value}), {}), - ports: Object.entries(component.ports || {}).map(([name, port]) => ({...port, name})), + config: Object.entries(env || {}).filter(([_, value]) => !isSecret(value)).reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {}), + secrets: Object.entries(env || {}).filter(([_, value]) => isSecret(value)).reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {}), + ports: Object.entries(component.ports || {}).map(([name, port]) => ({ ...port, name })), }; } diff --git a/packages/cli/src/config/types/WorkspaceFileSchema.ts b/packages/cli/src/config/types/WorkspaceFileSchema.ts index 505fbdc..9b48396 100644 --- a/packages/cli/src/config/types/WorkspaceFileSchema.ts +++ b/packages/cli/src/config/types/WorkspaceFileSchema.ts @@ -7,6 +7,7 @@ export interface WorkspaceFileYaml { domain: string; subdomainFormat: string; users: string[]; + firebaseServiceAccountKey: string; nodeSelector?: Record; repositories: Repository[]; secrets?: Record; @@ -60,6 +61,7 @@ export const workspaceSchema = z.object({ subdomainFormat: z.string(), users: z.array(z.string()), nodeSelector: z.record(z.string()).optional(), + firebaseServiceAccountKey: z.string(), repositories: z.array(z.object({ url: z.string(), name: z.string().optional(), diff --git a/packages/cli/src/kubernetes/KubernetesAppComponent.ts b/packages/cli/src/kubernetes/KubernetesAppComponent.ts new file mode 100644 index 0000000..2c196d4 --- /dev/null +++ b/packages/cli/src/kubernetes/KubernetesAppComponent.ts @@ -0,0 +1,52 @@ +import { WorkspaceAppComponent, WorkspaceComponent } from "../config/types/WorkspaceConfig"; +import K8sObject from "./types/K8sObject"; +import KubernetesComponent from "./KubernetesComponent"; +import { V1Service } from "@kubernetes/client-node"; +import { createIngress } from "./utils"; + +export default class KubernetesAppComponent extends KubernetesComponent { + public constructor(protected config: WorkspaceAppComponent) { + super(config); + config.image = "ghcr.io/feavy/workspace/workspace-server:latest"; + if(!config.secrets) { + config.secrets = {}; + } + config.secrets["FIREBASE_SERVICE_ACCOUNT_KEY"] = config.firebaseServiceAccountKey; + config.ports = [ + { + name: "theia", + protocol: "TCP", + number: 3000 + }, + { + name: "frontend", + protocol: "TCP", + number: 3001 + } + ]; + } + + public getResources(): Array { + const resources = super.getResources(); + const service = resources.find(it => it.kind === "Service")! as V1Service; + const ingress = createIngress({ + name: `${this.formattedName}-ingress`, + namespace: this.config.namespace, + rules: uniqueBy(this.config.ingresses, it => this.getHost(it.subdomain)).map(ingress => ({ + host: this.getHost(ingress.subdomain), + port: 3001, + path: "/", + service + })) + }); + return [...resources, ingress]; + } + + private getHost(subdomain?: string) { + return (subdomain ? this.config.subdomainFormat.replace("%s", subdomain) : "") + this.config.domain; + } +} + +function uniqueBy(array: any[], fun: (elem: any) => any) { + return array.filter((item, pos) => array.findIndex(it => fun(it) === fun(item)) == pos); +} \ No newline at end of file diff --git a/packages/cli/src/kubernetes/KubernetesClient.ts b/packages/cli/src/kubernetes/KubernetesClient.ts index dd293de..ed7f843 100644 --- a/packages/cli/src/kubernetes/KubernetesClient.ts +++ b/packages/cli/src/kubernetes/KubernetesClient.ts @@ -1,7 +1,8 @@ import * as k8s from '@kubernetes/client-node'; -import {KubernetesObject} from "@kubernetes/client-node/dist/types"; -import {V1Secret} from "@kubernetes/client-node"; +import { KubernetesObject } from "@kubernetes/client-node/dist/types"; +import { V1Secret } from "@kubernetes/client-node"; import KubernetesWorkspace from './KubernetesWorkspace'; +import * as yaml from "yaml"; export default class KubernetesClient { @@ -18,14 +19,19 @@ export default class KubernetesClient { public async deploy(workspace: KubernetesWorkspace) { const resources = workspace.getResources(); - for(const resource of resources) { - const existing = await this.getObject(resource.apiVersion!, resource.kind!, resource.metadata?.name!); - if(existing) { - await this.k8sObjectApi.patch(resource); - console.log(`${resource.kind} ${resource.metadata?.name} updated`); - } else { - await this.k8sObjectApi.create(resource); - console.log(`${resource.kind} ${resource.metadata?.name} created`); + for (const resource of resources) { + try { + const existing = await this.getObject(resource.apiVersion!, resource.kind!, resource.metadata?.name!); + if (existing) { + await this.k8sObjectApi.patch(resource); + console.log(`${resource.kind} ${resource.metadata?.name} updated`); + } else { + await this.k8sObjectApi.create(resource); + console.log(`${resource.kind} ${resource.metadata?.name} created`); + } + } catch (e) { + console.log(yaml.stringify(resource)); + throw e; } } } @@ -37,10 +43,10 @@ export default class KubernetesClient { } public async getObject(apiVersion: string, kind: string, name: string): Promise { - if(kind === 'Namespace') { - return this.try(this.k8sApi.readNamespace({name})) as unknown as T; + if (kind === 'Namespace') { + return this.try(this.k8sApi.readNamespace({ name })) as unknown as T; } - return await this.try(this.k8sObjectApi.read({apiVersion, kind, metadata: {name, namespace: this.namespace}})) as unknown as T; + return await this.try(this.k8sObjectApi.read({ apiVersion, kind, metadata: { name, namespace: this.namespace } })) as unknown as T; } public async getSecret(name: string): Promise { diff --git a/packages/cli/src/kubernetes/KubernetesComponent.ts b/packages/cli/src/kubernetes/KubernetesComponent.ts index b4399a7..a918dfc 100644 --- a/packages/cli/src/kubernetes/KubernetesComponent.ts +++ b/packages/cli/src/kubernetes/KubernetesComponent.ts @@ -3,29 +3,29 @@ import * as K8SUtils from "./utils"; import K8sObject from "./types/K8sObject"; export default class KubernetesComponent { - public constructor(private readonly config: WorkspaceComponent) { + protected readonly formattedName = this.format(this.config.name); + + public constructor(protected readonly config: WorkspaceComponent) { if(config.name === "app") { config.image = "ghcr.io/feavy/workspace/workspace-server:latest"; } } public getResources(): Array { - const formattedName = this.format(this.config.name); - const configMap = this.config.config && K8SUtils.createConfigMap({ - name: `${formattedName}-config`, + name: `${this.formattedName}-config`, namespace: this.config.namespace, data: this.config.config }); const secret = this.config.secrets && K8SUtils.createSecret({ - name: `${formattedName}-secret`, + name: `${this.formattedName}-secret`, namespace: this.config.namespace, stringData: this.config.secrets }); const persistentVolumeClaims = (Object.entries(this.config.volumes || {})).map(([name, volume]) => K8SUtils.createPersistentVolumeClaim({ - name: `${formattedName}-${this.format(name)}`, + name: `${this.formattedName}-${this.format(name)}`, namespace: this.config.namespace, accessModes: ["ReadWriteOnce"], storageClassName: "openebs-hostpath", @@ -34,7 +34,7 @@ export default class KubernetesComponent { })); const deployment = K8SUtils.createDeployment({ - name: formattedName, + name: this.formattedName, namespace: this.config.namespace, image: this.config.image, replicas: 1, @@ -46,7 +46,7 @@ export default class KubernetesComponent { }); let service = this.config.ports?.length && K8SUtils.createService({ - name: formattedName, + name: this.formattedName, namespace: this.config.namespace, deployment }); diff --git a/packages/cli/src/kubernetes/KubernetesWorkspace.ts b/packages/cli/src/kubernetes/KubernetesWorkspace.ts index 1ee079c..ed76a8e 100644 --- a/packages/cli/src/kubernetes/KubernetesWorkspace.ts +++ b/packages/cli/src/kubernetes/KubernetesWorkspace.ts @@ -1,7 +1,8 @@ import KubernetesComponent from "./KubernetesComponent"; -import {WorkspaceConfig} from "../config/types/WorkspaceConfig"; +import { WorkspaceAppComponent, WorkspaceConfig } from "../config/types/WorkspaceConfig"; import K8sObject from "./types/K8sObject"; -import {createNamespace, createSecret, createServiceAccount} from "./utils"; +import { createNamespace, createSecret, createServiceAccount } from "./utils"; +import KubernetesAppComponent from "./KubernetesAppComponent"; export default class KubernetesWorkspace { // private k8sApi: k8s.CoreV1Api; @@ -9,7 +10,7 @@ export default class KubernetesWorkspace { public constructor(private readonly config: WorkspaceConfig) { // const kc = new k8s.KubeConfig(); // kc.loadFromDefault(); - + // this.k8sApi = kc.makeApiClient(k8s.CoreV1Api); } @@ -42,11 +43,20 @@ export default class KubernetesWorkspace { namespace: this.config.namespace, stringData: this.config.secrets })); - resources.push(...this.config.components.flatMap(component => new KubernetesComponent({ - ...component, - namespace: this.config.namespace, - nodeSelector: this.config.nodeSelector - }).getResources())); + resources.push(...this.config.components.flatMap(component => + (component.name === "app" ? new KubernetesAppComponent({ + ...component, + namespace: this.config.namespace, + nodeSelector: this.config.nodeSelector, + ingresses: this.config.ingresses, + firebaseServiceAccountKey: this.config.firebaseServiceAccountKey, + subdomainFormat: this.config.subdomainFormat, + domain: this.config.domain + } as WorkspaceAppComponent) : new KubernetesComponent({ + ...component, + namespace: this.config.namespace, + nodeSelector: this.config.nodeSelector + })).getResources())); return resources; } } \ No newline at end of file diff --git a/packages/cli/src/kubernetes/utils/createIngress.ts b/packages/cli/src/kubernetes/utils/createIngress.ts new file mode 100644 index 0000000..324ec9a --- /dev/null +++ b/packages/cli/src/kubernetes/utils/createIngress.ts @@ -0,0 +1,61 @@ +import { V1Ingress, V1IngressRule, V1Service} from "@kubernetes/client-node"; + +interface IngressDefinition { + name: string; + namespace: string; + rules: Array<{ + host: string, + path: string, + service: V1Service, + port: number + }> +} + +// apiVersion: networking.k8s.io/v1 +// kind: Ingress +// metadata: +// name: minimal-ingress +// annotations: +// nginx.ingress.kubernetes.io/rewrite-target: / +// spec: +// ingressClassName: nginx-example +// rules: +// - host: "foo.bar.com" +// http: +// paths: +// - path: /testpath +// pathType: Prefix +// backend: +// service: +// name: test +// port: +// number: 80 + +export default function createIngress({ name, namespace, rules }: IngressDefinition): V1Ingress { + return { + apiVersion: 'networking.k8s.io/v1', + kind: 'Ingress', + metadata: { + name, + namespace, + }, + spec: { + rules: rules.map(rule => ({ + host: rule.host, + http: { + paths: [{ + path: "/", + pathType: "Prefix", + backend: { + service: { + name: rule.service.metadata?.name!, + port: {number: rule.port} + } + } + }] + } + } satisfies V1IngressRule)) + } + // data: valuesToString(data) + }; +} diff --git a/packages/cli/src/kubernetes/utils/index.ts b/packages/cli/src/kubernetes/utils/index.ts index 3579321..a468e3e 100644 --- a/packages/cli/src/kubernetes/utils/index.ts +++ b/packages/cli/src/kubernetes/utils/index.ts @@ -1,6 +1,6 @@ export { default as createDeployment } from "./createDeployment"; export { default as createService } from "./createService"; -// export { default as createIngress } from "./createIngress"; +export { default as createIngress } from "./createIngress"; export { default as createNamespace } from "./createNamespace"; export { default as createSecret } from "./createSecret"; export { default as createConfigMap } from "./createConfigMap"; diff --git a/workspace.yml b/workspace.yml index a2d8b07..d203de9 100644 --- a/workspace.yml +++ b/workspace.yml @@ -1,6 +1,6 @@ version: 1 namespace: ppbo -domain: ppbo.ws.feavy.fr +domain: ppbo.feavy.world subdomainFormat: "%s-" # %s will be replaced by the subdomain nodeSelector: kubernetes.io/hostname: "contabo" @@ -8,6 +8,8 @@ users: "{{ parseYaml('[test@gmail.com]')}}" repositories: # Repositories to clone in the workspace - url: https://github.com/Feavy/ppbo.git branch: main +firebaseServiceAccountKey: "{{ readFile('serviceAccountKey.json') }}" +# sshPrivateKey: "{{ readFile('private.key') }}" secrets: DISCORD_TOKEN: "{{ env.DISCORD_TOKEN }}" # Take DISCORD_TOKEN from env vars DB_PASSWORD: "{{ randomPassword() }}" From 86f2c4058fc64f0d8135f188663e644dd5e1b1fa Mon Sep 17 00:00:00 2001 From: Feavy Date: Fri, 4 Apr 2025 23:37:27 +0200 Subject: [PATCH 15/75] ci: publish new docker image --- .github/workflows/{publish-server-image.yaml => publish.yaml} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .github/workflows/{publish-server-image.yaml => publish.yaml} (91%) diff --git a/.github/workflows/publish-server-image.yaml b/.github/workflows/publish.yaml similarity index 91% rename from .github/workflows/publish-server-image.yaml rename to .github/workflows/publish.yaml index ba2d0ba..8227a61 100644 --- a/.github/workflows/publish-server-image.yaml +++ b/.github/workflows/publish.yaml @@ -65,4 +65,4 @@ jobs: context: ./packages/server file: ./packages/server/.docker/Dockerfile push: true - tags: ghcr.io/feavy/workspace/workspace-server:latest \ No newline at end of file + tags: ghcr.io/feavy/workspace/workspace-server:${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || format('{0}-{1}', github.ref_name, github.run_id) }} From 346e1a6b4b8e3aed036d1d8fc967c631e7f9b57f Mon Sep 17 00:00:00 2001 From: Feavy Date: Sat, 5 Apr 2025 00:02:10 +0200 Subject: [PATCH 16/75] server: use default firebase credentials --- packages/server/.docker/Dockerfile | 1 + packages/server/src/hooks/useFirebaseAdminApp.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/server/.docker/Dockerfile b/packages/server/.docker/Dockerfile index 950d5a8..43b9161 100644 --- a/packages/server/.docker/Dockerfile +++ b/packages/server/.docker/Dockerfile @@ -79,6 +79,7 @@ COPY --chown=theia:theia .docker/default.gitconfig .gitconfig COPY --chown=theia:theia .output /home/theia/workspace COPY --chown=theia:theia .docker/entrypoint.sh /home/theia/entrypoint.sh +ENV GOOGLE_APPLICATION_CREDENTIALS=/home/theia/workspace/server/serviceAccountKey.json ENV NITRO_PORT=3001 EXPOSE 3001 diff --git a/packages/server/src/hooks/useFirebaseAdminApp.ts b/packages/server/src/hooks/useFirebaseAdminApp.ts index aab5708..b1c6854 100644 --- a/packages/server/src/hooks/useFirebaseAdminApp.ts +++ b/packages/server/src/hooks/useFirebaseAdminApp.ts @@ -2,7 +2,7 @@ import { initializeApp } from 'firebase-admin/app'; import firebase from "firebase-admin"; const firebaseAdminApp = initializeApp({ - credential: firebase.credential.cert("./serviceAccountKey.json") + credential: firebase.credential.applicationDefault() }); export function useFirebaseAdminApp() { From 3c26ae4fc24df0dae6ffddfd3bfd6e669f911258 Mon Sep 17 00:00:00 2001 From: Feavy Date: Sat, 5 Apr 2025 00:09:26 +0200 Subject: [PATCH 17/75] Fix crypto node 18 --- packages/server/src/backend/services/AuthService.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/server/src/backend/services/AuthService.ts b/packages/server/src/backend/services/AuthService.ts index 6bf0759..56a540e 100644 --- a/packages/server/src/backend/services/AuthService.ts +++ b/packages/server/src/backend/services/AuthService.ts @@ -1,5 +1,6 @@ import { getAuth } from "firebase-admin/auth"; import User from "~/backend/types/User"; +import crypto from "node:crypto"; export default class AuthService { private static readonly INSTANCE = new AuthService(); From 4869b57019d0ba10415b753f02ff90057ec541ff Mon Sep 17 00:00:00 2001 From: Feavy Date: Sat, 5 Apr 2025 00:16:52 +0200 Subject: [PATCH 18/75] App component WIP --- packages/cli/src/Settings.json | 6 +++++ .../cli/src/config/WorkspaceConfigRenderer.ts | 20 ++++++++++++----- .../cli/src/config/types/WorkspaceConfig.ts | 22 +++++++++++-------- .../src/config/types/WorkspaceFileSchema.ts | 21 +++++++++++++----- .../src/kubernetes/KubernetesAppComponent.ts | 4 +++- .../cli/src/kubernetes/KubernetesComponent.ts | 3 --- .../cli/src/kubernetes/KubernetesWorkspace.ts | 15 ++++--------- 7 files changed, 57 insertions(+), 34 deletions(-) create mode 100644 packages/cli/src/Settings.json diff --git a/packages/cli/src/Settings.json b/packages/cli/src/Settings.json new file mode 100644 index 0000000..34bad1e --- /dev/null +++ b/packages/cli/src/Settings.json @@ -0,0 +1,6 @@ +{ + "server": { + "image": "ghcr.io/feavy/workspace/workspace-server", + "tag": "main-14275007072" + } +} diff --git a/packages/cli/src/config/WorkspaceConfigRenderer.ts b/packages/cli/src/config/WorkspaceConfigRenderer.ts index 4dca691..0ce68ef 100644 --- a/packages/cli/src/config/WorkspaceConfigRenderer.ts +++ b/packages/cli/src/config/WorkspaceConfigRenderer.ts @@ -34,14 +34,24 @@ export default class WorkspaceConfigRenderer { const config: WorkspaceConfig = { version: this.ymlConfig.version, namespace: this.ymlConfig.namespace, - domain: this.ymlConfig.domain, - firebaseServiceAccountKey: this.ymlConfig.firebaseServiceAccountKey, - subdomainFormat: this.ymlConfig.subdomainFormat, repositories: this.ymlConfig.repositories, nodeSelector: this.ymlConfig.nodeSelector, - components: components.map((component) => componentToWorkspaceComponent(component, component.name, this.ymlConfig.namespace, this.ymlConfig.secrets)), + app: componentToWorkspaceComponent({ + ...this.ymlConfig.app, + name: "app", + namespace: this.ymlConfig.namespace, + firebaseServiceAccountKey: this.ymlConfig.firebaseServiceAccountKey, + domain: this.ymlConfig.domain, + subdomainFormat: this.ymlConfig.subdomainFormat, + ingresses: components.flatMap(component => Object.values(component.ports || {})).map(port => port.ingress).filter(Boolean) as Ingress[], + }), + components: components.map((component) => componentToWorkspaceComponent({ + ...component, + name: component.name, + namespace: this.ymlConfig.namespace, + secrets: this.ymlConfig.secrets + })), secrets: this.ymlConfig.secrets, - ingresses: components.flatMap(component => Object.values(component.ports || {})).map(port => port.ingress).filter(Boolean) as Ingress[] } return config; diff --git a/packages/cli/src/config/types/WorkspaceConfig.ts b/packages/cli/src/config/types/WorkspaceConfig.ts index 3165b2c..99c0d2d 100644 --- a/packages/cli/src/config/types/WorkspaceConfig.ts +++ b/packages/cli/src/config/types/WorkspaceConfig.ts @@ -1,6 +1,5 @@ import { App, Repository } from "./WorkspaceFileSchema"; import { Component, Ingress, Port } from "./ComponentSchema"; -import YamlRenderer from "../YamlRenderer"; export interface NamedPort extends Port { name: string; @@ -15,8 +14,10 @@ export interface WorkspaceComponent extends Omit, 'env' secrets?: Record; } -export interface WorkspaceAppComponent extends Omit { +export interface WorkspaceAppComponent extends Omit, "image"> { name: "app"; + image: string; + tag: string; domain: string; firebaseServiceAccountKey: string; subdomainFormat: string; @@ -26,22 +27,25 @@ export interface WorkspaceAppComponent extends Omit export interface WorkspaceConfig { version: number; namespace: string; - domain: string; - subdomainFormat: string; - firebaseServiceAccountKey: string; nodeSelector?: { [key: string]: string }; secrets?: Record; repositories: Array; + app: WorkspaceAppComponent components: Array; - ingresses: Array; } -export function componentToWorkspaceComponent(component: Component, name: string, namespace: string, secrets: Record = {}): WorkspaceComponent { +export function componentToWorkspaceComponent(component: App & {name: string, namespace: string, secrets?: Record}): WorkspaceAppComponent; +export function componentToWorkspaceComponent(component: Component & {name: string, namespace: string, secrets?: Record}): WorkspaceComponent; +export function componentToWorkspaceComponent(component: (Component|App) & {name: string, namespace: string, secrets?: Record}): WorkspaceComponent | WorkspaceAppComponent { + let { ports, env, name, secrets, namespace, ...rest } = component; + if(!secrets) { + secrets = {}; + } + function isSecret(value: string): boolean { - return Object.values(secrets).includes(value); + return Object.values(secrets!).includes(value); } - const { ports, env, ...rest } = component; return { ...rest, name, diff --git a/packages/cli/src/config/types/WorkspaceFileSchema.ts b/packages/cli/src/config/types/WorkspaceFileSchema.ts index 9b48396..984918d 100644 --- a/packages/cli/src/config/types/WorkspaceFileSchema.ts +++ b/packages/cli/src/config/types/WorkspaceFileSchema.ts @@ -1,5 +1,6 @@ import * as z from 'zod'; -import { Component, componentSchema } from "./ComponentSchema"; +import { Component, componentSchema, Ingress } from "./ComponentSchema"; +import Settings from '../../Settings.json'; export interface WorkspaceFileYaml { version: number; @@ -11,7 +12,7 @@ export interface WorkspaceFileYaml { nodeSelector?: Record; repositories: Repository[]; secrets?: Record; - app: App; + app: AppConfig; dependencies: Record; } @@ -21,11 +22,20 @@ export interface Repository { branch?: string; } -export interface App extends Omit { - image?: string; +export interface AppConfig { + image: string; + tag?: string; initScripts: Array + + + + +
+
+ +

Not logged in

+
+
+ + + \ No newline at end of file diff --git a/apps/proxy/frontend/stylesheets/style.css b/apps/proxy/frontend/stylesheets/style.css new file mode 100644 index 0000000..9453385 --- /dev/null +++ b/apps/proxy/frontend/stylesheets/style.css @@ -0,0 +1,8 @@ +body { + padding: 50px; + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; +} + +a { + color: #00B7FF; +} diff --git a/apps/proxy/package.json b/apps/proxy/package.json new file mode 100644 index 0000000..1df3369 --- /dev/null +++ b/apps/proxy/package.json @@ -0,0 +1,19 @@ +{ + "name": "proxy", + "version": "0.0.0", + "private": true, + "scripts": { + "start": "tsx ./backend/bin/www.ts" + }, + "dependencies": { + "cookie-parser": "~1.4.4", + "debug": "~2.6.9", + "dotenv": "^16.4.7", + "ejs": "^3.1.10", + "express": "~4.16.4", + "firebase-admin": "^13.2.0", + "http-proxy-middleware": "^3.0.3", + "morgan": "~1.9.1", + "tsx": "^4.19.2" + } +} diff --git a/apps/server/.gitignore b/apps/server/.gitignore deleted file mode 100644 index 11686ab..0000000 --- a/apps/server/.gitignore +++ /dev/null @@ -1,28 +0,0 @@ -dist -.solid -.output -.vercel -.netlify -.vinxi -app.config.timestamp_*.js - -# Environment -.env -.env*.local - -# dependencies -/node_modules - -# IDEs and editors -/.idea -.project -.classpath -*.launch -.settings/ - -# Temp -gitignore - -# System Files -.DS_Store -Thumbs.db diff --git a/apps/server/.npmrc b/apps/server/.npmrc deleted file mode 100644 index adfa313..0000000 --- a/apps/server/.npmrc +++ /dev/null @@ -1,4 +0,0 @@ -strict-peer-dependencies=false -auto-install-peers=true -hoist=false -node-linker=hoisted diff --git a/apps/server/Dockerfile b/apps/server/Dockerfile deleted file mode 100644 index 244f407..0000000 --- a/apps/server/Dockerfile +++ /dev/null @@ -1,36 +0,0 @@ -#check=skip=SecretsUsedInArgOrEnv - -################################################################################### -FROM node:20-slim AS base - -ENV PNPM_HOME="/pnpm" -ENV PATH="$PNPM_HOME:$PATH" -RUN corepack enable -COPY . /app -WORKDIR /app - -################################################################################### -FROM base AS prod-deps -RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile - -################################################################################### -FROM base AS build -RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile -RUN pnpm run --filter=workspace-server build - -################################################################################### -FROM base - -LABEL org.opencontainers.image.source=https://github.com/feavy/workspace -LABEL org.opencontainers.image.description="Workspace Server Docker Image" -LABEL org.opencontainers.image.licenses=MIT - -COPY --from=prod-deps /app/node_modules /app/node_modules -COPY --from=build /app/apps/server/.output /app/dist -COPY --from=build /app/apps/server/entrypoint.sh /app/entrypoint.sh - -ENV GOOGLE_APPLICATION_CREDENTIALS=/app/serviceAccountKey.json -ENV NITRO_PORT=28543 -EXPOSE 28543 - -ENTRYPOINT [ "/app/entrypoint.sh" ] diff --git a/apps/server/README.md b/apps/server/README.md deleted file mode 100644 index a84af39..0000000 --- a/apps/server/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# SolidStart - -Everything you need to build a Solid project, powered by [`solid-start`](https://start.solidjs.com); - -## Creating a project - -```bash -# create a new project in the current directory -npm init solid@latest - -# create a new project in my-app -npm init solid@latest my-app -``` - -## Developing - -Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: - -```bash -npm run dev - -# or start the server and open the app in a new browser tab -npm run dev -- --open -``` - -## Building - -Solid apps are built with _presets_, which optimise your project for deployment to different environments. - -By default, `npm run build` will generate a Node app that you can run with `npm start`. To use a different preset, add it to the `devDependencies` in `package.json` and specify in your `app.config.js`. - -## This project was created with the [Solid CLI](https://solid-cli.netlify.app) diff --git a/apps/server/app.config.ts b/apps/server/app.config.ts deleted file mode 100644 index 2493f41..0000000 --- a/apps/server/app.config.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { defineConfig } from "@solidjs/start/config"; -import tailwindcss from "@tailwindcss/vite"; - -export default defineConfig({ - middleware: "src/backend/middleware/Middleware.ts", - vite: { - plugins: [tailwindcss()] - }, - ssr: false -}); diff --git a/apps/server/package.json b/apps/server/package.json deleted file mode 100644 index 34cbe70..0000000 --- a/apps/server/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "workspace-server", - "type": "module", - "scripts": { - "dev": "vinxi dev", - "build": "vinxi build --preset node-server", - "start": "vinxi start", - "version": "vinxi version" - }, - "dependencies": { - "@solidjs/meta": "^0.29.4", - "@solidjs/router": "^0.15.3", - "@solidjs/start": "^1.1.3", - "@tailwindcss/vite": "^4.0.11", - "firebase": "^11.4.0", - "firebase-admin": "^13.2.0", - "solid-js": "^1.9.5", - "tailwindcss": "^4.0.11", - "vinxi": "^0.5.3" - }, - "engines": { - "node": ">=22" - } -} diff --git a/apps/server/public/favicon.ico b/apps/server/public/favicon.ico deleted file mode 100644 index fb282da0719ef6ab4c1732df93be6216b0d85520..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 664 zcmV;J0%!e+P)m9ebk1R zejT~~6f_`?;`cEd!+`7(hw@%%2;?RN8gX-L?z6cM( zKoG@&w+0}f@Pfvwc+deid)qgE!L$ENKYjViZC_Zcr>L(`2oXUT8f0mRQ(6-=HN_Ai zeBBEz3WP+1Cw`m!49Wf!MnZzp5bH8VkR~BcJ1s-j90TAS2Yo4j!J|KodxYR%3Numw zA?gq6e`5@!W~F$_De3yt&uspo&2yLb$(NwcPPI-4LGc!}HdY%jfq@AFs8LiZ4k(p} zZ!c9o+qbWYs-Mg zgdyTALzJX&7QXHdI_DPTFL33;w}88{e6Zk)MX0kN{3DX9uz#O_L58&XRH$Nvvu;fO zf&)7@?C~$z1K<>j0ga$$MIg+5xN;eQ?1-CA=`^Y169@Ab6!vcaNP=hxfKN%@Ly^R* zK1iv*s1Yl6_dVyz8>ZqYhz6J4|3fQ@2LQeX@^%W(B~8>=MoEmBEGGD1;gHXlpX>!W ym)!leA2L@`cpb^hy)P75=I!`pBYxP7<2VfQ3j76qLgzIA0000 ( - - SolidStart - Basic - Index - About - {/*Login*/} - {props.children} - - )} - > - - - ); -} diff --git a/apps/server/src/backend/middleware/Middleware.ts b/apps/server/src/backend/middleware/Middleware.ts deleted file mode 100644 index de0726a..0000000 --- a/apps/server/src/backend/middleware/Middleware.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {createMiddleware} from "@solidjs/start/middleware"; -import type {FetchEvent} from "@solidjs/start/server"; -import handleAuthentication from "~/backend/middleware/handleAuthentication"; -import handleRoutes from "./handleRoutes"; - -export default createMiddleware({ - onRequest: (event: FetchEvent) => { - const res = handleAuthentication(event); - if(res) return res; - const res2 = handleRoutes(event); - if(res2) return res2; - } -}); \ No newline at end of file diff --git a/apps/server/src/backend/middleware/handleAuthentication.ts b/apps/server/src/backend/middleware/handleAuthentication.ts deleted file mode 100644 index bcc6756..0000000 --- a/apps/server/src/backend/middleware/handleAuthentication.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {redirect} from "@solidjs/router"; -import type {FetchEvent} from "@solidjs/start/server"; -import AuthService from "~/backend/services/AuthService"; - -export const HOSTNAME = process.env["HOSTNAME"] ?? "localhost"; - -const REDIRECT = (event: FetchEvent) => { - let protocol = (event.request.headers.get("X-Forwarded-Proto") + ":") || new URL(event.request.url).protocol || "http:"; - - return redirect(protocol + "//" + HOSTNAME + "/login?redirect=" + encodeURIComponent(event.request.url), 301); -} -const UNAUTHORIZED = (_: FetchEvent) => new Response("Unauthorized", {status: 401}); - -const PRIVATE_ROUTES: Map Response> = new Map([ - ["/", REDIRECT], - ["/api/config", UNAUTHORIZED] -]); - -export default function handleAuthentication(event: FetchEvent) { - const {pathname} = new URL(event.request.url); - const response = PRIVATE_ROUTES.get(pathname); - if (!response) { - return; - } - const user = AuthService.get().getUserForEvent(event); - if (!user) { - return response(event); - } -} \ No newline at end of file diff --git a/apps/server/src/backend/middleware/handleRoutes.ts b/apps/server/src/backend/middleware/handleRoutes.ts deleted file mode 100644 index 169a58b..0000000 --- a/apps/server/src/backend/middleware/handleRoutes.ts +++ /dev/null @@ -1,38 +0,0 @@ -import type { FetchEvent } from "@solidjs/start/server"; -import { fetchWithEvent, H3Error, proxyRequest } from "vinxi/http"; -import AuthService from "~/backend/services/AuthService"; - -interface RouteConfig { - host: string; - path: string; - auth: boolean; - targetPort: number; -} - -const ROUTES = (JSON.parse(process.env["ROUTES"] || "[]") as RouteConfig[]).sort((a, b) => { - if (a.host === b.host) { - return a.path.length - b.path.length; - } - return a.host.localeCompare(b.host); -}); - -// TODO -const ALLOWED_USERS = (JSON.parse(process.env["ALLOWED_USERS"] || "[]") as string[]).sort((a, b) => a.localeCompare(b)); - -export default async function handleRoutes(event: FetchEvent) { - const url = event.request.url; - const { host, pathname } = new URL(url); - - const targetRoute = ROUTES.find(route => route.host === host && pathname.startsWith(route.path)); - if (!targetRoute) { - console.log("No route found for", event.request.url); - return new Response("Not Found", { status: 404 }); - } - - const user = AuthService.get().getUserForEvent(event); - if (targetRoute.auth && !user) { - return; - } - - return fetchWithEvent(event.nativeEvent, `http://localhost:${targetRoute.targetPort}${pathname}`); -} \ No newline at end of file diff --git a/apps/server/src/backend/types/AuthState.ts b/apps/server/src/backend/types/AuthState.ts deleted file mode 100644 index 916050f..0000000 --- a/apps/server/src/backend/types/AuthState.ts +++ /dev/null @@ -1,10 +0,0 @@ -import User from "~/backend/types/User"; - -type AuthState = { - logged: false -} | { - logged: true, - user: User -}; - -export default AuthState; \ No newline at end of file diff --git a/apps/server/src/components/Counter.css b/apps/server/src/components/Counter.css deleted file mode 100644 index 220e179..0000000 --- a/apps/server/src/components/Counter.css +++ /dev/null @@ -1,21 +0,0 @@ -.increment { - font-family: inherit; - font-size: inherit; - padding: 1em 2em; - color: #335d92; - background-color: rgba(68, 107, 158, 0.1); - border-radius: 2em; - border: 2px solid rgba(68, 107, 158, 0); - outline: none; - width: 200px; - font-variant-numeric: tabular-nums; - cursor: pointer; -} - -.increment:focus { - border: 2px solid #335d92; -} - -.increment:active { - background-color: rgba(68, 107, 158, 0.2); -} \ No newline at end of file diff --git a/apps/server/src/components/Counter.tsx b/apps/server/src/components/Counter.tsx deleted file mode 100644 index 091fc5d..0000000 --- a/apps/server/src/components/Counter.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { createSignal } from "solid-js"; -import "./Counter.css"; - -export default function Counter() { - const [count, setCount] = createSignal(0); - return ( - - ); -} diff --git a/apps/server/src/components/GitHubSignInButton/index.tsx b/apps/server/src/components/GitHubSignInButton/index.tsx deleted file mode 100644 index d72c92b..0000000 --- a/apps/server/src/components/GitHubSignInButton/index.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import GitHubLogo from "./github.svg"; -import useAuth from "~/hooks/useAuth"; - -export default function GitHubSignInButton() { - const {signInWithGitHub} = useAuth(); - - return ( - - ) -}; \ No newline at end of file diff --git a/apps/server/src/entry-client.tsx b/apps/server/src/entry-client.tsx deleted file mode 100644 index 0ca4e3c..0000000 --- a/apps/server/src/entry-client.tsx +++ /dev/null @@ -1,4 +0,0 @@ -// @refresh reload -import { mount, StartClient } from "@solidjs/start/client"; - -mount(() => , document.getElementById("app")!); diff --git a/apps/server/src/entry-server.tsx b/apps/server/src/entry-server.tsx deleted file mode 100644 index 401eff8..0000000 --- a/apps/server/src/entry-server.tsx +++ /dev/null @@ -1,21 +0,0 @@ -// @refresh reload -import { createHandler, StartServer } from "@solidjs/start/server"; - -export default createHandler(() => ( - ( - - - - - - {assets} - - -
{children}
- {scripts} - - - )} - /> -)); diff --git a/apps/server/src/global.d.ts b/apps/server/src/global.d.ts deleted file mode 100644 index dc6f10c..0000000 --- a/apps/server/src/global.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/apps/server/src/hooks/useAuth.ts b/apps/server/src/hooks/useAuth.ts deleted file mode 100644 index a7a9d89..0000000 --- a/apps/server/src/hooks/useAuth.ts +++ /dev/null @@ -1,48 +0,0 @@ -import {getAuth, GithubAuthProvider, signInWithPopup as firebaseSignInWithPopup, AuthProvider} from "firebase/auth"; -import {useFirebaseApp} from "~/hooks/useFirebaseApp"; -import {createSignal} from "solid-js"; -import AuthState from "~/backend/types/AuthState"; - -useFirebaseApp(); - -const auth = getAuth(); -const gitHubProvider = new GithubAuthProvider() - .addScope("user:email"); - -let resolveAuthStateReady: (state: AuthState) => void; -const authStateReady = new Promise((resolve) => resolveAuthStateReady = resolve); -const [authState, setAuthState] = createSignal({logged: false}); -getAuth().authStateReady().then(async () => { - await getAuth().currentUser?.getIdToken().then(updateState); - resolveAuthStateReady(authState()); -}); - -export default function useAuth() { - return { - authState, - authStateReady, - signInWithGitHub: () => signInWithPopup(gitHubProvider) - }; -} - -async function signInWithPopup(provider: AuthProvider) { - const credential = await firebaseSignInWithPopup(auth, provider) - await updateState(await credential.user.getIdToken()); -} - -async function updateState(idToken: string) { - try { - const user = await fetch("/api/auth", { - credentials: "include", - method: "POST", - body: JSON.stringify({token: idToken}), - headers: { - "content-type": "application/json" - } - }).then(rep => rep.json()); - setAuthState({logged: true, user}); - } catch (e) { - console.error(e); - setAuthState({logged: false}); - } -} \ No newline at end of file diff --git a/apps/server/src/hooks/useFirebaseApp.ts b/apps/server/src/hooks/useFirebaseApp.ts deleted file mode 100644 index be2dc67..0000000 --- a/apps/server/src/hooks/useFirebaseApp.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Import the functions you need from the SDKs you need -import { initializeApp } from "firebase/app"; -import { getAnalytics } from "firebase/analytics"; -import { GithubAuthProvider, signInWithPopup, getAuth } from "firebase/auth"; - -// TODO: Add SDKs for Firebase products that you want to use -// https://firebase.google.com/docs/web/setup#available-libraries - -// Your web app's Firebase configuration -// For Firebase JS SDK v7.20.0 and later, measurementId is optional -const firebaseConfig = { - apiKey: "AIzaSyDllCgG960beHuFKACcO6XVEQzIZWmGYUg", - authDomain: "workspace-82243.firebaseapp.com", - projectId: "workspace-82243", - storageBucket: "workspace-82243.firebasestorage.app", - messagingSenderId: "479856605676", - appId: "1:479856605676:web:1531c3d7ecab17eaa9e8c9", - measurementId: "G-MCWPKL1VQG" -}; - -// Initialize Firebase -const firebaseApp = initializeApp(firebaseConfig); -const analytics = getAnalytics(firebaseApp); - -export function useFirebaseApp() { - return firebaseApp; -} \ No newline at end of file diff --git a/apps/server/src/routes/[...404].tsx b/apps/server/src/routes/[...404].tsx deleted file mode 100644 index 4ea71ec..0000000 --- a/apps/server/src/routes/[...404].tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { Title } from "@solidjs/meta"; -import { HttpStatusCode } from "@solidjs/start"; - -export default function NotFound() { - return ( -
- Not Found - -

Page Not Found

-

- Visit{" "} - - start.solidjs.com - {" "} - to learn how to build SolidStart apps. -

-
- ); -} diff --git a/apps/server/src/routes/api/auth.ts b/apps/server/src/routes/api/auth.ts deleted file mode 100644 index 2c642da..0000000 --- a/apps/server/src/routes/api/auth.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {APIEvent} from "@solidjs/start/server"; -import {getCookie, setCookie} from "vinxi/http"; -import {useFirebaseAdminApp} from "~/hooks/useFirebaseAdminApp"; -import AuthService, { PARENT_HOSTNAME, TOKEN_NAME } from "~/backend/services/AuthService"; - -useFirebaseAdminApp(); - -export async function POST(event: APIEvent) { - const existingUser = AuthService.get().getUser(getCookie("token") || ""); - if(existingUser) { - return existingUser; - } - - const {token: firebaseToken} = await event.request.json(); - - const {token, user} = await AuthService.get().registerUser(firebaseToken); - setCookie(event.nativeEvent, TOKEN_NAME, token, { - httpOnly: true, - domain: "." + PARENT_HOSTNAME, - path: "/", - maxAge: 60 * 60 * 24 * 30 // 30 days - }) - return user; -} \ No newline at end of file diff --git a/apps/server/src/routes/api/config.ts b/apps/server/src/routes/api/config.ts deleted file mode 100644 index ad62024..0000000 --- a/apps/server/src/routes/api/config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {APIEvent} from "@solidjs/start/server"; - -export async function GET(event: APIEvent) { - return { - message: "Hello, world!" - }; -} \ No newline at end of file diff --git a/apps/server/src/routes/index.tsx b/apps/server/src/routes/index.tsx deleted file mode 100644 index f948dfe..0000000 --- a/apps/server/src/routes/index.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { Title } from "@solidjs/meta"; -import Counter from "~/components/Counter"; -import useAuth from "~/hooks/useAuth"; - -export default function Home() { - return ( -
- Hello World -

Hello world!

- -

- Visit{" "} - - start.solidjs.com - {" "} - to learn how to build SolidStart apps. -

-

TODO

-
- ); -} diff --git a/apps/server/src/routes/login.tsx b/apps/server/src/routes/login.tsx deleted file mode 100644 index 54f71a6..0000000 --- a/apps/server/src/routes/login.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import {Title} from "@solidjs/meta"; -import GitHubSignInButton from "~/components/GitHubSignInButton"; -import useAuth from "~/hooks/useAuth"; -import {useSearchParams} from "@solidjs/router"; -import {createEffect} from "solid-js"; - -export default function Login() { - const [params] = useSearchParams(); - const {authState} = useAuth(); - - createEffect(() => { - const state = authState(); - if(state.logged) { - window.location.href = params?.redirect as string || "/"; - } - }); - - return ( -
- Login -
-
- -
-
-
- ); -} diff --git a/apps/server/src/utils/ClientOnly.ts b/apps/server/src/utils/ClientOnly.ts deleted file mode 100644 index efaf753..0000000 --- a/apps/server/src/utils/ClientOnly.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { Component, ComponentProps, JSX } from "solid-js"; -import {clientOnly} from "@solidjs/start"; - -export default function ClientOnly(component: Component) { - return clientOnly(async () => ({default: component})); -} \ No newline at end of file diff --git a/apps/server/tsconfig.json b/apps/server/tsconfig.json deleted file mode 100644 index 7d5871a..0000000 --- a/apps/server/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "jsx": "preserve", - "jsxImportSource": "solid-js", - "allowJs": true, - "strict": true, - "noEmit": true, - "types": ["vinxi/types/client"], - "isolatedModules": true, - "paths": { - "~/*": ["./src/*"] - } - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dbe9896..6c6364b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3,6 +3,7 @@ lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false + injectWorkspacePackages: true importers: @@ -64,35 +65,35 @@ importers: specifier: ^6.2.1 version: 6.2.1(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) - apps/server: - dependencies: - '@solidjs/meta': - specifier: ^0.29.4 - version: 0.29.4(solid-js@1.9.5) - '@solidjs/router': - specifier: ^0.15.3 - version: 0.15.3(solid-js@1.9.5) - '@solidjs/start': - specifier: ^1.1.3 - version: 1.1.3(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(solid-js@1.9.5)(terser@5.39.0)(tsx@4.19.3)(vinxi@0.5.3(@types/node@22.13.9)(db0@0.3.1)(ioredis@5.6.0)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.8.2)(yaml@2.7.0))(vite@6.2.1(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(yaml@2.7.0) - '@tailwindcss/vite': - specifier: ^4.0.11 - version: 4.0.11(vite@6.2.1(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)) - firebase: - specifier: ^11.4.0 - version: 11.4.0 + apps/proxy: + dependencies: + cookie-parser: + specifier: ~1.4.4 + version: 1.4.7 + debug: + specifier: ~2.6.9 + version: 2.6.9 + dotenv: + specifier: ^16.4.7 + version: 16.4.7 + ejs: + specifier: ^3.1.10 + version: 3.1.10 + express: + specifier: ~4.16.4 + version: 4.16.4 firebase-admin: specifier: ^13.2.0 version: 13.2.0 - solid-js: - specifier: ^1.9.5 - version: 1.9.5 - tailwindcss: - specifier: ^4.0.11 - version: 4.0.11 - vinxi: - specifier: ^0.5.3 - version: 0.5.3(@types/node@22.13.9)(db0@0.3.1)(ioredis@5.6.0)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.8.2)(yaml@2.7.0) + http-proxy-middleware: + specifier: ^3.0.3 + version: 3.0.3 + morgan: + specifier: ~1.9.1 + version: 1.9.1 + tsx: + specifier: ^4.19.2 + version: 4.19.3 packages: @@ -111,535 +112,150 @@ packages: '@actions/io@1.1.3': resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.26.8': - resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.26.9': - resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.26.9': - resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.26.5': - resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.18.6': - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-plugin-utils@7.26.5': - resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.26.9': - resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.26.9': - resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-syntax-jsx@7.25.9': - resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-typescript@7.25.9': - resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/template@7.26.9': - resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.26.9': - resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.26.9': - resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} - engines: {node: '>=6.9.0'} - - '@cloudflare/kv-asset-handler@0.3.4': - resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} - engines: {node: '>=16.13'} - - '@deno/shim-deno-test@0.5.0': - resolution: {integrity: sha512-4nMhecpGlPi0cSzT67L+Tm+GOJqvuk8gqHBziqcUQOarnuIax1z96/gJHCSIz2Z0zhxE6Rzwb3IZXPtFh51j+w==} - - '@deno/shim-deno@0.19.2': - resolution: {integrity: sha512-q3VTHl44ad8T2Tw2SpeAvghdGOjlnLPDNO2cpOxwMrBE/PVas6geWpbpIgrM+czOCH0yejp0yi8OaTuB+NU40Q==} - - '@esbuild/aix-ppc64@0.20.2': - resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.24.2': - resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.25.0': resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.20.2': - resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.24.2': - resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.25.0': resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.20.2': - resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.24.2': - resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.25.0': resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.20.2': - resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.24.2': - resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.25.0': resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.20.2': - resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.24.2': - resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.25.0': resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.20.2': - resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.24.2': - resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.25.0': resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.20.2': - resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.24.2': - resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.25.0': resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.20.2': - resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.24.2': - resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.0': resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.20.2': - resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.24.2': - resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.25.0': resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.20.2': - resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.24.2': - resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.25.0': resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.20.2': - resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.24.2': - resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.25.0': resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.20.2': - resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.24.2': - resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.25.0': resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.20.2': - resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.24.2': - resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.25.0': resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.20.2': - resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.24.2': - resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.25.0': resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.20.2': - resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.24.2': - resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.25.0': resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.20.2': - resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.24.2': - resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.25.0': resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.20.2': - resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.24.2': - resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.25.0': resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.24.2': - resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.25.0': resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.20.2': - resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.24.2': - resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.0': resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.24.2': - resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.25.0': resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.20.2': - resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.24.2': - resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.0': resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.20.2': - resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.24.2': - resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.25.0': resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.20.2': - resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.24.2': - resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.25.0': resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.20.2': - resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.24.2': - resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.25.0': resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.20.2': - resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.24.2': - resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.25.0': resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} engines: {node: '>=18'} @@ -653,215 +269,37 @@ packages: '@fastify/busboy@3.1.1': resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==} - '@firebase/analytics-compat@0.2.18': - resolution: {integrity: sha512-Hw9mzsSMZaQu6wrTbi3kYYwGw9nBqOHr47pVLxfr5v8CalsdrG5gfs9XUlPOZjHRVISp3oQrh1j7d3E+ulHPjQ==} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/analytics-types@0.8.3': - resolution: {integrity: sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg==} - - '@firebase/analytics@0.10.12': - resolution: {integrity: sha512-iDCGnw6qdFqwI5ywkgece99WADJNoymu+nLIQI4fZM/vCZ3bEo4wlpEetW71s1HqGpI0hQStiPhqVjFxDb2yyw==} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/app-check-compat@0.3.19': - resolution: {integrity: sha512-G8FMiqhrKc4gEEujrBDBBrbRav8MGqoLObWj1hy/riCSg4XlRYhpnq3ev8E9HTirqU1tAGH6oJl7vr+jfM7YNA==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@firebase/app-compat': 0.x - '@firebase/app-check-interop-types@0.3.3': resolution: {integrity: sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==} - '@firebase/app-check-types@0.5.3': - resolution: {integrity: sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng==} + '@firebase/app-types@0.9.3': + resolution: {integrity: sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==} + + '@firebase/auth-interop-types@0.2.4': + resolution: {integrity: sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==} - '@firebase/app-check@0.8.12': - resolution: {integrity: sha512-LxjcoIFOU4sgK07ZWb8XDHxuVB+UKs41vPK+Sg9PeZMvEoz84fndFAx8Nz2nipiya2EmyxBgVhff8Hi6GBt+XA==} + '@firebase/component@0.6.13': + resolution: {integrity: sha512-I/Eg1NpAtZ8AAfq8mpdfXnuUpcLxIDdCDtTzWSh+FXnp/9eCKJ3SNbOCKrUCyhLzNa2SiPJYruei0sxVjaOTeg==} engines: {node: '>=18.0.0'} - peerDependencies: - '@firebase/app': 0.x - '@firebase/app-compat@0.2.51': - resolution: {integrity: sha512-pxF1+coABt+ugqNI0YXDlmkKv4kh3pjI5BqIJJ1VXBo42OZbKMsQbFeos14YBrWwiqqSjUvQ70FBNsv5E2wuxg==} + '@firebase/database-compat@2.0.5': + resolution: {integrity: sha512-CNf1UbvWh6qIaSf4sn6sx2DTDz/em/D7QxULH1LTxxDQHr9+CeYGvlAqrKnk4ZH0P0eIHyQFQU7RwkUJI0B9gQ==} engines: {node: '>=18.0.0'} - '@firebase/app-types@0.9.3': - resolution: {integrity: sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==} + '@firebase/database-types@1.0.10': + resolution: {integrity: sha512-mH6RC1E9/Pv8jf1/p+M8YFTX+iu+iHDN89hecvyO7wHrI4R1V0TXjxOHvX3nLJN1sfh0CWG6CHZ0VlrSmK/cwg==} - '@firebase/app@0.11.2': - resolution: {integrity: sha512-bFee0hPJZBzNtiizRxdgsu8C9DW3mn1y0OJJ4zHQsccjDYzGOfvN0G3CMGyBIiwNctsFpQa8orbp2IKywoUeqA==} + '@firebase/database@1.0.14': + resolution: {integrity: sha512-9nxYtkHAG02/Nh2Ssms1T4BbWPPjiwohCvkHDUl4hNxnki1kPgsLo5xe9kXNzbacOStmVys+RUXvwzynQSKmUQ==} engines: {node: '>=18.0.0'} - '@firebase/auth-compat@0.5.19': - resolution: {integrity: sha512-v898POphOIBJliKF76SiGOXh4EdhO5fM6S9a2ZKf/8wHdBea/qwxwZoVVya4DW6Mi7vWyp1lIzHbFgwRz8G9TA==} + '@firebase/logger@0.4.4': + resolution: {integrity: sha512-mH0PEh1zoXGnaR8gD1DeGeNZtWFKbnz9hDO91dIml3iou1gpOnLqXQ2dJfB71dj6dpmUjcQ6phY3ZZJbjErr9g==} engines: {node: '>=18.0.0'} - peerDependencies: - '@firebase/app-compat': 0.x - '@firebase/auth-interop-types@0.2.4': - resolution: {integrity: sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==} - - '@firebase/auth-types@0.13.0': - resolution: {integrity: sha512-S/PuIjni0AQRLF+l9ck0YpsMOdE8GO2KU6ubmBB7P+7TJUCQDa3R1dlgYm9UzGbbePMZsp0xzB93f2b/CgxMOg==} - peerDependencies: - '@firebase/app-types': 0.x - '@firebase/util': 1.x - - '@firebase/auth@1.9.1': - resolution: {integrity: sha512-9KKo5SNVkyJzftsW+daS+PGDbeJ+MFJWXQFHDqqPPH3acWHtiNnGHH5HGpIJErEELrsm9xMPie5zfZ0XpGU8+w==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@firebase/app': 0.x - '@react-native-async-storage/async-storage': ^1.18.1 - peerDependenciesMeta: - '@react-native-async-storage/async-storage': - optional: true - - '@firebase/component@0.6.13': - resolution: {integrity: sha512-I/Eg1NpAtZ8AAfq8mpdfXnuUpcLxIDdCDtTzWSh+FXnp/9eCKJ3SNbOCKrUCyhLzNa2SiPJYruei0sxVjaOTeg==} - engines: {node: '>=18.0.0'} - - '@firebase/data-connect@0.3.1': - resolution: {integrity: sha512-PNlfAJ2mcbyRlWfm41nfk8EksTuvMFTFIX+puNzeUa6OTIDtyp1IX1NJVc7n6WpfbErN7tNqcOEMe6BMtpcjVA==} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/database-compat@2.0.4': - resolution: {integrity: sha512-4qsptwZ3DTGNBje56ETItZQyA/HMalOelnLmkC3eR0M6+zkzOHjNHyWUWodW2mqxRKAM0sGkn+aIwYHKZFJXug==} - engines: {node: '>=18.0.0'} - - '@firebase/database-types@1.0.9': - resolution: {integrity: sha512-uCntrxPbJHhZsNRpMhxNCm7GzhYWX+7J2e57wq1ZZ4NJrQw5DORgkAzJMByYZcVAjgADnCxxhK/GkoypH+XpvQ==} - - '@firebase/database@1.0.13': - resolution: {integrity: sha512-cdc+LuseKdJXzlrCx8ePMXyctSWtYS9SsP3y7EeA85GzNh/IL0b7HOq0eShridL935iQ0KScZCj5qJtKkGE53g==} - engines: {node: '>=18.0.0'} - - '@firebase/firestore-compat@0.3.44': - resolution: {integrity: sha512-4Lv2TyHEW+FugXPgmQ0ZylSbh9uFuKDP0lCL1hX9cbxXaafhC/Nww+DWokUQ2zZcynjc8fxFunw6Xbd3QHAlgA==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/firestore-types@3.0.3': - resolution: {integrity: sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q==} - peerDependencies: - '@firebase/app-types': 0.x - '@firebase/util': 1.x - - '@firebase/firestore@4.7.9': - resolution: {integrity: sha512-uq/bUtHDqJ5ZqPHAJIlNzHpXUtcVYcASz2V6y7UmP1WLlRKEt1yf1OcQW5u8pY2yq7162OnCl5J5mkOdMTMLZw==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/functions-compat@0.3.20': - resolution: {integrity: sha512-iIudmYDAML6n3c7uXO2YTlzra2/J6lnMzmJTXNthvrKVMgNMaseNoQP1wKfchK84hMuSF8EkM4AvufwbJ+Juew==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/functions-types@0.6.3': - resolution: {integrity: sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg==} - - '@firebase/functions@0.12.3': - resolution: {integrity: sha512-Wv7JZMUkKLb1goOWRtsu3t7m97uK6XQvjQLPvn8rncY91+VgdU72crqnaYCDI/ophNuBEmuK8mn0/pAnjUeA6A==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/installations-compat@0.2.13': - resolution: {integrity: sha512-f/o6MqCI7LD/ulY9gvgkv6w5k6diaReD8BFHd/y/fEdpsXmFWYS/g28GXCB72bRVBOgPpkOUNl+VsMvDwlRKmw==} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/installations-types@0.5.3': - resolution: {integrity: sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA==} - peerDependencies: - '@firebase/app-types': 0.x - - '@firebase/installations@0.6.13': - resolution: {integrity: sha512-6ZpkUiaygPFwgVneYxuuOuHnSPnTA4KefLEaw/sKk/rNYgC7X6twaGfYb0sYLpbi9xV4i5jXsqZ3WO+yaguNgg==} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/logger@0.4.4': - resolution: {integrity: sha512-mH0PEh1zoXGnaR8gD1DeGeNZtWFKbnz9hDO91dIml3iou1gpOnLqXQ2dJfB71dj6dpmUjcQ6phY3ZZJbjErr9g==} - engines: {node: '>=18.0.0'} - - '@firebase/messaging-compat@0.2.17': - resolution: {integrity: sha512-5Q+9IG7FuedusdWHVQRjpA3OVD9KUWp/IPegcv0s5qSqRLBjib7FlAeWxN+VL0Ew43tuPJBY2HKhEecuizmO1Q==} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/messaging-interop-types@0.2.3': - resolution: {integrity: sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==} - - '@firebase/messaging@0.12.17': - resolution: {integrity: sha512-W3CnGhTm6Nx8XGb6E5/+jZTuxX/EK8Vur4QXvO1DwZta/t0xqWMRgO9vNsZFMYBqFV4o3j4F9qK/iddGYwWS6g==} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/performance-compat@0.2.14': - resolution: {integrity: sha512-/crPg0fDqHIx+FjFoEqWxNp+lJSF40ZG7x43AAJGRaUaWLJDncQm3UJB5/mABaRZb7obs1CQAcRtd4phZFkmZg==} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/performance-types@0.2.3': - resolution: {integrity: sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ==} - - '@firebase/performance@0.7.1': - resolution: {integrity: sha512-SkEUurawojCjav2V2AXo6BQLDtv02NxgXPLCiAvrkn95IAKI4W/UbLKYQvMbEez/nqvmnucLyklcMlB0Q5a1iw==} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/remote-config-compat@0.2.13': - resolution: {integrity: sha512-UmHoO7TxAEJPIZf8e1Hy6CeFGMeyjqSCpgoBkQZYXFI2JHhzxIyDpr8jVKJJN1dmAePKZ5EX7dC13CmcdTOl7Q==} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/remote-config-types@0.4.0': - resolution: {integrity: sha512-7p3mRE/ldCNYt8fmWMQ/MSGRmXYlJ15Rvs9Rk17t8p0WwZDbeK7eRmoI1tvCPaDzn9Oqh+yD6Lw+sGLsLg4kKg==} - - '@firebase/remote-config@0.6.0': - resolution: {integrity: sha512-Yrk4l5+6FJLPHC6irNHMzgTtJ3NfHXlAXVChCBdNFtgmzyGmufNs/sr8oA0auEfIJ5VpXCaThRh3P4OdQxiAlQ==} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/storage-compat@0.3.17': - resolution: {integrity: sha512-CBlODWEZ5b6MJWVh21VZioxwxNwVfPA9CAdsk+ZgVocJQQbE2oDW1XJoRcgthRY1HOitgbn4cVrM+NlQtuUYhw==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/storage-types@0.8.3': - resolution: {integrity: sha512-+Muk7g9uwngTpd8xn9OdF/D48uiQ7I1Fae7ULsWPuKoCH3HU7bfFPhxtJYzyhjdniowhuDpQcfPmuNRAqZEfvg==} - peerDependencies: - '@firebase/app-types': 0.x - '@firebase/util': 1.x - - '@firebase/storage@0.13.7': - resolution: {integrity: sha512-FkRyc24rK+Y6EaQ1tYFm3TevBnnfSNA0VyTfew2hrYyL/aYfatBg7HOgktUdB4kWMHNA9VoTotzZTGoLuK92wg==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/util@1.11.0': - resolution: {integrity: sha512-PzSrhIr++KI6y4P6C/IdgBNMkEx0Ex6554/cYd0Hm+ovyFSJtJXqb/3OSIdnBoa2cpwZT1/GW56EmRc5qEc5fQ==} - engines: {node: '>=18.0.0'} - - '@firebase/vertexai@1.1.0': - resolution: {integrity: sha512-K8CgIFKJrfrf5lYhKnDXOu08FEmIzVExK+ApUZx4Bw2GAmLEA3wDVrsjuupuvpXZSp8QlzvEiXwqshqqc4v0pA==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@firebase/app': 0.x - '@firebase/app-types': 0.x - - '@firebase/webchannel-wrapper@1.0.3': - resolution: {integrity: sha512-2xCRM9q9FlzGZCdgDMJwc0gyUkWFtkosy7Xxr6sFgQwn+wMNIWd7xIvYNauU1r64B5L5rsGKy/n9TKJ0aAFeqQ==} + '@firebase/util@1.11.0': + resolution: {integrity: sha512-PzSrhIr++KI6y4P6C/IdgBNMkEx0Ex6554/cYd0Hm+ovyFSJtJXqb/3OSIdnBoa2cpwZT1/GW56EmRc5qEc5fQ==} + engines: {node: '>=18.0.0'} '@google-cloud/firestore@7.11.0': resolution: {integrity: sha512-88uZ+jLsp1aVMj7gh3EKYH1aulTAMFAp8sH/v5a9w8q8iqSG27RiWLoxSAFr/XocZ9hGiWH1kEnBw+zl3xAgNA==} @@ -875,30 +313,23 @@ packages: resolution: {integrity: sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==} engines: {node: '>=14.0.0'} - '@google-cloud/promisify@4.1.0': - resolution: {integrity: sha512-G/FQx5cE/+DqBbOpA5jKsegGwdPniU6PuIEMt+qxWgFxvxuFOzVmp6zYchtYuwAWV5/8Dgs0yAmjvNZv3uXLQg==} - engines: {node: '>=18'} + '@google-cloud/promisify@4.0.0': + resolution: {integrity: sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==} + engines: {node: '>=14'} - '@google-cloud/storage@7.15.2': - resolution: {integrity: sha512-+2k+mcQBb9zkaXMllf2wwR/rI07guAx+eZLWsGTDihW2lJRGfiqB7xu1r7/s4uvSP/T+nAumvzT5TTscwHKJ9A==} + '@google-cloud/storage@7.16.0': + resolution: {integrity: sha512-7/5LRgykyOfQENcm6hDKP8SX/u9XxE5YOiWOkgkwcoO+cG8xT/cyOvp9wwN3IxfdYgpHs8CE7Nq2PKX2lNaEXw==} engines: {node: '>=14'} - '@grpc/grpc-js@1.12.6': - resolution: {integrity: sha512-JXUj6PI0oqqzTGvKtzOkxtpsyPRNsrmhh41TtIz/zEB6J+AUiZZ0dxWzcMwO9Ns5rmSPuMdghlTbUuqIM48d3Q==} + '@grpc/grpc-js@1.13.2': + resolution: {integrity: sha512-nnR5nmL6lxF8YBqb6gWvEgLdLh/Fn+kvAdX5hUOnt48sNSb0riz/93ASd2E5gvanPA41X6Yp25bIfGRp1SMb2g==} engines: {node: '>=12.10.0'} - '@grpc/grpc-js@1.9.15': - resolution: {integrity: sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==} - engines: {node: ^8.13.0 || >=10.10.0} - '@grpc/proto-loader@0.7.13': resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} engines: {node: '>=6'} hasBin: true - '@ioredis/commands@1.2.0': - resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -946,35 +377,6 @@ packages: '@kubernetes/client-node@1.0.0': resolution: {integrity: sha512-a8NSvFDSHKFZ0sR1hbPSf8IDFNJwctEU5RodSCNiq/moRXWmrdmqhb1RRQzF+l+TSBaDgHw3YsYNxxE92STBzw==} - '@mapbox/node-pre-gyp@2.0.0': - resolution: {integrity: sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==} - engines: {node: '>=18'} - hasBin: true - - '@netlify/functions@3.0.0': - resolution: {integrity: sha512-XXf9mNw4+fkxUzukDpJtzc32bl1+YlXZwEhc5ZgMcTbJPLpgRLDs5WWSPJ4eY/Mv1ZFvtxmMwmfgoQYVt68Qog==} - engines: {node: '>=18.0.0'} - - '@netlify/node-cookies@0.1.0': - resolution: {integrity: sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g==} - engines: {node: ^14.16.0 || >=16.0.0} - - '@netlify/serverless-functions-api@1.30.1': - resolution: {integrity: sha512-JkbaWFeydQdeDHz1mAy4rw+E3bl9YtbCgkntfTxq+IlNX/aIMv2/b1kZnQZcil4/sPoZGL831Dq6E374qRpU1A==} - engines: {node: '>=18.0.0'} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - '@octokit/auth-token@4.0.0': resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} engines: {node: '>= 18'} @@ -1027,100 +429,6 @@ packages: resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} - '@parcel/watcher-android-arm64@2.5.1': - resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [android] - - '@parcel/watcher-darwin-arm64@2.5.1': - resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [darwin] - - '@parcel/watcher-darwin-x64@2.5.1': - resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [darwin] - - '@parcel/watcher-freebsd-x64@2.5.1': - resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [freebsd] - - '@parcel/watcher-linux-arm-glibc@2.5.1': - resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] - - '@parcel/watcher-linux-arm-musl@2.5.1': - resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] - - '@parcel/watcher-linux-arm64-glibc@2.5.1': - resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - - '@parcel/watcher-linux-arm64-musl@2.5.1': - resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - - '@parcel/watcher-linux-x64-glibc@2.5.1': - resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - - '@parcel/watcher-linux-x64-musl@2.5.1': - resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - - '@parcel/watcher-wasm@2.3.0': - resolution: {integrity: sha512-ejBAX8H0ZGsD8lSICDNyMbSEtPMWgDL0WFCt/0z7hyf5v8Imz4rAM8xY379mBsECkq/Wdqa5WEDLqtjZ+6NxfA==} - engines: {node: '>= 10.0.0'} - bundledDependencies: - - napi-wasm - - '@parcel/watcher-wasm@2.5.1': - resolution: {integrity: sha512-RJxlQQLkaMMIuWRozy+z2vEqbaQlCuaCgVZIUCzQLYggY22LZbP5Y1+ia+FD724Ids9e+XIyOLXLrLgQSHIthw==} - engines: {node: '>= 10.0.0'} - bundledDependencies: - - napi-wasm - - '@parcel/watcher-win32-arm64@2.5.1': - resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [win32] - - '@parcel/watcher-win32-ia32@2.5.1': - resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} - engines: {node: '>= 10.0.0'} - cpu: [ia32] - os: [win32] - - '@parcel/watcher-win32-x64@2.5.1': - resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [win32] - - '@parcel/watcher@2.5.1': - resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} - engines: {node: '>= 10.0.0'} - '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1155,88 +463,6 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - '@redocly/ajv@8.11.2': - resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==} - - '@redocly/config@0.22.1': - resolution: {integrity: sha512-1CqQfiG456v9ZgYBG9xRQHnpXjt8WoSnDwdkX6gxktuK69v2037hTAR1eh0DGIqpZ1p4k82cGH8yTNwt7/pI9g==} - - '@redocly/openapi-core@1.33.0': - resolution: {integrity: sha512-MUB1jPxYX2NmgiobICcvyrkSbPSaGAb/P/MsxSW+UT9hxpQvDCX81bstGg68BcKIdeFvVRKcoyG4xiTgDOEBfQ==} - engines: {node: '>=18.17.0', npm: '>=9.5.0'} - - '@rollup/plugin-alias@5.1.1': - resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-commonjs@28.0.3': - resolution: {integrity: sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ==} - engines: {node: '>=16.0.0 || 14 >= 14.17'} - peerDependencies: - rollup: ^2.68.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-inject@5.0.5': - resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-json@6.1.0': - resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-node-resolve@16.0.0': - resolution: {integrity: sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-replace@6.0.2': - resolution: {integrity: sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-terser@0.4.4': - resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/pluginutils@5.1.4': - resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/rollup-android-arm-eabi@4.34.9': resolution: {integrity: sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==} cpu: [arm] @@ -1332,158 +558,13 @@ packages: cpu: [x64] os: [win32] - '@shikijs/core@1.29.2': - resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==} - - '@shikijs/engine-javascript@1.29.2': - resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==} - - '@shikijs/engine-oniguruma@1.29.2': - resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==} - - '@shikijs/langs@1.29.2': - resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==} - - '@shikijs/themes@1.29.2': - resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==} - - '@shikijs/types@1.29.2': - resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} - - '@shikijs/vscode-textmate@10.0.2': - resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - - '@sindresorhus/merge-streams@2.3.0': - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} - engines: {node: '>=18'} - - '@solidjs/meta@0.29.4': - resolution: {integrity: sha512-zdIWBGpR9zGx1p1bzIPqF5Gs+Ks/BH8R6fWhmUa/dcK1L2rUC8BAcZJzNRYBQv74kScf1TSOs0EY//Vd/I0V8g==} - peerDependencies: - solid-js: '>=1.8.4' - - '@solidjs/router@0.15.3': - resolution: {integrity: sha512-iEbW8UKok2Oio7o6Y4VTzLj+KFCmQPGEpm1fS3xixwFBdclFVBvaQVeibl1jys4cujfAK5Kn6+uG2uBm3lxOMw==} - peerDependencies: - solid-js: ^1.8.6 - - '@solidjs/start@1.1.3': - resolution: {integrity: sha512-JjBQDk+5xIRVgAdh3A5/caWq1g2LaVh41mQTcl7ACKfmnYRkHkvGezV4XnckTBxXkmFYkXKxwCWavguPA0JE5g==} - peerDependencies: - vinxi: ^0.5.3 - - '@tailwindcss/node@4.0.11': - resolution: {integrity: sha512-y1Ko/QaZh6Fv8sSOOPpRztT8nvNKSetvE4CLxsDdyY5kkBS7hKq04D3y3ldelniWe6YqRIzBHTzfAIc1hZ+0FA==} - - '@tailwindcss/oxide-android-arm64@4.0.11': - resolution: {integrity: sha512-6gGLTOwR3WNh63pUnY6znRY7XiLRVmvyAkQRdyRxPquNIZ7lTeqWlZcxt5Gtlh1VzZXkQ8OWyYte8ZBnulhvwA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - - '@tailwindcss/oxide-darwin-arm64@4.0.11': - resolution: {integrity: sha512-CM5SF53zzqYqQQGlP6N94zTliUi2FxW4itr223xb2PWgbwf48JTE2P6DNrA5DHOxacIliiCYiBzmKGwKdGMu8w==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@tailwindcss/oxide-darwin-x64@4.0.11': - resolution: {integrity: sha512-YB1LJC04O3UugV0egl3jnpXWyJIlcV7oVb0cplcqG0aP6nPYH0SqmD+ysbOrl6Ti1qAVuOHnfJvnAup2hbXMgw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@tailwindcss/oxide-freebsd-x64@4.0.11': - resolution: {integrity: sha512-tK63Mi/kbU5GVZFkUH+zLL/G0yiRGY15MU2xFUa3H2q2px4IuWJTWRmv6iPOcZm3kYpsh+0C+dSoz0lDEknENg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.11': - resolution: {integrity: sha512-vMJPxCQtdhqGGw1MOQnPJ6hyh5BR5EQhRXJk9Ji/1oo2P1chgEaPuGYGZGdZMy9bnFaufnjae0liqk6E3SNTFw==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-gnu@4.0.11': - resolution: {integrity: sha512-5qac6Wps9vCwkQcgyw+VlJvXkdGoOnJp8eK3TaKpZ3fTQozGgvy/AyimV8I7I4ZjU6mTjuQbZe1CPP/cuG+Ldw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-musl@4.0.11': - resolution: {integrity: sha512-hR/Lw7QgODodKLpf37+ohJJZjYEJLg6c+h3nIXJ6eLYDbCZjJ0Z0+jHP0rHXyGab7JL+QlIksNuNbJjj+2qpsw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-gnu@4.0.11': - resolution: {integrity: sha512-4aCBYzU2SyFUw/dSP3SYAaeo3I7+c6to9acqXAl/Y5XnAO3q6SBrjw2sU2RG7f5Yi+jxevFh4BcOS5ofhhoTIA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-musl@4.0.11': - resolution: {integrity: sha512-Y5j5Yp3lRcgyzOF+CY+u54aUUtvZ6OwiVPeILE3wqbsDA6X3UiUpVr8tW2eREERld0gELfXG8TyNAtDsBIOHwA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-win32-arm64-msvc@4.0.11': - resolution: {integrity: sha512-ofgW1IugQDJR+fGJUZMniwTzrwHvaw6wpoOE1mIXBFP2wWoDjvNTXUJyMDxF2N6UypXGYCJMDdEohB1CyWf9cg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@tailwindcss/oxide-win32-x64-msvc@4.0.11': - resolution: {integrity: sha512-jUDa1xZNVPuarkEbwxh8aFQ3oagDQRYXcPmfsiDZ2IAxcYnE8YPNbA2HvFxJowppnnu/v/xdWvneN24VBr1Zpw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@tailwindcss/oxide@4.0.11': - resolution: {integrity: sha512-vpR3j69boI64ftpDbbC2NPXhbF7LEkBbQ/Ol1mSU9medtdcmabMiEPlN9FtvE2IkoXZpiDM1utSsdutZSka9Cg==} - engines: {node: '>= 10'} - - '@tailwindcss/vite@4.0.11': - resolution: {integrity: sha512-rjzupwJLR/2d06SQ7JWPyEdj95qW4tGcP/i6vHkbtHnDR0XkohaG7ab8lKHnxJsr+/4RDHwKDGRPKB3VWgx2vg==} - peerDependencies: - vite: ^5.2.0 || ^6 - - '@tanstack/directive-functions-plugin@1.112.18': - resolution: {integrity: sha512-QW7ne+xiVPW0bbRDfZzm65shh1V3eCwvS3nPFRFuNdcm7/Sg7/A77a7+scxNmuJpjqhaDybRtp0MmQTPQYFTVg==} - engines: {node: '>=12'} - - '@tanstack/router-utils@1.112.18': - resolution: {integrity: sha512-qo6Ac9geasjmt3zfcG73N6PDYqXhIvKO0c2Z41r8al7EBZvjU1eM9DR9nPE6jXu3y2B4/Nd5UiVGvP7/vXUDng==} - engines: {node: '>=12'} - - '@tanstack/server-functions-plugin@1.112.18': - resolution: {integrity: sha512-Q3/CGxaf6wb0mFaF6j3DjiWRjn4Dort3jpXC5j0+8t/rW7woNGyQ+9+aID9BDFoXA5PksoCX2GEi6TwT0fD2+A==} - engines: {node: '>=12'} - '@tootallnate/once@2.0.0': resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - '@types/braces@3.0.5': - resolution: {integrity: sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==} - '@types/caseless@0.12.5': resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==} @@ -1499,9 +580,6 @@ packages: '@types/express@4.17.21': resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/http-errors@2.0.4': resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} @@ -1517,12 +595,6 @@ packages: '@types/long@4.0.2': resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - - '@types/micromatch@4.0.9': - resolution: {integrity: sha512-7V+8ncr22h4UoYRLnLXSpTxjQrNUXtWHGeMPRJt1nULXI57G9bIcpyrHlmrQ7QK24EyyuXvYcSSWAM8GA9nqCg==} - '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} @@ -1544,9 +616,6 @@ packages: '@types/request@2.48.12': resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==} - '@types/resolve@1.20.2': - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@types/send@0.17.4': resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} @@ -1562,64 +631,20 @@ packages: '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/ws@8.18.0': resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==} - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@vercel/ncc@0.38.3': resolution: {integrity: sha512-rnK6hJBS6mwc+Bkab+PGPs9OiS0i/3kdTO+CkI8V0/VrW3vmz7O2Pxjw/owOlmo6PKEIxRSeZKv/kuL9itnpYA==} hasBin: true - '@vercel/nft@0.29.2': - resolution: {integrity: sha512-A/Si4mrTkQqJ6EXJKv5EYCDQ3NL6nJXxG8VGXePsaiQigsomHYQC9xSpX8qGk7AEZk4b1ssbYIqJ0ISQQ7bfcA==} - engines: {node: '>=18'} - hasBin: true - - '@vinxi/listhen@1.5.6': - resolution: {integrity: sha512-WSN1z931BtasZJlgPp704zJFnQFRg7yzSjkm3MzAWQYe4uXFXlFr1hc5Ac2zae5/HDOz5x1/zDM5Cb54vTCnWw==} - hasBin: true - - '@vinxi/plugin-directives@0.5.0': - resolution: {integrity: sha512-zpgPWoul5vKbNH5GASHtHa7InwQWElmVdOexvyO4Nfvz7CeYfAAQ5/BAV01sVJPks4dfsLnBCegAgRPRykdUeA==} - peerDependencies: - vinxi: ^0.5.0 - - '@vinxi/server-components@0.5.0': - resolution: {integrity: sha512-2p6ZYzoqF7ZAriU0rC9KJWSX/n5qHhUBs7x04SLYzmy9lFxQNw3YHsmsA4b3aHDU+Mxw26wyFwvIbrL6eU3Gyw==} - peerDependencies: - vinxi: ^0.5.0 - - abbrev@3.0.0: - resolution: {integrity: sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA==} - engines: {node: ^18.17.0 || >=20.5.0} - abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} - acorn-import-attributes@1.9.5: - resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} - peerDependencies: - acorn: ^8 - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn-loose@8.4.0: - resolution: {integrity: sha512-M0EUka6rb+QC4l9Z3T0nJEzNOO7JcoJlYMrBlyBCiFSXRyxjLKayd4TbQs2FDRWQU1h9FR7QVNHt+PEaoNL5rQ==} - engines: {node: '>=0.4.0'} - - acorn-typescript@1.4.13: - resolution: {integrity: sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==} - peerDependencies: - acorn: '>=8.9.0' + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} acorn@8.14.1: resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} @@ -1634,13 +659,6 @@ packages: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} - ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - - ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1661,22 +679,6 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - ansis@3.17.0: - resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==} - engines: {node: '>=14'} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - archiver-utils@5.0.2: - resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} - engines: {node: '>= 14'} - - archiver@7.0.1: - resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} - engines: {node: '>= 14'} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -1684,6 +686,9 @@ packages: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + arraybuffer.prototype.slice@1.0.4: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} @@ -1692,14 +697,6 @@ packages: resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} engines: {node: '>=8'} - ast-types@0.16.1: - resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} - engines: {node: '>=4'} - - astring@1.9.0: - resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} - hasBin: true - async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} @@ -1707,9 +704,6 @@ packages: async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} - async-sema@3.1.1: - resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} - async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} @@ -1720,47 +714,25 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - b4a@1.6.7: - resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} - - babel-dead-code-elimination@1.0.9: - resolution: {integrity: sha512-JLIhax/xullfInZjtu13UJjaLHDeTzt3vOeomaSUdO/nAMEL/pWC/laKrSvWylXMnVWyL5bpmG9njqBZlUQOdg==} - - babel-plugin-jsx-dom-expressions@0.39.7: - resolution: {integrity: sha512-8GzVmFla7jaTNWW8W+lTMl9YGva4/06CtwJjySnkYtt8G1v9weCzc2SuF1DfrudcCNb2Doetc1FRg33swBYZCA==} - peerDependencies: - '@babel/core': ^7.20.12 - - babel-preset-solid@1.9.5: - resolution: {integrity: sha512-85I3osODJ1LvZbv8wFozROV1vXq32BubqHXAGu73A//TRs3NLI1OFP83AQBUTSQHwgZQmARjHlJciym3we+V+w==} - peerDependencies: - '@babel/core': ^7.0.0 - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - bare-events@2.5.4: - resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} - base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + before-after-hook@2.2.3: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bignumber.js@9.2.1: + resolution: {integrity: sha512-+NzaKgOUvInq9TIUZ1+DRspzf/HApkCwD4btfuasFTdrfnOxqx853TgDpMolp+uv4RpRp7bPcEU2zKr9+fRmyw==} - boxen@7.1.1: - resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} - engines: {node: '>=14.16'} + body-parser@1.18.3: + resolution: {integrity: sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==} + engines: {node: '>= 0.8'} brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -1772,31 +744,15 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - buffer-crc32@1.0.0: - resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} - engines: {node: '>=8.0.0'} - buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - - c12@3.0.2: - resolution: {integrity: sha512-6Tzk1/TNeI3WBPpK0j/Ss4+gPj3PUJYbWl/MWDJBThFvwNGNkXtd7Cz8BJtD4aRwoGHtzQD0SnxamgUiBH0/Nw==} - peerDependencies: - magicast: ^0.3.5 - peerDependenciesMeta: - magicast: - optional: true + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} @@ -1810,64 +766,22 @@ packages: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} - camelcase@7.0.1: - resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} - engines: {node: '>=14.16'} - - caniuse-lite@1.0.30001702: - resolution: {integrity: sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==} - - ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} - chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - - change-case@5.4.4: - resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} - - character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - - character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} chownr@3.0.0: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} - citty@0.1.6: - resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - - cli-boxes@3.0.0: - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} - engines: {node: '>=10'} - - clipboardy@4.0.0: - resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} - engines: {node: '>=18'} - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - cluster-key-slot@1.1.2: - resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} - engines: {node: '>=0.10.0'} - color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -1881,66 +795,38 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - colorette@1.4.0: - resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} - combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - - compatx@0.1.8: - resolution: {integrity: sha512-jcbsEAR81Bt5s1qOFymBufmCbXCXbk0Ql+K5ouj6gCyx2yHlu6AgmGIi9HxfKixpUDO5bCFJUHQ5uM6ecbTebw==} - - compress-commons@6.0.2: - resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} - engines: {node: '>= 14'} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - confbox@0.1.8: - resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - - confbox@0.2.1: - resolution: {integrity: sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==} - - consola@3.4.0: - resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} - engines: {node: ^14.18.0 || >=16.10.0} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cookie-es@1.2.2: - resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + content-disposition@0.5.2: + resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} + engines: {node: '>= 0.6'} - cookie-es@2.0.0: - resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==} + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cookie-parser@1.4.7: + resolution: {integrity: sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==} + engines: {node: '>= 0.8.0'} - crc-32@1.2.2: - resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} - engines: {node: '>=0.8'} - hasBin: true + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - crc32-stream@6.0.0: - resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} - engines: {node: '>= 14'} + cookie@0.3.1: + resolution: {integrity: sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==} + engines: {node: '>= 0.6'} - croner@9.0.0: - resolution: {integrity: sha512-onMB0OkDjkXunhdW9htFjEhqrD54+M94i6ackoUkjHKbRnXdyEyKRelp4nJ1kAz32+s27jP1FsebpJCVl0BsvA==} - engines: {node: '>=18.0'} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} cross-spawn@6.0.6: resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} @@ -1950,12 +836,6 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - crossws@0.3.4: - resolution: {integrity: sha512-uj0O1ETYX1Bh6uSgktfPvwDiPYGQ3aI4qVsaC/LWpkIzGj1nUYm5FK3K+t11oOlpN01lGbprFCH4wBlKdJjVgw==} - - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -1968,32 +848,6 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} - dax-sh@0.39.2: - resolution: {integrity: sha512-gpuGEkBQM+5y6p4cWaw9+ePy5TNon+fdwFVtTI8leU3UhwhsBfPewRxMXGuQNC+M2b/MDGMlfgpqynkcd0C3FQ==} - - db0@0.3.1: - resolution: {integrity: sha512-3RogPLE2LLq6t4YiFCREyl572aBjkfMvfwPyN51df00TbPbryL3XqBYuJ/j6mgPssPK8AKfYdLxizaO5UG10sA==} - peerDependencies: - '@electric-sql/pglite': '*' - '@libsql/client': '*' - better-sqlite3: '*' - drizzle-orm: '*' - mysql2: '*' - sqlite3: '*' - peerDependenciesMeta: - '@electric-sql/pglite': - optional: true - '@libsql/client': - optional: true - better-sqlite3: - optional: true - drizzle-orm: - optional: true - mysql2: - optional: true - sqlite3: - optional: true - debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -2011,79 +865,32 @@ packages: supports-color: optional: true - dedent@1.5.3: - resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - 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'} - - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} deprecation@2.3.1: resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - destr@2.0.3: - resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} - - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} - engines: {node: '>=0.10'} - hasBin: true + destroy@1.0.4: + resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==} detect-libc@2.0.3: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - - diff@7.0.0: - resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} - engines: {node: '>=0.3.1'} - - dot-prop@9.0.0: - resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} - engines: {node: '>=18'} - dotenv@16.4.7: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} @@ -2092,9 +899,6 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - duplexify@4.1.3: resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} @@ -2107,11 +911,10 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.113: - resolution: {integrity: sha512-wjT2O4hX+wdWPJ76gWSkMhcHAV2PTMX+QetUCPYEdCIe+cxmgzzSSiGRCKW8nuh4mwKZlpv0xvoW7OF2X+wmHg==} - - emoji-regex-xs@1.0.0: - resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2123,27 +926,12 @@ packages: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - enhanced-resolve@5.18.1: - resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} - engines: {node: '>=10.13.0'} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - error-stack-parser@2.1.4: - resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - es-abstract@1.23.9: resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} engines: {node: '>= 0.4'} @@ -2156,9 +944,6 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.6.0: - resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} - es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -2171,16 +956,6 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - esbuild@0.20.2: - resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} - engines: {node: '>=12'} - hasBin: true - - esbuild@0.24.2: - resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.25.0: resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} engines: {node: '>=18'} @@ -2197,21 +972,6 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} @@ -2223,16 +983,9 @@ packages: eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - - exsolve@1.0.2: - resolution: {integrity: sha512-ZEcIMbthn2zeX4/wD/DLxDUjuCltHXT8Htvm/JFlTkdYgWh2+HGppgwwNUnIVxzxP7yJOPtuBAec0dLx6lVY8w==} + express@4.16.4: + resolution: {integrity: sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==} + engines: {node: '>= 0.10.0'} extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -2244,46 +997,29 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - fast-xml-parser@4.5.3: resolution: {integrity: sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==} hasBin: true - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - faye-websocket@0.11.4: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} engines: {node: '>=0.8.0'} - fdir@6.4.3: - resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + finalhandler@1.1.1: + resolution: {integrity: sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==} + engines: {node: '>= 0.8'} + firebase-admin@13.2.0: resolution: {integrity: sha512-qQBTKo0QWCDaWwISry989pr8YfZSSk00rNCKaucjOgltEm3cCYzEe4rODqBd1uUwma+Iu5jtAzg89Nfsjr3fGg==} engines: {node: '>=18'} - firebase@11.4.0: - resolution: {integrity: sha512-Z6kwhWIPDgIm0+NUEQxwjH14hMP7t42WSFnf/78R0Vh59VovLYTOCTM3MIdY3jlSZ9uKz56FhXrvsNXNhAn/Xg==} - follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -2309,14 +1045,14 @@ packages: resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} engines: {node: '>= 6'} + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} - fs-extra@11.3.0: - resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} - engines: {node: '>=14.14'} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -2343,10 +1079,6 @@ packages: resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==} engines: {node: '>=14'} - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -2355,17 +1087,10 @@ packages: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} - get-port-please@3.1.2: - resolution: {integrity: sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==} - get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - get-symbol-description@1.1.0: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} @@ -2373,30 +1098,14 @@ packages: get-tsconfig@4.10.0: resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} - giget@2.0.0: - resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} - hasBin: true - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - globby@14.1.0: - resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} - engines: {node: '>=18'} - google-auth-library@9.15.1: resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} engines: {node: '>=14'} @@ -2420,16 +1129,6 @@ packages: resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} engines: {node: '>=14.0.0'} - gzip-size@7.0.0: - resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - h3@1.13.0: - resolution: {integrity: sha512-vFEAu/yf8UMUcB4s43OaDaigcqpQd14yanmOsn+NcRX3/guSKncyE2rOYhq8RIchgJrPSs/QiIddnTTR1ddiAg==} - - h3@1.15.1: - resolution: {integrity: sha512-+ORaOBttdUm1E2Uu/obAyCguiI7MbBvsLTndc3gyK3zU+SYLoZXlyCP9Xgy0gikkGufFLTZXCXD6+4BsufnmHA==} - has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} @@ -2438,6 +1137,10 @@ packages: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -2457,49 +1160,31 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hast-util-to-html@9.0.5: - resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} - - hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - - hookable@5.5.3: - resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - html-entities@2.3.3: - resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} - - html-entities@2.5.2: - resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} - - html-to-image@1.11.13: - resolution: {integrity: sha512-cuOPoI7WApyhBElTTb9oqsawRvZ0rHhaHwghRLlTuffoD1B2aDemlCruLeZrUIIdvG7gs9xeELEPm6PhuASqrg==} + html-entities@2.6.0: + resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} - html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} + http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} - http-parser-js@0.5.9: - resolution: {integrity: sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==} + http-parser-js@0.5.10: + resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==} http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} + http-proxy-middleware@3.0.3: + resolution: {integrity: sha512-usY0HG5nyDUwtqpiZdETNbmKtw3QQ1jwYFZ9wi5iHzX2BcILwQKtYDJPo7XHTsu5Z0B2Hj3W9NNnbd+AjFWjqg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + http-proxy@1.18.1: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} - http-shutdown@1.2.2: - resolution: {integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -2508,40 +1193,20 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - httpxy@0.1.7: - resolution: {integrity: sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ==} - - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - - idb@7.1.1: - resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - ignore@7.0.3: - resolution: {integrity: sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==} - engines: {node: '>= 4'} - - index-to-position@0.1.2: - resolution: {integrity: sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==} - engines: {node: '>=18'} + iconv-lite@0.4.23: + resolution: {integrity: sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==} + engines: {node: '>=0.10.0'} - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} - ioredis@5.6.0: - resolution: {integrity: sha512-tBZlIIWbndeWBWCXWZiqtOF/yxf6yZX3tAlTJ7nfo5jhd6dctNxF7QnYlZLZ1a0o0pDoen7CgZqO+zjNaFbJAg==} - engines: {node: '>=12.22.0'} - - iron-webcrypto@1.2.1: - resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} is-array-buffer@3.0.5: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} @@ -2558,10 +1223,6 @@ packages: resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} engines: {node: '>= 0.4'} - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - is-boolean-object@1.2.2: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} @@ -2582,16 +1243,6 @@ packages: resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - - is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -2612,18 +1263,10 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} - is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -2632,8 +1275,9 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} @@ -2651,10 +1295,6 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-string@1.1.1: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} @@ -2679,35 +1319,12 @@ packages: resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} - is-what@4.1.16: - resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} - engines: {node: '>=12.13'} - - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - - is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} - engines: {node: '>=16'} - - is64bit@2.0.0: - resolution: {integrity: sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==} - engines: {node: '>=18'} - - isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} - isomorphic-ws@5.0.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: @@ -2716,8 +1333,9 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} hasBin: true jiti@2.4.2: @@ -2730,16 +1348,6 @@ packages: jose@6.0.8: resolution: {integrity: sha512-EyUPtOKyTYq+iMOszO42eobQllaIjJnwkZ2U93aJzNyPibCy7CEvT9UQnaCVB51IAd49gbNdCew1c0LcLTCB2g==} - js-levenshtein@1.1.6: - resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} - engines: {node: '>=0.10.0'} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -2748,28 +1356,12 @@ packages: resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==} engines: {node: '>= 10.16.0'} - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - json-bigint@1.0.0: resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} json-parse-better-errors@1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - jsonpath-plus@10.3.0: resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==} engines: {node: '>=18.0.0'} @@ -2785,8 +1377,8 @@ packages: jwa@2.0.0: resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} - jwks-rsa@3.1.0: - resolution: {integrity: sha512-v7nqlfezb9YfHHzYII3ef2a2j1XnGeSE/bK3WfumaYCqONAIstJbrEGapz4kadScZzEt7zYCN7bucj8C0Mv/Rg==} + jwks-rsa@3.2.0: + resolution: {integrity: sha512-PwchfHcQK/5PSydeKCs1ylNym0w/SSv8a62DgHJ//7x2ZclCoinlsjAfDxAAbpoTPybOum/Jgy+vkvMmKz89Ww==} engines: {node: '>=14'} jws@3.2.2: @@ -2795,17 +1387,6 @@ packages: jws@4.0.0: resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} - klona@2.0.6: - resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} - engines: {node: '>= 8'} - - knitwork@1.2.0: - resolution: {integrity: sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg==} - - lazystream@1.0.1: - resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} - engines: {node: '>= 0.6.3'} - lightningcss-darwin-arm64@1.29.2: resolution: {integrity: sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==} engines: {node: '>= 12.0.0'} @@ -2873,33 +1454,19 @@ packages: limiter@1.1.5: resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} - listhen@1.9.0: - resolution: {integrity: sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==} - hasBin: true - load-json-file@4.0.0: resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} engines: {node: '>=4'} - local-pkg@1.1.1: - resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} - engines: {node: '>=14'} - lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} lodash.clonedeep@4.5.0: resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} - lodash.defaults@4.2.0: - resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} - lodash.includes@4.3.0: resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} - lodash.isarguments@3.1.0: - resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} - lodash.isboolean@3.0.3: resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} @@ -2918,18 +1485,12 @@ packages: lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - long@5.3.1: resolution: {integrity: sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==} lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -2937,51 +1498,24 @@ packages: lru-memoizer@2.3.0: resolution: {integrity: sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug==} - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - - magicast@0.2.11: - resolution: {integrity: sha512-6saXbRDA1HMkqbsvHOU6HBjCVgZT460qheRkLhJQHWAbhXoWESI3Kn/dGGXyKs15FFKR85jsUqFx2sMK0wy/5g==} - - magicast@0.3.5: - resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} - math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - mdast-util-to-hast@13.2.0: - resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} memorystream@0.3.1: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} - merge-anything@5.1.7: - resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} - engines: {node: '>=12.13'} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} - - micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - - micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - - micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - - micromark-util-types@2.0.2: - resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} @@ -2995,9 +1529,8 @@ packages: 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'} + mime@1.4.1: + resolution: {integrity: sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==} hasBin: true mime@3.0.0: @@ -3005,15 +1538,6 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - mime@4.0.6: - resolution: {integrity: sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==} - engines: {node: '>=16'} - hasBin: true - - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -3042,8 +1566,9 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.7.4: - resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + morgan@1.9.1: + resolution: {integrity: sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==} + engines: {node: '>= 0.8.0'} ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -3056,25 +1581,13 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - nitropack@2.11.4: - resolution: {integrity: sha512-m0mSdvTAd/VKJK/B84JUtfKgFKIdqDFjJh5XoVvdeRhprldSvA3hs5G+Q1FlitP92UyBV4//F4D4zky7EIyxJw==} - engines: {node: ^16.11.0 || >=17.0.0} - hasBin: true - peerDependencies: - xml2js: ^0.6.2 - peerDependenciesMeta: - xml2js: - optional: true - - node-addon-api@7.1.1: - resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - - node-fetch-native@1.6.6: - resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} - node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -3088,42 +1601,14 @@ packages: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} - node-gyp-build@4.8.4: - resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} - hasBin: true - - node-mock-http@1.0.0: - resolution: {integrity: sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==} - - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - - nopt@8.1.0: - resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - npm-run-all@4.1.5: resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} engines: {node: '>= 4'} hasBin: true - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - nypm@0.6.0: - resolution: {integrity: sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==} - engines: {node: ^14.16.0 || >=16.10.0} - hasBin: true - oauth4webapi@3.3.0: resolution: {integrity: sha512-ZlozhPlFfobzh3hB72gnBFLjXpugl/dljz1fJSRdqaV2r3D5dmi5lg2QWI0LmUYuazmE+b5exsloEv6toUtw9g==} @@ -3143,39 +1628,17 @@ packages: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} - ofetch@1.4.1: - resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} - - ohash@1.1.6: - resolution: {integrity: sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg==} - - ohash@2.0.11: - resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} engines: {node: '>= 0.8'} once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - - oniguruma-to-es@2.3.0: - resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==} - - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - - openapi-typescript@7.6.1: - resolution: {integrity: sha512-F7RXEeo/heF3O9lOXo2bNjCOtfp7u+D6W3a3VNEH2xE6v+fxLtn5nq0uvUcA1F5aT+CMhNeC5Uqtg5tlXFX/ag==} - hasBin: true - peerDependencies: - typescript: ^5.x - openid-client@6.3.3: resolution: {integrity: sha512-lTK8AV8SjqCM4qznLX0asVESAwzV39XTVdfMAM185ekuaZCnkWdPzcxMTXNlsm9tsUAMa1Q30MBmKAykdT1LWw==} @@ -3194,13 +1657,6 @@ packages: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} - parse-json@8.1.0: - resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} - engines: {node: '>=18'} - - parse5@7.2.1: - resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} - parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -3213,10 +1669,6 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -3224,26 +1676,13 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-to-regexp@6.3.0: - resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} path-type@3.0.0: resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} engines: {node: '>=4'} - path-type@6.0.0: - resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} - engines: {node: '>=18'} - - pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - - perfect-debounce@1.0.0: - resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -3251,10 +1690,6 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - pidtree@0.3.1: resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} engines: {node: '>=0.10'} @@ -3264,16 +1699,6 @@ packages: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} - pkg-types@1.3.1: - resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - - pkg-types@2.1.0: - resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} - - pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -3282,20 +1707,6 @@ packages: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} - pretty-bytes@6.1.1: - resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} - engines: {node: ^14.13.1 || >=16.0.0} - - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - - process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - - property-information@7.0.0: - resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} - proto3-json-serializer@2.0.2: resolution: {integrity: sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==} engines: {node: '>=14.0.0'} @@ -3304,76 +1715,34 @@ packages: resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} engines: {node: '>=12.0.0'} - quansync@0.2.8: - resolution: {integrity: sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==} + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - radix3@1.1.2: - resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} - - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + qs@6.5.2: + resolution: {integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==} + engines: {node: '>=0.6'} range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} - rc9@2.1.2: - resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + raw-body@2.3.3: + resolution: {integrity: sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==} + engines: {node: '>= 0.8'} read-pkg@3.0.0: resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} engines: {node: '>=4'} - readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - readable-stream@4.7.0: - resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - readdir-glob@1.1.3: - resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - - recast@0.23.11: - resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} - engines: {node: '>= 4'} - - redis-errors@1.2.0: - resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} - engines: {node: '>=4'} - - redis-parser@3.0.0: - resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} - engines: {node: '>=4'} - reflect.getprototypeof@1.0.10: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} - regex-recursion@5.1.1: - resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==} - - regex-utilities@2.3.0: - resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - - regex@5.1.1: - resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==} - regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} @@ -3382,17 +1751,9 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} @@ -3409,10 +1770,6 @@ packages: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rfc4648@1.5.4: resolution: {integrity: sha512-rRg/6Lb+IGfJqO05HZkN50UtY7K/JhxJag1kP23+zyMfrvoB0B7RWv06MbOzoc79RgCdNTiUaNsTT1AJZ7Z+cg==} @@ -3420,27 +1777,11 @@ packages: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true - rollup-plugin-visualizer@5.14.0: - resolution: {integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - rolldown: 1.x - rollup: 2.x || 3.x || 4.x - peerDependenciesMeta: - rolldown: - optional: true - rollup: - optional: true - rollup@4.34.9: resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - safe-array-concat@1.1.3: resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} @@ -3459,44 +1800,24 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} - scule@1.3.0: - resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - semver@7.7.1: resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} hasBin: true - send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + send@0.16.2: + resolution: {integrity: sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==} engines: {node: '>= 0.8.0'} - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - - seroval-plugins@1.2.1: - resolution: {integrity: sha512-H5vs53+39+x4Udwp4J5rNZfgFuA+Lt+uU+09w1gYBVWomtAl98B+E9w7yC05Xc81/HgLvJdlyqJbU0fJCKCmdw==} - engines: {node: '>=10'} - peerDependencies: - seroval: ^1.0 - - seroval@1.2.1: - resolution: {integrity: sha512-yBxFFs3zmkvKNmR0pFSU//rIsYjuX418TnlDmc2weaq5XFDqDIV/NOMPBoLrbxjLH42p4UzRuXHryXh9dYcKcw==} - engines: {node: '>=10'} - - serve-placeholder@2.0.2: - resolution: {integrity: sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==} - - serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + serve-static@1.13.2: + resolution: {integrity: sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==} engines: {node: '>= 0.8.0'} set-function-length@1.2.2: @@ -3511,8 +1832,8 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} @@ -3534,9 +1855,6 @@ packages: resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} engines: {node: '>= 0.4'} - shiki@1.29.2: - resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==} - side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -3557,27 +1875,6 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} - - smob@1.5.0: - resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} - - solid-js@1.9.5: - resolution: {integrity: sha512-ogI3DaFcyn6UhYhrgcyRAMbu/buBJitYQASZz5WzfQVPP10RD2AbCoRZ517psnezrasyCbWzIxZ6kVqet768xw==} - - solid-refresh@0.6.3: - resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} - peerDependencies: - solid-js: ^1.3 - - solid-use@0.9.0: - resolution: {integrity: sha512-8TGwB4m3qQ7qKo8Lg0pi/ZyyGVmQIjC4sPyxRCH7VPds0BzSsT734PhP3jhR6zMJxoYHM+uoivjq0XdpzXeOJg==} - engines: {node: '>=10'} - peerDependencies: - solid-js: ^1.7 - source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -3589,13 +1886,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - - space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -3608,18 +1898,9 @@ packages: spdx-license-ids@3.0.21: resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} - stackframe@1.3.4: - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - - standard-as-callback@2.1.0: - resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} - - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - - std-env@3.8.1: - resolution: {integrity: sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==} + statuses@1.4.0: + resolution: {integrity: sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==} + engines: {node: '>= 0.6'} stream-buffers@3.0.3: resolution: {integrity: sha512-pqMqwQCso0PBJt2PQmDO0cFj0lyqmiwOMiMSkVtRokl7e+ZTRYgDHKnuZNbqjiJXgsg4nuqtD/zxuo9KqTp0Yw==} @@ -3631,9 +1912,6 @@ packages: stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} - streamx@2.22.0: - resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -3658,15 +1936,9 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} - string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -3679,13 +1951,6 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - - strip-literal@3.0.0: - resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} - strnum@1.1.2: resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} @@ -3696,28 +1961,14 @@ packages: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} - supports-color@9.4.0: - resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} - engines: {node: '>=12'} + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - system-architecture@0.1.0: - resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} - engines: {node: '>=18'} - - tailwindcss@4.0.11: - resolution: {integrity: sha512-GZ6+tNwieqvpFLZfx2tkZpfOMAK7iumbOJOLmd6v8AcYuHbjUb+cmDRu6l+rFkIqarh5FfLbCSRJhegcVdoPng==} - - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - - tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - tar@7.4.3: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} engines: {node: '>=18'} @@ -3726,30 +1977,11 @@ packages: resolution: {integrity: sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==} engines: {node: '>=14'} - terracotta@1.0.6: - resolution: {integrity: sha512-yVrmT/Lg6a3tEbeYEJH8ksb1PYkR5FA9k5gr1TchaSNIiA2ZWs5a+koEbePXwlBP0poaV7xViZ/v50bQFcMgqw==} - engines: {node: '>=10'} - peerDependencies: - solid-js: ^1.8 - terser@5.39.0: resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} engines: {node: '>=10'} hasBin: true - text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} - - tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - - tinyglobby@0.2.12: - resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} - engines: {node: '>=12.0.0'} - tmp-promise@3.0.3: resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} @@ -3761,16 +1993,9 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -3783,13 +2008,9 @@ packages: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} - type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - - type-fest@4.37.0: - resolution: {integrity: sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==} - engines: {node: '>=16'} + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} @@ -3812,25 +2033,10 @@ packages: engines: {node: '>=14.17'} hasBin: true - ufo@1.5.4: - resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} - - ultrahtml@1.5.3: - resolution: {integrity: sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==} - unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - uncrypto@0.1.3: - resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} - - unctx@2.4.1: - resolution: {integrity: sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==} - - undici-types@5.28.4: - resolution: {integrity: sha512-3OeMF5Lyowe8VW0skf5qaIE7Or3yS9LS7fvMUI0gg4YxpIBVg0L8BxCmROw2CcYhSkpR68Epz7CGc8MPj94Uww==} - undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} @@ -3838,142 +2044,20 @@ packages: resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} engines: {node: '>=14.0'} - unenv@1.10.0: - resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==} - - unenv@2.0.0-rc.12: - resolution: {integrity: sha512-aygmJLhrEnuLKDCISMoOL7ceRJeksnvXJXvtEvFei4zoOXQfvQkUGhZe8u//iK5C++M4pq3CsMbhVjFmWvOlmA==} - - unicorn-magic@0.3.0: - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} - engines: {node: '>=18'} - - unimport@4.1.2: - resolution: {integrity: sha512-oVUL7PSlyVV3QRhsdcyYEMaDX8HJyS/CnUonEJTYA3//bWO+o/4gG8F7auGWWWkrrxBQBYOO8DKe+C53ktpRXw==} - engines: {node: '>=18.12.0'} - - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - - unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} - - unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - universal-user-agent@6.0.1: resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - unplugin-utils@0.2.4: - resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==} - engines: {node: '>=18.12.0'} - - unplugin@1.16.1: - resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} - engines: {node: '>=14.0.0'} - - unplugin@2.2.0: - resolution: {integrity: sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==} - engines: {node: '>=18.12.0'} - - unstorage@1.15.0: - resolution: {integrity: sha512-m40eHdGY/gA6xAPqo8eaxqXgBuzQTlAKfmB1iF7oCKXE1HfwHwzDJBywK+qQGn52dta+bPlZluPF7++yR3p/bg==} - peerDependencies: - '@azure/app-configuration': ^1.8.0 - '@azure/cosmos': ^4.2.0 - '@azure/data-tables': ^13.3.0 - '@azure/identity': ^4.6.0 - '@azure/keyvault-secrets': ^4.9.0 - '@azure/storage-blob': ^12.26.0 - '@capacitor/preferences': ^6.0.3 - '@deno/kv': '>=0.9.0' - '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 - '@planetscale/database': ^1.19.0 - '@upstash/redis': ^1.34.3 - '@vercel/blob': '>=0.27.1' - '@vercel/kv': ^1.0.1 - aws4fetch: ^1.0.20 - db0: '>=0.2.1' - idb-keyval: ^6.2.1 - ioredis: ^5.4.2 - uploadthing: ^7.4.4 - peerDependenciesMeta: - '@azure/app-configuration': - optional: true - '@azure/cosmos': - optional: true - '@azure/data-tables': - optional: true - '@azure/identity': - optional: true - '@azure/keyvault-secrets': - optional: true - '@azure/storage-blob': - optional: true - '@capacitor/preferences': - optional: true - '@deno/kv': - optional: true - '@netlify/blobs': - optional: true - '@planetscale/database': - optional: true - '@upstash/redis': - optional: true - '@vercel/blob': - optional: true - '@vercel/kv': - optional: true - aws4fetch: - optional: true - db0: - optional: true - idb-keyval: - optional: true - ioredis: - optional: true - uploadthing: - optional: true - - untun@0.1.3: - resolution: {integrity: sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==} - hasBin: true - - untyped@2.0.0: - resolution: {integrity: sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==} - hasBin: true - - unwasm@0.3.9: - resolution: {integrity: sha512-LDxTx/2DkFURUd+BU1vUsF/moj0JsoTvl+2tcg2AUOiEzVturhGGx17/IMgGvKUYdZwr33EJHtChCJuhu9Ouvg==} - - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uqr@0.1.2: - resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} - - uri-js-replace@1.0.1: - resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} - - urlpattern-polyfill@8.0.2: - resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + uuid@11.1.0: resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} hasBin: true @@ -3986,71 +2070,12 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true - validate-html-nesting@1.2.2: - resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} - - vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - - vinxi@0.5.3: - resolution: {integrity: sha512-4sL2SMrRzdzClapP44oXdGjCE1oq7/DagsbjY5A09EibmoIO4LP8ScRVdh03lfXxKRk7nCWK7n7dqKvm+fp/9w==} - hasBin: true - - vite-plugin-solid@2.11.6: - resolution: {integrity: sha512-Sl5CTqJTGyEeOsmdH6BOgalIZlwH3t4/y0RQuFLMGnvWMBvxb4+lq7x3BSiAw6etf0QexfNJW7HSOO/Qf7pigg==} - peerDependencies: - '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* - solid-js: ^1.7.2 - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 - peerDependenciesMeta: - '@testing-library/jest-dom': - optional: true - - vite@6.1.0: - resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} vite@6.2.1: resolution: {integrity: sha512-n2GnqDb6XPhlt9B8olZPrgMD/es/Nd1RdChF6CBD/fHW6pUyUTt2sQW2fPRX5GiD9XEa6+8A6A4f2vT6pSsE7Q==} @@ -4092,23 +2117,9 @@ packages: yaml: optional: true - vitefu@1.0.6: - resolution: {integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 - peerDependenciesMeta: - vite: - optional: true - - web-vitals@4.2.4: - resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} - webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - webpack-virtual-modules@0.6.2: - resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - websocket-driver@0.7.4: resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} engines: {node: '>=0.8.0'} @@ -4145,15 +2156,6 @@ packages: engines: {node: '>= 8'} hasBin: true - which@4.0.0: - resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} - engines: {node: ^16.13.0 || >=18.0.0} - hasBin: true - - widest-line@4.0.1: - resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} - engines: {node: '>=12'} - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -4181,9 +2183,6 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -4191,9 +2190,6 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} - yaml-ast-parser@0.0.43: - resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} - yaml@2.7.0: resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} engines: {node: '>= 14'} @@ -4211,13 +2207,6 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - youch-redist@4.1.0-beta.5-1: - resolution: {integrity: sha512-IlNgclEfelti10dh7yzGfQxhowEasVPr4zEN/At+uOzfWv74HiRx2Uz4gyvCRcez0dk1PDerl5aQhKxUKXKClg==} - - zip-stream@6.0.1: - resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} - engines: {node: '>= 14'} - zod-validation-error@3.4.0: resolution: {integrity: sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==} engines: {node: '>=18.0.0'} @@ -4227,9 +2216,6 @@ packages: zod@3.24.2: resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - snapshots: '@actions/core@1.11.1': @@ -4255,677 +2241,128 @@ snapshots: '@actions/io@1.1.3': {} - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.26.8': {} - - '@babel/core@7.26.9': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.9 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) - '@babel/helpers': 7.26.9 - '@babel/parser': 7.26.9 - '@babel/template': 7.26.9 - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 - convert-source-map: 2.0.0 - debug: 4.4.0(supports-color@9.4.0) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.26.9': - dependencies: - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.1.0 - - '@babel/helper-compilation-targets@7.26.5': - dependencies: - '@babel/compat-data': 7.26.8 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.4 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-module-imports@7.18.6': - dependencies: - '@babel/types': 7.26.9 - - '@babel/helper-module-imports@7.25.9': - dependencies: - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.9 - transitivePeerDependencies: - - supports-color - - '@babel/helper-plugin-utils@7.26.5': {} - - '@babel/helper-string-parser@7.25.9': {} - - '@babel/helper-validator-identifier@7.25.9': {} - - '@babel/helper-validator-option@7.25.9': {} - - '@babel/helpers@7.26.9': - dependencies: - '@babel/template': 7.26.9 - '@babel/types': 7.26.9 - - '@babel/parser@7.26.9': - dependencies: - '@babel/types': 7.26.9 - - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/template@7.26.9': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 - - '@babel/traverse@7.26.9': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.9 - '@babel/parser': 7.26.9 - '@babel/template': 7.26.9 - '@babel/types': 7.26.9 - debug: 4.4.0(supports-color@9.4.0) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.26.9': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - - '@cloudflare/kv-asset-handler@0.3.4': - dependencies: - mime: 3.0.0 - - '@deno/shim-deno-test@0.5.0': {} - - '@deno/shim-deno@0.19.2': - dependencies: - '@deno/shim-deno-test': 0.5.0 - which: 4.0.0 - - '@esbuild/aix-ppc64@0.20.2': - optional: true - - '@esbuild/aix-ppc64@0.24.2': - optional: true - '@esbuild/aix-ppc64@0.25.0': optional: true - '@esbuild/android-arm64@0.20.2': - optional: true - - '@esbuild/android-arm64@0.24.2': - optional: true - '@esbuild/android-arm64@0.25.0': optional: true - '@esbuild/android-arm@0.20.2': - optional: true - - '@esbuild/android-arm@0.24.2': - optional: true - '@esbuild/android-arm@0.25.0': optional: true - '@esbuild/android-x64@0.20.2': - optional: true - - '@esbuild/android-x64@0.24.2': - optional: true - '@esbuild/android-x64@0.25.0': optional: true - '@esbuild/darwin-arm64@0.20.2': - optional: true - - '@esbuild/darwin-arm64@0.24.2': - optional: true - - '@esbuild/darwin-arm64@0.25.0': - optional: true - - '@esbuild/darwin-x64@0.20.2': - optional: true - - '@esbuild/darwin-x64@0.24.2': - optional: true - - '@esbuild/darwin-x64@0.25.0': - optional: true - - '@esbuild/freebsd-arm64@0.20.2': - optional: true - - '@esbuild/freebsd-arm64@0.24.2': - optional: true - - '@esbuild/freebsd-arm64@0.25.0': - optional: true - - '@esbuild/freebsd-x64@0.20.2': - optional: true - - '@esbuild/freebsd-x64@0.24.2': - optional: true - - '@esbuild/freebsd-x64@0.25.0': - optional: true - - '@esbuild/linux-arm64@0.20.2': - optional: true - - '@esbuild/linux-arm64@0.24.2': - optional: true - - '@esbuild/linux-arm64@0.25.0': - optional: true - - '@esbuild/linux-arm@0.20.2': - optional: true - - '@esbuild/linux-arm@0.24.2': - optional: true - - '@esbuild/linux-arm@0.25.0': - optional: true - - '@esbuild/linux-ia32@0.20.2': - optional: true - - '@esbuild/linux-ia32@0.24.2': - optional: true - - '@esbuild/linux-ia32@0.25.0': - optional: true - - '@esbuild/linux-loong64@0.20.2': - optional: true - - '@esbuild/linux-loong64@0.24.2': - optional: true - - '@esbuild/linux-loong64@0.25.0': - optional: true - - '@esbuild/linux-mips64el@0.20.2': - optional: true - - '@esbuild/linux-mips64el@0.24.2': - optional: true - - '@esbuild/linux-mips64el@0.25.0': - optional: true - - '@esbuild/linux-ppc64@0.20.2': - optional: true - - '@esbuild/linux-ppc64@0.24.2': - optional: true - - '@esbuild/linux-ppc64@0.25.0': - optional: true - - '@esbuild/linux-riscv64@0.20.2': - optional: true - - '@esbuild/linux-riscv64@0.24.2': - optional: true - - '@esbuild/linux-riscv64@0.25.0': - optional: true - - '@esbuild/linux-s390x@0.20.2': - optional: true - - '@esbuild/linux-s390x@0.24.2': - optional: true - - '@esbuild/linux-s390x@0.25.0': - optional: true - - '@esbuild/linux-x64@0.20.2': - optional: true - - '@esbuild/linux-x64@0.24.2': - optional: true - - '@esbuild/linux-x64@0.25.0': - optional: true - - '@esbuild/netbsd-arm64@0.24.2': - optional: true - - '@esbuild/netbsd-arm64@0.25.0': - optional: true - - '@esbuild/netbsd-x64@0.20.2': - optional: true - - '@esbuild/netbsd-x64@0.24.2': - optional: true - - '@esbuild/netbsd-x64@0.25.0': - optional: true - - '@esbuild/openbsd-arm64@0.24.2': - optional: true - - '@esbuild/openbsd-arm64@0.25.0': - optional: true - - '@esbuild/openbsd-x64@0.20.2': - optional: true - - '@esbuild/openbsd-x64@0.24.2': - optional: true - - '@esbuild/openbsd-x64@0.25.0': - optional: true - - '@esbuild/sunos-x64@0.20.2': - optional: true - - '@esbuild/sunos-x64@0.24.2': - optional: true - - '@esbuild/sunos-x64@0.25.0': - optional: true - - '@esbuild/win32-arm64@0.20.2': - optional: true - - '@esbuild/win32-arm64@0.24.2': - optional: true - - '@esbuild/win32-arm64@0.25.0': - optional: true - - '@esbuild/win32-ia32@0.20.2': - optional: true - - '@esbuild/win32-ia32@0.24.2': - optional: true - - '@esbuild/win32-ia32@0.25.0': - optional: true - - '@esbuild/win32-x64@0.20.2': - optional: true - - '@esbuild/win32-x64@0.24.2': - optional: true - - '@esbuild/win32-x64@0.25.0': - optional: true - - '@fastify/busboy@2.1.1': {} - - '@fastify/busboy@3.1.1': {} - - '@firebase/analytics-compat@0.2.18(@firebase/app-compat@0.2.51)(@firebase/app@0.11.2)': - dependencies: - '@firebase/analytics': 0.10.12(@firebase/app@0.11.2) - '@firebase/analytics-types': 0.8.3 - '@firebase/app-compat': 0.2.51 - '@firebase/component': 0.6.13 - '@firebase/util': 1.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' - - '@firebase/analytics-types@0.8.3': {} - - '@firebase/analytics@0.10.12(@firebase/app@0.11.2)': - dependencies: - '@firebase/app': 0.11.2 - '@firebase/component': 0.6.13 - '@firebase/installations': 0.6.13(@firebase/app@0.11.2) - '@firebase/logger': 0.4.4 - '@firebase/util': 1.11.0 - tslib: 2.8.1 - - '@firebase/app-check-compat@0.3.19(@firebase/app-compat@0.2.51)(@firebase/app@0.11.2)': - dependencies: - '@firebase/app-check': 0.8.12(@firebase/app@0.11.2) - '@firebase/app-check-types': 0.5.3 - '@firebase/app-compat': 0.2.51 - '@firebase/component': 0.6.13 - '@firebase/logger': 0.4.4 - '@firebase/util': 1.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' - - '@firebase/app-check-interop-types@0.3.3': {} - - '@firebase/app-check-types@0.5.3': {} - - '@firebase/app-check@0.8.12(@firebase/app@0.11.2)': - dependencies: - '@firebase/app': 0.11.2 - '@firebase/component': 0.6.13 - '@firebase/logger': 0.4.4 - '@firebase/util': 1.11.0 - tslib: 2.8.1 - - '@firebase/app-compat@0.2.51': - dependencies: - '@firebase/app': 0.11.2 - '@firebase/component': 0.6.13 - '@firebase/logger': 0.4.4 - '@firebase/util': 1.11.0 - tslib: 2.8.1 - - '@firebase/app-types@0.9.3': {} - - '@firebase/app@0.11.2': - dependencies: - '@firebase/component': 0.6.13 - '@firebase/logger': 0.4.4 - '@firebase/util': 1.11.0 - idb: 7.1.1 - tslib: 2.8.1 - - '@firebase/auth-compat@0.5.19(@firebase/app-compat@0.2.51)(@firebase/app-types@0.9.3)(@firebase/app@0.11.2)': - dependencies: - '@firebase/app-compat': 0.2.51 - '@firebase/auth': 1.9.1(@firebase/app@0.11.2) - '@firebase/auth-types': 0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.11.0) - '@firebase/component': 0.6.13 - '@firebase/util': 1.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' - - '@firebase/app-types' - - '@react-native-async-storage/async-storage' - - '@firebase/auth-interop-types@0.2.4': {} + '@esbuild/darwin-arm64@0.25.0': + optional: true - '@firebase/auth-types@0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.11.0)': - dependencies: - '@firebase/app-types': 0.9.3 - '@firebase/util': 1.11.0 + '@esbuild/darwin-x64@0.25.0': + optional: true - '@firebase/auth@1.9.1(@firebase/app@0.11.2)': - dependencies: - '@firebase/app': 0.11.2 - '@firebase/component': 0.6.13 - '@firebase/logger': 0.4.4 - '@firebase/util': 1.11.0 - tslib: 2.8.1 + '@esbuild/freebsd-arm64@0.25.0': + optional: true - '@firebase/component@0.6.13': - dependencies: - '@firebase/util': 1.11.0 - tslib: 2.8.1 + '@esbuild/freebsd-x64@0.25.0': + optional: true - '@firebase/data-connect@0.3.1(@firebase/app@0.11.2)': - dependencies: - '@firebase/app': 0.11.2 - '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.6.13 - '@firebase/logger': 0.4.4 - '@firebase/util': 1.11.0 - tslib: 2.8.1 + '@esbuild/linux-arm64@0.25.0': + optional: true - '@firebase/database-compat@2.0.4': - dependencies: - '@firebase/component': 0.6.13 - '@firebase/database': 1.0.13 - '@firebase/database-types': 1.0.9 - '@firebase/logger': 0.4.4 - '@firebase/util': 1.11.0 - tslib: 2.8.1 + '@esbuild/linux-arm@0.25.0': + optional: true - '@firebase/database-types@1.0.9': - dependencies: - '@firebase/app-types': 0.9.3 - '@firebase/util': 1.11.0 + '@esbuild/linux-ia32@0.25.0': + optional: true - '@firebase/database@1.0.13': - dependencies: - '@firebase/app-check-interop-types': 0.3.3 - '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.6.13 - '@firebase/logger': 0.4.4 - '@firebase/util': 1.11.0 - faye-websocket: 0.11.4 - tslib: 2.8.1 + '@esbuild/linux-loong64@0.25.0': + optional: true - '@firebase/firestore-compat@0.3.44(@firebase/app-compat@0.2.51)(@firebase/app-types@0.9.3)(@firebase/app@0.11.2)': - dependencies: - '@firebase/app-compat': 0.2.51 - '@firebase/component': 0.6.13 - '@firebase/firestore': 4.7.9(@firebase/app@0.11.2) - '@firebase/firestore-types': 3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.11.0) - '@firebase/util': 1.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' - - '@firebase/app-types' + '@esbuild/linux-mips64el@0.25.0': + optional: true - '@firebase/firestore-types@3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.11.0)': - dependencies: - '@firebase/app-types': 0.9.3 - '@firebase/util': 1.11.0 + '@esbuild/linux-ppc64@0.25.0': + optional: true - '@firebase/firestore@4.7.9(@firebase/app@0.11.2)': - dependencies: - '@firebase/app': 0.11.2 - '@firebase/component': 0.6.13 - '@firebase/logger': 0.4.4 - '@firebase/util': 1.11.0 - '@firebase/webchannel-wrapper': 1.0.3 - '@grpc/grpc-js': 1.9.15 - '@grpc/proto-loader': 0.7.13 - tslib: 2.8.1 + '@esbuild/linux-riscv64@0.25.0': + optional: true - '@firebase/functions-compat@0.3.20(@firebase/app-compat@0.2.51)(@firebase/app@0.11.2)': - dependencies: - '@firebase/app-compat': 0.2.51 - '@firebase/component': 0.6.13 - '@firebase/functions': 0.12.3(@firebase/app@0.11.2) - '@firebase/functions-types': 0.6.3 - '@firebase/util': 1.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' + '@esbuild/linux-s390x@0.25.0': + optional: true - '@firebase/functions-types@0.6.3': {} + '@esbuild/linux-x64@0.25.0': + optional: true - '@firebase/functions@0.12.3(@firebase/app@0.11.2)': - dependencies: - '@firebase/app': 0.11.2 - '@firebase/app-check-interop-types': 0.3.3 - '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.6.13 - '@firebase/messaging-interop-types': 0.2.3 - '@firebase/util': 1.11.0 - tslib: 2.8.1 + '@esbuild/netbsd-arm64@0.25.0': + optional: true - '@firebase/installations-compat@0.2.13(@firebase/app-compat@0.2.51)(@firebase/app-types@0.9.3)(@firebase/app@0.11.2)': - dependencies: - '@firebase/app-compat': 0.2.51 - '@firebase/component': 0.6.13 - '@firebase/installations': 0.6.13(@firebase/app@0.11.2) - '@firebase/installations-types': 0.5.3(@firebase/app-types@0.9.3) - '@firebase/util': 1.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' - - '@firebase/app-types' + '@esbuild/netbsd-x64@0.25.0': + optional: true - '@firebase/installations-types@0.5.3(@firebase/app-types@0.9.3)': - dependencies: - '@firebase/app-types': 0.9.3 + '@esbuild/openbsd-arm64@0.25.0': + optional: true - '@firebase/installations@0.6.13(@firebase/app@0.11.2)': - dependencies: - '@firebase/app': 0.11.2 - '@firebase/component': 0.6.13 - '@firebase/util': 1.11.0 - idb: 7.1.1 - tslib: 2.8.1 + '@esbuild/openbsd-x64@0.25.0': + optional: true - '@firebase/logger@0.4.4': - dependencies: - tslib: 2.8.1 + '@esbuild/sunos-x64@0.25.0': + optional: true - '@firebase/messaging-compat@0.2.17(@firebase/app-compat@0.2.51)(@firebase/app@0.11.2)': - dependencies: - '@firebase/app-compat': 0.2.51 - '@firebase/component': 0.6.13 - '@firebase/messaging': 0.12.17(@firebase/app@0.11.2) - '@firebase/util': 1.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' + '@esbuild/win32-arm64@0.25.0': + optional: true - '@firebase/messaging-interop-types@0.2.3': {} + '@esbuild/win32-ia32@0.25.0': + optional: true - '@firebase/messaging@0.12.17(@firebase/app@0.11.2)': - dependencies: - '@firebase/app': 0.11.2 - '@firebase/component': 0.6.13 - '@firebase/installations': 0.6.13(@firebase/app@0.11.2) - '@firebase/messaging-interop-types': 0.2.3 - '@firebase/util': 1.11.0 - idb: 7.1.1 - tslib: 2.8.1 + '@esbuild/win32-x64@0.25.0': + optional: true - '@firebase/performance-compat@0.2.14(@firebase/app-compat@0.2.51)(@firebase/app@0.11.2)': - dependencies: - '@firebase/app-compat': 0.2.51 - '@firebase/component': 0.6.13 - '@firebase/logger': 0.4.4 - '@firebase/performance': 0.7.1(@firebase/app@0.11.2) - '@firebase/performance-types': 0.2.3 - '@firebase/util': 1.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' + '@fastify/busboy@2.1.1': {} - '@firebase/performance-types@0.2.3': {} + '@fastify/busboy@3.1.1': {} - '@firebase/performance@0.7.1(@firebase/app@0.11.2)': - dependencies: - '@firebase/app': 0.11.2 - '@firebase/component': 0.6.13 - '@firebase/installations': 0.6.13(@firebase/app@0.11.2) - '@firebase/logger': 0.4.4 - '@firebase/util': 1.11.0 - tslib: 2.8.1 - web-vitals: 4.2.4 + '@firebase/app-check-interop-types@0.3.3': {} - '@firebase/remote-config-compat@0.2.13(@firebase/app-compat@0.2.51)(@firebase/app@0.11.2)': - dependencies: - '@firebase/app-compat': 0.2.51 - '@firebase/component': 0.6.13 - '@firebase/logger': 0.4.4 - '@firebase/remote-config': 0.6.0(@firebase/app@0.11.2) - '@firebase/remote-config-types': 0.4.0 - '@firebase/util': 1.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' + '@firebase/app-types@0.9.3': {} - '@firebase/remote-config-types@0.4.0': {} + '@firebase/auth-interop-types@0.2.4': {} - '@firebase/remote-config@0.6.0(@firebase/app@0.11.2)': + '@firebase/component@0.6.13': dependencies: - '@firebase/app': 0.11.2 - '@firebase/component': 0.6.13 - '@firebase/installations': 0.6.13(@firebase/app@0.11.2) - '@firebase/logger': 0.4.4 '@firebase/util': 1.11.0 tslib: 2.8.1 - '@firebase/storage-compat@0.3.17(@firebase/app-compat@0.2.51)(@firebase/app-types@0.9.3)(@firebase/app@0.11.2)': + '@firebase/database-compat@2.0.5': dependencies: - '@firebase/app-compat': 0.2.51 '@firebase/component': 0.6.13 - '@firebase/storage': 0.13.7(@firebase/app@0.11.2) - '@firebase/storage-types': 0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.11.0) + '@firebase/database': 1.0.14 + '@firebase/database-types': 1.0.10 + '@firebase/logger': 0.4.4 '@firebase/util': 1.11.0 tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' - - '@firebase/app-types' - '@firebase/storage-types@0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.11.0)': + '@firebase/database-types@1.0.10': dependencies: '@firebase/app-types': 0.9.3 '@firebase/util': 1.11.0 - '@firebase/storage@0.13.7(@firebase/app@0.11.2)': + '@firebase/database@1.0.14': dependencies: - '@firebase/app': 0.11.2 + '@firebase/app-check-interop-types': 0.3.3 + '@firebase/auth-interop-types': 0.2.4 '@firebase/component': 0.6.13 + '@firebase/logger': 0.4.4 '@firebase/util': 1.11.0 + faye-websocket: 0.11.4 tslib: 2.8.1 - '@firebase/util@1.11.0': + '@firebase/logger@0.4.4': dependencies: tslib: 2.8.1 - '@firebase/vertexai@1.1.0(@firebase/app-types@0.9.3)(@firebase/app@0.11.2)': + '@firebase/util@1.11.0': dependencies: - '@firebase/app': 0.11.2 - '@firebase/app-check-interop-types': 0.3.3 - '@firebase/app-types': 0.9.3 - '@firebase/component': 0.6.13 - '@firebase/logger': 0.4.4 - '@firebase/util': 1.11.0 tslib: 2.8.1 - '@firebase/webchannel-wrapper@1.0.3': {} - '@google-cloud/firestore@7.11.0': dependencies: '@opentelemetry/api': 1.9.0 @@ -4947,21 +2384,21 @@ snapshots: '@google-cloud/projectify@4.0.0': optional: true - '@google-cloud/promisify@4.1.0': + '@google-cloud/promisify@4.0.0': optional: true - '@google-cloud/storage@7.15.2': + '@google-cloud/storage@7.16.0': dependencies: '@google-cloud/paginator': 5.0.2 '@google-cloud/projectify': 4.0.0 - '@google-cloud/promisify': 4.1.0 + '@google-cloud/promisify': 4.0.0 abort-controller: 3.0.0 async-retry: 1.3.3 duplexify: 4.1.3 fast-xml-parser: 4.5.3 gaxios: 6.7.1 google-auth-library: 9.15.1 - html-entities: 2.5.2 + html-entities: 2.6.0 mime: 3.0.0 p-limit: 3.1.0 retry-request: 7.0.2 @@ -4972,25 +2409,19 @@ snapshots: - supports-color optional: true - '@grpc/grpc-js@1.12.6': + '@grpc/grpc-js@1.13.2': dependencies: '@grpc/proto-loader': 0.7.13 '@js-sdsl/ordered-map': 4.4.2 optional: true - '@grpc/grpc-js@1.9.15': - dependencies: - '@grpc/proto-loader': 0.7.13 - '@types/node': 22.13.9 - '@grpc/proto-loader@0.7.13': dependencies: lodash.camelcase: 4.3.0 long: 5.3.1 protobufjs: 7.4.0 yargs: 17.7.2 - - '@ioredis/commands@1.2.0': {} + optional: true '@isaacs/cliui@8.0.2': dependencies: @@ -5010,22 +2441,28 @@ snapshots: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 + optional: true - '@jridgewell/resolve-uri@3.1.2': {} + '@jridgewell/resolve-uri@3.1.2': + optional: true - '@jridgewell/set-array@1.2.1': {} + '@jridgewell/set-array@1.2.1': + optional: true '@jridgewell/source-map@0.3.6': dependencies: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 + optional: true - '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.0': + optional: true '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + optional: true '@js-sdsl/ordered-map@4.4.2': optional: true @@ -5063,42 +2500,6 @@ snapshots: - encoding - utf-8-validate - '@mapbox/node-pre-gyp@2.0.0': - dependencies: - consola: 3.4.0 - detect-libc: 2.0.3 - https-proxy-agent: 7.0.6(supports-color@9.4.0) - node-fetch: 2.7.0 - nopt: 8.1.0 - semver: 7.7.1 - tar: 7.4.3 - transitivePeerDependencies: - - encoding - - supports-color - - '@netlify/functions@3.0.0': - dependencies: - '@netlify/serverless-functions-api': 1.30.1 - - '@netlify/node-cookies@0.1.0': {} - - '@netlify/serverless-functions-api@1.30.1': - dependencies: - '@netlify/node-cookies': 0.1.0 - urlpattern-polyfill: 8.0.2 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 - '@octokit/auth-token@4.0.0': {} '@octokit/core@5.2.0': @@ -5157,190 +2558,44 @@ snapshots: dependencies: '@octokit/openapi-types': 23.0.1 - '@opentelemetry/api@1.9.0': - optional: true - - '@parcel/watcher-android-arm64@2.5.1': - optional: true - - '@parcel/watcher-darwin-arm64@2.5.1': - optional: true - - '@parcel/watcher-darwin-x64@2.5.1': - optional: true - - '@parcel/watcher-freebsd-x64@2.5.1': - optional: true - - '@parcel/watcher-linux-arm-glibc@2.5.1': - optional: true - - '@parcel/watcher-linux-arm-musl@2.5.1': - optional: true - - '@parcel/watcher-linux-arm64-glibc@2.5.1': - optional: true - - '@parcel/watcher-linux-arm64-musl@2.5.1': - optional: true - - '@parcel/watcher-linux-x64-glibc@2.5.1': - optional: true - - '@parcel/watcher-linux-x64-musl@2.5.1': - optional: true - - '@parcel/watcher-wasm@2.3.0': - dependencies: - is-glob: 4.0.3 - micromatch: 4.0.8 - - '@parcel/watcher-wasm@2.5.1': - dependencies: - is-glob: 4.0.3 - micromatch: 4.0.8 - - '@parcel/watcher-win32-arm64@2.5.1': - optional: true - - '@parcel/watcher-win32-ia32@2.5.1': - optional: true - - '@parcel/watcher-win32-x64@2.5.1': - optional: true - - '@parcel/watcher@2.5.1': - dependencies: - detect-libc: 1.0.3 - is-glob: 4.0.3 - micromatch: 4.0.8 - node-addon-api: 7.1.1 - optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.1 - '@parcel/watcher-darwin-arm64': 2.5.1 - '@parcel/watcher-darwin-x64': 2.5.1 - '@parcel/watcher-freebsd-x64': 2.5.1 - '@parcel/watcher-linux-arm-glibc': 2.5.1 - '@parcel/watcher-linux-arm-musl': 2.5.1 - '@parcel/watcher-linux-arm64-glibc': 2.5.1 - '@parcel/watcher-linux-arm64-musl': 2.5.1 - '@parcel/watcher-linux-x64-glibc': 2.5.1 - '@parcel/watcher-linux-x64-musl': 2.5.1 - '@parcel/watcher-win32-arm64': 2.5.1 - '@parcel/watcher-win32-ia32': 2.5.1 - '@parcel/watcher-win32-x64': 2.5.1 - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@protobufjs/aspromise@1.1.2': {} - - '@protobufjs/base64@1.1.2': {} - - '@protobufjs/codegen@2.0.4': {} - - '@protobufjs/eventemitter@1.1.0': {} - - '@protobufjs/fetch@1.1.0': - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 - - '@protobufjs/float@1.0.2': {} - - '@protobufjs/inquire@1.1.0': {} - - '@protobufjs/path@1.1.2': {} - - '@protobufjs/pool@1.1.0': {} - - '@protobufjs/utf8@1.1.0': {} + '@opentelemetry/api@1.9.0': + optional: true - '@redocly/ajv@8.11.2': - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js-replace: 1.0.1 + '@pkgjs/parseargs@0.11.0': + optional: true - '@redocly/config@0.22.1': {} + '@protobufjs/aspromise@1.1.2': + optional: true - '@redocly/openapi-core@1.33.0(supports-color@9.4.0)': - dependencies: - '@redocly/ajv': 8.11.2 - '@redocly/config': 0.22.1 - colorette: 1.4.0 - https-proxy-agent: 7.0.6(supports-color@9.4.0) - js-levenshtein: 1.1.6 - js-yaml: 4.1.0 - minimatch: 5.1.6 - pluralize: 8.0.0 - yaml-ast-parser: 0.0.43 - transitivePeerDependencies: - - supports-color + '@protobufjs/base64@1.1.2': + optional: true - '@rollup/plugin-alias@5.1.1(rollup@4.34.9)': - optionalDependencies: - rollup: 4.34.9 + '@protobufjs/codegen@2.0.4': + optional: true - '@rollup/plugin-commonjs@28.0.3(rollup@4.34.9)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.9) - commondir: 1.0.1 - estree-walker: 2.0.2 - fdir: 6.4.3(picomatch@4.0.2) - is-reference: 1.2.1 - magic-string: 0.30.17 - picomatch: 4.0.2 - optionalDependencies: - rollup: 4.34.9 + '@protobufjs/eventemitter@1.1.0': + optional: true - '@rollup/plugin-inject@5.0.5(rollup@4.34.9)': + '@protobufjs/fetch@1.1.0': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.9) - estree-walker: 2.0.2 - magic-string: 0.30.17 - optionalDependencies: - rollup: 4.34.9 + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + optional: true - '@rollup/plugin-json@6.1.0(rollup@4.34.9)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.9) - optionalDependencies: - rollup: 4.34.9 + '@protobufjs/float@1.0.2': + optional: true - '@rollup/plugin-node-resolve@16.0.0(rollup@4.34.9)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.9) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.10 - optionalDependencies: - rollup: 4.34.9 + '@protobufjs/inquire@1.1.0': + optional: true - '@rollup/plugin-replace@6.0.2(rollup@4.34.9)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.9) - magic-string: 0.30.17 - optionalDependencies: - rollup: 4.34.9 + '@protobufjs/path@1.1.2': + optional: true - '@rollup/plugin-terser@0.4.4(rollup@4.34.9)': - dependencies: - serialize-javascript: 6.0.2 - smob: 1.5.0 - terser: 5.39.0 - optionalDependencies: - rollup: 4.34.9 + '@protobufjs/pool@1.1.0': + optional: true - '@rollup/pluginutils@5.1.4(rollup@4.34.9)': - dependencies: - '@types/estree': 1.0.6 - estree-walker: 2.0.2 - picomatch: 4.0.2 - optionalDependencies: - rollup: 4.34.9 + '@protobufjs/utf8@1.1.0': + optional: true '@rollup/rollup-android-arm-eabi@4.34.9': optional: true @@ -5399,242 +2654,14 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.34.9': optional: true - '@shikijs/core@1.29.2': - dependencies: - '@shikijs/engine-javascript': 1.29.2 - '@shikijs/engine-oniguruma': 1.29.2 - '@shikijs/types': 1.29.2 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 - - '@shikijs/engine-javascript@1.29.2': - dependencies: - '@shikijs/types': 1.29.2 - '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 2.3.0 - - '@shikijs/engine-oniguruma@1.29.2': - dependencies: - '@shikijs/types': 1.29.2 - '@shikijs/vscode-textmate': 10.0.2 - - '@shikijs/langs@1.29.2': - dependencies: - '@shikijs/types': 1.29.2 - - '@shikijs/themes@1.29.2': - dependencies: - '@shikijs/types': 1.29.2 - - '@shikijs/types@1.29.2': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - '@shikijs/vscode-textmate@10.0.2': {} - - '@sindresorhus/merge-streams@2.3.0': {} - - '@solidjs/meta@0.29.4(solid-js@1.9.5)': - dependencies: - solid-js: 1.9.5 - - '@solidjs/router@0.15.3(solid-js@1.9.5)': - dependencies: - solid-js: 1.9.5 - - '@solidjs/start@1.1.3(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(solid-js@1.9.5)(terser@5.39.0)(tsx@4.19.3)(vinxi@0.5.3(@types/node@22.13.9)(db0@0.3.1)(ioredis@5.6.0)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.8.2)(yaml@2.7.0))(vite@6.2.1(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(yaml@2.7.0)': - dependencies: - '@tanstack/server-functions-plugin': 1.112.18(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) - '@vinxi/plugin-directives': 0.5.0(vinxi@0.5.3(@types/node@22.13.9)(db0@0.3.1)(ioredis@5.6.0)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.8.2)(yaml@2.7.0)) - '@vinxi/server-components': 0.5.0(vinxi@0.5.3(@types/node@22.13.9)(db0@0.3.1)(ioredis@5.6.0)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.8.2)(yaml@2.7.0)) - defu: 6.1.4 - error-stack-parser: 2.1.4 - html-to-image: 1.11.13 - radix3: 1.1.2 - seroval: 1.2.1 - seroval-plugins: 1.2.1(seroval@1.2.1) - shiki: 1.29.2 - source-map-js: 1.2.1 - terracotta: 1.0.6(solid-js@1.9.5) - tinyglobby: 0.2.12 - vinxi: 0.5.3(@types/node@22.13.9)(db0@0.3.1)(ioredis@5.6.0)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.8.2)(yaml@2.7.0) - vite-plugin-solid: 2.11.6(solid-js@1.9.5)(vite@6.2.1(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)) - transitivePeerDependencies: - - '@testing-library/jest-dom' - - '@types/node' - - babel-plugin-macros - - jiti - - less - - lightningcss - - sass - - sass-embedded - - solid-js - - stylus - - sugarss - - supports-color - - terser - - tsx - - vite - - yaml - - '@tailwindcss/node@4.0.11': - dependencies: - enhanced-resolve: 5.18.1 - jiti: 2.4.2 - tailwindcss: 4.0.11 - - '@tailwindcss/oxide-android-arm64@4.0.11': - optional: true - - '@tailwindcss/oxide-darwin-arm64@4.0.11': - optional: true - - '@tailwindcss/oxide-darwin-x64@4.0.11': - optional: true - - '@tailwindcss/oxide-freebsd-x64@4.0.11': - optional: true - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.11': - optional: true - - '@tailwindcss/oxide-linux-arm64-gnu@4.0.11': - optional: true - - '@tailwindcss/oxide-linux-arm64-musl@4.0.11': - optional: true - - '@tailwindcss/oxide-linux-x64-gnu@4.0.11': - optional: true - - '@tailwindcss/oxide-linux-x64-musl@4.0.11': - optional: true - - '@tailwindcss/oxide-win32-arm64-msvc@4.0.11': - optional: true - - '@tailwindcss/oxide-win32-x64-msvc@4.0.11': - optional: true - - '@tailwindcss/oxide@4.0.11': - optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.0.11 - '@tailwindcss/oxide-darwin-arm64': 4.0.11 - '@tailwindcss/oxide-darwin-x64': 4.0.11 - '@tailwindcss/oxide-freebsd-x64': 4.0.11 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.11 - '@tailwindcss/oxide-linux-arm64-gnu': 4.0.11 - '@tailwindcss/oxide-linux-arm64-musl': 4.0.11 - '@tailwindcss/oxide-linux-x64-gnu': 4.0.11 - '@tailwindcss/oxide-linux-x64-musl': 4.0.11 - '@tailwindcss/oxide-win32-arm64-msvc': 4.0.11 - '@tailwindcss/oxide-win32-x64-msvc': 4.0.11 - - '@tailwindcss/vite@4.0.11(vite@6.2.1(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))': - dependencies: - '@tailwindcss/node': 4.0.11 - '@tailwindcss/oxide': 4.0.11 - lightningcss: 1.29.2 - tailwindcss: 4.0.11 - vite: 6.2.1(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) - - '@tanstack/directive-functions-plugin@1.112.18(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/core': 7.26.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.9) - '@babel/template': 7.26.9 - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 - '@tanstack/router-utils': 1.112.18 - babel-dead-code-elimination: 1.0.9 - dedent: 1.5.3 - tiny-invariant: 1.3.3 - vite: 6.1.0(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - '@tanstack/router-utils@1.112.18': - dependencies: - '@babel/generator': 7.26.9 - '@babel/parser': 7.26.9 - ansis: 3.17.0 - diff: 7.0.0 - - '@tanstack/server-functions-plugin@1.112.18(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/core': 7.26.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.9) - '@babel/template': 7.26.9 - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 - '@tanstack/directive-functions-plugin': 1.112.18(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) - babel-dead-code-elimination: 1.0.9 - dedent: 1.5.3 - tiny-invariant: 1.3.3 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - '@tootallnate/once@2.0.0': optional: true - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 - - '@types/babel__generator@7.6.8': - dependencies: - '@babel/types': 7.26.9 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 - - '@types/babel__traverse@7.20.6': - dependencies: - '@babel/types': 7.26.9 - '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 '@types/node': 22.13.9 - '@types/braces@3.0.5': {} - '@types/caseless@0.12.5': optional: true @@ -5658,10 +2685,6 @@ snapshots: '@types/qs': 6.9.18 '@types/serve-static': 1.15.7 - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.3 - '@types/http-errors@2.0.4': {} '@types/http-proxy@1.17.16': @@ -5678,14 +2701,6 @@ snapshots: '@types/long@4.0.2': optional: true - '@types/mdast@4.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/micromatch@4.0.9': - dependencies: - '@types/braces': 3.0.5 - '@types/mime@1.3.5': {} '@types/ms@2.1.0': {} @@ -5711,8 +2726,6 @@ snapshots: form-data: 2.5.3 optional: true - '@types/resolve@1.20.2': {} - '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 @@ -5736,118 +2749,34 @@ snapshots: '@types/tough-cookie@4.0.5': optional: true - '@types/unist@3.0.3': {} - '@types/ws@8.18.0': dependencies: '@types/node': 22.13.9 - '@ungap/structured-clone@1.3.0': {} - '@vercel/ncc@0.38.3': {} - '@vercel/nft@0.29.2(rollup@4.34.9)': - dependencies: - '@mapbox/node-pre-gyp': 2.0.0 - '@rollup/pluginutils': 5.1.4(rollup@4.34.9) - acorn: 8.14.1 - acorn-import-attributes: 1.9.5(acorn@8.14.1) - async-sema: 3.1.1 - bindings: 1.5.0 - estree-walker: 2.0.2 - glob: 10.4.5 - graceful-fs: 4.2.11 - node-gyp-build: 4.8.4 - picomatch: 4.0.2 - resolve-from: 5.0.0 - transitivePeerDependencies: - - encoding - - rollup - - supports-color - - '@vinxi/listhen@1.5.6': - dependencies: - '@parcel/watcher': 2.5.1 - '@parcel/watcher-wasm': 2.3.0 - citty: 0.1.6 - clipboardy: 4.0.0 - consola: 3.4.0 - defu: 6.1.4 - get-port-please: 3.1.2 - h3: 1.15.1 - http-shutdown: 1.2.2 - jiti: 1.21.7 - mlly: 1.7.4 - node-forge: 1.3.1 - pathe: 1.1.2 - std-env: 3.8.1 - ufo: 1.5.4 - untun: 0.1.3 - uqr: 0.1.2 - - '@vinxi/plugin-directives@0.5.0(vinxi@0.5.3(@types/node@22.13.9)(db0@0.3.1)(ioredis@5.6.0)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.8.2)(yaml@2.7.0))': - dependencies: - '@babel/parser': 7.26.9 - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) - acorn-loose: 8.4.0 - acorn-typescript: 1.4.13(acorn@8.14.1) - astring: 1.9.0 - magicast: 0.2.11 - recast: 0.23.11 - tslib: 2.8.1 - vinxi: 0.5.3(@types/node@22.13.9)(db0@0.3.1)(ioredis@5.6.0)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.8.2)(yaml@2.7.0) - - '@vinxi/server-components@0.5.0(vinxi@0.5.3(@types/node@22.13.9)(db0@0.3.1)(ioredis@5.6.0)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.8.2)(yaml@2.7.0))': - dependencies: - '@vinxi/plugin-directives': 0.5.0(vinxi@0.5.3(@types/node@22.13.9)(db0@0.3.1)(ioredis@5.6.0)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.8.2)(yaml@2.7.0)) - acorn: 8.14.1 - acorn-loose: 8.4.0 - acorn-typescript: 1.4.13(acorn@8.14.1) - astring: 1.9.0 - magicast: 0.2.11 - recast: 0.23.11 - vinxi: 0.5.3(@types/node@22.13.9)(db0@0.3.1)(ioredis@5.6.0)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.8.2)(yaml@2.7.0) - - abbrev@3.0.0: {} - abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 + optional: true - acorn-import-attributes@1.9.5(acorn@8.14.1): - dependencies: - acorn: 8.14.1 - - acorn-jsx@5.3.2(acorn@8.14.1): - dependencies: - acorn: 8.14.1 - - acorn-loose@8.4.0: - dependencies: - acorn: 8.14.1 - - acorn-typescript@1.4.13(acorn@8.14.1): + accepts@1.3.8: dependencies: - acorn: 8.14.1 + mime-types: 2.1.35 + negotiator: 0.6.3 - acorn@8.14.1: {} + acorn@8.14.1: + optional: true agent-base@6.0.2: dependencies: - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color optional: true agent-base@7.1.3: {} - ansi-align@3.0.1: - dependencies: - string-width: 4.2.3 - - ansi-colors@4.1.3: {} - ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} @@ -5862,33 +2791,6 @@ snapshots: ansi-styles@6.2.1: {} - ansis@3.17.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - archiver-utils@5.0.2: - dependencies: - glob: 10.4.5 - graceful-fs: 4.2.11 - is-stream: 2.0.1 - lazystream: 1.0.1 - lodash: 4.17.21 - normalize-path: 3.0.0 - readable-stream: 4.7.0 - - archiver@7.0.1: - dependencies: - archiver-utils: 5.0.2 - async: 3.2.6 - buffer-crc32: 1.0.0 - readable-stream: 4.7.0 - readdir-glob: 1.1.3 - tar-stream: 3.1.7 - zip-stream: 6.0.1 - argparse@2.0.1: {} array-buffer-byte-length@1.0.2: @@ -5896,6 +2798,8 @@ snapshots: call-bound: 1.0.4 is-array-buffer: 3.0.5 + array-flatten@1.1.1: {} + arraybuffer.prototype.slice@1.0.4: dependencies: array-buffer-byte-length: 1.0.2 @@ -5909,12 +2813,6 @@ snapshots: arrify@2.0.1: optional: true - ast-types@0.16.1: - dependencies: - tslib: 2.8.1 - - astring@1.9.0: {} - async-function@1.0.0: {} async-retry@1.3.3: @@ -5922,8 +2820,6 @@ snapshots: retry: 0.13.1 optional: true - async-sema@3.1.1: {} - async@3.2.6: {} asynckit@0.4.0: {} @@ -5932,59 +2828,32 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - b4a@1.6.7: {} - - babel-dead-code-elimination@1.0.9: - dependencies: - '@babel/core': 7.26.9 - '@babel/parser': 7.26.9 - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 - transitivePeerDependencies: - - supports-color - - babel-plugin-jsx-dom-expressions@0.39.7(@babel/core@7.26.9): - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) - '@babel/types': 7.26.9 - html-entities: 2.3.3 - parse5: 7.2.1 - validate-html-nesting: 1.2.2 - - babel-preset-solid@1.9.5(@babel/core@7.26.9): - dependencies: - '@babel/core': 7.26.9 - babel-plugin-jsx-dom-expressions: 0.39.7(@babel/core@7.26.9) - balanced-match@1.0.2: {} - bare-events@2.5.4: - optional: true - base64-js@1.5.1: {} - before-after-hook@2.2.3: {} - - bignumber.js@9.1.2: {} + basic-auth@2.0.1: + dependencies: + safe-buffer: 5.1.2 - binary-extensions@2.3.0: {} + before-after-hook@2.2.3: {} - bindings@1.5.0: - dependencies: - file-uri-to-path: 1.0.0 + bignumber.js@9.2.1: {} - boxen@7.1.1: + body-parser@1.18.3: dependencies: - ansi-align: 3.0.1 - camelcase: 7.0.1 - chalk: 5.4.1 - cli-boxes: 3.0.0 - string-width: 5.1.2 - type-fest: 2.19.0 - widest-line: 4.0.1 - wrap-ansi: 8.1.0 + bytes: 3.0.0 + content-type: 1.0.5 + debug: 2.6.9 + depd: 1.1.2 + http-errors: 1.6.3 + iconv-lite: 0.4.23 + on-finished: 2.3.0 + qs: 6.5.2 + raw-body: 2.3.3 + type-is: 1.6.18 + transitivePeerDependencies: + - supports-color brace-expansion@1.1.11: dependencies: @@ -5999,40 +2868,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.24.4: - dependencies: - caniuse-lite: 1.0.30001702 - electron-to-chromium: 1.5.113 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.24.4) - - buffer-crc32@1.0.0: {} - buffer-equal-constant-time@1.0.1: {} - buffer-from@1.1.2: {} - - buffer@6.0.3: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 + buffer-from@1.1.2: + optional: true - c12@3.0.2(magicast@0.3.5): - dependencies: - chokidar: 4.0.3 - confbox: 0.1.8 - defu: 6.1.4 - dotenv: 16.4.7 - exsolve: 1.0.2 - giget: 2.0.0 - jiti: 2.4.2 - ohash: 2.0.11 - pathe: 2.0.3 - perfect-debounce: 1.0.0 - pkg-types: 2.1.0 - rc9: 2.1.2 - optionalDependencies: - magicast: 0.3.5 + bytes@3.0.0: {} call-bind-apply-helpers@1.0.2: dependencies: @@ -6051,122 +2892,61 @@ snapshots: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 - camelcase@7.0.1: {} - - caniuse-lite@1.0.30001702: {} - - ccount@2.0.1: {} - chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - chalk@5.4.1: {} - - change-case@5.4.4: {} - - character-entities-html4@2.1.0: {} - - character-entities-legacy@3.0.0: {} - - chokidar@3.6.0: - 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 - - chokidar@4.0.3: + chalk@4.1.2: dependencies: - readdirp: 4.1.2 + ansi-styles: 4.3.0 + supports-color: 7.2.0 chownr@3.0.0: {} - citty@0.1.6: - dependencies: - consola: 3.4.0 - - cli-boxes@3.0.0: {} - - clipboardy@4.0.0: - dependencies: - execa: 8.0.1 - is-wsl: 3.1.0 - is64bit: 2.0.0 - cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - - cluster-key-slot@1.1.2: {} + optional: true 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: {} - - colorette@1.4.0: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - comma-separated-tokens@2.0.3: {} - - commander@2.20.3: {} - - commondir@1.0.1: {} - - compatx@0.1.8: {} - - compress-commons@6.0.2: + color-convert@2.0.1: dependencies: - crc-32: 1.2.2 - crc32-stream: 6.0.0 - is-stream: 2.0.1 - normalize-path: 3.0.0 - readable-stream: 4.7.0 + color-name: 1.1.4 - concat-map@0.0.1: {} + color-name@1.1.3: {} - confbox@0.1.8: {} + color-name@1.1.4: {} - confbox@0.2.1: {} + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 - consola@3.4.0: {} + commander@2.20.3: + optional: true - convert-source-map@2.0.0: {} + concat-map@0.0.1: {} - cookie-es@1.2.2: {} + content-disposition@0.5.2: {} - cookie-es@2.0.0: {} + content-type@1.0.5: {} - core-util-is@1.0.3: {} + cookie-parser@1.4.7: + dependencies: + cookie: 0.7.2 + cookie-signature: 1.0.6 - crc-32@1.2.2: {} + cookie-signature@1.0.6: {} - crc32-stream@6.0.0: - dependencies: - crc-32: 1.2.2 - readable-stream: 4.7.0 + cookie@0.3.1: {} - croner@9.0.0: {} + cookie@0.7.2: {} cross-spawn@6.0.6: dependencies: @@ -6182,12 +2962,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - crossws@0.3.4: - dependencies: - uncrypto: 0.1.3 - - csstype@3.1.3: {} - data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -6206,26 +2980,13 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 - dax-sh@0.39.2: - dependencies: - '@deno/shim-deno': 0.19.2 - undici-types: 5.28.4 - - db0@0.3.1: {} - debug@2.6.9: dependencies: ms: 2.0.0 - debug@4.4.0(supports-color@9.4.0): + debug@4.4.0: dependencies: ms: 2.1.3 - optionalDependencies: - supports-color: 9.4.0 - - dedent@1.5.3: {} - - deepmerge@4.3.1: {} define-data-property@1.1.4: dependencies: @@ -6233,43 +2994,22 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - define-lazy-prop@2.0.0: {} - define-properties@1.2.1: dependencies: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 - defu@6.1.4: {} - delayed-stream@1.0.0: {} - denque@2.1.0: {} - - depd@2.0.0: {} + depd@1.1.2: {} deprecation@2.3.1: {} - dequal@2.0.3: {} - - destr@2.0.3: {} - - destroy@1.2.0: {} - - detect-libc@1.0.3: {} - - detect-libc@2.0.3: {} - - devlop@1.1.0: - dependencies: - dequal: 2.0.3 - - diff@7.0.0: {} + destroy@1.0.4: {} - dot-prop@9.0.0: - dependencies: - type-fest: 4.37.0 + detect-libc@2.0.3: + optional: true dotenv@16.4.7: {} @@ -6279,12 +3019,10 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - duplexer@0.1.2: {} - duplexify@4.1.3: dependencies: end-of-stream: 1.4.4 - inherits: 2.0.4 + inherits: 2.0.3 readable-stream: 3.6.2 stream-shift: 1.0.3 optional: true @@ -6293,13 +3031,13 @@ snapshots: ecdsa-sig-formatter@1.0.11: dependencies: - safe-buffer: 5.2.1 + safe-buffer: 5.1.2 ee-first@1.1.1: {} - electron-to-chromium@1.5.113: {} - - emoji-regex-xs@1.0.0: {} + ejs@3.1.10: + dependencies: + jake: 10.9.2 emoji-regex@8.0.0: {} @@ -6307,28 +3045,15 @@ snapshots: encodeurl@1.0.2: {} - encodeurl@2.0.0: {} - end-of-stream@1.4.4: dependencies: once: 1.4.0 optional: true - enhanced-resolve@5.18.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - - entities@4.5.0: {} - error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - error-stack-parser@2.1.4: - dependencies: - stackframe: 1.3.4 - es-abstract@1.23.9: dependencies: array-buffer-byte-length: 1.0.2 @@ -6387,8 +3112,6 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@1.6.0: {} - es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -6406,60 +3129,6 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - esbuild@0.20.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.20.2 - '@esbuild/android-arm': 0.20.2 - '@esbuild/android-arm64': 0.20.2 - '@esbuild/android-x64': 0.20.2 - '@esbuild/darwin-arm64': 0.20.2 - '@esbuild/darwin-x64': 0.20.2 - '@esbuild/freebsd-arm64': 0.20.2 - '@esbuild/freebsd-x64': 0.20.2 - '@esbuild/linux-arm': 0.20.2 - '@esbuild/linux-arm64': 0.20.2 - '@esbuild/linux-ia32': 0.20.2 - '@esbuild/linux-loong64': 0.20.2 - '@esbuild/linux-mips64el': 0.20.2 - '@esbuild/linux-ppc64': 0.20.2 - '@esbuild/linux-riscv64': 0.20.2 - '@esbuild/linux-s390x': 0.20.2 - '@esbuild/linux-x64': 0.20.2 - '@esbuild/netbsd-x64': 0.20.2 - '@esbuild/openbsd-x64': 0.20.2 - '@esbuild/sunos-x64': 0.20.2 - '@esbuild/win32-arm64': 0.20.2 - '@esbuild/win32-ia32': 0.20.2 - '@esbuild/win32-x64': 0.20.2 - - esbuild@0.24.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.24.2 - '@esbuild/android-arm': 0.24.2 - '@esbuild/android-arm64': 0.24.2 - '@esbuild/android-x64': 0.24.2 - '@esbuild/darwin-arm64': 0.24.2 - '@esbuild/darwin-x64': 0.24.2 - '@esbuild/freebsd-arm64': 0.24.2 - '@esbuild/freebsd-x64': 0.24.2 - '@esbuild/linux-arm': 0.24.2 - '@esbuild/linux-arm64': 0.24.2 - '@esbuild/linux-ia32': 0.24.2 - '@esbuild/linux-loong64': 0.24.2 - '@esbuild/linux-mips64el': 0.24.2 - '@esbuild/linux-ppc64': 0.24.2 - '@esbuild/linux-riscv64': 0.24.2 - '@esbuild/linux-s390x': 0.24.2 - '@esbuild/linux-x64': 0.24.2 - '@esbuild/netbsd-arm64': 0.24.2 - '@esbuild/netbsd-x64': 0.24.2 - '@esbuild/openbsd-arm64': 0.24.2 - '@esbuild/openbsd-x64': 0.24.2 - '@esbuild/sunos-x64': 0.24.2 - '@esbuild/win32-arm64': 0.24.2 - '@esbuild/win32-ia32': 0.24.2 - '@esbuild/win32-x64': 0.24.2 - esbuild@0.25.0: optionalDependencies: '@esbuild/aix-ppc64': 0.25.0 @@ -6488,136 +3157,113 @@ snapshots: '@esbuild/win32-ia32': 0.25.0 '@esbuild/win32-x64': 0.25.0 - escalade@3.2.0: {} + escalade@3.2.0: + optional: true escape-html@1.0.3: {} escape-string-regexp@1.0.5: {} - escape-string-regexp@5.0.0: {} - - esprima@4.0.1: {} - - estree-walker@2.0.2: {} - - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.6 - etag@1.8.1: {} - event-target-shim@5.0.1: {} + event-target-shim@5.0.1: + optional: true eventemitter3@4.0.7: {} - events@3.3.0: {} - - execa@8.0.1: + express@4.16.4: dependencies: - cross-spawn: 7.0.6 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - - exsolve@1.0.2: {} + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.18.3 + content-disposition: 0.5.2 + content-type: 1.0.5 + cookie: 0.3.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 1.1.2 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.1.1 + fresh: 0.5.2 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.3.0 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.5.2 + range-parser: 1.2.1 + safe-buffer: 5.1.2 + send: 0.16.2 + serve-static: 1.13.2 + setprototypeof: 1.1.0 + statuses: 1.4.0 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color extend@3.0.2: {} farmhash-modern@1.1.0: {} - fast-deep-equal@3.1.3: {} - - fast-fifo@1.3.2: {} - - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 + fast-deep-equal@3.1.3: + optional: true fast-xml-parser@4.5.3: dependencies: strnum: 1.1.2 optional: true - fastq@1.19.1: - dependencies: - reusify: 1.1.0 - faye-websocket@0.11.4: dependencies: websocket-driver: 0.7.4 - fdir@6.4.3(picomatch@4.0.2): - optionalDependencies: - picomatch: 4.0.2 - - file-uri-to-path@1.0.0: {} + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 + finalhandler@1.1.1: + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.4.0 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + firebase-admin@13.2.0: dependencies: '@fastify/busboy': 3.1.1 - '@firebase/database-compat': 2.0.4 - '@firebase/database-types': 1.0.9 + '@firebase/database-compat': 2.0.5 + '@firebase/database-types': 1.0.10 '@types/node': 22.13.9 farmhash-modern: 1.1.0 google-auth-library: 9.15.1 jsonwebtoken: 9.0.2 - jwks-rsa: 3.1.0 + jwks-rsa: 3.2.0 node-forge: 1.3.1 uuid: 11.1.0 optionalDependencies: '@google-cloud/firestore': 7.11.0 - '@google-cloud/storage': 7.15.2 + '@google-cloud/storage': 7.16.0 transitivePeerDependencies: - encoding - supports-color - firebase@11.4.0: - dependencies: - '@firebase/analytics': 0.10.12(@firebase/app@0.11.2) - '@firebase/analytics-compat': 0.2.18(@firebase/app-compat@0.2.51)(@firebase/app@0.11.2) - '@firebase/app': 0.11.2 - '@firebase/app-check': 0.8.12(@firebase/app@0.11.2) - '@firebase/app-check-compat': 0.3.19(@firebase/app-compat@0.2.51)(@firebase/app@0.11.2) - '@firebase/app-compat': 0.2.51 - '@firebase/app-types': 0.9.3 - '@firebase/auth': 1.9.1(@firebase/app@0.11.2) - '@firebase/auth-compat': 0.5.19(@firebase/app-compat@0.2.51)(@firebase/app-types@0.9.3)(@firebase/app@0.11.2) - '@firebase/data-connect': 0.3.1(@firebase/app@0.11.2) - '@firebase/database': 1.0.13 - '@firebase/database-compat': 2.0.4 - '@firebase/firestore': 4.7.9(@firebase/app@0.11.2) - '@firebase/firestore-compat': 0.3.44(@firebase/app-compat@0.2.51)(@firebase/app-types@0.9.3)(@firebase/app@0.11.2) - '@firebase/functions': 0.12.3(@firebase/app@0.11.2) - '@firebase/functions-compat': 0.3.20(@firebase/app-compat@0.2.51)(@firebase/app@0.11.2) - '@firebase/installations': 0.6.13(@firebase/app@0.11.2) - '@firebase/installations-compat': 0.2.13(@firebase/app-compat@0.2.51)(@firebase/app-types@0.9.3)(@firebase/app@0.11.2) - '@firebase/messaging': 0.12.17(@firebase/app@0.11.2) - '@firebase/messaging-compat': 0.2.17(@firebase/app-compat@0.2.51)(@firebase/app@0.11.2) - '@firebase/performance': 0.7.1(@firebase/app@0.11.2) - '@firebase/performance-compat': 0.2.14(@firebase/app-compat@0.2.51)(@firebase/app@0.11.2) - '@firebase/remote-config': 0.6.0(@firebase/app@0.11.2) - '@firebase/remote-config-compat': 0.2.13(@firebase/app-compat@0.2.51)(@firebase/app@0.11.2) - '@firebase/storage': 0.13.7(@firebase/app@0.11.2) - '@firebase/storage-compat': 0.3.17(@firebase/app-compat@0.2.51)(@firebase/app-types@0.9.3)(@firebase/app@0.11.2) - '@firebase/util': 1.11.0 - '@firebase/vertexai': 1.1.0(@firebase/app-types@0.9.3)(@firebase/app@0.11.2) - transitivePeerDependencies: - - '@react-native-async-storage/async-storage' - - follow-redirects@1.15.9: {} + follow-redirects@1.15.9(debug@4.4.0): + optionalDependencies: + debug: 4.4.0 for-each@0.3.5: dependencies: @@ -6644,13 +3290,9 @@ snapshots: es-set-tostringtag: 2.1.0 mime-types: 2.1.35 - fresh@0.5.2: {} + forwarded@0.2.0: {} - fs-extra@11.3.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 + fresh@0.5.2: {} fsevents@2.3.3: optional: true @@ -6674,7 +3316,7 @@ snapshots: gaxios@6.7.1: dependencies: extend: 3.0.2 - https-proxy-agent: 7.0.6(supports-color@9.4.0) + https-proxy-agent: 7.0.6 is-stream: 2.0.1 node-fetch: 2.7.0 uuid: 9.0.1 @@ -6691,9 +3333,8 @@ snapshots: - encoding - supports-color - gensync@1.0.0-beta.2: {} - - get-caller-file@2.0.5: {} + get-caller-file@2.0.5: + optional: true get-intrinsic@1.3.0: dependencies: @@ -6708,15 +3349,11 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 - get-port-please@3.1.2: {} - get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-stream@8.0.1: {} - get-symbol-description@1.1.0: dependencies: call-bound: 1.0.4 @@ -6727,19 +3364,6 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - giget@2.0.0: - dependencies: - citty: 0.1.6 - consola: 3.4.0 - defu: 6.1.4 - node-fetch-native: 1.6.6 - nypm: 0.6.0 - pathe: 2.0.3 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - glob@10.4.5: dependencies: foreground-child: 3.3.1 @@ -6749,22 +3373,11 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - globals@11.12.0: {} - globalthis@1.0.4: dependencies: define-properties: 1.2.1 gopd: 1.2.0 - globby@14.1.0: - dependencies: - '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.3 - ignore: 7.0.3 - path-type: 6.0.0 - slash: 5.1.0 - unicorn-magic: 0.3.0 - google-auth-library@9.15.1: dependencies: base64-js: 1.5.1 @@ -6779,7 +3392,7 @@ snapshots: google-gax@4.4.1: dependencies: - '@grpc/grpc-js': 1.12.6 + '@grpc/grpc-js': 1.13.2 '@grpc/proto-loader': 0.7.13 '@types/long': 4.0.2 abort-controller: 3.0.0 @@ -6810,39 +3423,12 @@ snapshots: - encoding - supports-color - gzip-size@7.0.0: - dependencies: - duplexer: 0.1.2 - - h3@1.13.0: - dependencies: - cookie-es: 1.2.2 - crossws: 0.3.4 - defu: 6.1.4 - destr: 2.0.3 - iron-webcrypto: 1.2.1 - ohash: 1.1.6 - radix3: 1.1.2 - ufo: 1.5.4 - uncrypto: 0.1.3 - unenv: 1.10.0 - - h3@1.15.1: - dependencies: - cookie-es: 1.2.2 - crossws: 0.3.4 - defu: 6.1.4 - destr: 2.0.3 - iron-webcrypto: 1.2.1 - node-mock-http: 1.0.0 - radix3: 1.1.2 - ufo: 1.5.4 - uncrypto: 0.1.3 - has-bigints@1.1.0: {} has-flag@3.0.0: {} + has-flag@4.0.0: {} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.1 @@ -6861,94 +3447,68 @@ snapshots: dependencies: function-bind: 1.1.2 - hast-util-to-html@9.0.5: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - comma-separated-tokens: 2.0.3 - hast-util-whitespace: 3.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.0 - property-information: 7.0.0 - space-separated-tokens: 2.0.2 - stringify-entities: 4.0.4 - zwitch: 2.0.4 - - hast-util-whitespace@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hookable@5.5.3: {} - hosted-git-info@2.8.9: {} - html-entities@2.3.3: {} - - html-entities@2.5.2: + html-entities@2.6.0: optional: true - html-to-image@1.11.13: {} - - html-void-elements@3.0.0: {} - - http-errors@2.0.0: + http-errors@1.6.3: dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.4.0 - http-parser-js@0.5.9: {} + http-parser-js@0.5.10: {} http-proxy-agent@5.0.0: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color optional: true - http-proxy@1.18.1: + http-proxy-middleware@3.0.3: + dependencies: + '@types/http-proxy': 1.17.16 + debug: 4.4.0 + http-proxy: 1.18.1(debug@4.4.0) + is-glob: 4.0.3 + is-plain-object: 5.0.0 + micromatch: 4.0.8 + transitivePeerDependencies: + - supports-color + + http-proxy@1.18.1(debug@4.4.0): dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.9 + follow-redirects: 1.15.9(debug@4.4.0) requires-port: 1.0.0 transitivePeerDependencies: - debug - http-shutdown@1.2.2: {} - https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color optional: true - https-proxy-agent@7.0.6(supports-color@9.4.0): + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color - httpxy@0.1.7: {} - - human-signals@5.0.0: {} - - idb@7.1.1: {} - - ieee754@1.2.1: {} - - ignore@7.0.3: {} - - index-to-position@0.1.2: {} + iconv-lite@0.4.23: + dependencies: + safer-buffer: 2.1.2 - inherits@2.0.4: {} + inherits@2.0.3: {} internal-slot@1.1.0: dependencies: @@ -6956,21 +3516,7 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 - ioredis@5.6.0: - dependencies: - '@ioredis/commands': 1.2.0 - cluster-key-slot: 1.1.2 - debug: 4.4.0(supports-color@9.4.0) - denque: 2.1.0 - lodash.defaults: 4.2.0 - lodash.isarguments: 3.1.0 - redis-errors: 1.2.0 - redis-parser: 3.0.0 - standard-as-callback: 2.1.0 - transitivePeerDependencies: - - supports-color - - iron-webcrypto@1.2.1: {} + ipaddr.js@1.9.1: {} is-array-buffer@3.0.5: dependencies: @@ -6992,10 +3538,6 @@ snapshots: dependencies: has-bigints: 1.1.0 - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - is-boolean-object@1.2.2: dependencies: call-bound: 1.0.4 @@ -7018,10 +3560,6 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-docker@2.2.1: {} - - is-docker@3.0.0: {} - is-extglob@2.1.1: {} is-finalizationregistry@1.1.1: @@ -7041,14 +3579,8 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-inside-container@1.0.0: - dependencies: - is-docker: 3.0.0 - is-map@2.0.3: {} - is-module@1.0.0: {} - is-number-object@1.1.1: dependencies: call-bound: 1.0.4 @@ -7056,9 +3588,7 @@ snapshots: is-number@7.0.0: {} - is-reference@1.2.1: - dependencies: - '@types/estree': 1.0.6 + is-plain-object@5.0.0: {} is-regex@1.2.1: dependencies: @@ -7075,8 +3605,6 @@ snapshots: is-stream@2.0.1: {} - is-stream@3.0.0: {} - is-string@1.1.1: dependencies: call-bound: 1.0.4 @@ -7103,28 +3631,10 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 - is-what@4.1.16: {} - - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 - - is-wsl@3.1.0: - dependencies: - is-inside-container: 1.0.0 - - is64bit@2.0.0: - dependencies: - system-architecture: 0.1.0 - - isarray@1.0.0: {} - isarray@2.0.5: {} isexe@2.0.0: {} - isexe@3.1.1: {} - isomorphic-ws@5.0.0(ws@8.18.1): dependencies: ws: 8.18.1 @@ -7135,44 +3645,32 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jiti@1.21.7: {} + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 - jiti@2.4.2: {} + jiti@2.4.2: + optional: true jose@4.15.9: {} jose@6.0.8: {} - js-levenshtein@1.1.6: {} - - js-tokens@4.0.0: {} - - js-tokens@9.0.1: {} - js-yaml@4.1.0: dependencies: argparse: 2.0.1 jsep@1.4.0: {} - jsesc@3.1.0: {} - json-bigint@1.0.0: dependencies: - bignumber.js: 9.1.2 + bignumber.js: 9.2.1 json-parse-better-errors@1.0.2: {} - json-schema-traverse@1.0.0: {} - - json5@2.2.3: {} - - jsonfile@6.1.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - jsonpath-plus@10.3.0: dependencies: '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0) @@ -7196,19 +3694,19 @@ snapshots: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 + safe-buffer: 5.1.2 jwa@2.0.0: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 + safe-buffer: 5.1.2 - jwks-rsa@3.1.0: + jwks-rsa@3.2.0: dependencies: '@types/express': 4.17.21 '@types/jsonwebtoken': 9.0.9 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 jose: 4.15.9 limiter: 1.1.5 lru-memoizer: 2.3.0 @@ -7218,20 +3716,12 @@ snapshots: jws@3.2.2: dependencies: jwa: 1.4.1 - safe-buffer: 5.2.1 + safe-buffer: 5.1.2 jws@4.0.0: dependencies: jwa: 2.0.0 - safe-buffer: 5.2.1 - - klona@2.0.6: {} - - knitwork@1.2.0: {} - - lazystream@1.0.1: - dependencies: - readable-stream: 2.3.8 + safe-buffer: 5.1.2 lightningcss-darwin-arm64@1.29.2: optional: true @@ -7277,30 +3767,10 @@ snapshots: lightningcss-linux-x64-musl: 1.29.2 lightningcss-win32-arm64-msvc: 1.29.2 lightningcss-win32-x64-msvc: 1.29.2 + optional: true limiter@1.1.5: {} - listhen@1.9.0: - dependencies: - '@parcel/watcher': 2.5.1 - '@parcel/watcher-wasm': 2.5.1 - citty: 0.1.6 - clipboardy: 4.0.0 - consola: 3.4.0 - crossws: 0.3.4 - defu: 6.1.4 - get-port-please: 3.1.2 - h3: 1.15.1 - http-shutdown: 1.2.2 - jiti: 2.4.2 - mlly: 1.7.4 - node-forge: 1.3.1 - pathe: 1.1.2 - std-env: 3.8.1 - ufo: 1.5.4 - untun: 0.1.3 - uqr: 0.1.2 - load-json-file@4.0.0: dependencies: graceful-fs: 4.2.11 @@ -7308,22 +3778,13 @@ snapshots: pify: 3.0.0 strip-bom: 3.0.0 - local-pkg@1.1.1: - dependencies: - mlly: 1.7.4 - pkg-types: 2.1.0 - quansync: 0.2.8 - - lodash.camelcase@4.3.0: {} + lodash.camelcase@4.3.0: + optional: true lodash.clonedeep@4.5.0: {} - lodash.defaults@4.2.0: {} - lodash.includes@4.3.0: {} - lodash.isarguments@3.1.0: {} - lodash.isboolean@3.0.3: {} lodash.isinteger@4.0.4: {} @@ -7336,16 +3797,11 @@ snapshots: lodash.once@4.1.1: {} - lodash@4.17.21: {} - - long@5.3.1: {} + long@5.3.1: + optional: true lru-cache@10.4.3: {} - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - lru-cache@6.0.0: dependencies: yallist: 4.0.0 @@ -7355,62 +3811,15 @@ snapshots: lodash.clonedeep: 4.5.0 lru-cache: 6.0.0 - magic-string@0.30.17: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - - magicast@0.2.11: - dependencies: - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 - recast: 0.23.11 - - magicast@0.3.5: - dependencies: - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 - source-map-js: 1.2.1 - math-intrinsics@1.1.0: {} - mdast-util-to-hast@13.2.0: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.0 - devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.1 - trim-lines: 3.0.1 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.3 + media-typer@0.3.0: {} memorystream@0.3.1: {} - merge-anything@5.1.7: - dependencies: - is-what: 4.1.16 - - merge-stream@2.0.0: {} - - merge2@1.4.1: {} - - micromark-util-character@2.1.1: - dependencies: - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-encode@2.0.1: {} - - micromark-util-sanitize-uri@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-encode: 2.0.1 - micromark-util-symbol: 2.0.1 + merge-descriptors@1.0.1: {} - micromark-util-symbol@2.0.1: {} - - micromark-util-types@2.0.2: {} + methods@1.1.2: {} micromatch@4.0.8: dependencies: @@ -7423,13 +3832,10 @@ snapshots: dependencies: mime-db: 1.52.0 - mime@1.6.0: {} - - mime@3.0.0: {} + mime@1.4.1: {} - mime@4.0.6: {} - - mimic-fn@4.0.0: {} + mime@3.0.0: + optional: true minimatch@3.1.2: dependencies: @@ -7454,127 +3860,25 @@ snapshots: mkdirp@3.0.1: {} - mlly@1.7.4: + morgan@1.9.1: dependencies: - acorn: 8.14.1 - pathe: 2.0.3 - pkg-types: 1.3.1 - ufo: 1.5.4 - - ms@2.0.0: {} - - ms@2.1.3: {} - - nanoid@3.3.8: {} - - nice-try@1.0.5: {} - - nitropack@2.11.4(typescript@5.8.2): - dependencies: - '@cloudflare/kv-asset-handler': 0.3.4 - '@netlify/functions': 3.0.0 - '@rollup/plugin-alias': 5.1.1(rollup@4.34.9) - '@rollup/plugin-commonjs': 28.0.3(rollup@4.34.9) - '@rollup/plugin-inject': 5.0.5(rollup@4.34.9) - '@rollup/plugin-json': 6.1.0(rollup@4.34.9) - '@rollup/plugin-node-resolve': 16.0.0(rollup@4.34.9) - '@rollup/plugin-replace': 6.0.2(rollup@4.34.9) - '@rollup/plugin-terser': 0.4.4(rollup@4.34.9) - '@types/http-proxy': 1.17.16 - '@vercel/nft': 0.29.2(rollup@4.34.9) - archiver: 7.0.1 - c12: 3.0.2(magicast@0.3.5) - chokidar: 4.0.3 - citty: 0.1.6 - compatx: 0.1.8 - confbox: 0.2.1 - consola: 3.4.0 - cookie-es: 2.0.0 - croner: 9.0.0 - crossws: 0.3.4 - db0: 0.3.1 - defu: 6.1.4 - destr: 2.0.3 - dot-prop: 9.0.0 - esbuild: 0.25.0 - escape-string-regexp: 5.0.0 - etag: 1.8.1 - exsolve: 1.0.2 - fs-extra: 11.3.0 - globby: 14.1.0 - gzip-size: 7.0.0 - h3: 1.15.1 - hookable: 5.5.3 - httpxy: 0.1.7 - ioredis: 5.6.0 - jiti: 2.4.2 - klona: 2.0.6 - knitwork: 1.2.0 - listhen: 1.9.0 - magic-string: 0.30.17 - magicast: 0.3.5 - mime: 4.0.6 - mlly: 1.7.4 - node-fetch-native: 1.6.6 - node-mock-http: 1.0.0 - ofetch: 1.4.1 - ohash: 2.0.11 - openapi-typescript: 7.6.1(typescript@5.8.2) - pathe: 2.0.3 - perfect-debounce: 1.0.0 - pkg-types: 2.1.0 - pretty-bytes: 6.1.1 - radix3: 1.1.2 - rollup: 4.34.9 - rollup-plugin-visualizer: 5.14.0(rollup@4.34.9) - scule: 1.3.0 - semver: 7.7.1 - serve-placeholder: 2.0.2 - serve-static: 1.16.2 - source-map: 0.7.4 - std-env: 3.8.1 - ufo: 1.5.4 - ultrahtml: 1.5.3 - uncrypto: 0.1.3 - unctx: 2.4.1 - unenv: 2.0.0-rc.12 - unimport: 4.1.2 - unplugin-utils: 0.2.4 - unstorage: 1.15.0(db0@0.3.1)(ioredis@5.6.0) - untyped: 2.0.0 - unwasm: 0.3.9 - youch-redist: 4.1.0-beta.5-1 + basic-auth: 2.0.1 + debug: 2.6.9 + depd: 1.1.2 + on-finished: 2.3.0 + on-headers: 1.0.2 transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@electric-sql/pglite' - - '@libsql/client' - - '@netlify/blobs' - - '@planetscale/database' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/kv' - - aws4fetch - - better-sqlite3 - - drizzle-orm - - encoding - - idb-keyval - - mysql2 - - rolldown - - sqlite3 - supports-color - - typescript - - uploadthing - node-addon-api@7.1.1: {} + ms@2.0.0: {} + + ms@2.1.3: {} + + nanoid@3.3.8: {} + + negotiator@0.6.3: {} - node-fetch-native@1.6.6: {} + nice-try@1.0.5: {} node-fetch@2.7.0: dependencies: @@ -7582,16 +3886,6 @@ snapshots: node-forge@1.3.1: {} - node-gyp-build@4.8.4: {} - - node-mock-http@1.0.0: {} - - node-releases@2.0.19: {} - - nopt@8.1.0: - dependencies: - abbrev: 3.0.0 - normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 @@ -7599,8 +3893,6 @@ snapshots: semver: 5.7.2 validate-npm-package-license: 3.0.4 - normalize-path@3.0.0: {} - npm-run-all@4.1.5: dependencies: ansi-styles: 3.2.1 @@ -7613,18 +3905,6 @@ snapshots: shell-quote: 1.8.2 string.prototype.padend: 3.1.6 - npm-run-path@5.3.0: - dependencies: - path-key: 4.0.0 - - nypm@0.6.0: - dependencies: - citty: 0.1.6 - consola: 3.4.0 - pathe: 2.0.3 - pkg-types: 2.1.0 - tinyexec: 0.3.2 - oauth4webapi@3.3.0: {} object-hash@3.0.0: @@ -7643,50 +3923,16 @@ snapshots: has-symbols: 1.1.0 object-keys: 1.1.1 - ofetch@1.4.1: - dependencies: - destr: 2.0.3 - node-fetch-native: 1.6.6 - ufo: 1.5.4 - - ohash@1.1.6: {} - - ohash@2.0.11: {} - - on-finished@2.4.1: + on-finished@2.3.0: dependencies: ee-first: 1.1.1 + on-headers@1.0.2: {} + once@1.4.0: dependencies: wrappy: 1.0.2 - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - - oniguruma-to-es@2.3.0: - dependencies: - emoji-regex-xs: 1.0.0 - regex: 5.1.1 - regex-recursion: 5.1.1 - - open@8.4.2: - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - - openapi-typescript@7.6.1(typescript@5.8.2): - dependencies: - '@redocly/openapi-core': 1.33.0(supports-color@9.4.0) - ansi-colors: 4.1.3 - change-case: 5.4.4 - parse-json: 8.1.0 - supports-color: 9.4.0 - typescript: 5.8.2 - yargs-parser: 21.1.1 - openid-client@6.3.3: dependencies: jose: 6.0.8 @@ -7710,24 +3956,12 @@ snapshots: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 - parse-json@8.1.0: - dependencies: - '@babel/code-frame': 7.26.2 - index-to-position: 0.1.2 - type-fest: 4.37.0 - - parse5@7.2.1: - dependencies: - entities: 4.5.0 - parseurl@1.3.3: {} path-key@2.0.1: {} path-key@3.1.1: {} - path-key@4.0.0: {} - path-parse@1.0.7: {} path-scurry@1.11.1: @@ -7735,44 +3969,20 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-to-regexp@6.3.0: {} + path-to-regexp@0.1.7: {} path-type@3.0.0: dependencies: pify: 3.0.0 - path-type@6.0.0: {} - - pathe@1.1.2: {} - - pathe@2.0.3: {} - - perfect-debounce@1.0.0: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} - picomatch@4.0.2: {} - pidtree@0.3.1: {} pify@3.0.0: {} - pkg-types@1.3.1: - dependencies: - confbox: 0.1.8 - mlly: 1.7.4 - pathe: 2.0.3 - - pkg-types@2.1.0: - dependencies: - confbox: 0.2.1 - exsolve: 1.0.2 - pathe: 2.0.3 - - pluralize@8.0.0: {} - possible-typed-array-names@1.1.0: {} postcss@8.5.3: @@ -7781,14 +3991,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - pretty-bytes@6.1.1: {} - - process-nextick-args@2.0.1: {} - - process@0.11.10: {} - - property-information@7.0.0: {} - proto3-json-serializer@2.0.2: dependencies: protobufjs: 7.4.0 @@ -7808,23 +4010,23 @@ snapshots: '@protobufjs/utf8': 1.1.0 '@types/node': 22.13.9 long: 5.3.1 + optional: true - quansync@0.2.8: {} - - queue-microtask@1.2.3: {} - - radix3@1.1.2: {} - - randombytes@2.1.0: + proxy-addr@2.0.7: dependencies: - safe-buffer: 5.2.1 + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + qs@6.5.2: {} range-parser@1.2.1: {} - rc9@2.1.2: + raw-body@2.3.3: dependencies: - defu: 6.1.4 - destr: 2.0.3 + bytes: 3.0.0 + http-errors: 1.6.3 + iconv-lite: 0.4.23 + unpipe: 1.0.0 read-pkg@3.0.0: dependencies: @@ -7832,55 +4034,13 @@ snapshots: normalize-package-data: 2.5.0 path-type: 3.0.0 - readable-stream@2.3.8: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - readable-stream@3.6.2: dependencies: - inherits: 2.0.4 + inherits: 2.0.3 string_decoder: 1.3.0 util-deprecate: 1.0.2 optional: true - readable-stream@4.7.0: - dependencies: - abort-controller: 3.0.0 - buffer: 6.0.3 - events: 3.3.0 - process: 0.11.10 - string_decoder: 1.3.0 - - readdir-glob@1.1.3: - dependencies: - minimatch: 5.1.6 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - readdirp@4.1.2: {} - - recast@0.23.11: - dependencies: - ast-types: 0.16.1 - esprima: 4.0.1 - source-map: 0.6.1 - tiny-invariant: 1.3.3 - tslib: 2.8.1 - - redis-errors@1.2.0: {} - - redis-parser@3.0.0: - dependencies: - redis-errors: 1.2.0 - reflect.getprototypeof@1.0.10: dependencies: call-bind: 1.0.8 @@ -7892,17 +4052,6 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 - regex-recursion@5.1.1: - dependencies: - regex: 5.1.1 - regex-utilities: 2.3.0 - - regex-utilities@2.3.0: {} - - regex@5.1.1: - dependencies: - regex-utilities: 2.3.0 - regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -7912,14 +4061,11 @@ snapshots: gopd: 1.2.0 set-function-name: 2.0.2 - require-directory@2.1.1: {} - - require-from-string@2.0.2: {} + require-directory@2.1.1: + optional: true requires-port@1.0.0: {} - resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} resolve@1.22.10: @@ -7941,23 +4087,12 @@ snapshots: retry@0.13.1: optional: true - reusify@1.1.0: {} - rfc4648@1.5.4: {} rimraf@5.0.10: dependencies: glob: 10.4.5 - rollup-plugin-visualizer@5.14.0(rollup@4.34.9): - dependencies: - open: 8.4.2 - picomatch: 4.0.2 - source-map: 0.7.4 - yargs: 17.7.2 - optionalDependencies: - rollup: 4.34.9 - rollup@4.34.9: dependencies: '@types/estree': 1.0.6 @@ -7983,10 +4118,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.34.9 fsevents: 2.3.3 - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - safe-array-concat@1.1.3: dependencies: call-bind: 1.0.8 @@ -7997,7 +4128,8 @@ snapshots: safe-buffer@5.1.2: {} - safe-buffer@5.2.1: {} + safe-buffer@5.2.1: + optional: true safe-push-apply@1.0.0: dependencies: @@ -8010,52 +4142,36 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 - scule@1.3.0: {} + safer-buffer@2.1.2: {} semver@5.7.2: {} - semver@6.3.1: {} - semver@7.7.1: {} - send@0.19.0: + send@0.16.2: dependencies: debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 + depd: 1.1.2 + destroy: 1.0.4 encodeurl: 1.0.2 escape-html: 1.0.3 etag: 1.8.1 fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 + http-errors: 1.6.3 + mime: 1.4.1 + ms: 2.0.0 + on-finished: 2.3.0 range-parser: 1.2.1 - statuses: 2.0.1 + statuses: 1.4.0 transitivePeerDependencies: - supports-color - serialize-javascript@6.0.2: - dependencies: - randombytes: 2.1.0 - - seroval-plugins@1.2.1(seroval@1.2.1): - dependencies: - seroval: 1.2.1 - - seroval@1.2.1: {} - - serve-placeholder@2.0.2: + serve-static@1.13.2: dependencies: - defu: 6.1.4 - - serve-static@1.16.2: - dependencies: - encodeurl: 2.0.0 + encodeurl: 1.0.2 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.19.0 + send: 0.16.2 transitivePeerDependencies: - supports-color @@ -8081,7 +4197,7 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 - setprototypeof@1.2.0: {} + setprototypeof@1.1.0: {} shebang-command@1.2.0: dependencies: @@ -8097,17 +4213,6 @@ snapshots: shell-quote@1.8.2: {} - shiki@1.29.2: - dependencies: - '@shikijs/core': 1.29.2 - '@shikijs/engine-javascript': 1.29.2 - '@shikijs/engine-oniguruma': 1.29.2 - '@shikijs/langs': 1.29.2 - '@shikijs/themes': 1.29.2 - '@shikijs/types': 1.29.2 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -8138,41 +4243,16 @@ snapshots: signal-exit@4.1.0: {} - slash@5.1.0: {} - - smob@1.5.0: {} - - solid-js@1.9.5: - dependencies: - csstype: 3.1.3 - seroval: 1.2.1 - seroval-plugins: 1.2.1(seroval@1.2.1) - - solid-refresh@0.6.3(solid-js@1.9.5): - dependencies: - '@babel/generator': 7.26.9 - '@babel/helper-module-imports': 7.25.9 - '@babel/types': 7.26.9 - solid-js: 1.9.5 - transitivePeerDependencies: - - supports-color - - solid-use@0.9.0(solid-js@1.9.5): - dependencies: - solid-js: 1.9.5 - source-map-js@1.2.1: {} source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 + optional: true - source-map@0.6.1: {} - - source-map@0.7.4: {} - - space-separated-tokens@2.0.2: {} + source-map@0.6.1: + optional: true spdx-correct@3.2.0: dependencies: @@ -8188,13 +4268,7 @@ snapshots: spdx-license-ids@3.0.21: {} - stackframe@1.3.4: {} - - standard-as-callback@2.1.0: {} - - statuses@2.0.1: {} - - std-env@3.8.1: {} + statuses@1.4.0: {} stream-buffers@3.0.3: {} @@ -8206,13 +4280,6 @@ snapshots: stream-shift@1.0.3: optional: true - streamx@2.22.0: - dependencies: - fast-fifo: 1.3.2 - text-decoder: 1.2.3 - optionalDependencies: - bare-events: 2.5.4 - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -8255,18 +4322,10 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 - string_decoder@1.1.1: - dependencies: - safe-buffer: 5.1.2 - string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - - stringify-entities@4.0.4: - dependencies: - character-entities-html4: 2.1.0 - character-entities-legacy: 3.0.0 + optional: true strip-ansi@6.0.1: dependencies: @@ -8278,12 +4337,6 @@ snapshots: strip-bom@3.0.0: {} - strip-final-newline@3.0.0: {} - - strip-literal@3.0.0: - dependencies: - js-tokens: 9.0.1 - strnum@1.1.2: optional: true @@ -8294,22 +4347,12 @@ snapshots: dependencies: has-flag: 3.0.0 - supports-color@9.4.0: {} + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 supports-preserve-symlinks-flag@1.0.0: {} - system-architecture@0.1.0: {} - - tailwindcss@4.0.11: {} - - tapable@2.2.1: {} - - tar-stream@3.1.7: - dependencies: - b4a: 1.6.7 - fast-fifo: 1.3.2 - streamx: 2.22.0 - tar@7.4.3: dependencies: '@isaacs/fs-minipass': 4.0.1 @@ -8331,30 +4374,13 @@ snapshots: - supports-color optional: true - terracotta@1.0.6(solid-js@1.9.5): - dependencies: - solid-js: 1.9.5 - solid-use: 0.9.0(solid-js@1.9.5) - terser@5.39.0: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.14.1 commander: 2.20.3 source-map-support: 0.5.21 - - text-decoder@1.2.3: - dependencies: - b4a: 1.6.7 - - tiny-invariant@1.3.3: {} - - tinyexec@0.3.2: {} - - tinyglobby@0.2.12: - dependencies: - fdir: 6.4.3(picomatch@4.0.2) - picomatch: 4.0.2 + optional: true tmp-promise@3.0.3: dependencies: @@ -8366,12 +4392,8 @@ snapshots: dependencies: is-number: 7.0.0 - toidentifier@1.0.1: {} - tr46@0.0.3: {} - trim-lines@3.0.1: {} - tslib@2.8.1: {} tsx@4.19.3: @@ -8383,9 +4405,10 @@ snapshots: tunnel@0.0.6: {} - type-fest@2.19.0: {} - - type-fest@4.37.0: {} + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 typed-array-buffer@1.0.3: dependencies: @@ -8422,10 +4445,6 @@ snapshots: typescript@5.8.2: {} - ufo@1.5.4: {} - - ultrahtml@1.5.3: {} - unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 @@ -8433,150 +4452,20 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - uncrypto@0.1.3: {} - - unctx@2.4.1: - dependencies: - acorn: 8.14.1 - estree-walker: 3.0.3 - magic-string: 0.30.17 - unplugin: 2.2.0 - - undici-types@5.28.4: {} - undici-types@6.20.0: {} undici@5.28.5: dependencies: '@fastify/busboy': 2.1.1 - unenv@1.10.0: - dependencies: - consola: 3.4.0 - defu: 6.1.4 - mime: 3.0.0 - node-fetch-native: 1.6.6 - pathe: 1.1.2 - - unenv@2.0.0-rc.12: - dependencies: - defu: 6.1.4 - exsolve: 1.0.2 - ohash: 2.0.11 - pathe: 2.0.3 - ufo: 1.5.4 - - unicorn-magic@0.3.0: {} - - unimport@4.1.2: - dependencies: - acorn: 8.14.1 - escape-string-regexp: 5.0.0 - estree-walker: 3.0.3 - local-pkg: 1.1.1 - magic-string: 0.30.17 - mlly: 1.7.4 - pathe: 2.0.3 - picomatch: 4.0.2 - pkg-types: 1.3.1 - scule: 1.3.0 - strip-literal: 3.0.0 - tinyglobby: 0.2.12 - unplugin: 2.2.0 - unplugin-utils: 0.2.4 - - unist-util-is@6.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-stringify-position@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-parents@6.0.1: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - - unist-util-visit@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - universal-user-agent@6.0.1: {} - universalify@2.0.1: {} - - unplugin-utils@0.2.4: - dependencies: - pathe: 2.0.3 - picomatch: 4.0.2 - - unplugin@1.16.1: - dependencies: - acorn: 8.14.1 - webpack-virtual-modules: 0.6.2 - - unplugin@2.2.0: - dependencies: - acorn: 8.14.1 - webpack-virtual-modules: 0.6.2 - - unstorage@1.15.0(db0@0.3.1)(ioredis@5.6.0): - dependencies: - anymatch: 3.1.3 - chokidar: 4.0.3 - destr: 2.0.3 - h3: 1.15.1 - lru-cache: 10.4.3 - node-fetch-native: 1.6.6 - ofetch: 1.4.1 - ufo: 1.5.4 - optionalDependencies: - db0: 0.3.1 - ioredis: 5.6.0 - - untun@0.1.3: - dependencies: - citty: 0.1.6 - consola: 3.4.0 - pathe: 1.1.2 - - untyped@2.0.0: - dependencies: - citty: 0.1.6 - defu: 6.1.4 - jiti: 2.4.2 - knitwork: 1.2.0 - scule: 1.3.0 - - unwasm@0.3.9: - dependencies: - knitwork: 1.2.0 - magic-string: 0.30.17 - mlly: 1.7.4 - pathe: 1.1.2 - pkg-types: 1.3.1 - unplugin: 1.16.1 - - update-browserslist-db@1.1.3(browserslist@4.24.4): - dependencies: - browserslist: 4.24.4 - escalade: 3.2.0 - picocolors: 1.1.1 - - uqr@0.1.2: {} - - uri-js-replace@1.0.1: {} + unpipe@1.0.0: {} - urlpattern-polyfill@8.0.2: {} + util-deprecate@1.0.2: + optional: true - util-deprecate@1.0.2: {} + utils-merge@1.0.1: {} uuid@11.1.0: {} @@ -8585,128 +4474,12 @@ snapshots: uuid@9.0.1: {} - validate-html-nesting@1.2.2: {} - validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vfile-message@4.0.2: - dependencies: - '@types/unist': 3.0.3 - unist-util-stringify-position: 4.0.0 - - vfile@6.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile-message: 4.0.2 - - vinxi@0.5.3(@types/node@22.13.9)(db0@0.3.1)(ioredis@5.6.0)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.8.2)(yaml@2.7.0): - dependencies: - '@babel/core': 7.26.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.9) - '@types/micromatch': 4.0.9 - '@vinxi/listhen': 1.5.6 - boxen: 7.1.1 - chokidar: 3.6.0 - citty: 0.1.6 - consola: 3.4.0 - crossws: 0.3.4 - dax-sh: 0.39.2 - defu: 6.1.4 - es-module-lexer: 1.6.0 - esbuild: 0.20.2 - fast-glob: 3.3.3 - get-port-please: 3.1.2 - h3: 1.13.0 - hookable: 5.5.3 - http-proxy: 1.18.1 - micromatch: 4.0.8 - nitropack: 2.11.4(typescript@5.8.2) - node-fetch-native: 1.6.6 - path-to-regexp: 6.3.0 - pathe: 1.1.2 - radix3: 1.1.2 - resolve: 1.22.10 - serve-placeholder: 2.0.2 - serve-static: 1.16.2 - ufo: 1.5.4 - unctx: 2.4.1 - unenv: 1.10.0 - unstorage: 1.15.0(db0@0.3.1)(ioredis@5.6.0) - vite: 6.2.1(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) - zod: 3.24.2 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@electric-sql/pglite' - - '@libsql/client' - - '@netlify/blobs' - - '@planetscale/database' - - '@types/node' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/kv' - - aws4fetch - - better-sqlite3 - - db0 - - debug - - drizzle-orm - - encoding - - idb-keyval - - ioredis - - jiti - - less - - lightningcss - - mysql2 - - rolldown - - sass - - sass-embedded - - sqlite3 - - stylus - - sugarss - - supports-color - - terser - - tsx - - typescript - - uploadthing - - xml2js - - yaml - - vite-plugin-solid@2.11.6(solid-js@1.9.5)(vite@6.2.1(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)): - dependencies: - '@babel/core': 7.26.9 - '@types/babel__core': 7.20.5 - babel-preset-solid: 1.9.5(@babel/core@7.26.9) - merge-anything: 5.1.7 - solid-js: 1.9.5 - solid-refresh: 0.6.3(solid-js@1.9.5) - vite: 6.2.1(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) - vitefu: 1.0.6(vite@6.2.1(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)) - transitivePeerDependencies: - - supports-color - - vite@6.1.0(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0): - dependencies: - esbuild: 0.24.2 - postcss: 8.5.3 - rollup: 4.34.9 - optionalDependencies: - '@types/node': 22.13.9 - fsevents: 2.3.3 - jiti: 2.4.2 - lightningcss: 1.29.2 - terser: 5.39.0 - tsx: 4.19.3 - yaml: 2.7.0 + vary@1.1.2: {} vite@6.2.1(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0): dependencies: @@ -8722,20 +4495,12 @@ snapshots: tsx: 4.19.3 yaml: 2.7.0 - vitefu@1.0.6(vite@6.2.1(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)): - optionalDependencies: - vite: 6.2.1(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) - - web-vitals@4.2.4: {} - webidl-conversions@3.0.1: {} - webpack-virtual-modules@0.6.2: {} - websocket-driver@0.7.4: dependencies: - http-parser-js: 0.5.9 - safe-buffer: 5.2.1 + http-parser-js: 0.5.10 + safe-buffer: 5.1.2 websocket-extensions: 0.1.4 websocket-extensions@0.1.4: {} @@ -8793,14 +4558,6 @@ snapshots: dependencies: isexe: 2.0.0 - which@4.0.0: - dependencies: - isexe: 3.1.1 - - widest-line@4.0.1: - dependencies: - string-width: 5.1.2 - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -8817,19 +4574,17 @@ snapshots: ws@8.18.1: {} - y18n@5.0.8: {} - - yallist@3.1.1: {} + y18n@5.0.8: + optional: true yallist@4.0.0: {} yallist@5.0.0: {} - yaml-ast-parser@0.0.43: {} - yaml@2.7.0: {} - yargs-parser@21.1.1: {} + yargs-parser@21.1.1: + optional: true yargs@17.7.2: dependencies: @@ -8840,22 +4595,13 @@ snapshots: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 + optional: true yocto-queue@0.1.0: optional: true - youch-redist@4.1.0-beta.5-1: {} - - zip-stream@6.0.1: - dependencies: - archiver-utils: 5.0.2 - compress-commons: 6.0.2 - readable-stream: 4.7.0 - zod-validation-error@3.4.0(zod@3.24.2): dependencies: zod: 3.24.2 zod@3.24.2: {} - - zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 06b6051..7987331 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,2 +1,3 @@ packages: - "apps/*" +injectWorkspacePackages: true \ No newline at end of file From 92c98102d8144e58840c2ac8813baa8abf0546bd Mon Sep 17 00:00:00 2001 From: Feavy Date: Thu, 10 Apr 2025 22:33:58 +0200 Subject: [PATCH 57/75] Simplify proxy : use custom host --- apps/proxy/backend/Settings.ts | 3 ++- apps/proxy/backend/app.ts | 19 +++++++++++++------ apps/proxy/backend/middlewares/auth.ts | 17 ++++++++--------- .../frontend/{ => static}/assets/github.svg | 0 apps/proxy/frontend/{ => static}/index.js | 0 .../{ => static}/stylesheets/style.css | 0 apps/proxy/frontend/views/index.ejs | 14 ++++++++++++++ .../frontend/{login.html => views/login.ejs} | 0 8 files changed, 37 insertions(+), 16 deletions(-) rename apps/proxy/frontend/{ => static}/assets/github.svg (100%) rename apps/proxy/frontend/{ => static}/index.js (100%) rename apps/proxy/frontend/{ => static}/stylesheets/style.css (100%) create mode 100644 apps/proxy/frontend/views/index.ejs rename apps/proxy/frontend/{login.html => views/login.ejs} (100%) diff --git a/apps/proxy/backend/Settings.ts b/apps/proxy/backend/Settings.ts index b3259d6..f1c54fd 100644 --- a/apps/proxy/backend/Settings.ts +++ b/apps/proxy/backend/Settings.ts @@ -9,4 +9,5 @@ export const ROUTES = (JSON.parse(process.env["ROUTES"] || "[]") as RouteConfig[ return b.path.length - a.path.length; } return b.host.length - a.host.length; - }); \ No newline at end of file + }); +export const WORKSPACE_NAME = process.env["WORKSPACE_NAME"] ?? "workspace"; \ No newline at end of file diff --git a/apps/proxy/backend/app.ts b/apps/proxy/backend/app.ts index 3aee51d..4aa7faf 100644 --- a/apps/proxy/backend/app.ts +++ b/apps/proxy/backend/app.ts @@ -4,30 +4,37 @@ import express from 'express'; import cookieParser from 'cookie-parser'; import path from 'path'; import logger from 'morgan'; -import * as ejs from 'ejs'; import auth from './middlewares/auth'; import proxy from './middlewares/proxy'; import AuthService from './services/AuthService'; import { PARENT_HOSTNAME, TOKEN_NAME } from './Settings'; +import * as fs from 'fs'; +import * as Settings from './Settings'; var app = express(); -app.engine('html', ejs.renderFile); -app.set('view engine', 'html'); +// app.engine('html', ejs.renderFile); +app.set('views', path.join(__dirname, '..', 'frontend', 'views')); +app.set('view engine', 'ejs'); app.use(logger('dev') as any); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser() as any); -app.use(express.static(path.join(__dirname, '..', 'frontend'))); +app.use(express.static(path.join(__dirname, '..', 'frontend', 'static'))); app.use(auth()); app.use(proxy()); // FRONTEND -app.get('/login', function (req, res) { - res.sendFile(path.join(__dirname, '..', 'frontend', 'login.html')); +fs.readdirSync(path.join(__dirname, '..', 'frontend', 'views')).forEach(file => { + const fileName = file.substring(0, file.indexOf(".")); + const path = "/" + (fileName === "index" ? "" : fileName); + app.get(path, function (req, res) { + res.render(fileName, { user: AuthService.get().getUserForRequest(req), settings: Settings }); + }); }); + // API app.post('/api/auth', async function (req, res) { diff --git a/apps/proxy/backend/middlewares/auth.ts b/apps/proxy/backend/middlewares/auth.ts index 33a6d1d..777dc32 100644 --- a/apps/proxy/backend/middlewares/auth.ts +++ b/apps/proxy/backend/middlewares/auth.ts @@ -4,6 +4,12 @@ import { HOSTNAME, ROUTES } from "../Settings"; import fullUrl from "../utils/fullUrl"; export default () => function (req: Request, res: Response, next) { + if(req.get("host") === HOSTNAME) { + res.locals.proxy = false; + next(); + return; + } + const protocol = req.headers['x-forwarded-proto'] || req.protocol || 'http'; const url = fullUrl(req); @@ -13,20 +19,13 @@ export default () => function (req: Request, res: Response, next) { const targetRoute = ROUTES.find(route => route.host === host && pathname.startsWith(route.path)); if (!targetRoute) { console.log("No route found for", url); - res.locals.proxy = false; - next(); + res.status(404).send("No route found for " + url); return; } const user = AuthService.get().getUserForRequest(req); if (targetRoute.auth && !user) { - if(url.startsWith(protocol + "://" + HOSTNAME + "/login") - || url.startsWith(protocol + "://" + HOSTNAME + "/api/auth")) { - res.locals.proxy = false; - next(); - } else { - res.redirect(protocol + "://" + HOSTNAME + "/login?redirect=" + encodeURIComponent(url)); - } + res.redirect(protocol + "://" + HOSTNAME + "/login?redirect=" + encodeURIComponent(url)); return; } diff --git a/apps/proxy/frontend/assets/github.svg b/apps/proxy/frontend/static/assets/github.svg similarity index 100% rename from apps/proxy/frontend/assets/github.svg rename to apps/proxy/frontend/static/assets/github.svg diff --git a/apps/proxy/frontend/index.js b/apps/proxy/frontend/static/index.js similarity index 100% rename from apps/proxy/frontend/index.js rename to apps/proxy/frontend/static/index.js diff --git a/apps/proxy/frontend/stylesheets/style.css b/apps/proxy/frontend/static/stylesheets/style.css similarity index 100% rename from apps/proxy/frontend/stylesheets/style.css rename to apps/proxy/frontend/static/stylesheets/style.css diff --git a/apps/proxy/frontend/views/index.ejs b/apps/proxy/frontend/views/index.ejs new file mode 100644 index 0000000..a3d24eb --- /dev/null +++ b/apps/proxy/frontend/views/index.ejs @@ -0,0 +1,14 @@ + + + + + + Workspace + + + + +

Workspace <%= settings.WORKSPACE_NAME %>

+ + + \ No newline at end of file diff --git a/apps/proxy/frontend/login.html b/apps/proxy/frontend/views/login.ejs similarity index 100% rename from apps/proxy/frontend/login.html rename to apps/proxy/frontend/views/login.ejs From 88c5e394fd1908dfe8cbb796e3cc58516e701365 Mon Sep 17 00:00:00 2001 From: Feavy Date: Thu, 10 Apr 2025 22:35:37 +0200 Subject: [PATCH 58/75] Refactor & don't proxy public ingresses --- apps/cli/src/config/types/WorkspaceConfig.ts | 15 ++++- .../cli/src/kubernetes/utils/createIngress.ts | 2 +- .../workspace/KubernetesServerComponent.ts | 57 +++------------- .../workspace/KubernetesWorkspace.ts | 67 +++++++++++++++++-- .../workspace/KubernetesWorkspaceComponent.ts | 4 +- 5 files changed, 87 insertions(+), 58 deletions(-) diff --git a/apps/cli/src/config/types/WorkspaceConfig.ts b/apps/cli/src/config/types/WorkspaceConfig.ts index b54b97e..5ada86d 100644 --- a/apps/cli/src/config/types/WorkspaceConfig.ts +++ b/apps/cli/src/config/types/WorkspaceConfig.ts @@ -17,14 +17,23 @@ export interface WorkspacePortConfig { name: string; number: number; protocol: string; - ingress?: WorkspaceIngressConfig | null; + ingress?: WorkspaceIngressConfig; } export const workspacePortSchema = z.object({ name: z.string(), number: z.number(), protocol: z.string().default('TCP'), - ingress: workspaceIngressSchema.optional().nullable(), + ingress: workspaceIngressSchema.optional().nullable().transform((ingress) => { + if (ingress === null) { + return { + subdomain: '', + path: '/', + auth: true + }; + } + return ingress; + }), }); export interface WorkspaceVolumeConfig { @@ -89,7 +98,7 @@ export interface WorkspaceServerConfig { } export const workspaceServerSchema = z.object({ - name: z.string().default('server'), + name: z.string().default('ws-portal'), image: z.string().default(Settings.server.image), tag: z.string().default(Settings.server.tag), users: z.array(z.string()), diff --git a/apps/cli/src/kubernetes/utils/createIngress.ts b/apps/cli/src/kubernetes/utils/createIngress.ts index 7e5ceaa..3d455c7 100644 --- a/apps/cli/src/kubernetes/utils/createIngress.ts +++ b/apps/cli/src/kubernetes/utils/createIngress.ts @@ -46,7 +46,7 @@ export default function createIngress({ name, namespace, rules }: IngressDefinit host: rule.host, http: { paths: [{ - path: "/", + path: rule.path, pathType: "Prefix", backend: { service: { diff --git a/apps/cli/src/kubernetes/workspace/KubernetesServerComponent.ts b/apps/cli/src/kubernetes/workspace/KubernetesServerComponent.ts index 98e8257..1239256 100644 --- a/apps/cli/src/kubernetes/workspace/KubernetesServerComponent.ts +++ b/apps/cli/src/kubernetes/workspace/KubernetesServerComponent.ts @@ -7,7 +7,7 @@ import { merge } from "../../utils/ObjectUtils"; import { PortDefinition } from "../utils/createDeployment"; export default class KubernetesServerComponent extends KubernetesComponent { - private static readonly PORT = 28543; + public static readonly PORT = 28543; public constructor(mainConfig: WorkspaceConfig, private serverConfig: WorkspaceServerConfig, private componentsConfig: Array) { super(mainConfig, serverConfig as any); @@ -25,59 +25,26 @@ export default class KubernetesServerComponent extends KubernetesComponent { targetPort: port.number }))), "ALLOWED_USERS": JSON.stringify(serverConfig.users), - "HOSTNAME": this.getHost(), - "TOKEN_NAME": this.name("token") + "HOSTNAME": this.getHost(this.serverConfig.name), + "TOKEN_NAME": this.name("token"), + "WORKSPACE_NAME": mainConfig.name }, ports: [ { - name: "nitro", + name: "ws-portal", protocol: "TCP", number: KubernetesServerComponent.PORT, - ingress: {} + ingress: { + subdomain: this.serverConfig.name, + path: "/", + auth: true + } } ], volumes: [] }); } - public getResources(definedResources: Array): Array { - const deployment = definedResources.find(it => it.kind === "Deployment") as V1Deployment; - - const ingresses = [this.config, ...this.componentsConfig].flatMap(it => it.ports).map(port => port.ingress).filter(ingress => ingress !== undefined); - - const allPorts: PortDefinition[] = [...this.config.ports, ...this.componentsConfig.flatMap(it => it.ports)].map(port => ({ - name: port.name, - protocol: port.protocol, - number: port.number, - exposed: Boolean(port.ingress) - })); - - const service = createService({ - name: this.name("clusterip"), - namespace: this.mainConfig.namespace, - ports: this.config.ports.map(port => ({ - name: port.name, - protocol: port.protocol, - number: port.number, - exposed: true - })), - deployment: deployment - }); - - const ingress = createIngress({ - name: this.name("ingress"), - namespace: this.mainConfig.namespace, - rules: uniqueBy(ingresses, it => this.getHost(it.subdomain)).map(ingress => ({ - host: this.getHost(ingress.subdomain), - port: KubernetesServerComponent.PORT, - path: "/", - service: service // ? - })) - }); - - return [...super.getResources(definedResources), service, ingress]; - } - private getHost(subdomain?: string) { let domain = this.serverConfig.domain.replace("%s", subdomain || ""); if (!subdomain) { @@ -86,7 +53,3 @@ export default class KubernetesServerComponent extends KubernetesComponent { return domain; } } - -function uniqueBy(array: any[], fun: (elem: any) => any) { - return array.filter((item, pos) => array.findIndex(it => fun(it) === fun(item)) == pos); -} \ No newline at end of file diff --git a/apps/cli/src/kubernetes/workspace/KubernetesWorkspace.ts b/apps/cli/src/kubernetes/workspace/KubernetesWorkspace.ts index 41a727a..f1433f8 100644 --- a/apps/cli/src/kubernetes/workspace/KubernetesWorkspace.ts +++ b/apps/cli/src/kubernetes/workspace/KubernetesWorkspace.ts @@ -1,6 +1,6 @@ import KubernetesComponent from "./KubernetesComponent"; import K8sObject from "../types/K8sObject"; -import { createConfigMap, createDeployment, createNamespace, createPersistentVolumeClaim, createService, createServiceAccount } from "../utils"; +import { createConfigMap, createDeployment, createIngress, createNamespace, createPersistentVolumeClaim, createService, createServiceAccount } from "../utils"; import { WorkspaceComponentConfig, WorkspaceConfig } from "../../config/types/WorkspaceConfig"; import KubernetesWorkspaceComponent from "./KubernetesWorkspaceComponent"; import KubernetesServerComponent from "./KubernetesServerComponent"; @@ -16,7 +16,7 @@ export default class KubernetesWorkspace { // this.k8sApi = kc.makeApiClient(k8s.CoreV1Api); } - + public name(...suffixes: string[]) { return formatName([this.config.name, "workspace", ...suffixes].join("-")); } @@ -50,7 +50,7 @@ export default class KubernetesWorkspace { // } ] })); - + const workspaceComponent = new KubernetesWorkspaceComponent(this.config, this.config.workspace); const serverComponent = new KubernetesServerComponent(this.config, this.config.server, [workspaceComponent.config, ...this.config.components] as WorkspaceComponentConfig[]); const kubernetesComponents = [ @@ -59,6 +59,8 @@ export default class KubernetesWorkspace { serverComponent, ]; + const configs = kubernetesComponents.flatMap(component => component.config); + const pvc = resources.pushAndGet(createPersistentVolumeClaim({ name: this.name("pvc"), namespace: this.config.namespace, @@ -69,7 +71,7 @@ export default class KubernetesWorkspace { const containers = kubernetesComponents.flatMap(component => component.containerDefinition); - resources.push(createDeployment({ + const deployment = resources.pushAndGet(createDeployment({ name: this.name("deployment"), namespace: this.config.namespace, containers: containers, @@ -78,10 +80,63 @@ export default class KubernetesWorkspace { volume: pvc })); - for(const component of kubernetesComponents) { + for (const component of kubernetesComponents) { resources.push(...component.getResources(resources)); } + // ports exposed as clusterip service + // ports of server + ports of components which have ingress and auth = false + const ports = [...serverComponent.ports, + ...configs.flatMap(it => (it as WorkspaceComponentConfig).ports) + .filter(port => port.ingress !== undefined && !port.ingress?.auth) + ]; + + const service = resources.pushAndGet(createService({ + name: this.name("clusterip"), + namespace: this.config.namespace, + ports: ports.map(port => ({ + name: port.name, + protocol: port.protocol, + number: port.number, + exposed: true + })), + deployment: deployment + })); + + // Auth ingress + const authIngresses = configs.flatMap(it => it.ports) + .filter(port => port.ingress !== undefined && port.ingress?.auth) + .map(port => port.ingress) + .sort((a, b) => b!.subdomain.length + b!.path.length - (a!.subdomain.length + a!.path.length)); + + resources.pushAndGet(createIngress({ + name: this.name("auth-ingress"), + namespace: this.config.namespace, + rules: uniqueBy(authIngresses, it => this.getHost(it.subdomain)).map(ingress => ({ + host: this.getHost(ingress.subdomain), + port: KubernetesServerComponent.PORT, + path: "/", + service: service // ? + })) + })); + + // Public ingress + const ingresses = configs.flatMap(it => it.ports) + .filter(port => port.ingress !== undefined && !port.ingress?.auth) + .map(port => port.ingress) + .sort((a, b) => b!.subdomain.length + b!.path.length - (a!.subdomain.length + a!.path.length)); + + resources.pushAndGet(createIngress({ + name: this.name("public-ingress"), + namespace: this.config.namespace, + rules: ingresses.map(ingress => ({ + host: this.getHost(ingress?.subdomain || ""), + port: KubernetesServerComponent.PORT, + path: ingress?.path || "/", + service: service // ? + })) + })); + resources.push(createConfigMap({ name: this.name("state"), namespace: this.config.namespace, @@ -103,7 +158,7 @@ export default class KubernetesWorkspace { private getHost(subdomain?: string) { let domain = this.config.server.domain.replace("%s", subdomain || ""); - if(!subdomain) { + if (!subdomain) { domain = domain.substring(1); // remove separator } return domain; diff --git a/apps/cli/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts b/apps/cli/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts index bc4c5aa..0fcef83 100644 --- a/apps/cli/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts +++ b/apps/cli/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts @@ -14,7 +14,9 @@ export default class KubernetesWorkspaceComponent extends KubernetesComponent { protocol: "TCP", number: 28544, ingress: { - subdomain: "theia" + subdomain: "theia", + path: "/", + auth: true } } ] From e67287dd07b3f3d7594cd14cea628f7b9a117a84 Mon Sep 17 00:00:00 2001 From: Feavy Date: Thu, 10 Apr 2025 22:38:17 +0200 Subject: [PATCH 59/75] proxy login redirec to index by default --- apps/proxy/frontend/static/index.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/proxy/frontend/static/index.js b/apps/proxy/frontend/static/index.js index 7cbe3d5..c83776f 100644 --- a/apps/proxy/frontend/static/index.js +++ b/apps/proxy/frontend/static/index.js @@ -68,7 +68,5 @@ function onAuthStateChanged(state) { // get redirect search params const params = new URLSearchParams(window.location.search); const redirect = params.get("redirect"); - if(redirect) { - window.location.href = redirect; - } + window.location.href = redirect || "/"; } \ No newline at end of file From d3acfe0398fe5443aa7ab663a0bb2611342a625e Mon Sep 17 00:00:00 2001 From: Feavy Date: Thu, 10 Apr 2025 22:44:52 +0200 Subject: [PATCH 60/75] Fix server --- apps/proxy/frontend/static/index.js | 8 ++------ apps/proxy/frontend/views/index.ejs | 7 +++++++ apps/proxy/frontend/views/login.ejs | 1 - 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/proxy/frontend/static/index.js b/apps/proxy/frontend/static/index.js index c83776f..3ae73f2 100644 --- a/apps/proxy/frontend/static/index.js +++ b/apps/proxy/frontend/static/index.js @@ -58,13 +58,9 @@ async function updateState(idToken) { document.getElementById("github-button").addEventListener("click", () => signInWithPopup(gitHubProvider)); -const authStateSpan = document.getElementById("auth-state"); function onAuthStateChanged(state) { - if (state.logged) { - authStateSpan.innerText = `Logged in as ${state.user.email}`; - } else { - authStateSpan.innerText = "Not logged in"; - } + if(!state.logged) return; + // get redirect search params const params = new URLSearchParams(window.location.search); const redirect = params.get("redirect"); diff --git a/apps/proxy/frontend/views/index.ejs b/apps/proxy/frontend/views/index.ejs index a3d24eb..9ef77b2 100644 --- a/apps/proxy/frontend/views/index.ejs +++ b/apps/proxy/frontend/views/index.ejs @@ -9,6 +9,13 @@

Workspace <%= settings.WORKSPACE_NAME %>

+ <% if (user) { %> +

Logged as <%= user.email %>

+ Logout + <% } else { %> +

You are not logged in.

+ Login + <% } %> \ No newline at end of file diff --git a/apps/proxy/frontend/views/login.ejs b/apps/proxy/frontend/views/login.ejs index c107880..bd3ee96 100644 --- a/apps/proxy/frontend/views/login.ejs +++ b/apps/proxy/frontend/views/login.ejs @@ -16,7 +16,6 @@ GitHub Sign in with GitHub -

Not logged in

From dd51af74bf4c746377d3878f44dc61847f6e4ddb Mon Sep 17 00:00:00 2001 From: Feavy Date: Sat, 12 Apr 2025 15:32:45 +0200 Subject: [PATCH 61/75] Move cli to its own repo --- .dockerignore | 1 - .github/workflows/publish-proxy-image.yaml | 52 - .github/workflows/publish-theia-image.yaml | 52 - .gitignore | 1 + apps/cli/.env | 3 - apps/cli/action.yml | 13 - apps/cli/package.json | 27 - apps/cli/src/test.ts | 8 - apps/lib/dist/index.js | 6 - apps/lib/dist/index.umd.cjs | 1 - apps/lib/package.json | 23 - apps/lib/src/index.ts | 3 - apps/lib/tsconfig.json | 18 - apps/lib/types/index.d.ts | 1 - apps/lib/vite.config.js | 14 - apps/proxy/.gitignore | 61 - apps/proxy/Dockerfile | 29 - apps/proxy/backend/Settings.ts | 13 - apps/proxy/backend/app.ts | 70 - apps/proxy/backend/bin/www.ts | 90 - apps/proxy/backend/middlewares/auth.ts | 34 - apps/proxy/backend/middlewares/proxy.ts | 28 - apps/proxy/backend/services/AuthService.ts | 52 - apps/proxy/backend/services/FirebaseAdmin.ts | 14 - apps/proxy/backend/types/RouteConfig.ts | 6 - apps/proxy/backend/types/User.ts | 4 - apps/proxy/backend/utils/fullUrl.ts | 8 - apps/proxy/entrypoint.sh | 5 - apps/proxy/frontend/static/assets/github.svg | 3 - apps/proxy/frontend/static/index.js | 68 - .../frontend/static/stylesheets/style.css | 8 - apps/proxy/frontend/views/index.ejs | 21 - apps/proxy/frontend/views/login.ejs | 23 - apps/proxy/package.json | 19 - apps/theia/Dockerfile | 83 - apps/theia/default.gitconfig | 2 - package-lock.json | 1758 ------- package.json | 29 +- pnpm-lock.yaml | 4257 ++--------------- pnpm-workspace.yaml | 3 - {apps/cli/src => src}/Settings.json | 0 .../config/WorkspaceConfigRenderer.ts | 0 {apps/cli/src => src}/config/YamlRenderer.ts | 0 .../config/types/WorkspaceConfig.ts | 0 {apps/cli/src => src}/index.ts | 0 .../kubernetes/KubernetesClient.ts | 0 .../src => src}/kubernetes/types/K8sObject.ts | 0 .../kubernetes/utils/createConfigMap.ts | 0 .../kubernetes/utils/createDeployment.ts | 0 .../kubernetes/utils/createIngress.ts | 0 .../kubernetes/utils/createNamespace.ts | 0 .../utils/createPersistentVolumeClaim.ts | 0 .../kubernetes/utils/createSecret.ts | 0 .../kubernetes/utils/createService.ts | 0 .../kubernetes/utils/createServiceAccount.ts | 0 .../src => src}/kubernetes/utils/encoding.ts | 0 .../cli/src => src}/kubernetes/utils/index.ts | 0 .../workspace/KubernetesComponent.ts | 0 .../workspace/KubernetesServerComponent.ts | 0 .../workspace/KubernetesWorkspace.ts | 0 .../workspace/KubernetesWorkspaceComponent.ts | 0 {apps/cli/src => src}/utils/ArrayUtils.ts | 0 {apps/cli/src => src}/utils/ObjectUtils.ts | 0 templates/components/mongo.yml | 30 - templates/scripts/install-bun.yml | 12 - templates/scripts/install-java.yml | 7 - apps/cli/tsconfig.json => tsconfig.json | 0 apps/cli/vite.config.js => vite.config.js | 0 68 files changed, 391 insertions(+), 6569 deletions(-) delete mode 100644 .dockerignore delete mode 100644 .github/workflows/publish-proxy-image.yaml delete mode 100644 .github/workflows/publish-theia-image.yaml delete mode 100644 apps/cli/.env delete mode 100644 apps/cli/action.yml delete mode 100644 apps/cli/package.json delete mode 100644 apps/cli/src/test.ts delete mode 100644 apps/lib/dist/index.js delete mode 100644 apps/lib/dist/index.umd.cjs delete mode 100644 apps/lib/package.json delete mode 100644 apps/lib/src/index.ts delete mode 100644 apps/lib/tsconfig.json delete mode 100644 apps/lib/types/index.d.ts delete mode 100644 apps/lib/vite.config.js delete mode 100644 apps/proxy/.gitignore delete mode 100644 apps/proxy/Dockerfile delete mode 100644 apps/proxy/backend/Settings.ts delete mode 100644 apps/proxy/backend/app.ts delete mode 100644 apps/proxy/backend/bin/www.ts delete mode 100644 apps/proxy/backend/middlewares/auth.ts delete mode 100644 apps/proxy/backend/middlewares/proxy.ts delete mode 100644 apps/proxy/backend/services/AuthService.ts delete mode 100644 apps/proxy/backend/services/FirebaseAdmin.ts delete mode 100644 apps/proxy/backend/types/RouteConfig.ts delete mode 100644 apps/proxy/backend/types/User.ts delete mode 100644 apps/proxy/backend/utils/fullUrl.ts delete mode 100755 apps/proxy/entrypoint.sh delete mode 100644 apps/proxy/frontend/static/assets/github.svg delete mode 100644 apps/proxy/frontend/static/index.js delete mode 100644 apps/proxy/frontend/static/stylesheets/style.css delete mode 100644 apps/proxy/frontend/views/index.ejs delete mode 100644 apps/proxy/frontend/views/login.ejs delete mode 100644 apps/proxy/package.json delete mode 100644 apps/theia/Dockerfile delete mode 100644 apps/theia/default.gitconfig delete mode 100644 package-lock.json delete mode 100644 pnpm-workspace.yaml rename {apps/cli/src => src}/Settings.json (100%) rename {apps/cli/src => src}/config/WorkspaceConfigRenderer.ts (100%) rename {apps/cli/src => src}/config/YamlRenderer.ts (100%) rename {apps/cli/src => src}/config/types/WorkspaceConfig.ts (100%) rename {apps/cli/src => src}/index.ts (100%) rename {apps/cli/src => src}/kubernetes/KubernetesClient.ts (100%) rename {apps/cli/src => src}/kubernetes/types/K8sObject.ts (100%) rename {apps/cli/src => src}/kubernetes/utils/createConfigMap.ts (100%) rename {apps/cli/src => src}/kubernetes/utils/createDeployment.ts (100%) rename {apps/cli/src => src}/kubernetes/utils/createIngress.ts (100%) rename {apps/cli/src => src}/kubernetes/utils/createNamespace.ts (100%) rename {apps/cli/src => src}/kubernetes/utils/createPersistentVolumeClaim.ts (100%) rename {apps/cli/src => src}/kubernetes/utils/createSecret.ts (100%) rename {apps/cli/src => src}/kubernetes/utils/createService.ts (100%) rename {apps/cli/src => src}/kubernetes/utils/createServiceAccount.ts (100%) rename {apps/cli/src => src}/kubernetes/utils/encoding.ts (100%) rename {apps/cli/src => src}/kubernetes/utils/index.ts (100%) rename {apps/cli/src => src}/kubernetes/workspace/KubernetesComponent.ts (100%) rename {apps/cli/src => src}/kubernetes/workspace/KubernetesServerComponent.ts (100%) rename {apps/cli/src => src}/kubernetes/workspace/KubernetesWorkspace.ts (100%) rename {apps/cli/src => src}/kubernetes/workspace/KubernetesWorkspaceComponent.ts (100%) rename {apps/cli/src => src}/utils/ArrayUtils.ts (100%) rename {apps/cli/src => src}/utils/ObjectUtils.ts (100%) delete mode 100644 templates/components/mongo.yml delete mode 100644 templates/scripts/install-bun.yml delete mode 100644 templates/scripts/install-java.yml rename apps/cli/tsconfig.json => tsconfig.json (100%) rename apps/cli/vite.config.js => vite.config.js (100%) diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 3c3629e..0000000 --- a/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/.github/workflows/publish-proxy-image.yaml b/.github/workflows/publish-proxy-image.yaml deleted file mode 100644 index f5ef825..0000000 --- a/.github/workflows/publish-proxy-image.yaml +++ /dev/null @@ -1,52 +0,0 @@ -name: Publish Proxy Image - -on: - push: - paths: - - 'apps/proxy/**' - release: - types: [published] - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - with: - platforms: linux/amd64,linux/arm64 - - - name: Configure Docker Buildx - run: | - docker buildx create --name mybuilder - docker buildx use mybuilder - docker buildx inspect --bootstrap - - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Login to GitHub Container Registry - run: echo ${{ secrets.PAT }} | docker login ghcr.io --username feavy --password-stdin - - - name: Set SHORT_SHA - id: vars - run: echo "SHORT_SHA=$(echo $GITHUB_SHA | cut -c1-7)" >> $GITHUB_ENV - - - name: Build and push Docker Image - uses: docker/build-push-action@v6 - with: - context: . - file: ./apps/proxy/Dockerfile - push: true - tags: ghcr.io/feavy/workspace/server:${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || format('{0}-{1}', github.ref_name, env.SHORT_SHA) }} diff --git a/.github/workflows/publish-theia-image.yaml b/.github/workflows/publish-theia-image.yaml deleted file mode 100644 index eae858e..0000000 --- a/.github/workflows/publish-theia-image.yaml +++ /dev/null @@ -1,52 +0,0 @@ -name: Publish Theia Image - -on: - push: - paths: - - 'apps/theia/**' - release: - types: [published] - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - with: - platforms: linux/amd64,linux/arm64 - - - name: Configure Docker Buildx - run: | - docker buildx create --name mybuilder - docker buildx use mybuilder - docker buildx inspect --bootstrap - - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Login to GitHub Container Registry - run: echo ${{ secrets.PAT }} | docker login ghcr.io --username feavy --password-stdin - - - name: Set SHORT_SHA - id: vars - run: echo "SHORT_SHA=$(echo $GITHUB_SHA | cut -c1-7)" >> $GITHUB_ENV - - - name: Build and push Docker Image - uses: docker/build-push-action@v6 - with: - context: ./apps/theia - file: ./apps/theia/Dockerfile - push: true - tags: ghcr.io/feavy/workspace/theia:${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || format('{0}-{1}', github.ref_name, env.SHORT_SHA) }} diff --git a/.gitignore b/.gitignore index 0ff29db..1509f11 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ packages/*/dist packages/*/types Dockerfile.*bak* serviceAccountKey.json +.env diff --git a/apps/cli/.env b/apps/cli/.env deleted file mode 100644 index ceabdfe..0000000 --- a/apps/cli/.env +++ /dev/null @@ -1,3 +0,0 @@ -NODE_ENV=development -DISCORD_TOKEN=test-token -ALLOWED_USERS=['test@gmail.com'] \ No newline at end of file diff --git a/apps/cli/action.yml b/apps/cli/action.yml deleted file mode 100644 index a2d9d6e..0000000 --- a/apps/cli/action.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: 'Hello World' -description: 'Greet someone and record the time' -inputs: - who-to-greet: # id of input - description: 'Who to greet' - required: true - default: 'World' -outputs: - time: # id of output - description: 'The time we greeted you' -runs: - using: 'node20' - main: '../../dist/index.js' diff --git a/apps/cli/package.json b/apps/cli/package.json deleted file mode 100644 index 744bab2..0000000 --- a/apps/cli/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "@feavy/workspace", - "version": "1.0.0", - "main": "dist/index.js", - "type": "module", - "scripts": { - "build": "ncc build src/index.ts -o dist", - "dev": "tsx src/index.ts --mode development", - "test": "tsx src/test.ts --mode development", - "test-k8s": "tsx src/index-k8s.ts" - }, - "keywords": [], - "author": "", - "license": "ISC", - "description": "", - "dependencies": { - "@actions/core": "^1.11.1", - "@actions/github": "^6.0.0", - "@kubernetes/client-node": "^1.0.0", - "@vercel/ncc": "^0.38.3", - "dotenv": "^16.4.7", - "lib": "workspace:*", - "yaml": "^2.7.0", - "zod": "^3.24.2", - "zod-validation-error": "^3.4.0" - } -} diff --git a/apps/cli/src/test.ts b/apps/cli/src/test.ts deleted file mode 100644 index c2a23d2..0000000 --- a/apps/cli/src/test.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {merge} from "./utils/ObjectUtils"; -import KubernetesClient from "./kubernetes/KubernetesClient"; - -(async () => { - const client = new KubernetesClient("ppbo"); - console.log(await client.workspaceExists()); - console.log(await client.getSecret("ppbo-secrets")); -})(); \ No newline at end of file diff --git a/apps/lib/dist/index.js b/apps/lib/dist/index.js deleted file mode 100644 index 473be18..0000000 --- a/apps/lib/dist/index.js +++ /dev/null @@ -1,6 +0,0 @@ -function i() { - return "lib"; -} -export { - i as lib -}; diff --git a/apps/lib/dist/index.umd.cjs b/apps/lib/dist/index.umd.cjs deleted file mode 100644 index b08987a..0000000 --- a/apps/lib/dist/index.umd.cjs +++ /dev/null @@ -1 +0,0 @@ -(function(e,i){typeof exports=="object"&&typeof module<"u"?i(exports):typeof define=="function"&&define.amd?define(["exports"],i):(e=typeof globalThis<"u"?globalThis:e||self,i(e.index={}))})(this,function(e){"use strict";function i(){return"lib"}e.lib=i,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})}); diff --git a/apps/lib/package.json b/apps/lib/package.json deleted file mode 100644 index 8453c39..0000000 --- a/apps/lib/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "lib", - "version": "1.0.0", - "main": "dist/index.js", - "type": "module", - "exports": { - ".": { - "import": "./dist/index.js", - "types": "./types/index.d.ts" - } - }, - "scripts": { - "build": "run-p build:vite build:types", - "build:vite": "vite build", - "build:types": "tsc" - }, - "keywords": [], - "devDependencies": { - "npm-run-all": "^4.1.5", - "typescript": "^5.7.3", - "vite": "^6.2.1" - } -} diff --git a/apps/lib/src/index.ts b/apps/lib/src/index.ts deleted file mode 100644 index ad9f7d3..0000000 --- a/apps/lib/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function lib() { - return "lib"; -} \ No newline at end of file diff --git a/apps/lib/tsconfig.json b/apps/lib/tsconfig.json deleted file mode 100644 index 7aa1248..0000000 --- a/apps/lib/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "compilerOptions": { - "target": "es2018", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - "lib": ["DOM", "ESNext"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - "module": "ESNext", /* Specify what module code is generated. */ - "moduleResolution": "bundler", /* Specify how TypeScript looks up a file from a given module specifier. */ - "outDir": "./types", /* Specify an output folder for all emitted files. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - "emitDeclarationOnly": true, - "strict": true, /* Enable all strict type-checking options. */ - "skipLibCheck": true, /* Skip type checking all .d.ts files. */ - "declaration": true - }, - "include": [ - "src/**/*.ts" - ] -} diff --git a/apps/lib/types/index.d.ts b/apps/lib/types/index.d.ts deleted file mode 100644 index b51547c..0000000 --- a/apps/lib/types/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function lib(): string; diff --git a/apps/lib/vite.config.js b/apps/lib/vite.config.js deleted file mode 100644 index 0d8639c..0000000 --- a/apps/lib/vite.config.js +++ /dev/null @@ -1,14 +0,0 @@ -import { resolve } from 'path' -import { defineConfig } from 'vite' - -export default defineConfig({ - build: { - lib: { - entry: resolve(__dirname, 'src/index.ts'), - name: 'index', - fileName: 'index', - // formats: ["es"], - // formats: ["iife"] - } - } -}) \ No newline at end of file diff --git a/apps/proxy/.gitignore b/apps/proxy/.gitignore deleted file mode 100644 index d1bed12..0000000 --- a/apps/proxy/.gitignore +++ /dev/null @@ -1,61 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - -# next.js build output -.next diff --git a/apps/proxy/Dockerfile b/apps/proxy/Dockerfile deleted file mode 100644 index 275d5da..0000000 --- a/apps/proxy/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -#check=skip=SecretsUsedInArgOrEnv - -FROM node:20-slim AS base -ENV PNPM_HOME="/pnpm" -ENV PATH="$PNPM_HOME:$PATH" -RUN corepack enable - -FROM base AS build -COPY . /usr/src/app -WORKDIR /usr/src/app -RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile -# RUN pnpm run -r build -RUN pnpm deploy --filter=proxy --prod /prod/app - -FROM base AS app - -LABEL org.opencontainers.image.source=https://github.com/feavy/workspace -LABEL org.opencontainers.image.description="Workspace Proxy Docker Image" -LABEL org.opencontainers.image.licenses=MIT - -COPY --from=build /prod/app /prod/app -COPY --from=build /usr/src/app/apps/proxy/entrypoint.sh /app/entrypoint.sh -WORKDIR /prod/app - -ENV GOOGLE_APPLICATION_CREDENTIALS=/app/serviceAccountKey.json -ENV PORT=28543 -EXPOSE 28543 - -ENTRYPOINT [ "/app/entrypoint.sh" ] diff --git a/apps/proxy/backend/Settings.ts b/apps/proxy/backend/Settings.ts deleted file mode 100644 index f1c54fd..0000000 --- a/apps/proxy/backend/Settings.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { RouteConfig } from "./types/RouteConfig"; - -export const PORT = parseInt(process.env["PORT"] ?? "3000"); -export const HOSTNAME = process.env["HOSTNAME"] ?? "localhost"+":"+PORT; -export const PARENT_HOSTNAME = HOSTNAME.substring(HOSTNAME.indexOf(".") + 1); -export const TOKEN_NAME = process.env["TOKEN_NAME"] ?? "workspace-token"; -export const ROUTES = (JSON.parse(process.env["ROUTES"] || "[]") as RouteConfig[]).sort((a, b) => { - if (a.host === b.host) { - return b.path.length - a.path.length; - } - return b.host.length - a.host.length; - }); -export const WORKSPACE_NAME = process.env["WORKSPACE_NAME"] ?? "workspace"; \ No newline at end of file diff --git a/apps/proxy/backend/app.ts b/apps/proxy/backend/app.ts deleted file mode 100644 index 4aa7faf..0000000 --- a/apps/proxy/backend/app.ts +++ /dev/null @@ -1,70 +0,0 @@ -import 'dotenv/config'; -import './services/FirebaseAdmin'; -import express from 'express'; -import cookieParser from 'cookie-parser'; -import path from 'path'; -import logger from 'morgan'; -import auth from './middlewares/auth'; -import proxy from './middlewares/proxy'; -import AuthService from './services/AuthService'; -import { PARENT_HOSTNAME, TOKEN_NAME } from './Settings'; -import * as fs from 'fs'; -import * as Settings from './Settings'; - -var app = express(); -// app.engine('html', ejs.renderFile); -app.set('views', path.join(__dirname, '..', 'frontend', 'views')); -app.set('view engine', 'ejs'); -app.use(logger('dev') as any); -app.use(express.json()); -app.use(express.urlencoded({ extended: false })); -app.use(cookieParser() as any); -app.use(express.static(path.join(__dirname, '..', 'frontend', 'static'))); - -app.use(auth()); -app.use(proxy()); - -// FRONTEND - -fs.readdirSync(path.join(__dirname, '..', 'frontend', 'views')).forEach(file => { - const fileName = file.substring(0, file.indexOf(".")); - const path = "/" + (fileName === "index" ? "" : fileName); - app.get(path, function (req, res) { - res.render(fileName, { user: AuthService.get().getUserForRequest(req), settings: Settings }); - }); -}); - - -// API - -app.post('/api/auth', async function (req, res) { - console.log("Auth request", req.body); - - const existingUser = AuthService.get().getUserForRequest(req); - if (existingUser) { - res.json({ logged: true, user: existingUser }); - return; - } - - try { - const firebaseToken = req.body.token; - - const { user, token } = await AuthService.get().registerUser(firebaseToken); - - // Set the cookie - res.cookie(TOKEN_NAME, token, { - maxAge: 60 * 60 * 24 * 30, // 30 days - httpOnly: true, - domain: "." + PARENT_HOSTNAME - }); - - res.json(user); - - } catch (e) { - console.error("Error", e); - res.status(500).json({ logged: false, error: "Error" }); - } -}); - - -export default app; diff --git a/apps/proxy/backend/bin/www.ts b/apps/proxy/backend/bin/www.ts deleted file mode 100644 index b68ed2f..0000000 --- a/apps/proxy/backend/bin/www.ts +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -import 'dotenv/config'; -import http from 'http'; -import app from '../app'; - -/** - * Get port from environment and store in Express. - */ - -var port = normalizePort(process.env.PORT || '3000'); -app.set('port', port); - -/** - * Create HTTP server. - */ - -var server = http.createServer(app); - -/** - * Listen on provided port, on all network interfaces. - */ - -server.listen(port); -server.on('error', onError); -server.on('listening', onListening); - -/** - * Normalize a port into a number, string, or false. - */ - -function normalizePort(val) { - var port = parseInt(val, 10); - - if (isNaN(port)) { - // named pipe - return val; - } - - if (port >= 0) { - // port number - return port; - } - - return false; -} - -/** - * Event listener for HTTP server "error" event. - */ - -function onError(error) { - if (error.syscall !== 'listen') { - throw error; - } - - var bind = typeof port === 'string' - ? 'Pipe ' + port - : 'Port ' + port; - - // handle specific listen errors with friendly messages - switch (error.code) { - case 'EACCES': - console.error(bind + ' requires elevated privileges'); - process.exit(1); - break; - case 'EADDRINUSE': - console.error(bind + ' is already in use'); - process.exit(1); - break; - default: - throw error; - } -} - -/** - * Event listener for HTTP server "listening" event. - */ - -function onListening() { - var addr = server.address(); - var bind = typeof addr === 'string' - ? 'pipe ' + addr - : 'port ' + addr!.port; - console.log('Listening on ' + bind); -} diff --git a/apps/proxy/backend/middlewares/auth.ts b/apps/proxy/backend/middlewares/auth.ts deleted file mode 100644 index 777dc32..0000000 --- a/apps/proxy/backend/middlewares/auth.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Request, Response } from "express"; -import AuthService from "../services/AuthService"; -import { HOSTNAME, ROUTES } from "../Settings"; -import fullUrl from "../utils/fullUrl"; - -export default () => function (req: Request, res: Response, next) { - if(req.get("host") === HOSTNAME) { - res.locals.proxy = false; - next(); - return; - } - - const protocol = req.headers['x-forwarded-proto'] || req.protocol || 'http'; - const url = fullUrl(req); - - console.log("Auth middleware", url); - const { host, pathname } = new URL(url); - - const targetRoute = ROUTES.find(route => route.host === host && pathname.startsWith(route.path)); - if (!targetRoute) { - console.log("No route found for", url); - res.status(404).send("No route found for " + url); - return; - } - - const user = AuthService.get().getUserForRequest(req); - if (targetRoute.auth && !user) { - res.redirect(protocol + "://" + HOSTNAME + "/login?redirect=" + encodeURIComponent(url)); - return; - } - - res.locals.proxy = true; - next(); -} \ No newline at end of file diff --git a/apps/proxy/backend/middlewares/proxy.ts b/apps/proxy/backend/middlewares/proxy.ts deleted file mode 100644 index 96422dd..0000000 --- a/apps/proxy/backend/middlewares/proxy.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { Request, Response } from 'express'; -import { createProxyMiddleware } from 'http-proxy-middleware'; -import { PORT, ROUTES } from '../Settings'; -import fullUrl from '../utils/fullUrl'; - -const router = ROUTES.reduce((acc, route) => { - acc[route.host + route.path] = "http://127.0.0.1:" + route.targetPort; - return acc; -} , {} as Record); - -const proxy = createProxyMiddleware({ - target: "http://127.0.0.1:" + PORT, - changeOrigin: true, - ws: true, - router, -}); - -console.log("Proxy router", router) - -export default () => function (req: Request, res: Response, next) { - if(res.locals.proxy) { - console.log("PROXYING", fullUrl(req)); - return proxy(req, res, next); - } else { - console.log("NOT PROXYING", fullUrl(req)); - next(); - } -} \ No newline at end of file diff --git a/apps/proxy/backend/services/AuthService.ts b/apps/proxy/backend/services/AuthService.ts deleted file mode 100644 index 6045f43..0000000 --- a/apps/proxy/backend/services/AuthService.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { getAuth } from "firebase-admin/auth"; -import crypto from "node:crypto"; -import User from "../types/User"; -import { TOKEN_NAME } from "../Settings"; -import { Request } from "express"; - -export default class AuthService { - private static readonly INSTANCE = new AuthService(); - public static get() { - return this.INSTANCE; - } - - private readonly userCache: Map = new Map(); - private readonly tokenByUid: Map = new Map(); - - public async registerUser(firebaseToken: string): Promise<{user: User, token: string}> { - const decodedToken = await getAuth().verifyIdToken(firebaseToken); - const existingToken = this.tokenByUid.get(decodedToken.uid); - if(existingToken) { - return {token: existingToken, user: this.userCache.get(existingToken)!}; - } - - const userData = await getAuth().getUser(decodedToken.uid); - - const email = decodedToken.email || userData.email || userData.providerData?.[0]?.email; - - const token = generateToken(); - - const user = { uid: decodedToken.uid, email }; - - this.userCache.set(token, user); - this.tokenByUid.set(decodedToken.uid, token); - - return {user, token}; - } - - public getUser(token: string) { - return this.userCache.get(token); - } - - public getUserForRequest(event: Request) { - const token = event.cookies[TOKEN_NAME]; - if (!token) { - return; - } - return AuthService.get().getUser(token); - } -} - -function generateToken() { - return btoa(String.fromCharCode(...crypto.getRandomValues(new Uint8Array(32)))); -} \ No newline at end of file diff --git a/apps/proxy/backend/services/FirebaseAdmin.ts b/apps/proxy/backend/services/FirebaseAdmin.ts deleted file mode 100644 index 78db070..0000000 --- a/apps/proxy/backend/services/FirebaseAdmin.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { initializeApp } from 'firebase-admin/app'; -import firebase from "firebase-admin"; - -export const firebaseAdminApp = initializeApp({ - credential: firebase.credential.applicationDefault() -}); - -/* -Ou alors : -export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json" -const app = initializeApp({ - credential: applicationDefault() -}); - */ diff --git a/apps/proxy/backend/types/RouteConfig.ts b/apps/proxy/backend/types/RouteConfig.ts deleted file mode 100644 index 530e27b..0000000 --- a/apps/proxy/backend/types/RouteConfig.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface RouteConfig { - host: string; - path: string; - auth: boolean; - targetPort: number; -} \ No newline at end of file diff --git a/apps/proxy/backend/types/User.ts b/apps/proxy/backend/types/User.ts deleted file mode 100644 index 18afa98..0000000 --- a/apps/proxy/backend/types/User.ts +++ /dev/null @@ -1,4 +0,0 @@ -export default interface User { - uid: string; - email: string; -} \ No newline at end of file diff --git a/apps/proxy/backend/utils/fullUrl.ts b/apps/proxy/backend/utils/fullUrl.ts deleted file mode 100644 index 68c48af..0000000 --- a/apps/proxy/backend/utils/fullUrl.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Request } from "express"; - -export default function(req: Request) { - const protocol = req.headers['x-forwarded-proto'] || req.protocol || 'http'; - const url = protocol + '://' + req.get('host') + req.originalUrl; - - return url; -} \ No newline at end of file diff --git a/apps/proxy/entrypoint.sh b/apps/proxy/entrypoint.sh deleted file mode 100755 index b199604..0000000 --- a/apps/proxy/entrypoint.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -echo "${FIREBASE_SERVICE_ACCOUNT_KEY}" > /app/serviceAccountKey.json - -pnpm start diff --git a/apps/proxy/frontend/static/assets/github.svg b/apps/proxy/frontend/static/assets/github.svg deleted file mode 100644 index c4e93b4..0000000 --- a/apps/proxy/frontend/static/assets/github.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/proxy/frontend/static/index.js b/apps/proxy/frontend/static/index.js deleted file mode 100644 index 3ae73f2..0000000 --- a/apps/proxy/frontend/static/index.js +++ /dev/null @@ -1,68 +0,0 @@ -// Import the functions you need from the SDKs you need -import { initializeApp } from "https://www.gstatic.com/firebasejs/11.6.0/firebase-app.js"; -import { getAuth, GithubAuthProvider, signInWithPopup as firebaseSignInWithPopup } from "https://www.gstatic.com/firebasejs/11.6.0/firebase-auth.js"; -// TODO: Add SDKs for Firebase products that you want to use -// https://firebase.google.com/docs/web/setup#available-libraries - -// Your web app's Firebase configuration -// For Firebase JS SDK v7.20.0 and later, measurementId is optional -const firebaseConfig = { - apiKey: "AIzaSyDllCgG960beHuFKACcO6XVEQzIZWmGYUg", - authDomain: "workspace-82243.firebaseapp.com", - projectId: "workspace-82243", - storageBucket: "workspace-82243.firebasestorage.app", - messagingSenderId: "479856605676", - appId: "1:479856605676:web:1531c3d7ecab17eaa9e8c9", - measurementId: "G-MCWPKL1VQG" -}; - -// Initialize Firebase -const app = initializeApp(firebaseConfig); - -const auth = getAuth(); -const gitHubProvider = new GithubAuthProvider() - .addScope("user:email"); - -async function signInWithPopup(provider) { - const credential = await firebaseSignInWithPopup(auth, provider) - await updateState(await credential.user.getIdToken()); -} - -auth.onAuthStateChanged(async (user) => { - if (user) { - // User is signed in, get the ID token and update the state - const idToken = await user.getIdToken(); - updateState(idToken); - } else { - // User is signed out - onAuthStateChanged({ logged: false }); - } -}); - -async function updateState(idToken) { - try { - const user = await fetch("/api/auth", { - credentials: "include", - method: "POST", - body: JSON.stringify({ token: idToken }), - headers: { - "content-type": "application/json" - } - }).then(rep => rep.json()); - onAuthStateChanged({ logged: true, user }); - } catch (e) { - console.error(e); - onAuthStateChanged({ logged: false }); - } -} - -document.getElementById("github-button").addEventListener("click", () => signInWithPopup(gitHubProvider)); - -function onAuthStateChanged(state) { - if(!state.logged) return; - - // get redirect search params - const params = new URLSearchParams(window.location.search); - const redirect = params.get("redirect"); - window.location.href = redirect || "/"; -} \ No newline at end of file diff --git a/apps/proxy/frontend/static/stylesheets/style.css b/apps/proxy/frontend/static/stylesheets/style.css deleted file mode 100644 index 9453385..0000000 --- a/apps/proxy/frontend/static/stylesheets/style.css +++ /dev/null @@ -1,8 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} - -a { - color: #00B7FF; -} diff --git a/apps/proxy/frontend/views/index.ejs b/apps/proxy/frontend/views/index.ejs deleted file mode 100644 index 9ef77b2..0000000 --- a/apps/proxy/frontend/views/index.ejs +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - Workspace - - - - -

Workspace <%= settings.WORKSPACE_NAME %>

- <% if (user) { %> -

Logged as <%= user.email %>

- Logout - <% } else { %> -

You are not logged in.

- Login - <% } %> - - - \ No newline at end of file diff --git a/apps/proxy/frontend/views/login.ejs b/apps/proxy/frontend/views/login.ejs deleted file mode 100644 index bd3ee96..0000000 --- a/apps/proxy/frontend/views/login.ejs +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - Login - - - - - - -
-
- -
-
- - - \ No newline at end of file diff --git a/apps/proxy/package.json b/apps/proxy/package.json deleted file mode 100644 index 1df3369..0000000 --- a/apps/proxy/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "proxy", - "version": "0.0.0", - "private": true, - "scripts": { - "start": "tsx ./backend/bin/www.ts" - }, - "dependencies": { - "cookie-parser": "~1.4.4", - "debug": "~2.6.9", - "dotenv": "^16.4.7", - "ejs": "^3.1.10", - "express": "~4.16.4", - "firebase-admin": "^13.2.0", - "http-proxy-middleware": "^3.0.3", - "morgan": "~1.9.1", - "tsx": "^4.19.2" - } -} diff --git a/apps/theia/Dockerfile b/apps/theia/Dockerfile deleted file mode 100644 index 5490c50..0000000 --- a/apps/theia/Dockerfile +++ /dev/null @@ -1,83 +0,0 @@ -FROM ghcr.io/eclipse-theia/theia-ide/theia-ide:1.59.1 - -###### Customize Theia IDE image to add additional tools and configurations ############################# - -# Inspired by gitpod base image: https://github.com/gitpod-io/workspace-images/blob/main/base/Dockerfile - -LABEL org.opencontainers.image.source=https://github.com/feavy/workspace -LABEL org.opencontainers.image.description="Workspace Theia Docker Image" -LABEL org.opencontainers.image.licenses=MIT - -USER root - -RUN apt-get -y update && \ - apt-get install -y \ - curl \ - wget \ - zip \ - unzip \ - bash-completion \ - build-essential \ - ninja-build \ - clang \ - htop \ - iputils-ping \ - jq \ - less \ - locales \ - man-db \ - nano \ - ripgrep \ - software-properties-common \ - sudo \ - stow \ - time \ - emacs-nox \ - vim \ - multitail \ - lsof \ - ssl-cert \ - fish \ - zsh \ - rlwrap \ - && npm install -g zx \ - && locale-gen en_US.UTF-8 - -ENV LANG=en_US.UTF-8 - -# Install git LFS -RUN add-apt-repository -y ppa:git-core/ppa && \ - curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \ - apt-get install -y git git-lfs && \ - add-apt-repository -r -y ppa:git-core/ppa && \ - apt-get clean - -# Make theia user sudoer -RUN usermod -aG sudo theia && \ - sed -i.bkp -e "/Defaults\tuse_pty/d" -e "s/%sudo\s\+ALL=(ALL\(:ALL\)\?)\s\+ALL/%sudo ALL=NOPASSWD:ALL/g" /etc/sudoers - -# Create workspace directory -RUN mkdir -p /workspace && \ - chown theia:theia /workspace - -USER theia - -ENV HOME=/home/theia -WORKDIR $HOME - -# custom Bash prompt with git branch -RUN curl -L https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh > .bash_git && \ - echo "source ~/.bash_git;PS1='\[\033[01;32m\]\u\[\033[00m\] \[\033[01;34m\]\w\[\033[00m\]\$(__git_ps1 \" (%s)\") $ '" >> .bashrc && \ - echo "source ~/.bashrc" >> .bash_profile - -COPY --chown=theia:theia default.gitconfig .gitconfig - -###### END CUSTOMIZATION ################################################################################# - -# Launch the backend application via node -ENTRYPOINT [ "node", "/home/theia/applications/browser/lib/backend/main.js" ] - -EXPOSE 28544 - -# Arguments passed to the application -CMD [ "/workspace", "--hostname=0.0.0.0", "--port=28544" ] diff --git a/apps/theia/default.gitconfig b/apps/theia/default.gitconfig deleted file mode 100644 index e853fd6..0000000 --- a/apps/theia/default.gitconfig +++ /dev/null @@ -1,2 +0,0 @@ -[safe] - directory = * diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 9473def..0000000 --- a/package-lock.json +++ /dev/null @@ -1,1758 +0,0 @@ -{ - "name": "workspace", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "workspace", - "version": "1.0.0", - "license": "ISC", - "workspaces": [ - "packages/*" - ], - "dependencies": { - "dotenv": "^16.4.7" - }, - "devDependencies": { - "@types/node": "^22.13.4", - "tsx": "^4.19.2", - "typescript": "^5.7.3" - } - }, - "node_modules/@actions/core": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@actions/exec": "^1.1.1", - "@actions/http-client": "^2.0.1" - } - }, - "node_modules/@actions/exec": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "@actions/io": "^1.0.1" - } - }, - "node_modules/@actions/github": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "@actions/http-client": "^2.2.0", - "@octokit/core": "^5.0.1", - "@octokit/plugin-paginate-rest": "^9.0.0", - "@octokit/plugin-rest-endpoint-methods": "^10.0.0" - } - }, - "node_modules/@actions/http-client": { - "version": "2.2.3", - "license": "MIT", - "dependencies": { - "tunnel": "^0.0.6", - "undici": "^5.25.4" - } - }, - "node_modules/@actions/io": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.23.1", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/@feavy/workspace": { - "resolved": "packages/cli", - "link": true - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@isaacs/fs-minipass/node_modules/minipass": { - "version": "7.1.2", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@jsep-plugin/assignment": { - "version": "1.3.0", - "license": "MIT", - "engines": { - "node": ">= 10.16.0" - }, - "peerDependencies": { - "jsep": "^0.4.0||^1.0.0" - } - }, - "node_modules/@jsep-plugin/regex": { - "version": "1.0.4", - "license": "MIT", - "engines": { - "node": ">= 10.16.0" - }, - "peerDependencies": { - "jsep": "^0.4.0||^1.0.0" - } - }, - "node_modules/@kubernetes/client-node": { - "version": "1.0.0", - "license": "Apache-2.0", - "dependencies": { - "@types/js-yaml": "^4.0.1", - "@types/node": "^22.0.0", - "@types/node-fetch": "^2.6.9", - "@types/stream-buffers": "^3.0.3", - "@types/tar": "^6.1.1", - "@types/ws": "^8.5.4", - "form-data": "^4.0.0", - "isomorphic-ws": "^5.0.0", - "js-yaml": "^4.1.0", - "jsonpath-plus": "^10.2.0", - "node-fetch": "^2.6.9", - "openid-client": "^6.1.3", - "rfc4648": "^1.3.0", - "stream-buffers": "^3.0.2", - "tar": "^7.0.0", - "tmp-promise": "^3.0.2", - "tslib": "^2.5.0", - "ws": "^8.18.0" - } - }, - "node_modules/@octokit/auth-token": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/core": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.1.0", - "@octokit/request": "^8.3.1", - "@octokit/request-error": "^5.1.0", - "@octokit/types": "^13.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/endpoint": { - "version": "9.0.6", - "license": "MIT", - "dependencies": { - "@octokit/types": "^13.1.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/graphql": { - "version": "7.1.0", - "license": "MIT", - "dependencies": { - "@octokit/request": "^8.3.0", - "@octokit/types": "^13.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "23.0.1", - "license": "MIT" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "9.2.2", - "license": "MIT", - "dependencies": { - "@octokit/types": "^12.6.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "5" - } - }, - "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { - "version": "20.0.0", - "license": "MIT" - }, - "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { - "version": "12.6.0", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^20.0.0" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "10.4.1", - "license": "MIT", - "dependencies": { - "@octokit/types": "^12.6.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "5" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { - "version": "20.0.0", - "license": "MIT" - }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { - "version": "12.6.0", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^20.0.0" - } - }, - "node_modules/@octokit/request": { - "version": "8.4.1", - "license": "MIT", - "dependencies": { - "@octokit/endpoint": "^9.0.6", - "@octokit/request-error": "^5.1.1", - "@octokit/types": "^13.1.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/request-error": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "@octokit/types": "^13.1.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/types": { - "version": "13.8.0", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^23.0.1" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@types/js-yaml": { - "version": "4.0.9", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.13.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.4.tgz", - "integrity": "sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.20.0" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.12", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/@types/stream-buffers": { - "version": "3.0.7", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/tar": { - "version": "6.1.13", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "minipass": "^4.0.0" - } - }, - "node_modules/@types/ws": { - "version": "8.5.14", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@vercel/ncc": { - "version": "0.38.3", - "license": "MIT", - "bin": { - "ncc": "dist/ncc/cli.js" - } - }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "license": "Python-2.0" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/before-after-hook": { - "version": "2.2.3", - "license": "Apache-2.0" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/chownr": { - "version": "3.0.0", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "license": "ISC" - }, - "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "license": "MIT" - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.23.1", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.23.1", - "@esbuild/android-arm": "0.23.1", - "@esbuild/android-arm64": "0.23.1", - "@esbuild/android-x64": "0.23.1", - "@esbuild/darwin-arm64": "0.23.1", - "@esbuild/darwin-x64": "0.23.1", - "@esbuild/freebsd-arm64": "0.23.1", - "@esbuild/freebsd-x64": "0.23.1", - "@esbuild/linux-arm": "0.23.1", - "@esbuild/linux-arm64": "0.23.1", - "@esbuild/linux-ia32": "0.23.1", - "@esbuild/linux-loong64": "0.23.1", - "@esbuild/linux-mips64el": "0.23.1", - "@esbuild/linux-ppc64": "0.23.1", - "@esbuild/linux-riscv64": "0.23.1", - "@esbuild/linux-s390x": "0.23.1", - "@esbuild/linux-x64": "0.23.1", - "@esbuild/netbsd-x64": "0.23.1", - "@esbuild/openbsd-arm64": "0.23.1", - "@esbuild/openbsd-x64": "0.23.1", - "@esbuild/sunos-x64": "0.23.1", - "@esbuild/win32-arm64": "0.23.1", - "@esbuild/win32-ia32": "0.23.1", - "@esbuild/win32-x64": "0.23.1" - } - }, - "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", - "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", - "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", - "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", - "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", - "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", - "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", - "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", - "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", - "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", - "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", - "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", - "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", - "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", - "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", - "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", - "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", - "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", - "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/openbsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", - "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", - "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", - "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", - "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", - "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.2", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.7", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "function-bind": "^1.1.2", - "get-proto": "^1.0.0", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-tsconfig": { - "version": "4.10.0", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "10.4.5", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob/node_modules/minipass": { - "version": "7.1.2", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/isomorphic-ws": { - "version": "5.0.0", - "license": "MIT", - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jose": { - "version": "5.10.0", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsep": { - "version": "1.4.0", - "license": "MIT", - "engines": { - "node": ">= 10.16.0" - } - }, - "node_modules/jsonpath-plus": { - "version": "10.3.0", - "license": "MIT", - "dependencies": { - "@jsep-plugin/assignment": "^1.3.0", - "@jsep-plugin/regex": "^1.0.4", - "jsep": "^1.4.0" - }, - "bin": { - "jsonpath": "bin/jsonpath-cli.js", - "jsonpath-plus": "bin/jsonpath-cli.js" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "license": "ISC" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "9.0.5", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minipass": { - "version": "4.2.8", - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "7.1.2", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mkdirp": { - "version": "3.0.1", - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/oauth4webapi": { - "version": "3.2.0", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/openid-client": { - "version": "6.2.0", - "license": "MIT", - "dependencies": { - "jose": "^5.9.6", - "oauth4webapi": "^3.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "license": "BlueOak-1.0.0" - }, - "node_modules/path-key": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/minipass": { - "version": "7.1.2", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/rfc4648": { - "version": "1.5.4", - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "5.0.10", - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/stream-buffers": { - "version": "3.0.3", - "license": "Unlicense", - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tar": { - "version": "7.4.3", - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "7.1.2", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/tmp": { - "version": "0.2.3", - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/tmp-promise": { - "version": "3.0.3", - "license": "MIT", - "dependencies": { - "tmp": "^0.2.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "license": "MIT" - }, - "node_modules/tslib": { - "version": "2.8.1", - "license": "0BSD" - }, - "node_modules/tsx": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.2.tgz", - "integrity": "sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "~0.23.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/tunnel": { - "version": "0.0.6", - "license": "MIT", - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici": { - "version": "5.28.5", - "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/undici-types": { - "version": "6.20.0", - "license": "MIT" - }, - "node_modules/universal-user-agent": { - "version": "6.0.1", - "license": "ISC" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.18.0", - "license": "MIT", - "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 - } - } - }, - "node_modules/yallist": { - "version": "5.0.0", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/yaml": { - "version": "2.7.0", - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/zod": { - "version": "3.24.2", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-validation-error": { - "version": "3.4.0", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "zod": "^3.18.0" - } - }, - "packages/cli": { - "name": "@feavy/workspace", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "@actions/core": "^1.11.1", - "@actions/github": "^6.0.0", - "@kubernetes/client-node": "^1.0.0", - "@vercel/ncc": "^0.38.3", - "yaml": "^2.7.0", - "zod": "^3.24.2", - "zod-validation-error": "^3.4.0" - } - } - } -} diff --git a/package.json b/package.json index d5cd4e8..e83abda 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,31 @@ { - "name": "workspace", + "name": "@feavy/workspace", "version": "1.0.0", + "main": "dist/index.js", "type": "module", - "workspaces": [ - "apps/*" - ], - "author": "Feavy", + "scripts": { + "build": "ncc build src/index.ts -o dist", + "dev": "tsx src/index.ts --mode development", + "test": "tsx src/test.ts --mode development", + "test-k8s": "tsx src/index-k8s.ts" + }, + "keywords": [], + "author": "", "license": "ISC", + "description": "", + "dependencies": { + "@actions/core": "^1.11.1", + "@actions/github": "^6.0.0", + "@kubernetes/client-node": "^1.0.0", + "@vercel/ncc": "^0.38.3", + "dotenv": "^16.4.7", + "yaml": "^2.7.0", + "zod": "^3.24.2", + "zod-validation-error": "^3.4.0" + }, "devDependencies": { "@types/node": "^22.13.4", "tsx": "^4.19.2", "typescript": "^5.7.3" - }, - "dependencies": { - "dotenv": "^16.4.7" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6c6364b..b682441 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3,27 +3,10 @@ lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false - injectWorkspacePackages: true importers: .: - dependencies: - dotenv: - specifier: ^16.4.7 - version: 16.4.7 - devDependencies: - '@types/node': - specifier: ^22.13.4 - version: 22.13.9 - tsx: - specifier: ^4.19.2 - version: 4.19.3 - typescript: - specifier: ^5.7.3 - version: 5.8.2 - - apps/cli: dependencies: '@actions/core': specifier: ^1.11.1 @@ -33,67 +16,32 @@ importers: version: 6.0.0 '@kubernetes/client-node': specifier: ^1.0.0 - version: 1.0.0 + version: 1.1.2 '@vercel/ncc': specifier: ^0.38.3 version: 0.38.3 dotenv: specifier: ^16.4.7 - version: 16.4.7 - lib: - specifier: workspace:* - version: link:../lib + version: 16.5.0 yaml: specifier: ^2.7.0 - version: 2.7.0 + version: 2.7.1 zod: specifier: ^3.24.2 version: 3.24.2 zod-validation-error: specifier: ^3.4.0 version: 3.4.0(zod@3.24.2) - - apps/lib: devDependencies: - npm-run-all: - specifier: ^4.1.5 - version: 4.1.5 - typescript: - specifier: ^5.7.3 - version: 5.8.2 - vite: - specifier: ^6.2.1 - version: 6.2.1(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) - - apps/proxy: - dependencies: - cookie-parser: - specifier: ~1.4.4 - version: 1.4.7 - debug: - specifier: ~2.6.9 - version: 2.6.9 - dotenv: - specifier: ^16.4.7 - version: 16.4.7 - ejs: - specifier: ^3.1.10 - version: 3.1.10 - express: - specifier: ~4.16.4 - version: 4.16.4 - firebase-admin: - specifier: ^13.2.0 - version: 13.2.0 - http-proxy-middleware: - specifier: ^3.0.3 - version: 3.0.3 - morgan: - specifier: ~1.9.1 - version: 1.9.1 + '@types/node': + specifier: ^22.13.4 + version: 22.14.1 tsx: specifier: ^4.19.2 version: 4.19.3 + typescript: + specifier: ^5.7.3 + version: 5.8.3 packages: @@ -112,152 +60,152 @@ packages: '@actions/io@1.1.3': resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==} - '@esbuild/aix-ppc64@0.25.0': - resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} + '@esbuild/aix-ppc64@0.25.2': + resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.0': - resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} + '@esbuild/android-arm64@0.25.2': + resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.0': - resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} + '@esbuild/android-arm@0.25.2': + resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.0': - resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} + '@esbuild/android-x64@0.25.2': + resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.0': - resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} + '@esbuild/darwin-arm64@0.25.2': + resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.0': - resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} + '@esbuild/darwin-x64@0.25.2': + resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.0': - resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} + '@esbuild/freebsd-arm64@0.25.2': + resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.0': - resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} + '@esbuild/freebsd-x64@0.25.2': + resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.0': - resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} + '@esbuild/linux-arm64@0.25.2': + resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.0': - resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} + '@esbuild/linux-arm@0.25.2': + resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.0': - resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} + '@esbuild/linux-ia32@0.25.2': + resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.0': - resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} + '@esbuild/linux-loong64@0.25.2': + resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.0': - resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} + '@esbuild/linux-mips64el@0.25.2': + resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.0': - resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} + '@esbuild/linux-ppc64@0.25.2': + resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.0': - resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} + '@esbuild/linux-riscv64@0.25.2': + resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.0': - resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} + '@esbuild/linux-s390x@0.25.2': + resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.0': - resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} + '@esbuild/linux-x64@0.25.2': + resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.0': - resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} + '@esbuild/netbsd-arm64@0.25.2': + resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.0': - resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} + '@esbuild/netbsd-x64@0.25.2': + resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.0': - resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} + '@esbuild/openbsd-arm64@0.25.2': + resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.0': - resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} + '@esbuild/openbsd-x64@0.25.2': + resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.25.0': - resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} + '@esbuild/sunos-x64@0.25.2': + resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.0': - resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} + '@esbuild/win32-arm64@0.25.2': + resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.0': - resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} + '@esbuild/win32-ia32@0.25.2': + resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.0': - resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} + '@esbuild/win32-x64@0.25.2': + resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -266,102 +214,10 @@ packages: resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} - '@fastify/busboy@3.1.1': - resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==} - - '@firebase/app-check-interop-types@0.3.3': - resolution: {integrity: sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==} - - '@firebase/app-types@0.9.3': - resolution: {integrity: sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==} - - '@firebase/auth-interop-types@0.2.4': - resolution: {integrity: sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==} - - '@firebase/component@0.6.13': - resolution: {integrity: sha512-I/Eg1NpAtZ8AAfq8mpdfXnuUpcLxIDdCDtTzWSh+FXnp/9eCKJ3SNbOCKrUCyhLzNa2SiPJYruei0sxVjaOTeg==} - engines: {node: '>=18.0.0'} - - '@firebase/database-compat@2.0.5': - resolution: {integrity: sha512-CNf1UbvWh6qIaSf4sn6sx2DTDz/em/D7QxULH1LTxxDQHr9+CeYGvlAqrKnk4ZH0P0eIHyQFQU7RwkUJI0B9gQ==} - engines: {node: '>=18.0.0'} - - '@firebase/database-types@1.0.10': - resolution: {integrity: sha512-mH6RC1E9/Pv8jf1/p+M8YFTX+iu+iHDN89hecvyO7wHrI4R1V0TXjxOHvX3nLJN1sfh0CWG6CHZ0VlrSmK/cwg==} - - '@firebase/database@1.0.14': - resolution: {integrity: sha512-9nxYtkHAG02/Nh2Ssms1T4BbWPPjiwohCvkHDUl4hNxnki1kPgsLo5xe9kXNzbacOStmVys+RUXvwzynQSKmUQ==} - engines: {node: '>=18.0.0'} - - '@firebase/logger@0.4.4': - resolution: {integrity: sha512-mH0PEh1zoXGnaR8gD1DeGeNZtWFKbnz9hDO91dIml3iou1gpOnLqXQ2dJfB71dj6dpmUjcQ6phY3ZZJbjErr9g==} - engines: {node: '>=18.0.0'} - - '@firebase/util@1.11.0': - resolution: {integrity: sha512-PzSrhIr++KI6y4P6C/IdgBNMkEx0Ex6554/cYd0Hm+ovyFSJtJXqb/3OSIdnBoa2cpwZT1/GW56EmRc5qEc5fQ==} - engines: {node: '>=18.0.0'} - - '@google-cloud/firestore@7.11.0': - resolution: {integrity: sha512-88uZ+jLsp1aVMj7gh3EKYH1aulTAMFAp8sH/v5a9w8q8iqSG27RiWLoxSAFr/XocZ9hGiWH1kEnBw+zl3xAgNA==} - engines: {node: '>=14.0.0'} - - '@google-cloud/paginator@5.0.2': - resolution: {integrity: sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==} - engines: {node: '>=14.0.0'} - - '@google-cloud/projectify@4.0.0': - resolution: {integrity: sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==} - engines: {node: '>=14.0.0'} - - '@google-cloud/promisify@4.0.0': - resolution: {integrity: sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==} - engines: {node: '>=14'} - - '@google-cloud/storage@7.16.0': - resolution: {integrity: sha512-7/5LRgykyOfQENcm6hDKP8SX/u9XxE5YOiWOkgkwcoO+cG8xT/cyOvp9wwN3IxfdYgpHs8CE7Nq2PKX2lNaEXw==} - engines: {node: '>=14'} - - '@grpc/grpc-js@1.13.2': - resolution: {integrity: sha512-nnR5nmL6lxF8YBqb6gWvEgLdLh/Fn+kvAdX5hUOnt48sNSb0riz/93ASd2E5gvanPA41X6Yp25bIfGRp1SMb2g==} - engines: {node: '>=12.10.0'} - - '@grpc/proto-loader@0.7.13': - resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} - engines: {node: '>=6'} - hasBin: true - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - '@isaacs/fs-minipass@4.0.1': resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@js-sdsl/ordered-map@4.4.2': - resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} - '@jsep-plugin/assignment@1.3.0': resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==} engines: {node: '>= 10.16.0'} @@ -374,15 +230,15 @@ packages: peerDependencies: jsep: ^0.4.0||^1.0.0 - '@kubernetes/client-node@1.0.0': - resolution: {integrity: sha512-a8NSvFDSHKFZ0sR1hbPSf8IDFNJwctEU5RodSCNiq/moRXWmrdmqhb1RRQzF+l+TSBaDgHw3YsYNxxE92STBzw==} + '@kubernetes/client-node@1.1.2': + resolution: {integrity: sha512-kkE0D8zB5rIQoR6SUwlHUyQtpLvrW0gXOd2MabQsql7I2oPnMA8pb50A1MWB4yH0eX29t45gxs7lOVlS0UPsiw==} '@octokit/auth-token@4.0.0': resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} engines: {node: '>= 18'} - '@octokit/core@5.2.0': - resolution: {integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==} + '@octokit/core@5.2.1': + resolution: {integrity: sha512-dKYCMuPO1bmrpuogcjQ8z7ICCH3FP6WmxpwC03yjzGfZhj9fTJg6+bS1+UAplekbN2C+M61UNllGOOoAfGCrdQ==} engines: {node: '>= 18'} '@octokit/endpoint@9.0.6': @@ -396,8 +252,8 @@ packages: '@octokit/openapi-types@20.0.0': resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==} - '@octokit/openapi-types@23.0.1': - resolution: {integrity: sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==} + '@octokit/openapi-types@24.2.0': + resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==} '@octokit/plugin-paginate-rest@9.2.2': resolution: {integrity: sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ==} @@ -422,205 +278,17 @@ packages: '@octokit/types@12.6.0': resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==} - '@octokit/types@13.8.0': - resolution: {integrity: sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==} - - '@opentelemetry/api@1.9.0': - resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} - engines: {node: '>=8.0.0'} - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@protobufjs/aspromise@1.1.2': - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - - '@protobufjs/base64@1.1.2': - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - - '@protobufjs/codegen@2.0.4': - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - - '@protobufjs/eventemitter@1.1.0': - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - - '@protobufjs/fetch@1.1.0': - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} - - '@protobufjs/float@1.0.2': - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - - '@protobufjs/inquire@1.1.0': - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - - '@protobufjs/path@1.1.2': - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - - '@protobufjs/pool@1.1.0': - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - - '@protobufjs/utf8@1.1.0': - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - - '@rollup/rollup-android-arm-eabi@4.34.9': - resolution: {integrity: sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.34.9': - resolution: {integrity: sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.34.9': - resolution: {integrity: sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.34.9': - resolution: {integrity: sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.34.9': - resolution: {integrity: sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.34.9': - resolution: {integrity: sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.34.9': - resolution: {integrity: sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.34.9': - resolution: {integrity: sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.34.9': - resolution: {integrity: sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.34.9': - resolution: {integrity: sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loongarch64-gnu@4.34.9': - resolution: {integrity: sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': - resolution: {integrity: sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.34.9': - resolution: {integrity: sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.34.9': - resolution: {integrity: sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.34.9': - resolution: {integrity: sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.34.9': - resolution: {integrity: sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.34.9': - resolution: {integrity: sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.34.9': - resolution: {integrity: sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.34.9': - resolution: {integrity: sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==} - cpu: [x64] - os: [win32] - - '@tootallnate/once@2.0.0': - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - - '@types/body-parser@1.19.5': - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - - '@types/caseless@0.12.5': - resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==} - - '@types/connect@3.4.38': - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - - '@types/express-serve-static-core@4.19.6': - resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} - - '@types/express@4.17.21': - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - - '@types/http-errors@2.0.4': - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - - '@types/http-proxy@1.17.16': - resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} + '@octokit/types@13.10.0': + resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==} '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} - '@types/jsonwebtoken@9.0.9': - resolution: {integrity: sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==} - - '@types/long@4.0.2': - resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} - - '@types/mime@1.3.5': - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node-fetch@2.6.12': resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} - '@types/node@22.13.9': - resolution: {integrity: sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==} - - '@types/qs@6.9.18': - resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} - - '@types/range-parser@1.2.7': - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - - '@types/request@2.48.12': - resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==} - - '@types/send@0.17.4': - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - - '@types/serve-static@1.15.7': - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + '@types/node@22.14.1': + resolution: {integrity: sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==} '@types/stream-buffers@3.0.7': resolution: {integrity: sha512-azOCy05sXVXrO+qklf0c/B07H/oHaIuDDAiHPVwlk3A9Ek+ksHyTeMajLZl3r76FxpPpxem//4Te61G1iW3Giw==} @@ -628,234 +296,38 @@ packages: '@types/tar@6.1.13': resolution: {integrity: sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==} - '@types/tough-cookie@4.0.5': - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - - '@types/ws@8.18.0': - resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==} + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} '@vercel/ncc@0.38.3': resolution: {integrity: sha512-rnK6hJBS6mwc+Bkab+PGPs9OiS0i/3kdTO+CkI8V0/VrW3vmz7O2Pxjw/owOlmo6PKEIxRSeZKv/kuL9itnpYA==} hasBin: true - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} - engines: {node: '>=0.4.0'} - hasBin: true - - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - agent-base@7.1.3: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} - - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - - 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'} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - - arrify@2.0.1: - resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} - engines: {node: '>=8'} - - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - - async-retry@1.3.3: - resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} - - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - basic-auth@2.0.1: - resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} - engines: {node: '>= 0.8'} - before-after-hook@2.2.3: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - bignumber.js@9.2.1: - resolution: {integrity: sha512-+NzaKgOUvInq9TIUZ1+DRspzf/HApkCwD4btfuasFTdrfnOxqx853TgDpMolp+uv4RpRp7bPcEU2zKr9+fRmyw==} - - body-parser@1.18.3: - resolution: {integrity: sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==} - engines: {node: '>= 0.8'} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - 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'} - - buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - chownr@3.0.0: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} - cliui@8.0.1: - 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==} - combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - content-disposition@0.5.2: - resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} - engines: {node: '>= 0.6'} - - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - - cookie-parser@1.4.7: - resolution: {integrity: sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==} - engines: {node: '>= 0.8.0'} - - cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - - cookie@0.3.1: - resolution: {integrity: sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==} - engines: {node: '>= 0.6'} - - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - - cross-spawn@6.0.6: - resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} - engines: {node: '>=4.8'} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} @@ -865,77 +337,21 @@ packages: supports-color: optional: true - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - deprecation@2.3.1: resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} - destroy@1.0.4: - resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==} - - detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} - engines: {node: '>=8'} - - dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + dotenv@16.5.0: + resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} engines: {node: '>=12'} dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - duplexify@4.1.3: - resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - - es-abstract@1.23.9: - resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} - engines: {node: '>= 0.4'} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -952,107 +368,15 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - - esbuild@0.25.0: - resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} + esbuild@0.25.2: + resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==} engines: {node: '>=18'} hasBin: true - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - - express@4.16.4: - resolution: {integrity: sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==} - engines: {node: '>= 0.10.0'} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - farmhash-modern@1.1.0: - resolution: {integrity: sha512-6ypT4XfgqJk/F3Yuv4SX26I3doUjt0GTG4a+JgWxXQpxXzTBq8fPUeGHfcYMMDPHJHm3yPOSjaeBwBGAHWXCdA==} - engines: {node: '>=18.0.0'} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-xml-parser@4.5.3: - resolution: {integrity: sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==} - hasBin: true - - faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} - - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - finalhandler@1.1.1: - resolution: {integrity: sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==} - engines: {node: '>= 0.8'} - - firebase-admin@13.2.0: - resolution: {integrity: sha512-qQBTKo0QWCDaWwISry989pr8YfZSSk00rNCKaucjOgltEm3cCYzEe4rODqBd1uUwma+Iu5jtAzg89Nfsjr3fGg==} - engines: {node: '>=18'} - - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - - form-data@2.5.3: - resolution: {integrity: sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ==} - engines: {node: '>= 0.12'} - form-data@4.0.2: resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} engines: {node: '>= 6'} - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1061,28 +385,6 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} - - functional-red-black-tree@1.0.1: - resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - gaxios@6.7.1: - resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} - engines: {node: '>=14'} - - gcp-metadata@6.1.1: - resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==} - engines: {node: '>=14'} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -1091,63 +393,13 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - get-tsconfig@4.10.0: resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - google-auth-library@9.15.1: - resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} - engines: {node: '>=14'} - - google-gax@4.4.1: - resolution: {integrity: sha512-Phyp9fMfA00J3sZbJxbbB4jC55b7DBjE3F6poyL3wKMEBVKA79q6BGuHcTiM28yOzVql0NDbRL8MLLh8Iwk9Dg==} - engines: {node: '>=14'} - - google-logging-utils@0.0.2: - resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==} - engines: {node: '>=14'} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - gtoken@7.1.0: - resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} - engines: {node: '>=14.0.0'} - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -1160,367 +412,42 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - - html-entities@2.6.0: - resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} - - http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} - - http-parser-js@0.5.10: - resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==} - - http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} - - http-proxy-middleware@3.0.3: - resolution: {integrity: sha512-usY0HG5nyDUwtqpiZdETNbmKtw3QQ1jwYFZ9wi5iHzX2BcILwQKtYDJPo7XHTsu5Z0B2Hj3W9NNnbd+AjFWjqg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - http-proxy@1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} - - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - iconv-lite@0.4.23: - resolution: {integrity: sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==} - engines: {node: '>=0.10.0'} - - inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} - engines: {node: '>= 0.4'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + hpagent@1.2.0: + resolution: {integrity: sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==} + engines: {node: '>=14'} - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} isomorphic-ws@5.0.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: ws: '*' - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jake@10.9.2: - resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} - engines: {node: '>=10'} - hasBin: true - - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} - hasBin: true - - jose@4.15.9: - resolution: {integrity: sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==} - - jose@6.0.8: - resolution: {integrity: sha512-EyUPtOKyTYq+iMOszO42eobQllaIjJnwkZ2U93aJzNyPibCy7CEvT9UQnaCVB51IAd49gbNdCew1c0LcLTCB2g==} + jose@6.0.10: + resolution: {integrity: sha512-skIAxZqcMkOrSwjJvplIPYrlXGpxTPnro2/QWTDCxAdWQrSTV5/KqspMWmi5WAx5+ULswASJiZ0a+1B/Lxt9cw==} js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + jsep@1.4.0: resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==} engines: {node: '>= 10.16.0'} - json-bigint@1.0.0: - resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} - - json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - jsonpath-plus@10.3.0: resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==} engines: {node: '>=18.0.0'} hasBin: true - jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} - engines: {node: '>=12', npm: '>=6'} - - jwa@1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} - - jwa@2.0.0: - resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} - - jwks-rsa@3.2.0: - resolution: {integrity: sha512-PwchfHcQK/5PSydeKCs1ylNym0w/SSv8a62DgHJ//7x2ZclCoinlsjAfDxAAbpoTPybOum/Jgy+vkvMmKz89Ww==} - engines: {node: '>=14'} - - jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} - - jws@4.0.0: - resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} - - lightningcss-darwin-arm64@1.29.2: - resolution: {integrity: sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - - lightningcss-darwin-x64@1.29.2: - resolution: {integrity: sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - - lightningcss-freebsd-x64@1.29.2: - resolution: {integrity: sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - - lightningcss-linux-arm-gnueabihf@1.29.2: - resolution: {integrity: sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - - lightningcss-linux-arm64-gnu@1.29.2: - resolution: {integrity: sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-arm64-musl@1.29.2: - resolution: {integrity: sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-x64-gnu@1.29.2: - resolution: {integrity: sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-linux-x64-musl@1.29.2: - resolution: {integrity: sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-win32-arm64-msvc@1.29.2: - resolution: {integrity: sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] - - lightningcss-win32-x64-msvc@1.29.2: - resolution: {integrity: sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - - lightningcss@1.29.2: - resolution: {integrity: sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==} - engines: {node: '>= 12.0.0'} - - limiter@1.1.5: - resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} - - load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} - engines: {node: '>=4'} - - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - - lodash.clonedeep@4.5.0: - resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} - - lodash.includes@4.3.0: - resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} - - lodash.isboolean@3.0.3: - resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} - - lodash.isinteger@4.0.4: - resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} - - lodash.isnumber@3.0.3: - resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} - - lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - - lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - - lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - - long@5.3.1: - resolution: {integrity: sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - - lru-memoizer@2.3.0: - resolution: {integrity: sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug==} - math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - - memorystream@0.3.1: - resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} - engines: {node: '>= 0.10.0'} - - merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - - methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -1529,26 +456,6 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mime@1.4.1: - resolution: {integrity: sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==} - hasBin: true - - mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - minipass@4.2.8: resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} engines: {node: '>=8'} @@ -1557,8 +464,8 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - minizlib@3.0.1: - resolution: {integrity: sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==} + minizlib@3.0.2: + resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} engines: {node: '>= 18'} mkdirp@3.0.1: @@ -1566,28 +473,9 @@ packages: engines: {node: '>=10'} hasBin: true - morgan@1.9.1: - resolution: {integrity: sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==} - engines: {node: '>= 0.8.0'} - - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - - nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -1597,407 +485,53 @@ packages: encoding: optional: true - node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} + oauth4webapi@3.4.1: + resolution: {integrity: sha512-sPv0Phrf0HjFNRr23b1yC7Q9VAeri3fdrx4sr4KKN6PmLLY/zJD3B4UHLs/p7oYlFBbxJVl/VI6bSvjmKBoexg==} - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - - npm-run-all@4.1.5: - resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} - engines: {node: '>= 4'} - hasBin: true + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - oauth4webapi@3.3.0: - resolution: {integrity: sha512-ZlozhPlFfobzh3hB72gnBFLjXpugl/dljz1fJSRdqaV2r3D5dmi5lg2QWI0LmUYuazmE+b5exsloEv6toUtw9g==} + openid-client@6.4.2: + resolution: {integrity: sha512-4zBRTsKNRTyKxV5cFzl+LtamsYx/FsWhejjax+qgMkFNGtLj1gMtng2iSoJqqWUT0FHU3IUhO53aeBePg7Sp/g==} - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} + rfc4648@1.5.4: + resolution: {integrity: sha512-rRg/6Lb+IGfJqO05HZkN50UtY7K/JhxJag1kP23+zyMfrvoB0B7RWv06MbOzoc79RgCdNTiUaNsTT1AJZ7Z+cg==} - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} - on-finished@2.3.0: - resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} - engines: {node: '>= 0.8'} + socks@2.8.4: + resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + stream-buffers@3.0.3: + resolution: {integrity: sha512-pqMqwQCso0PBJt2PQmDO0cFj0lyqmiwOMiMSkVtRokl7e+ZTRYgDHKnuZNbqjiJXgsg4nuqtD/zxuo9KqTp0Yw==} + engines: {node: '>= 0.10.0'} - openid-client@6.3.3: - resolution: {integrity: sha512-lTK8AV8SjqCM4qznLX0asVESAwzV39XTVdfMAM185ekuaZCnkWdPzcxMTXNlsm9tsUAMa1Q30MBmKAykdT1LWw==} + tar@7.4.3: + resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + engines: {node: '>=18'} - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} + tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - - path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - - path-type@3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} - engines: {node: '>=4'} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pidtree@0.3.1: - resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} - engines: {node: '>=0.10'} - hasBin: true - - pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} - - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} - engines: {node: ^10 || ^12 || >=14} - - proto3-json-serializer@2.0.2: - resolution: {integrity: sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==} - engines: {node: '>=14.0.0'} - - protobufjs@7.4.0: - resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} - engines: {node: '>=12.0.0'} - - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - - qs@6.5.2: - resolution: {integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==} - engines: {node: '>=0.6'} - - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - - raw-body@2.3.3: - resolution: {integrity: sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==} - engines: {node: '>= 0.8'} - - read-pkg@3.0.0: - resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} - engines: {node: '>=4'} - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - - retry-request@7.0.2: - resolution: {integrity: sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==} - engines: {node: '>=14'} - - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - - rfc4648@1.5.4: - resolution: {integrity: sha512-rRg/6Lb+IGfJqO05HZkN50UtY7K/JhxJag1kP23+zyMfrvoB0B7RWv06MbOzoc79RgCdNTiUaNsTT1AJZ7Z+cg==} - - rimraf@5.0.10: - resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} - hasBin: true - - rollup@4.34.9: - resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} - - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} - engines: {node: '>=10'} - hasBin: true - - send@0.16.2: - resolution: {integrity: sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==} - engines: {node: '>= 0.8.0'} - - serve-static@1.13.2: - resolution: {integrity: sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==} - engines: {node: '>= 0.8.0'} - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - - setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - - shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - shell-quote@1.8.2: - resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} - engines: {node: '>= 0.4'} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - - spdx-license-ids@3.0.21: - resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} - - statuses@1.4.0: - resolution: {integrity: sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==} - engines: {node: '>= 0.6'} - - stream-buffers@3.0.3: - resolution: {integrity: sha512-pqMqwQCso0PBJt2PQmDO0cFj0lyqmiwOMiMSkVtRokl7e+ZTRYgDHKnuZNbqjiJXgsg4nuqtD/zxuo9KqTp0Yw==} - engines: {node: '>= 0.10.0'} - - stream-events@1.0.5: - resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} - - stream-shift@1.0.3: - resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} - - 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.prototype.padend@3.1.6: - resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} - engines: {node: '>= 0.4'} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - strnum@1.1.2: - resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} - - stubs@3.0.0: - resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} - - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - tar@7.4.3: - resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} - engines: {node: '>=18'} - - teeny-request@9.0.0: - resolution: {integrity: sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==} - engines: {node: '>=14'} - - terser@5.39.0: - resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} - engines: {node: '>=10'} - hasBin: true - - tmp-promise@3.0.3: - resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} - - tmp@0.2.3: - resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} - engines: {node: '>=14.14'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} tsx@4.19.3: resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} @@ -2008,162 +542,27 @@ packages: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} - - typescript@5.8.2: - resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} hasBin: true - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - - undici-types@6.20.0: - resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici@5.28.5: - resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} + undici@5.29.0: + resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} engines: {node: '>=14.0'} universal-user-agent@6.0.1: resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - - uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} - hasBin: true - - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - vite@6.2.1: - resolution: {integrity: sha512-n2GnqDb6XPhlt9B8olZPrgMD/es/Nd1RdChF6CBD/fHW6pUyUTt2sQW2fPRX5GiD9XEa6+8A6A4f2vT6pSsE7Q==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} - - websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.18: - resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} - engines: {node: '>= 0.4'} - - which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - wrap-ansi@7.0.0: - 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==} @@ -2179,34 +578,15 @@ packages: utf-8-validate: optional: true - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yallist@5.0.0: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} - yaml@2.7.0: - resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + yaml@2.7.1: + resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} engines: {node: '>= 14'} hasBin: true - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - zod-validation-error@3.4.0: resolution: {integrity: sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==} engines: {node: '>=18.0.0'} @@ -2230,2375 +610,476 @@ snapshots: '@actions/github@6.0.0': dependencies: '@actions/http-client': 2.2.3 - '@octokit/core': 5.2.0 - '@octokit/plugin-paginate-rest': 9.2.2(@octokit/core@5.2.0) - '@octokit/plugin-rest-endpoint-methods': 10.4.1(@octokit/core@5.2.0) + '@octokit/core': 5.2.1 + '@octokit/plugin-paginate-rest': 9.2.2(@octokit/core@5.2.1) + '@octokit/plugin-rest-endpoint-methods': 10.4.1(@octokit/core@5.2.1) '@actions/http-client@2.2.3': dependencies: tunnel: 0.0.6 - undici: 5.28.5 + undici: 5.29.0 '@actions/io@1.1.3': {} - '@esbuild/aix-ppc64@0.25.0': + '@esbuild/aix-ppc64@0.25.2': optional: true - '@esbuild/android-arm64@0.25.0': + '@esbuild/android-arm64@0.25.2': optional: true - '@esbuild/android-arm@0.25.0': + '@esbuild/android-arm@0.25.2': optional: true - '@esbuild/android-x64@0.25.0': + '@esbuild/android-x64@0.25.2': optional: true - '@esbuild/darwin-arm64@0.25.0': + '@esbuild/darwin-arm64@0.25.2': optional: true - '@esbuild/darwin-x64@0.25.0': + '@esbuild/darwin-x64@0.25.2': optional: true - '@esbuild/freebsd-arm64@0.25.0': + '@esbuild/freebsd-arm64@0.25.2': optional: true - '@esbuild/freebsd-x64@0.25.0': + '@esbuild/freebsd-x64@0.25.2': optional: true - '@esbuild/linux-arm64@0.25.0': + '@esbuild/linux-arm64@0.25.2': optional: true - '@esbuild/linux-arm@0.25.0': + '@esbuild/linux-arm@0.25.2': optional: true - '@esbuild/linux-ia32@0.25.0': + '@esbuild/linux-ia32@0.25.2': optional: true - '@esbuild/linux-loong64@0.25.0': + '@esbuild/linux-loong64@0.25.2': optional: true - '@esbuild/linux-mips64el@0.25.0': + '@esbuild/linux-mips64el@0.25.2': optional: true - '@esbuild/linux-ppc64@0.25.0': + '@esbuild/linux-ppc64@0.25.2': optional: true - '@esbuild/linux-riscv64@0.25.0': + '@esbuild/linux-riscv64@0.25.2': optional: true - '@esbuild/linux-s390x@0.25.0': + '@esbuild/linux-s390x@0.25.2': optional: true - '@esbuild/linux-x64@0.25.0': + '@esbuild/linux-x64@0.25.2': optional: true - '@esbuild/netbsd-arm64@0.25.0': + '@esbuild/netbsd-arm64@0.25.2': optional: true - '@esbuild/netbsd-x64@0.25.0': + '@esbuild/netbsd-x64@0.25.2': optional: true - '@esbuild/openbsd-arm64@0.25.0': + '@esbuild/openbsd-arm64@0.25.2': optional: true - '@esbuild/openbsd-x64@0.25.0': + '@esbuild/openbsd-x64@0.25.2': optional: true - '@esbuild/sunos-x64@0.25.0': + '@esbuild/sunos-x64@0.25.2': optional: true - '@esbuild/win32-arm64@0.25.0': + '@esbuild/win32-arm64@0.25.2': optional: true - '@esbuild/win32-ia32@0.25.0': + '@esbuild/win32-ia32@0.25.2': optional: true - '@esbuild/win32-x64@0.25.0': + '@esbuild/win32-x64@0.25.2': optional: true '@fastify/busboy@2.1.1': {} - '@fastify/busboy@3.1.1': {} - - '@firebase/app-check-interop-types@0.3.3': {} - - '@firebase/app-types@0.9.3': {} - - '@firebase/auth-interop-types@0.2.4': {} - - '@firebase/component@0.6.13': - dependencies: - '@firebase/util': 1.11.0 - tslib: 2.8.1 - - '@firebase/database-compat@2.0.5': - dependencies: - '@firebase/component': 0.6.13 - '@firebase/database': 1.0.14 - '@firebase/database-types': 1.0.10 - '@firebase/logger': 0.4.4 - '@firebase/util': 1.11.0 - tslib: 2.8.1 - - '@firebase/database-types@1.0.10': + '@isaacs/fs-minipass@4.0.1': dependencies: - '@firebase/app-types': 0.9.3 - '@firebase/util': 1.11.0 + minipass: 7.1.2 - '@firebase/database@1.0.14': - dependencies: - '@firebase/app-check-interop-types': 0.3.3 - '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.6.13 - '@firebase/logger': 0.4.4 - '@firebase/util': 1.11.0 - faye-websocket: 0.11.4 - tslib: 2.8.1 - - '@firebase/logger@0.4.4': + '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)': dependencies: - tslib: 2.8.1 + jsep: 1.4.0 - '@firebase/util@1.11.0': + '@jsep-plugin/regex@1.0.4(jsep@1.4.0)': dependencies: - tslib: 2.8.1 + jsep: 1.4.0 - '@google-cloud/firestore@7.11.0': + '@kubernetes/client-node@1.1.2': dependencies: - '@opentelemetry/api': 1.9.0 - fast-deep-equal: 3.1.3 - functional-red-black-tree: 1.0.1 - google-gax: 4.4.1 - protobufjs: 7.4.0 + '@types/js-yaml': 4.0.9 + '@types/node': 22.14.1 + '@types/node-fetch': 2.6.12 + '@types/stream-buffers': 3.0.7 + '@types/tar': 6.1.13 + '@types/ws': 8.18.1 + form-data: 4.0.2 + hpagent: 1.2.0 + isomorphic-ws: 5.0.0(ws@8.18.1) + js-yaml: 4.1.0 + jsonpath-plus: 10.3.0 + node-fetch: 2.7.0 + openid-client: 6.4.2 + rfc4648: 1.5.4 + socks-proxy-agent: 8.0.5 + stream-buffers: 3.0.3 + tar: 7.4.3 + tmp-promise: 3.0.3 + ws: 8.18.1 transitivePeerDependencies: + - bufferutil - encoding - supports-color - optional: true + - utf-8-validate - '@google-cloud/paginator@5.0.2': - dependencies: - arrify: 2.0.1 - extend: 3.0.2 - optional: true + '@octokit/auth-token@4.0.0': {} - '@google-cloud/projectify@4.0.0': - optional: true - - '@google-cloud/promisify@4.0.0': - optional: true - - '@google-cloud/storage@7.16.0': - dependencies: - '@google-cloud/paginator': 5.0.2 - '@google-cloud/projectify': 4.0.0 - '@google-cloud/promisify': 4.0.0 - abort-controller: 3.0.0 - async-retry: 1.3.3 - duplexify: 4.1.3 - fast-xml-parser: 4.5.3 - gaxios: 6.7.1 - google-auth-library: 9.15.1 - html-entities: 2.6.0 - mime: 3.0.0 - p-limit: 3.1.0 - retry-request: 7.0.2 - teeny-request: 9.0.0 - uuid: 8.3.2 - transitivePeerDependencies: - - encoding - - supports-color - optional: true - - '@grpc/grpc-js@1.13.2': - dependencies: - '@grpc/proto-loader': 0.7.13 - '@js-sdsl/ordered-map': 4.4.2 - optional: true - - '@grpc/proto-loader@0.7.13': - dependencies: - lodash.camelcase: 4.3.0 - long: 5.3.1 - protobufjs: 7.4.0 - yargs: 17.7.2 - 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 - - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.2 - - '@jridgewell/gen-mapping@0.3.8': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - optional: true - - '@jridgewell/resolve-uri@3.1.2': - optional: true - - '@jridgewell/set-array@1.2.1': - optional: true - - '@jridgewell/source-map@0.3.6': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - optional: true - - '@jridgewell/sourcemap-codec@1.5.0': - optional: true - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - optional: true - - '@js-sdsl/ordered-map@4.4.2': - optional: true - - '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)': - dependencies: - jsep: 1.4.0 - - '@jsep-plugin/regex@1.0.4(jsep@1.4.0)': - dependencies: - jsep: 1.4.0 - - '@kubernetes/client-node@1.0.0': - dependencies: - '@types/js-yaml': 4.0.9 - '@types/node': 22.13.9 - '@types/node-fetch': 2.6.12 - '@types/stream-buffers': 3.0.7 - '@types/tar': 6.1.13 - '@types/ws': 8.18.0 - form-data: 4.0.2 - isomorphic-ws: 5.0.0(ws@8.18.1) - js-yaml: 4.1.0 - jsonpath-plus: 10.3.0 - node-fetch: 2.7.0 - openid-client: 6.3.3 - rfc4648: 1.5.4 - stream-buffers: 3.0.3 - tar: 7.4.3 - tmp-promise: 3.0.3 - tslib: 2.8.1 - ws: 8.18.1 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - - '@octokit/auth-token@4.0.0': {} - - '@octokit/core@5.2.0': + '@octokit/core@5.2.1': dependencies: '@octokit/auth-token': 4.0.0 '@octokit/graphql': 7.1.1 '@octokit/request': 8.4.1 '@octokit/request-error': 5.1.1 - '@octokit/types': 13.8.0 + '@octokit/types': 13.10.0 before-after-hook: 2.2.3 universal-user-agent: 6.0.1 '@octokit/endpoint@9.0.6': dependencies: - '@octokit/types': 13.8.0 + '@octokit/types': 13.10.0 universal-user-agent: 6.0.1 '@octokit/graphql@7.1.1': dependencies: - '@octokit/request': 8.4.1 - '@octokit/types': 13.8.0 - universal-user-agent: 6.0.1 - - '@octokit/openapi-types@20.0.0': {} - - '@octokit/openapi-types@23.0.1': {} - - '@octokit/plugin-paginate-rest@9.2.2(@octokit/core@5.2.0)': - dependencies: - '@octokit/core': 5.2.0 - '@octokit/types': 12.6.0 - - '@octokit/plugin-rest-endpoint-methods@10.4.1(@octokit/core@5.2.0)': - dependencies: - '@octokit/core': 5.2.0 - '@octokit/types': 12.6.0 - - '@octokit/request-error@5.1.1': - dependencies: - '@octokit/types': 13.8.0 - deprecation: 2.3.1 - once: 1.4.0 - - '@octokit/request@8.4.1': - dependencies: - '@octokit/endpoint': 9.0.6 - '@octokit/request-error': 5.1.1 - '@octokit/types': 13.8.0 - universal-user-agent: 6.0.1 - - '@octokit/types@12.6.0': - dependencies: - '@octokit/openapi-types': 20.0.0 - - '@octokit/types@13.8.0': - dependencies: - '@octokit/openapi-types': 23.0.1 - - '@opentelemetry/api@1.9.0': - optional: true - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@protobufjs/aspromise@1.1.2': - optional: true - - '@protobufjs/base64@1.1.2': - optional: true - - '@protobufjs/codegen@2.0.4': - optional: true - - '@protobufjs/eventemitter@1.1.0': - optional: true - - '@protobufjs/fetch@1.1.0': - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 - optional: true - - '@protobufjs/float@1.0.2': - optional: true - - '@protobufjs/inquire@1.1.0': - optional: true - - '@protobufjs/path@1.1.2': - optional: true - - '@protobufjs/pool@1.1.0': - optional: true - - '@protobufjs/utf8@1.1.0': - optional: true - - '@rollup/rollup-android-arm-eabi@4.34.9': - optional: true - - '@rollup/rollup-android-arm64@4.34.9': - optional: true - - '@rollup/rollup-darwin-arm64@4.34.9': - optional: true - - '@rollup/rollup-darwin-x64@4.34.9': - optional: true - - '@rollup/rollup-freebsd-arm64@4.34.9': - optional: true - - '@rollup/rollup-freebsd-x64@4.34.9': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.34.9': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.34.9': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.34.9': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.34.9': - optional: true - - '@rollup/rollup-linux-loongarch64-gnu@4.34.9': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.34.9': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.34.9': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.34.9': - optional: true - - '@rollup/rollup-linux-x64-musl@4.34.9': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.34.9': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.34.9': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.34.9': - optional: true - - '@tootallnate/once@2.0.0': - optional: true - - '@types/body-parser@1.19.5': - dependencies: - '@types/connect': 3.4.38 - '@types/node': 22.13.9 - - '@types/caseless@0.12.5': - optional: true - - '@types/connect@3.4.38': - dependencies: - '@types/node': 22.13.9 - - '@types/estree@1.0.6': {} - - '@types/express-serve-static-core@4.19.6': - dependencies: - '@types/node': 22.13.9 - '@types/qs': 6.9.18 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - - '@types/express@4.17.21': - dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.6 - '@types/qs': 6.9.18 - '@types/serve-static': 1.15.7 - - '@types/http-errors@2.0.4': {} - - '@types/http-proxy@1.17.16': - dependencies: - '@types/node': 22.13.9 - - '@types/js-yaml@4.0.9': {} - - '@types/jsonwebtoken@9.0.9': - dependencies: - '@types/ms': 2.1.0 - '@types/node': 22.13.9 - - '@types/long@4.0.2': - optional: true - - '@types/mime@1.3.5': {} - - '@types/ms@2.1.0': {} - - '@types/node-fetch@2.6.12': - dependencies: - '@types/node': 22.13.9 - form-data: 4.0.2 - - '@types/node@22.13.9': - dependencies: - undici-types: 6.20.0 - - '@types/qs@6.9.18': {} - - '@types/range-parser@1.2.7': {} - - '@types/request@2.48.12': - dependencies: - '@types/caseless': 0.12.5 - '@types/node': 22.13.9 - '@types/tough-cookie': 4.0.5 - form-data: 2.5.3 - optional: true - - '@types/send@0.17.4': - dependencies: - '@types/mime': 1.3.5 - '@types/node': 22.13.9 - - '@types/serve-static@1.15.7': - dependencies: - '@types/http-errors': 2.0.4 - '@types/node': 22.13.9 - '@types/send': 0.17.4 - - '@types/stream-buffers@3.0.7': - dependencies: - '@types/node': 22.13.9 - - '@types/tar@6.1.13': - dependencies: - '@types/node': 22.13.9 - minipass: 4.2.8 - - '@types/tough-cookie@4.0.5': - optional: true - - '@types/ws@8.18.0': - dependencies: - '@types/node': 22.13.9 - - '@vercel/ncc@0.38.3': {} - - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - optional: true - - accepts@1.3.8: - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - - acorn@8.14.1: - optional: true - - agent-base@6.0.2: - dependencies: - debug: 4.4.0 - transitivePeerDependencies: - - supports-color - optional: true - - agent-base@7.1.3: {} - - ansi-regex@5.0.1: {} - - ansi-regex@6.1.0: {} - - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@6.2.1: {} - - argparse@2.0.1: {} - - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - array-flatten@1.1.1: {} - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - - arrify@2.0.1: - optional: true - - async-function@1.0.0: {} - - async-retry@1.3.3: - dependencies: - retry: 0.13.1 - optional: true - - async@3.2.6: {} - - asynckit@0.4.0: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - - balanced-match@1.0.2: {} - - base64-js@1.5.1: {} - - basic-auth@2.0.1: - dependencies: - safe-buffer: 5.1.2 - - before-after-hook@2.2.3: {} - - bignumber.js@9.2.1: {} - - body-parser@1.18.3: - dependencies: - bytes: 3.0.0 - content-type: 1.0.5 - debug: 2.6.9 - depd: 1.1.2 - http-errors: 1.6.3 - iconv-lite: 0.4.23 - on-finished: 2.3.0 - qs: 6.5.2 - raw-body: 2.3.3 - type-is: 1.6.18 - transitivePeerDependencies: - - supports-color - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - buffer-equal-constant-time@1.0.1: {} - - buffer-from@1.1.2: - optional: true - - bytes@3.0.0: {} - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chownr@3.0.0: {} - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - optional: true - - 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: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - commander@2.20.3: - optional: true - - concat-map@0.0.1: {} - - content-disposition@0.5.2: {} - - content-type@1.0.5: {} - - cookie-parser@1.4.7: - dependencies: - cookie: 0.7.2 - cookie-signature: 1.0.6 - - cookie-signature@1.0.6: {} - - cookie@0.3.1: {} - - cookie@0.7.2: {} - - cross-spawn@6.0.6: - dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 5.7.2 - shebang-command: 1.2.0 - which: 1.3.1 - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - debug@2.6.9: - dependencies: - ms: 2.0.0 - - debug@4.4.0: - dependencies: - ms: 2.1.3 - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - delayed-stream@1.0.0: {} - - depd@1.1.2: {} - - deprecation@2.3.1: {} - - destroy@1.0.4: {} - - detect-libc@2.0.3: - optional: true - - dotenv@16.4.7: {} - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - duplexify@4.1.3: - dependencies: - end-of-stream: 1.4.4 - inherits: 2.0.3 - readable-stream: 3.6.2 - stream-shift: 1.0.3 - optional: true - - eastasianwidth@0.2.0: {} - - ecdsa-sig-formatter@1.0.11: - dependencies: - safe-buffer: 5.1.2 - - ee-first@1.1.1: {} - - ejs@3.1.10: - dependencies: - jake: 10.9.2 - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - encodeurl@1.0.2: {} - - end-of-stream@1.4.4: - dependencies: - once: 1.4.0 - optional: true - - error-ex@1.3.2: - dependencies: - is-arrayish: 0.2.1 - - es-abstract@1.23.9: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-regex: 1.2.1 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.18 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - esbuild@0.25.0: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.0 - '@esbuild/android-arm': 0.25.0 - '@esbuild/android-arm64': 0.25.0 - '@esbuild/android-x64': 0.25.0 - '@esbuild/darwin-arm64': 0.25.0 - '@esbuild/darwin-x64': 0.25.0 - '@esbuild/freebsd-arm64': 0.25.0 - '@esbuild/freebsd-x64': 0.25.0 - '@esbuild/linux-arm': 0.25.0 - '@esbuild/linux-arm64': 0.25.0 - '@esbuild/linux-ia32': 0.25.0 - '@esbuild/linux-loong64': 0.25.0 - '@esbuild/linux-mips64el': 0.25.0 - '@esbuild/linux-ppc64': 0.25.0 - '@esbuild/linux-riscv64': 0.25.0 - '@esbuild/linux-s390x': 0.25.0 - '@esbuild/linux-x64': 0.25.0 - '@esbuild/netbsd-arm64': 0.25.0 - '@esbuild/netbsd-x64': 0.25.0 - '@esbuild/openbsd-arm64': 0.25.0 - '@esbuild/openbsd-x64': 0.25.0 - '@esbuild/sunos-x64': 0.25.0 - '@esbuild/win32-arm64': 0.25.0 - '@esbuild/win32-ia32': 0.25.0 - '@esbuild/win32-x64': 0.25.0 - - escalade@3.2.0: - optional: true - - escape-html@1.0.3: {} - - escape-string-regexp@1.0.5: {} - - etag@1.8.1: {} - - event-target-shim@5.0.1: - optional: true - - eventemitter3@4.0.7: {} - - express@4.16.4: - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.18.3 - content-disposition: 0.5.2 - content-type: 1.0.5 - cookie: 0.3.1 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 1.1.2 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.1.1 - fresh: 0.5.2 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.3.0 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.5.2 - range-parser: 1.2.1 - safe-buffer: 5.1.2 - send: 0.16.2 - serve-static: 1.13.2 - setprototypeof: 1.1.0 - statuses: 1.4.0 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - extend@3.0.2: {} - - farmhash-modern@1.1.0: {} - - fast-deep-equal@3.1.3: - optional: true - - fast-xml-parser@4.5.3: - dependencies: - strnum: 1.1.2 - optional: true - - faye-websocket@0.11.4: - dependencies: - websocket-driver: 0.7.4 - - filelist@1.0.4: - dependencies: - minimatch: 5.1.6 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - finalhandler@1.1.1: - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.3.0 - parseurl: 1.3.3 - statuses: 1.4.0 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - firebase-admin@13.2.0: - dependencies: - '@fastify/busboy': 3.1.1 - '@firebase/database-compat': 2.0.5 - '@firebase/database-types': 1.0.10 - '@types/node': 22.13.9 - farmhash-modern: 1.1.0 - google-auth-library: 9.15.1 - jsonwebtoken: 9.0.2 - jwks-rsa: 3.2.0 - node-forge: 1.3.1 - uuid: 11.1.0 - optionalDependencies: - '@google-cloud/firestore': 7.11.0 - '@google-cloud/storage': 7.16.0 - transitivePeerDependencies: - - encoding - - supports-color - - follow-redirects@1.15.9(debug@4.4.0): - optionalDependencies: - debug: 4.4.0 - - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - form-data@2.5.3: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - mime-types: 2.1.35 - safe-buffer: 5.2.1 - optional: true - - form-data@4.0.2: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - mime-types: 2.1.35 - - forwarded@0.2.0: {} - - fresh@0.5.2: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - - functional-red-black-tree@1.0.1: - optional: true - - functions-have-names@1.2.3: {} - - gaxios@6.7.1: - dependencies: - extend: 3.0.2 - https-proxy-agent: 7.0.6 - is-stream: 2.0.1 - node-fetch: 2.7.0 - uuid: 9.0.1 - transitivePeerDependencies: - - encoding - - supports-color - - gcp-metadata@6.1.1: - dependencies: - gaxios: 6.7.1 - google-logging-utils: 0.0.2 - json-bigint: 1.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - get-caller-file@2.0.5: - optional: true - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - - get-tsconfig@4.10.0: - dependencies: - resolve-pkg-maps: 1.0.0 - - glob@10.4.5: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - - google-auth-library@9.15.1: - dependencies: - base64-js: 1.5.1 - ecdsa-sig-formatter: 1.0.11 - gaxios: 6.7.1 - gcp-metadata: 6.1.1 - gtoken: 7.1.0 - jws: 4.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - google-gax@4.4.1: - dependencies: - '@grpc/grpc-js': 1.13.2 - '@grpc/proto-loader': 0.7.13 - '@types/long': 4.0.2 - abort-controller: 3.0.0 - duplexify: 4.1.3 - google-auth-library: 9.15.1 - node-fetch: 2.7.0 - object-hash: 3.0.0 - proto3-json-serializer: 2.0.2 - protobufjs: 7.4.0 - retry-request: 7.0.2 - uuid: 9.0.1 - transitivePeerDependencies: - - encoding - - supports-color - optional: true - - google-logging-utils@0.0.2: {} - - gopd@1.2.0: {} - - graceful-fs@4.2.11: {} - - gtoken@7.1.0: - dependencies: - gaxios: 6.7.1 - jws: 4.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - has-bigints@1.1.0: {} - - has-flag@3.0.0: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - hosted-git-info@2.8.9: {} - - html-entities@2.6.0: - optional: true - - http-errors@1.6.3: - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.4.0 - - http-parser-js@0.5.10: {} - - http-proxy-agent@5.0.0: - dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.4.0 - transitivePeerDependencies: - - supports-color - optional: true - - http-proxy-middleware@3.0.3: - dependencies: - '@types/http-proxy': 1.17.16 - debug: 4.4.0 - http-proxy: 1.18.1(debug@4.4.0) - is-glob: 4.0.3 - is-plain-object: 5.0.0 - micromatch: 4.0.8 - transitivePeerDependencies: - - supports-color - - http-proxy@1.18.1(debug@4.4.0): - dependencies: - eventemitter3: 4.0.7 - follow-redirects: 1.15.9(debug@4.4.0) - requires-port: 1.0.0 - transitivePeerDependencies: - - debug - - https-proxy-agent@5.0.1: - dependencies: - agent-base: 6.0.2 - debug: 4.4.0 - transitivePeerDependencies: - - supports-color - optional: true - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.3 - debug: 4.4.0 - transitivePeerDependencies: - - supports-color - - iconv-lite@0.4.23: - dependencies: - safer-buffer: 2.1.2 - - inherits@2.0.3: {} - - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - - ipaddr.js@1.9.1: {} - - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-arrayish@0.2.1: {} - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-callable@1.2.7: {} - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-extglob@2.1.1: {} - - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-fullwidth-code-point@3.0.0: {} - - is-generator-function@1.1.0: - dependencies: - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-map@2.0.3: {} - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-number@7.0.0: {} - - is-plain-object@5.0.0: {} - - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - - is-stream@2.0.1: {} - - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.18 - - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - isarray@2.0.5: {} - - isexe@2.0.0: {} - - isomorphic-ws@5.0.0(ws@8.18.1): - dependencies: - ws: 8.18.1 - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jake@10.9.2: - dependencies: - async: 3.2.6 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - - jiti@2.4.2: - optional: true - - jose@4.15.9: {} - - jose@6.0.8: {} - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - jsep@1.4.0: {} - - json-bigint@1.0.0: - dependencies: - bignumber.js: 9.2.1 - - json-parse-better-errors@1.0.2: {} - - jsonpath-plus@10.3.0: - dependencies: - '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0) - '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) - jsep: 1.4.0 - - jsonwebtoken@9.0.2: - dependencies: - jws: 3.2.2 - lodash.includes: 4.3.0 - lodash.isboolean: 3.0.3 - lodash.isinteger: 4.0.4 - lodash.isnumber: 3.0.3 - lodash.isplainobject: 4.0.6 - lodash.isstring: 4.0.1 - lodash.once: 4.1.1 - ms: 2.1.3 - semver: 7.7.1 - - jwa@1.4.1: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.1.2 - - jwa@2.0.0: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.1.2 - - jwks-rsa@3.2.0: - dependencies: - '@types/express': 4.17.21 - '@types/jsonwebtoken': 9.0.9 - debug: 4.4.0 - jose: 4.15.9 - limiter: 1.1.5 - lru-memoizer: 2.3.0 - transitivePeerDependencies: - - supports-color - - jws@3.2.2: - dependencies: - jwa: 1.4.1 - safe-buffer: 5.1.2 - - jws@4.0.0: - dependencies: - jwa: 2.0.0 - safe-buffer: 5.1.2 - - lightningcss-darwin-arm64@1.29.2: - optional: true - - lightningcss-darwin-x64@1.29.2: - optional: true - - lightningcss-freebsd-x64@1.29.2: - optional: true - - lightningcss-linux-arm-gnueabihf@1.29.2: - optional: true - - lightningcss-linux-arm64-gnu@1.29.2: - optional: true - - lightningcss-linux-arm64-musl@1.29.2: - optional: true - - lightningcss-linux-x64-gnu@1.29.2: - optional: true - - lightningcss-linux-x64-musl@1.29.2: - optional: true - - lightningcss-win32-arm64-msvc@1.29.2: - optional: true - - lightningcss-win32-x64-msvc@1.29.2: - optional: true - - lightningcss@1.29.2: - dependencies: - detect-libc: 2.0.3 - optionalDependencies: - lightningcss-darwin-arm64: 1.29.2 - lightningcss-darwin-x64: 1.29.2 - lightningcss-freebsd-x64: 1.29.2 - lightningcss-linux-arm-gnueabihf: 1.29.2 - lightningcss-linux-arm64-gnu: 1.29.2 - lightningcss-linux-arm64-musl: 1.29.2 - lightningcss-linux-x64-gnu: 1.29.2 - lightningcss-linux-x64-musl: 1.29.2 - lightningcss-win32-arm64-msvc: 1.29.2 - lightningcss-win32-x64-msvc: 1.29.2 - optional: true - - limiter@1.1.5: {} - - load-json-file@4.0.0: - dependencies: - graceful-fs: 4.2.11 - parse-json: 4.0.0 - pify: 3.0.0 - strip-bom: 3.0.0 - - lodash.camelcase@4.3.0: - optional: true - - lodash.clonedeep@4.5.0: {} - - lodash.includes@4.3.0: {} - - lodash.isboolean@3.0.3: {} - - lodash.isinteger@4.0.4: {} - - lodash.isnumber@3.0.3: {} - - lodash.isplainobject@4.0.6: {} - - lodash.isstring@4.0.1: {} - - lodash.once@4.1.1: {} - - long@5.3.1: - optional: true - - lru-cache@10.4.3: {} - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - lru-memoizer@2.3.0: - dependencies: - lodash.clonedeep: 4.5.0 - lru-cache: 6.0.0 - - math-intrinsics@1.1.0: {} - - media-typer@0.3.0: {} - - memorystream@0.3.1: {} - - merge-descriptors@1.0.1: {} - - methods@1.1.2: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mime@1.4.1: {} - - mime@3.0.0: - optional: true - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.1 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.1 - - minipass@4.2.8: {} - - minipass@7.1.2: {} - - minizlib@3.0.1: - dependencies: - minipass: 7.1.2 - rimraf: 5.0.10 - - mkdirp@3.0.1: {} - - morgan@1.9.1: - dependencies: - basic-auth: 2.0.1 - debug: 2.6.9 - depd: 1.1.2 - on-finished: 2.3.0 - on-headers: 1.0.2 - transitivePeerDependencies: - - supports-color - - ms@2.0.0: {} - - ms@2.1.3: {} - - nanoid@3.3.8: {} - - negotiator@0.6.3: {} - - nice-try@1.0.5: {} - - node-fetch@2.7.0: - dependencies: - whatwg-url: 5.0.0 - - node-forge@1.3.1: {} - - normalize-package-data@2.5.0: - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.10 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - - npm-run-all@4.1.5: - dependencies: - ansi-styles: 3.2.1 - chalk: 2.4.2 - cross-spawn: 6.0.6 - memorystream: 0.3.1 - minimatch: 3.1.2 - pidtree: 0.3.1 - read-pkg: 3.0.0 - shell-quote: 1.8.2 - string.prototype.padend: 3.1.6 - - oauth4webapi@3.3.0: {} - - object-hash@3.0.0: - optional: true - - object-inspect@1.13.4: {} - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - on-finished@2.3.0: - dependencies: - ee-first: 1.1.1 - - on-headers@1.0.2: {} - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - openid-client@6.3.3: - dependencies: - jose: 6.0.8 - oauth4webapi: 3.3.0 - - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - optional: true - - package-json-from-dist@1.0.1: {} - - parse-json@4.0.0: - dependencies: - error-ex: 1.3.2 - json-parse-better-errors: 1.0.2 - - parseurl@1.3.3: {} - - path-key@2.0.1: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-to-regexp@0.1.7: {} - - path-type@3.0.0: - dependencies: - pify: 3.0.0 - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} + '@octokit/request': 8.4.1 + '@octokit/types': 13.10.0 + universal-user-agent: 6.0.1 - pidtree@0.3.1: {} + '@octokit/openapi-types@20.0.0': {} - pify@3.0.0: {} + '@octokit/openapi-types@24.2.0': {} - possible-typed-array-names@1.1.0: {} + '@octokit/plugin-paginate-rest@9.2.2(@octokit/core@5.2.1)': + dependencies: + '@octokit/core': 5.2.1 + '@octokit/types': 12.6.0 - postcss@8.5.3: + '@octokit/plugin-rest-endpoint-methods@10.4.1(@octokit/core@5.2.1)': dependencies: - nanoid: 3.3.8 - picocolors: 1.1.1 - source-map-js: 1.2.1 + '@octokit/core': 5.2.1 + '@octokit/types': 12.6.0 - proto3-json-serializer@2.0.2: + '@octokit/request-error@5.1.1': dependencies: - protobufjs: 7.4.0 - optional: true + '@octokit/types': 13.10.0 + deprecation: 2.3.1 + once: 1.4.0 - protobufjs@7.4.0: + '@octokit/request@8.4.1': dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/node': 22.13.9 - long: 5.3.1 - optional: true + '@octokit/endpoint': 9.0.6 + '@octokit/request-error': 5.1.1 + '@octokit/types': 13.10.0 + universal-user-agent: 6.0.1 - proxy-addr@2.0.7: + '@octokit/types@12.6.0': dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 + '@octokit/openapi-types': 20.0.0 - qs@6.5.2: {} + '@octokit/types@13.10.0': + dependencies: + '@octokit/openapi-types': 24.2.0 - range-parser@1.2.1: {} + '@types/js-yaml@4.0.9': {} - raw-body@2.3.3: + '@types/node-fetch@2.6.12': dependencies: - bytes: 3.0.0 - http-errors: 1.6.3 - iconv-lite: 0.4.23 - unpipe: 1.0.0 + '@types/node': 22.14.1 + form-data: 4.0.2 - read-pkg@3.0.0: + '@types/node@22.14.1': dependencies: - load-json-file: 4.0.0 - normalize-package-data: 2.5.0 - path-type: 3.0.0 + undici-types: 6.21.0 - readable-stream@3.6.2: + '@types/stream-buffers@3.0.7': dependencies: - inherits: 2.0.3 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - optional: true + '@types/node': 22.14.1 - reflect.getprototypeof@1.0.10: + '@types/tar@6.1.13': dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 + '@types/node': 22.14.1 + minipass: 4.2.8 - regexp.prototype.flags@1.5.4: + '@types/ws@8.18.1': dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 + '@types/node': 22.14.1 - require-directory@2.1.1: - optional: true + '@vercel/ncc@0.38.3': {} - requires-port@1.0.0: {} + agent-base@7.1.3: {} - resolve-pkg-maps@1.0.0: {} + argparse@2.0.1: {} - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 + asynckit@0.4.0: {} - retry-request@7.0.2: - dependencies: - '@types/request': 2.48.12 - extend: 3.0.2 - teeny-request: 9.0.0 - transitivePeerDependencies: - - encoding - - supports-color - optional: true + before-after-hook@2.2.3: {} - retry@0.13.1: - optional: true + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 - rfc4648@1.5.4: {} + chownr@3.0.0: {} - rimraf@5.0.10: + combined-stream@1.0.8: dependencies: - glob: 10.4.5 + delayed-stream: 1.0.0 - rollup@4.34.9: + debug@4.4.0: dependencies: - '@types/estree': 1.0.6 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.34.9 - '@rollup/rollup-android-arm64': 4.34.9 - '@rollup/rollup-darwin-arm64': 4.34.9 - '@rollup/rollup-darwin-x64': 4.34.9 - '@rollup/rollup-freebsd-arm64': 4.34.9 - '@rollup/rollup-freebsd-x64': 4.34.9 - '@rollup/rollup-linux-arm-gnueabihf': 4.34.9 - '@rollup/rollup-linux-arm-musleabihf': 4.34.9 - '@rollup/rollup-linux-arm64-gnu': 4.34.9 - '@rollup/rollup-linux-arm64-musl': 4.34.9 - '@rollup/rollup-linux-loongarch64-gnu': 4.34.9 - '@rollup/rollup-linux-powerpc64le-gnu': 4.34.9 - '@rollup/rollup-linux-riscv64-gnu': 4.34.9 - '@rollup/rollup-linux-s390x-gnu': 4.34.9 - '@rollup/rollup-linux-x64-gnu': 4.34.9 - '@rollup/rollup-linux-x64-musl': 4.34.9 - '@rollup/rollup-win32-arm64-msvc': 4.34.9 - '@rollup/rollup-win32-ia32-msvc': 4.34.9 - '@rollup/rollup-win32-x64-msvc': 4.34.9 - fsevents: 2.3.3 + ms: 2.1.3 - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 + delayed-stream@1.0.0: {} - safe-buffer@5.1.2: {} + deprecation@2.3.1: {} - safe-buffer@5.2.1: - optional: true + dotenv@16.5.0: {} - safe-push-apply@1.0.0: + dunder-proto@1.0.1: dependencies: + call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 - isarray: 2.0.5 + gopd: 1.2.0 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} - safe-regex-test@1.1.0: + es-object-atoms@1.1.1: dependencies: - call-bound: 1.0.4 es-errors: 1.3.0 - is-regex: 1.2.1 - safer-buffer@2.1.2: {} - - semver@5.7.2: {} + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 - semver@7.7.1: {} + esbuild@0.25.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.2 + '@esbuild/android-arm': 0.25.2 + '@esbuild/android-arm64': 0.25.2 + '@esbuild/android-x64': 0.25.2 + '@esbuild/darwin-arm64': 0.25.2 + '@esbuild/darwin-x64': 0.25.2 + '@esbuild/freebsd-arm64': 0.25.2 + '@esbuild/freebsd-x64': 0.25.2 + '@esbuild/linux-arm': 0.25.2 + '@esbuild/linux-arm64': 0.25.2 + '@esbuild/linux-ia32': 0.25.2 + '@esbuild/linux-loong64': 0.25.2 + '@esbuild/linux-mips64el': 0.25.2 + '@esbuild/linux-ppc64': 0.25.2 + '@esbuild/linux-riscv64': 0.25.2 + '@esbuild/linux-s390x': 0.25.2 + '@esbuild/linux-x64': 0.25.2 + '@esbuild/netbsd-arm64': 0.25.2 + '@esbuild/netbsd-x64': 0.25.2 + '@esbuild/openbsd-arm64': 0.25.2 + '@esbuild/openbsd-x64': 0.25.2 + '@esbuild/sunos-x64': 0.25.2 + '@esbuild/win32-arm64': 0.25.2 + '@esbuild/win32-ia32': 0.25.2 + '@esbuild/win32-x64': 0.25.2 - send@0.16.2: + form-data@4.0.2: dependencies: - debug: 2.6.9 - depd: 1.1.2 - destroy: 1.0.4 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 1.6.3 - mime: 1.4.1 - ms: 2.0.0 - on-finished: 2.3.0 - range-parser: 1.2.1 - statuses: 1.4.0 - transitivePeerDependencies: - - supports-color + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + mime-types: 2.1.35 - serve-static@1.13.2: - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.16.2 - transitivePeerDependencies: - - supports-color + fsevents@2.3.3: + optional: true - set-function-length@1.2.2: + function-bind@1.1.2: {} + + get-intrinsic@1.3.0: dependencies: - define-data-property: 1.1.4 + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 es-errors: 1.3.0 + es-object-atoms: 1.1.1 function-bind: 1.1.2 - get-intrinsic: 1.3.0 + get-proto: 1.0.1 gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 - set-proto@1.0.0: + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 - es-errors: 1.3.0 es-object-atoms: 1.1.1 - setprototypeof@1.1.0: {} - - shebang-command@1.2.0: - dependencies: - shebang-regex: 1.0.0 - - shebang-command@2.0.0: + get-tsconfig@4.10.0: dependencies: - shebang-regex: 3.0.0 - - shebang-regex@1.0.0: {} + resolve-pkg-maps: 1.0.0 - shebang-regex@3.0.0: {} + gopd@1.2.0: {} - shell-quote@1.8.2: {} + has-symbols@1.1.0: {} - side-channel-list@1.0.0: + has-tostringtag@1.0.2: dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 + has-symbols: 1.1.0 - side-channel-map@1.0.1: + hasown@2.0.2: dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 + function-bind: 1.1.2 - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 + hpagent@1.2.0: {} - side-channel@1.1.0: + ip-address@9.0.5: dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - signal-exit@4.1.0: {} + jsbn: 1.1.0 + sprintf-js: 1.1.3 - source-map-js@1.2.1: {} - - source-map-support@0.5.21: + isomorphic-ws@5.0.0(ws@8.18.1): dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - optional: true + ws: 8.18.1 - source-map@0.6.1: - optional: true + jose@6.0.10: {} - spdx-correct@3.2.0: + js-yaml@4.1.0: dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.21 + argparse: 2.0.1 - spdx-exceptions@2.5.0: {} + jsbn@1.1.0: {} - spdx-expression-parse@3.0.1: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.21 + jsep@1.4.0: {} - spdx-license-ids@3.0.21: {} + jsonpath-plus@10.3.0: + dependencies: + '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0) + '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) + jsep: 1.4.0 - statuses@1.4.0: {} + math-intrinsics@1.1.0: {} - stream-buffers@3.0.3: {} + mime-db@1.52.0: {} - stream-events@1.0.5: + mime-types@2.1.35: dependencies: - stubs: 3.0.0 - optional: true - - stream-shift@1.0.3: - optional: true + mime-db: 1.52.0 - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 + minipass@4.2.8: {} - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + minipass@7.1.2: {} - string.prototype.padend@3.1.6: + minizlib@3.0.2: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 + minipass: 7.1.2 - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 + mkdirp@3.0.1: {} - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 + ms@2.1.3: {} - string.prototype.trimstart@1.0.8: + node-fetch@2.7.0: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 + whatwg-url: 5.0.0 - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - optional: true + oauth4webapi@3.4.1: {} - strip-ansi@6.0.1: + once@1.4.0: dependencies: - ansi-regex: 5.0.1 + wrappy: 1.0.2 - strip-ansi@7.1.0: + openid-client@6.4.2: dependencies: - ansi-regex: 6.1.0 + jose: 6.0.10 + oauth4webapi: 3.4.1 - strip-bom@3.0.0: {} + resolve-pkg-maps@1.0.0: {} - strnum@1.1.2: - optional: true + rfc4648@1.5.4: {} - stubs@3.0.0: - optional: true + smart-buffer@4.2.0: {} - supports-color@5.5.0: + socks-proxy-agent@8.0.5: dependencies: - has-flag: 3.0.0 + agent-base: 7.1.3 + debug: 4.4.0 + socks: 2.8.4 + transitivePeerDependencies: + - supports-color - supports-color@7.2.0: + socks@2.8.4: dependencies: - has-flag: 4.0.0 + ip-address: 9.0.5 + smart-buffer: 4.2.0 + + sprintf-js@1.1.3: {} - supports-preserve-symlinks-flag@1.0.0: {} + stream-buffers@3.0.3: {} tar@7.4.3: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 minipass: 7.1.2 - minizlib: 3.0.1 + minizlib: 3.0.2 mkdirp: 3.0.1 yallist: 5.0.0 - teeny-request@9.0.0: - dependencies: - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - node-fetch: 2.7.0 - stream-events: 1.0.5 - uuid: 9.0.1 - transitivePeerDependencies: - - encoding - - supports-color - optional: true - - terser@5.39.0: - dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.14.1 - commander: 2.20.3 - source-map-support: 0.5.21 - optional: true - tmp-promise@3.0.3: dependencies: tmp: 0.2.3 tmp@0.2.3: {} - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - tr46@0.0.3: {} - tslib@2.8.1: {} - tsx@4.19.3: dependencies: - esbuild: 0.25.0 + esbuild: 0.25.2 get-tsconfig: 4.10.0 optionalDependencies: fsevents: 2.3.3 tunnel@0.0.6: {} - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - - typescript@5.8.2: {} - - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 + typescript@5.8.3: {} - undici-types@6.20.0: {} + undici-types@6.21.0: {} - undici@5.28.5: + undici@5.29.0: dependencies: '@fastify/busboy': 2.1.1 universal-user-agent@6.0.1: {} - unpipe@1.0.0: {} - - util-deprecate@1.0.2: - optional: true - - utils-merge@1.0.1: {} - - uuid@11.1.0: {} - - uuid@8.3.2: - optional: true - - uuid@9.0.1: {} - - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - - vary@1.1.2: {} - - vite@6.2.1(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0): - dependencies: - esbuild: 0.25.0 - postcss: 8.5.3 - rollup: 4.34.9 - optionalDependencies: - '@types/node': 22.13.9 - fsevents: 2.3.3 - jiti: 2.4.2 - lightningcss: 1.29.2 - terser: 5.39.0 - tsx: 4.19.3 - yaml: 2.7.0 - webidl-conversions@3.0.1: {} - websocket-driver@0.7.4: - dependencies: - http-parser-js: 0.5.10 - safe-buffer: 5.1.2 - websocket-extensions: 0.1.4 - - websocket-extensions@0.1.4: {} - whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.18 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.18: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - - which@1.3.1: - dependencies: - isexe: 2.0.0 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - 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.18.1: {} - y18n@5.0.8: - optional: true - - yallist@4.0.0: {} - yallist@5.0.0: {} - yaml@2.7.0: {} - - yargs-parser@21.1.1: - optional: true - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - optional: true - - yocto-queue@0.1.0: - optional: true + yaml@2.7.1: {} zod-validation-error@3.4.0(zod@3.24.2): dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml deleted file mode 100644 index 7987331..0000000 --- a/pnpm-workspace.yaml +++ /dev/null @@ -1,3 +0,0 @@ -packages: - - "apps/*" -injectWorkspacePackages: true \ No newline at end of file diff --git a/apps/cli/src/Settings.json b/src/Settings.json similarity index 100% rename from apps/cli/src/Settings.json rename to src/Settings.json diff --git a/apps/cli/src/config/WorkspaceConfigRenderer.ts b/src/config/WorkspaceConfigRenderer.ts similarity index 100% rename from apps/cli/src/config/WorkspaceConfigRenderer.ts rename to src/config/WorkspaceConfigRenderer.ts diff --git a/apps/cli/src/config/YamlRenderer.ts b/src/config/YamlRenderer.ts similarity index 100% rename from apps/cli/src/config/YamlRenderer.ts rename to src/config/YamlRenderer.ts diff --git a/apps/cli/src/config/types/WorkspaceConfig.ts b/src/config/types/WorkspaceConfig.ts similarity index 100% rename from apps/cli/src/config/types/WorkspaceConfig.ts rename to src/config/types/WorkspaceConfig.ts diff --git a/apps/cli/src/index.ts b/src/index.ts similarity index 100% rename from apps/cli/src/index.ts rename to src/index.ts diff --git a/apps/cli/src/kubernetes/KubernetesClient.ts b/src/kubernetes/KubernetesClient.ts similarity index 100% rename from apps/cli/src/kubernetes/KubernetesClient.ts rename to src/kubernetes/KubernetesClient.ts diff --git a/apps/cli/src/kubernetes/types/K8sObject.ts b/src/kubernetes/types/K8sObject.ts similarity index 100% rename from apps/cli/src/kubernetes/types/K8sObject.ts rename to src/kubernetes/types/K8sObject.ts diff --git a/apps/cli/src/kubernetes/utils/createConfigMap.ts b/src/kubernetes/utils/createConfigMap.ts similarity index 100% rename from apps/cli/src/kubernetes/utils/createConfigMap.ts rename to src/kubernetes/utils/createConfigMap.ts diff --git a/apps/cli/src/kubernetes/utils/createDeployment.ts b/src/kubernetes/utils/createDeployment.ts similarity index 100% rename from apps/cli/src/kubernetes/utils/createDeployment.ts rename to src/kubernetes/utils/createDeployment.ts diff --git a/apps/cli/src/kubernetes/utils/createIngress.ts b/src/kubernetes/utils/createIngress.ts similarity index 100% rename from apps/cli/src/kubernetes/utils/createIngress.ts rename to src/kubernetes/utils/createIngress.ts diff --git a/apps/cli/src/kubernetes/utils/createNamespace.ts b/src/kubernetes/utils/createNamespace.ts similarity index 100% rename from apps/cli/src/kubernetes/utils/createNamespace.ts rename to src/kubernetes/utils/createNamespace.ts diff --git a/apps/cli/src/kubernetes/utils/createPersistentVolumeClaim.ts b/src/kubernetes/utils/createPersistentVolumeClaim.ts similarity index 100% rename from apps/cli/src/kubernetes/utils/createPersistentVolumeClaim.ts rename to src/kubernetes/utils/createPersistentVolumeClaim.ts diff --git a/apps/cli/src/kubernetes/utils/createSecret.ts b/src/kubernetes/utils/createSecret.ts similarity index 100% rename from apps/cli/src/kubernetes/utils/createSecret.ts rename to src/kubernetes/utils/createSecret.ts diff --git a/apps/cli/src/kubernetes/utils/createService.ts b/src/kubernetes/utils/createService.ts similarity index 100% rename from apps/cli/src/kubernetes/utils/createService.ts rename to src/kubernetes/utils/createService.ts diff --git a/apps/cli/src/kubernetes/utils/createServiceAccount.ts b/src/kubernetes/utils/createServiceAccount.ts similarity index 100% rename from apps/cli/src/kubernetes/utils/createServiceAccount.ts rename to src/kubernetes/utils/createServiceAccount.ts diff --git a/apps/cli/src/kubernetes/utils/encoding.ts b/src/kubernetes/utils/encoding.ts similarity index 100% rename from apps/cli/src/kubernetes/utils/encoding.ts rename to src/kubernetes/utils/encoding.ts diff --git a/apps/cli/src/kubernetes/utils/index.ts b/src/kubernetes/utils/index.ts similarity index 100% rename from apps/cli/src/kubernetes/utils/index.ts rename to src/kubernetes/utils/index.ts diff --git a/apps/cli/src/kubernetes/workspace/KubernetesComponent.ts b/src/kubernetes/workspace/KubernetesComponent.ts similarity index 100% rename from apps/cli/src/kubernetes/workspace/KubernetesComponent.ts rename to src/kubernetes/workspace/KubernetesComponent.ts diff --git a/apps/cli/src/kubernetes/workspace/KubernetesServerComponent.ts b/src/kubernetes/workspace/KubernetesServerComponent.ts similarity index 100% rename from apps/cli/src/kubernetes/workspace/KubernetesServerComponent.ts rename to src/kubernetes/workspace/KubernetesServerComponent.ts diff --git a/apps/cli/src/kubernetes/workspace/KubernetesWorkspace.ts b/src/kubernetes/workspace/KubernetesWorkspace.ts similarity index 100% rename from apps/cli/src/kubernetes/workspace/KubernetesWorkspace.ts rename to src/kubernetes/workspace/KubernetesWorkspace.ts diff --git a/apps/cli/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts b/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts similarity index 100% rename from apps/cli/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts rename to src/kubernetes/workspace/KubernetesWorkspaceComponent.ts diff --git a/apps/cli/src/utils/ArrayUtils.ts b/src/utils/ArrayUtils.ts similarity index 100% rename from apps/cli/src/utils/ArrayUtils.ts rename to src/utils/ArrayUtils.ts diff --git a/apps/cli/src/utils/ObjectUtils.ts b/src/utils/ObjectUtils.ts similarity index 100% rename from apps/cli/src/utils/ObjectUtils.ts rename to src/utils/ObjectUtils.ts diff --git a/templates/components/mongo.yml b/templates/components/mongo.yml deleted file mode 100644 index 48b0048..0000000 --- a/templates/components/mongo.yml +++ /dev/null @@ -1,30 +0,0 @@ -- name: mongo - image: mongo - tag: latest - ports: - - name: mongo - number: 27017 - env: - MONGO_INITDB_ROOT_USERNAME: root - MONGO_INITDB_ROOT_PASSWORD: root - volumes: - - name: mongo-data - mountPath: /data/db -- name: mongo-express - image: mongo-express - tag: latest - ports: - - name: mongo-express - number: 34310 - ingress: - subdomain: mongo - env: - PORT: "{{ mongo-express.ports.mongo-express.number }}" - ME_CONFIG_MONGODB_URL: "mongodb://127.0.0.1:{{ mongo.ports.mongo.number }}" - ME_CONFIG_MONGODB_SERVER: "127.0.0.1" - ME_CONFIG_MONGODB_PORT: "{{ mongo.ports.mongo.number }}" - ME_CONFIG_MONGODB_ENABLE_ADMIN: "true" - ME_CONFIG_MONGODB_ADMINUSERNAME: root - ME_CONFIG_MONGODB_ADMINPASSWORD: "{{ mongo.env.MONGO_INITDB_ROOT_PASSWORD }}" - ME_CONFIG_BASICAUTH: "false" - ME_CONFIG_BASICAUTH_ENABLED: "false" diff --git a/templates/scripts/install-bun.yml b/templates/scripts/install-bun.yml deleted file mode 100644 index 9465f5f..0000000 --- a/templates/scripts/install-bun.yml +++ /dev/null @@ -1,12 +0,0 @@ -version: 1 -title: Install bun -args: - version: "" # Latest version by default -script: | - if [ -z "{{ args.version }}" ]; then - args = "" - else - args = "-s \"bun-v{{ args.version }}\"" - fi - curl -fsSL https://bun.sh/install | bash $args - source ~/.bashrc diff --git a/templates/scripts/install-java.yml b/templates/scripts/install-java.yml deleted file mode 100644 index 74e5c00..0000000 --- a/templates/scripts/install-java.yml +++ /dev/null @@ -1,7 +0,0 @@ -version: 1 -title: Install Java -args: - version: "17" -script: | - sudo apt-get update - sudo apt-get install -y openjdk-{{ args.version }}-jdk diff --git a/apps/cli/tsconfig.json b/tsconfig.json similarity index 100% rename from apps/cli/tsconfig.json rename to tsconfig.json diff --git a/apps/cli/vite.config.js b/vite.config.js similarity index 100% rename from apps/cli/vite.config.js rename to vite.config.js From 768b8d2dc4658067e415b5167bca742343207c78 Mon Sep 17 00:00:00 2001 From: Feavy Date: Sat, 12 Apr 2025 16:59:34 +0200 Subject: [PATCH 62/75] Fix with new org --- src/config/WorkspaceConfigRenderer.ts | 4 ++-- src/index.ts | 8 -------- workspace.yml | 6 +++--- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/config/WorkspaceConfigRenderer.ts b/src/config/WorkspaceConfigRenderer.ts index 542f662..6345e9b 100644 --- a/src/config/WorkspaceConfigRenderer.ts +++ b/src/config/WorkspaceConfigRenderer.ts @@ -20,8 +20,8 @@ export default class WorkspaceConfigRenderer { this.ymlConfig = this.renderYaml(this.ymlConfig); this.ymlConfig = workspaceSchema.parse(this.ymlConfig); - await this.renderIncludes(this.ymlConfig.workspace.init, workspaceScriptSchema, "https://raw.githubusercontent.com/Feavy/workspace/refs/heads/main/templates/components/"); - await this.renderIncludes(this.ymlConfig.components, workspaceComponentSchema, "https://raw.githubusercontent.com/Feavy/workspace/refs/heads/main/templates/scripts/"); + await this.renderIncludes(this.ymlConfig.workspace.init, workspaceScriptSchema, "https://raw.githubusercontent.com/feaworkspace/templates/refs/heads/main/components/"); + await this.renderIncludes(this.ymlConfig.components, workspaceComponentSchema, "https://raw.githubusercontent.com/feaworkspace/templates/refs/heads/main/scripts/"); this.ymlConfig = this.renderYaml(this.ymlConfig); diff --git a/src/index.ts b/src/index.ts index 9e42914..f3f1a2e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,7 +5,6 @@ import { fromError } from 'zod-validation-error'; import KubernetesWorkspace from './kubernetes/workspace/KubernetesWorkspace'; import * as yaml from 'yaml'; import * as dotenv from 'dotenv'; -import { lib } from "lib"; import KubernetesClient from "./kubernetes/KubernetesClient"; import {dataValuesFromBase64} from "./kubernetes/utils/encoding"; @@ -16,13 +15,6 @@ CLI Parameters: dotenv.config(); -const isDev = process.env['NODE_ENV'] === 'development'; -if(isDev) { - process.chdir("../../"); -} - -console.log(lib()); - (async () => { try { const configRenderer = new WorkspaceConfigRenderer('workspace.yml'); diff --git a/workspace.yml b/workspace.yml index 6f89f37..010e8e7 100644 --- a/workspace.yml +++ b/workspace.yml @@ -16,12 +16,12 @@ workspace: branch: main gitPrivateKey: "test" init: - - include: "./templates/scripts/install-java.yml" + - include: "../templates/scripts/install-java.yml" # - include: "@install-java.yml" with: args.version: "17" # - include: "@install-bun.yml" - - include: "./templates/scripts/install-bun.yml" + - include: "../templates/scripts/install-bun.yml" ports: - name: web number: 8080 @@ -37,7 +37,7 @@ workspace: # env: # ... components: - - include: "./templates/components/mongo.yml" + - include: "../templates/components/mongo.yml" # - include: "@mongo.yml" with: mongo.volumes.mongo-data.size: 10Gi From 377d6117315c5722961e6251afc510e38754b784 Mon Sep 17 00:00:00 2001 From: Feavy Date: Sat, 12 Apr 2025 18:23:09 +0200 Subject: [PATCH 63/75] add oct-server component & refacto --- src/Settings.json | 14 +++++---- src/config/types/WorkspaceConfig.ts | 8 +++-- src/kubernetes/utils/createDeployment.ts | 11 +++---- .../workspace/KubernetesComponent.ts | 2 ++ .../workspace/KubernetesOctServerComponent.ts | 29 +++++++++++++++++++ .../workspace/KubernetesServerComponent.ts | 2 +- .../workspace/KubernetesWorkspace.ts | 8 ++--- .../workspace/KubernetesWorkspaceComponent.ts | 1 + 8 files changed, 53 insertions(+), 22 deletions(-) create mode 100644 src/kubernetes/workspace/KubernetesOctServerComponent.ts diff --git a/src/Settings.json b/src/Settings.json index 915c27c..d7454de 100644 --- a/src/Settings.json +++ b/src/Settings.json @@ -1,10 +1,14 @@ { "server": { - "image": "ghcr.io/feavy/workspace/server", - "tag": "main-2006fc3" + "image": "ghcr.io/feaworkspace/gateway", + "tag": "main-cba915e" }, - "workspace": { - "image": "ghcr.io/feavy/workspace/theia", - "tag": "main-5709cd5" + "theia": { + "image": "ghcr.io/feaworkspace/theia-ide", + "tag": "master-2079c19" + }, + "octServer": { + "image": "ghcr.io/feaworkspace/oct-server", + "tag": "release-0-2-0-ecff0fc" } } diff --git a/src/config/types/WorkspaceConfig.ts b/src/config/types/WorkspaceConfig.ts index 5ada86d..32f5138 100644 --- a/src/config/types/WorkspaceConfig.ts +++ b/src/config/types/WorkspaceConfig.ts @@ -50,6 +50,8 @@ export interface WorkspaceComponentConfig { name: string; image: string; tag: string; + command?: string[]; + args?: string[]; ports: Array; env: Record; secrets: Record; @@ -98,7 +100,7 @@ export interface WorkspaceServerConfig { } export const workspaceServerSchema = z.object({ - name: z.string().default('ws-portal'), + name: z.string().default('gateway'), image: z.string().default(Settings.server.image), tag: z.string().default(Settings.server.tag), users: z.array(z.string()), @@ -133,8 +135,8 @@ export interface WorkspaceWorkspaceConfig { export const workspaceWorkspaceSchema = z.object({ name: z.string().default('workspace'), - image: z.string().default(Settings.workspace.image), - tag: z.string().default(Settings.workspace.tag), + image: z.string().default(Settings.theia.image), + tag: z.string().default(Settings.theia.tag), gitPrivateKey: z.string().optional(), repositories: z.array(workspaceRepositorySchema).default([]), init: z.array(z.union([workspaceScriptSchema, workspaceIncludeSchema])).default([]), diff --git a/src/kubernetes/utils/createDeployment.ts b/src/kubernetes/utils/createDeployment.ts index e10bb43..43aa4bb 100644 --- a/src/kubernetes/utils/createDeployment.ts +++ b/src/kubernetes/utils/createDeployment.ts @@ -7,13 +7,8 @@ export interface ContainerDefinition { secret?: V1Secret; ports?: PortDefinition[]; volumeMounts?: Array; - // volumes?: Array<{ - // name: string, - // accessModes: string[], - // storageClassName: string, - // size: string - // mountPath: string; - // }>; + command?: string[]; + args?: string[]; } export interface VolumeMountsDefinition { @@ -76,6 +71,8 @@ export default function createDeployment(definition: DeploymentDefinition): V1De containers: definition.containers.map(container => ({ name: container.name, image: container.image, + command: container.command, + args: container.args, ports: container.ports && container.ports.map(port => ({ containerPort: port.number, name: port.name, diff --git a/src/kubernetes/workspace/KubernetesComponent.ts b/src/kubernetes/workspace/KubernetesComponent.ts index 2b4ee5c..209eaae 100644 --- a/src/kubernetes/workspace/KubernetesComponent.ts +++ b/src/kubernetes/workspace/KubernetesComponent.ts @@ -40,6 +40,8 @@ export default class KubernetesComponent { return { name: this.name(), image: this.config.image + ":" + this.config.tag, + command: this.config.command, + args: this.config.args, configMap: this.configMap, secret: this.secret, ports: this.config.ports.map(port => ({ diff --git a/src/kubernetes/workspace/KubernetesOctServerComponent.ts b/src/kubernetes/workspace/KubernetesOctServerComponent.ts new file mode 100644 index 0000000..81944fe --- /dev/null +++ b/src/kubernetes/workspace/KubernetesOctServerComponent.ts @@ -0,0 +1,29 @@ +import KubernetesComponent from "./KubernetesComponent"; +import { WorkspaceConfig } from "../../config/types/WorkspaceConfig"; +import Settings from "../../Settings.json"; + +export default class KubernetesOctServerComponent extends KubernetesComponent { + public constructor(mainConfig: WorkspaceConfig) { + super(mainConfig, { + image: Settings.octServer.image, + tag: Settings.octServer.tag, + name: "oct-server", + args: ["npm", "run", "start", "--workspace=open-collaboration-server", "--", "--port=28545"], + env: {}, + secrets: {}, + volumes: [], + ports: [ + { + name: "oct-server", + protocol: "TCP", + number: 28545, + ingress: { + subdomain: "oct", + path: "/", + auth: false + } + } + ] + }); + } +} diff --git a/src/kubernetes/workspace/KubernetesServerComponent.ts b/src/kubernetes/workspace/KubernetesServerComponent.ts index 1239256..bc8e7fc 100644 --- a/src/kubernetes/workspace/KubernetesServerComponent.ts +++ b/src/kubernetes/workspace/KubernetesServerComponent.ts @@ -31,7 +31,7 @@ export default class KubernetesServerComponent extends KubernetesComponent { }, ports: [ { - name: "ws-portal", + name: "gateway", protocol: "TCP", number: KubernetesServerComponent.PORT, ingress: { diff --git a/src/kubernetes/workspace/KubernetesWorkspace.ts b/src/kubernetes/workspace/KubernetesWorkspace.ts index f1433f8..ad3e21c 100644 --- a/src/kubernetes/workspace/KubernetesWorkspace.ts +++ b/src/kubernetes/workspace/KubernetesWorkspace.ts @@ -5,15 +5,10 @@ import { WorkspaceComponentConfig, WorkspaceConfig } from "../../config/types/Wo import KubernetesWorkspaceComponent from "./KubernetesWorkspaceComponent"; import KubernetesServerComponent from "./KubernetesServerComponent"; import { formatName } from "../utils/encoding"; +import KubernetesOctServerComponent from "./KubernetesOctServerComponent"; export default class KubernetesWorkspace { - // private k8sApi: k8s.CoreV1Api; - public constructor(private readonly config: WorkspaceConfig) { - // const kc = new k8s.KubeConfig(); - // kc.loadFromDefault(); - - // this.k8sApi = kc.makeApiClient(k8s.CoreV1Api); } @@ -55,6 +50,7 @@ export default class KubernetesWorkspace { const serverComponent = new KubernetesServerComponent(this.config, this.config.server, [workspaceComponent.config, ...this.config.components] as WorkspaceComponentConfig[]); const kubernetesComponents = [ ...this.config.components.map(componentConfig => new KubernetesComponent(this.config, componentConfig as WorkspaceComponentConfig)), + new KubernetesOctServerComponent(this.config), workspaceComponent, serverComponent, ]; diff --git a/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts b/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts index 0fcef83..6495a9e 100644 --- a/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts +++ b/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts @@ -6,6 +6,7 @@ export default class KubernetesWorkspaceComponent extends KubernetesComponent { public constructor(mainConfig: WorkspaceConfig, config: WorkspaceWorkspaceConfig) { super(mainConfig, merge(config, { namespace: mainConfig.namespace, + args: ["/workspace", "--hostname=0.0.0.0", "--port=28544"], env: {}, volumes: [], ports: [ From 603f889964c9e511f78ce73b68fc867932480133 Mon Sep 17 00:00:00 2001 From: Feavy Date: Sat, 12 Apr 2025 18:35:58 +0200 Subject: [PATCH 64/75] Fix public ingresses --- src/kubernetes/workspace/KubernetesWorkspace.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/kubernetes/workspace/KubernetesWorkspace.ts b/src/kubernetes/workspace/KubernetesWorkspace.ts index ad3e21c..22cd54f 100644 --- a/src/kubernetes/workspace/KubernetesWorkspace.ts +++ b/src/kubernetes/workspace/KubernetesWorkspace.ts @@ -117,18 +117,18 @@ export default class KubernetesWorkspace { })); // Public ingress - const ingresses = configs.flatMap(it => it.ports) + const publicPorts = configs.flatMap(it => it.ports) .filter(port => port.ingress !== undefined && !port.ingress?.auth) - .map(port => port.ingress) - .sort((a, b) => b!.subdomain.length + b!.path.length - (a!.subdomain.length + a!.path.length)); + .sort((a, b) => b.ingress!.subdomain.length + b.ingress!.path.length - (a.ingress!.subdomain.length + a.ingress!.path.length)); resources.pushAndGet(createIngress({ name: this.name("public-ingress"), namespace: this.config.namespace, - rules: ingresses.map(ingress => ({ - host: this.getHost(ingress?.subdomain || ""), - port: KubernetesServerComponent.PORT, - path: ingress?.path || "/", + rules: publicPorts.map(port => ({ + host: this.getHost(port.ingress?.subdomain || ""), + port: port.number, + protocol: port.protocol, + path: port.ingress?.path || "/", service: service // ? })) })); From 6174af8fe675c8af5b62c8235681617b95929c33 Mon Sep 17 00:00:00 2001 From: Feavy Date: Sat, 12 Apr 2025 18:54:51 +0200 Subject: [PATCH 65/75] Generate OCT_JWT_PRIVATE_KEY shared between oct-server and gateway --- .../workspace/KubernetesComponent.ts | 8 ++++++++ .../workspace/KubernetesOctServerComponent.ts | 19 +++++++++++++------ .../workspace/KubernetesServerComponent.ts | 19 +++++-------------- src/utils/CryptoUtils.ts | 5 +++++ 4 files changed, 31 insertions(+), 20 deletions(-) create mode 100644 src/utils/CryptoUtils.ts diff --git a/src/kubernetes/workspace/KubernetesComponent.ts b/src/kubernetes/workspace/KubernetesComponent.ts index 209eaae..b51c63b 100644 --- a/src/kubernetes/workspace/KubernetesComponent.ts +++ b/src/kubernetes/workspace/KubernetesComponent.ts @@ -60,4 +60,12 @@ export default class KubernetesComponent { public getResources(definedResources: Array): Array { return [this.configMap, this.secret].filter(Boolean) as Array; } + + public getHost(subdomain?: string) { + let domain = this.mainConfig.server.domain.replace("%s", subdomain || ""); + if (!subdomain) { + domain = domain.substring(1); // remove separator + } + return domain; + } } \ No newline at end of file diff --git a/src/kubernetes/workspace/KubernetesOctServerComponent.ts b/src/kubernetes/workspace/KubernetesOctServerComponent.ts index 81944fe..2389389 100644 --- a/src/kubernetes/workspace/KubernetesOctServerComponent.ts +++ b/src/kubernetes/workspace/KubernetesOctServerComponent.ts @@ -1,24 +1,31 @@ import KubernetesComponent from "./KubernetesComponent"; import { WorkspaceConfig } from "../../config/types/WorkspaceConfig"; import Settings from "../../Settings.json"; +import { generateToken } from "../../utils/CryptoUtils"; export default class KubernetesOctServerComponent extends KubernetesComponent { + public static readonly NAME = "oct-server"; // move to config + public static readonly PORT = 28545; + public static readonly OCT_JWT_PRIVATE_KEY = generateToken(); + public constructor(mainConfig: WorkspaceConfig) { super(mainConfig, { image: Settings.octServer.image, tag: Settings.octServer.tag, - name: "oct-server", - args: ["npm", "run", "start", "--workspace=open-collaboration-server", "--", "--port=28545"], + name: KubernetesOctServerComponent.NAME, + args: ["npm", "run", "start", "--workspace=open-collaboration-server", "--", "--port="+KubernetesOctServerComponent.PORT], + secrets: { + "OCT_JWT_PRIVATE_KEY": KubernetesOctServerComponent.OCT_JWT_PRIVATE_KEY, + }, env: {}, - secrets: {}, volumes: [], ports: [ { - name: "oct-server", + name: KubernetesOctServerComponent.NAME, protocol: "TCP", - number: 28545, + number: KubernetesOctServerComponent.PORT, ingress: { - subdomain: "oct", + subdomain: KubernetesOctServerComponent.NAME, path: "/", auth: false } diff --git a/src/kubernetes/workspace/KubernetesServerComponent.ts b/src/kubernetes/workspace/KubernetesServerComponent.ts index bc8e7fc..d149234 100644 --- a/src/kubernetes/workspace/KubernetesServerComponent.ts +++ b/src/kubernetes/workspace/KubernetesServerComponent.ts @@ -1,21 +1,19 @@ -import K8sObject from "../types/K8sObject"; import KubernetesComponent from "./KubernetesComponent"; -import { V1Deployment, V1Service } from "@kubernetes/client-node"; -import { createIngress, createService } from "../utils"; import { WorkspaceComponentConfig, WorkspaceConfig, WorkspaceServerConfig } from "../../config/types/WorkspaceConfig"; import { merge } from "../../utils/ObjectUtils"; -import { PortDefinition } from "../utils/createDeployment"; +import KubernetesOctServerComponent from "./KubernetesOctServerComponent"; export default class KubernetesServerComponent extends KubernetesComponent { public static readonly PORT = 28543; - public constructor(mainConfig: WorkspaceConfig, private serverConfig: WorkspaceServerConfig, private componentsConfig: Array) { + public constructor(mainConfig: WorkspaceConfig, private serverConfig: WorkspaceServerConfig, componentsConfig: Array) { super(mainConfig, serverConfig as any); this.config = merge(serverConfig, { namespace: mainConfig.namespace, secrets: { - "FIREBASE_SERVICE_ACCOUNT_KEY": serverConfig.firebaseServiceAccountKey + "FIREBASE_SERVICE_ACCOUNT_KEY": serverConfig.firebaseServiceAccountKey, + "OCT_JWT_PRIVATE_KEY": KubernetesOctServerComponent.OCT_JWT_PRIVATE_KEY, }, env: { "ROUTES": JSON.stringify(componentsConfig.flatMap(it => it.ports).filter(port => port.ingress !== undefined).map(port => ({ @@ -26,6 +24,7 @@ export default class KubernetesServerComponent extends KubernetesComponent { }))), "ALLOWED_USERS": JSON.stringify(serverConfig.users), "HOSTNAME": this.getHost(this.serverConfig.name), + "OCT_SERVER_URL": "https://" + this.getHost(KubernetesOctServerComponent.NAME), "TOKEN_NAME": this.name("token"), "WORKSPACE_NAME": mainConfig.name }, @@ -44,12 +43,4 @@ export default class KubernetesServerComponent extends KubernetesComponent { volumes: [] }); } - - private getHost(subdomain?: string) { - let domain = this.serverConfig.domain.replace("%s", subdomain || ""); - if (!subdomain) { - domain = domain.substring(1); // remove separator - } - return domain; - } } diff --git a/src/utils/CryptoUtils.ts b/src/utils/CryptoUtils.ts new file mode 100644 index 0000000..5a848aa --- /dev/null +++ b/src/utils/CryptoUtils.ts @@ -0,0 +1,5 @@ +export function generateToken(length: number = 32): string { + const values = crypto.getRandomValues(new Uint8Array(length)); + const token = Array.from(values, (byte) => String.fromCharCode(byte)).join(""); + return Buffer.from(token, "binary").toString("base64").replace(/=+$/, "").replace(/\+/g, "-").replace(/\//g, "_"); +} \ No newline at end of file From 491e7459fbe4bf8a6f37f29a4ad6a95f61e33cd5 Mon Sep 17 00:00:00 2001 From: Feavy Date: Sat, 12 Apr 2025 19:00:19 +0200 Subject: [PATCH 66/75] Rename server -> gateway --- src/Settings.json | 4 ++-- src/config/types/WorkspaceConfig.ts | 18 ++++++++---------- .../workspace/KubernetesComponent.ts | 2 +- ...onent.ts => KubernetesGatewayComponent.ts} | 19 +++++++++---------- .../workspace/KubernetesOctServerComponent.ts | 4 ++-- .../workspace/KubernetesWorkspace.ts | 12 ++++++------ workspace.yml | 5 ++--- 7 files changed, 30 insertions(+), 34 deletions(-) rename src/kubernetes/workspace/{KubernetesServerComponent.ts => KubernetesGatewayComponent.ts} (62%) diff --git a/src/Settings.json b/src/Settings.json index d7454de..9781490 100644 --- a/src/Settings.json +++ b/src/Settings.json @@ -1,5 +1,5 @@ { - "server": { + "gateway": { "image": "ghcr.io/feaworkspace/gateway", "tag": "main-cba915e" }, @@ -7,7 +7,7 @@ "image": "ghcr.io/feaworkspace/theia-ide", "tag": "master-2079c19" }, - "octServer": { + "oct-server": { "image": "ghcr.io/feaworkspace/oct-server", "tag": "release-0-2-0-ecff0fc" } diff --git a/src/config/types/WorkspaceConfig.ts b/src/config/types/WorkspaceConfig.ts index 32f5138..0e6348f 100644 --- a/src/config/types/WorkspaceConfig.ts +++ b/src/config/types/WorkspaceConfig.ts @@ -90,21 +90,17 @@ export const workspaceRepositorySchema = z.object({ branch: z.string().optional(), }); -export interface WorkspaceServerConfig { +export interface WorkspaceGatewayConfig { name: string; image: string; tag: string; - users: string[]; - domain: string; firebaseServiceAccountKey: string; } -export const workspaceServerSchema = z.object({ +export const workspaceGatewaySchema = z.object({ name: z.string().default('gateway'), - image: z.string().default(Settings.server.image), - tag: z.string().default(Settings.server.tag), - users: z.array(z.string()), - domain: z.string(), + image: z.string().default(Settings.gateway.image), + tag: z.string().default(Settings.gateway.tag), firebaseServiceAccountKey: z.string(), }); @@ -159,9 +155,10 @@ export const workspacePVCSchema = z.object({ export interface WorkspaceConfig { name: string; namespace: string; + domain: string; nodeSelector: Record; pvc: WorkspacePVCConfig; - server: WorkspaceServerConfig; + gateway: WorkspaceGatewayConfig; workspace: WorkspaceWorkspaceConfig; components: Array; } @@ -169,9 +166,10 @@ export interface WorkspaceConfig { export const workspaceSchema = z.object({ name: z.string(), namespace: z.string(), + domain: z.string(), nodeSelector: z.record(z.string()).default({}), pvc: workspacePVCSchema, - server: workspaceServerSchema, + gateway: workspaceGatewaySchema, workspace: workspaceWorkspaceSchema, components: z.array(z.union([workspaceComponentSchema, workspaceIncludeSchema])).default([]), }); \ No newline at end of file diff --git a/src/kubernetes/workspace/KubernetesComponent.ts b/src/kubernetes/workspace/KubernetesComponent.ts index b51c63b..c8783c3 100644 --- a/src/kubernetes/workspace/KubernetesComponent.ts +++ b/src/kubernetes/workspace/KubernetesComponent.ts @@ -62,7 +62,7 @@ export default class KubernetesComponent { } public getHost(subdomain?: string) { - let domain = this.mainConfig.server.domain.replace("%s", subdomain || ""); + let domain = this.mainConfig.domain.replace("%s", subdomain || ""); if (!subdomain) { domain = domain.substring(1); // remove separator } diff --git a/src/kubernetes/workspace/KubernetesServerComponent.ts b/src/kubernetes/workspace/KubernetesGatewayComponent.ts similarity index 62% rename from src/kubernetes/workspace/KubernetesServerComponent.ts rename to src/kubernetes/workspace/KubernetesGatewayComponent.ts index d149234..2778f0c 100644 --- a/src/kubernetes/workspace/KubernetesServerComponent.ts +++ b/src/kubernetes/workspace/KubernetesGatewayComponent.ts @@ -1,18 +1,18 @@ import KubernetesComponent from "./KubernetesComponent"; -import { WorkspaceComponentConfig, WorkspaceConfig, WorkspaceServerConfig } from "../../config/types/WorkspaceConfig"; +import { WorkspaceComponentConfig, WorkspaceConfig, WorkspaceGatewayConfig } from "../../config/types/WorkspaceConfig"; import { merge } from "../../utils/ObjectUtils"; import KubernetesOctServerComponent from "./KubernetesOctServerComponent"; -export default class KubernetesServerComponent extends KubernetesComponent { +export default class KubernetesGatewayComponent extends KubernetesComponent { public static readonly PORT = 28543; - public constructor(mainConfig: WorkspaceConfig, private serverConfig: WorkspaceServerConfig, componentsConfig: Array) { - super(mainConfig, serverConfig as any); + public constructor(mainConfig: WorkspaceConfig, private gatewayConfig: WorkspaceGatewayConfig, componentsConfig: Array) { + super(mainConfig, gatewayConfig as any); - this.config = merge(serverConfig, { + this.config = merge(gatewayConfig, { namespace: mainConfig.namespace, secrets: { - "FIREBASE_SERVICE_ACCOUNT_KEY": serverConfig.firebaseServiceAccountKey, + "FIREBASE_SERVICE_ACCOUNT_KEY": gatewayConfig.firebaseServiceAccountKey, "OCT_JWT_PRIVATE_KEY": KubernetesOctServerComponent.OCT_JWT_PRIVATE_KEY, }, env: { @@ -22,8 +22,7 @@ export default class KubernetesServerComponent extends KubernetesComponent { auth: port.ingress?.auth || true, targetPort: port.number }))), - "ALLOWED_USERS": JSON.stringify(serverConfig.users), - "HOSTNAME": this.getHost(this.serverConfig.name), + "HOSTNAME": this.getHost(this.gatewayConfig.name), "OCT_SERVER_URL": "https://" + this.getHost(KubernetesOctServerComponent.NAME), "TOKEN_NAME": this.name("token"), "WORKSPACE_NAME": mainConfig.name @@ -32,9 +31,9 @@ export default class KubernetesServerComponent extends KubernetesComponent { { name: "gateway", protocol: "TCP", - number: KubernetesServerComponent.PORT, + number: KubernetesGatewayComponent.PORT, ingress: { - subdomain: this.serverConfig.name, + subdomain: this.gatewayConfig.name, path: "/", auth: true } diff --git a/src/kubernetes/workspace/KubernetesOctServerComponent.ts b/src/kubernetes/workspace/KubernetesOctServerComponent.ts index 2389389..6bd4809 100644 --- a/src/kubernetes/workspace/KubernetesOctServerComponent.ts +++ b/src/kubernetes/workspace/KubernetesOctServerComponent.ts @@ -10,8 +10,8 @@ export default class KubernetesOctServerComponent extends KubernetesComponent { public constructor(mainConfig: WorkspaceConfig) { super(mainConfig, { - image: Settings.octServer.image, - tag: Settings.octServer.tag, + image: Settings["oct-server"].image, + tag: Settings["oct-server"].tag, name: KubernetesOctServerComponent.NAME, args: ["npm", "run", "start", "--workspace=open-collaboration-server", "--", "--port="+KubernetesOctServerComponent.PORT], secrets: { diff --git a/src/kubernetes/workspace/KubernetesWorkspace.ts b/src/kubernetes/workspace/KubernetesWorkspace.ts index 22cd54f..497406b 100644 --- a/src/kubernetes/workspace/KubernetesWorkspace.ts +++ b/src/kubernetes/workspace/KubernetesWorkspace.ts @@ -3,7 +3,7 @@ import K8sObject from "../types/K8sObject"; import { createConfigMap, createDeployment, createIngress, createNamespace, createPersistentVolumeClaim, createService, createServiceAccount } from "../utils"; import { WorkspaceComponentConfig, WorkspaceConfig } from "../../config/types/WorkspaceConfig"; import KubernetesWorkspaceComponent from "./KubernetesWorkspaceComponent"; -import KubernetesServerComponent from "./KubernetesServerComponent"; +import KubernetesGatewayComponent from "./KubernetesGatewayComponent"; import { formatName } from "../utils/encoding"; import KubernetesOctServerComponent from "./KubernetesOctServerComponent"; @@ -47,12 +47,12 @@ export default class KubernetesWorkspace { })); const workspaceComponent = new KubernetesWorkspaceComponent(this.config, this.config.workspace); - const serverComponent = new KubernetesServerComponent(this.config, this.config.server, [workspaceComponent.config, ...this.config.components] as WorkspaceComponentConfig[]); + const gatewayComponent = new KubernetesGatewayComponent(this.config, this.config.gateway, [workspaceComponent.config, ...this.config.components] as WorkspaceComponentConfig[]); const kubernetesComponents = [ ...this.config.components.map(componentConfig => new KubernetesComponent(this.config, componentConfig as WorkspaceComponentConfig)), new KubernetesOctServerComponent(this.config), workspaceComponent, - serverComponent, + gatewayComponent, ]; const configs = kubernetesComponents.flatMap(component => component.config); @@ -82,7 +82,7 @@ export default class KubernetesWorkspace { // ports exposed as clusterip service // ports of server + ports of components which have ingress and auth = false - const ports = [...serverComponent.ports, + const ports = [...gatewayComponent.ports, ...configs.flatMap(it => (it as WorkspaceComponentConfig).ports) .filter(port => port.ingress !== undefined && !port.ingress?.auth) ]; @@ -110,7 +110,7 @@ export default class KubernetesWorkspace { namespace: this.config.namespace, rules: uniqueBy(authIngresses, it => this.getHost(it.subdomain)).map(ingress => ({ host: this.getHost(ingress.subdomain), - port: KubernetesServerComponent.PORT, + port: KubernetesGatewayComponent.PORT, path: "/", service: service // ? })) @@ -153,7 +153,7 @@ export default class KubernetesWorkspace { } private getHost(subdomain?: string) { - let domain = this.config.server.domain.replace("%s", subdomain || ""); + let domain = this.config.domain.replace("%s", subdomain || ""); if (!subdomain) { domain = domain.substring(1); // remove separator } diff --git a/workspace.yml b/workspace.yml index 010e8e7..9238e86 100644 --- a/workspace.yml +++ b/workspace.yml @@ -1,14 +1,13 @@ # version: 1 name: "ppbo" namespace: "ppbo" +domain: "%s-ppbo.feavy.world" nodeSelector: kubernetes.io/arch: "amd64" pvc: storageClassName: "openebs-hostpath" size: "10Gi" -server: - domain: "%s-ppbo.feavy.world" - users: "{{ parseYaml(env.ALLOWED_USERS) }}" +gateway: firebaseServiceAccountKey: "{{ readFile('serviceAccountKey.json') }}" workspace: repositories: From e120d2d1f167e8e7cd90b56e6aefd23a617b1377 Mon Sep 17 00:00:00 2001 From: Feavy Date: Sat, 12 Apr 2025 19:03:59 +0200 Subject: [PATCH 67/75] Add registryURL config --- src/config/WorkspaceConfigRenderer.ts | 4 ++-- src/config/types/WorkspaceConfig.ts | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/config/WorkspaceConfigRenderer.ts b/src/config/WorkspaceConfigRenderer.ts index 6345e9b..589a521 100644 --- a/src/config/WorkspaceConfigRenderer.ts +++ b/src/config/WorkspaceConfigRenderer.ts @@ -20,8 +20,8 @@ export default class WorkspaceConfigRenderer { this.ymlConfig = this.renderYaml(this.ymlConfig); this.ymlConfig = workspaceSchema.parse(this.ymlConfig); - await this.renderIncludes(this.ymlConfig.workspace.init, workspaceScriptSchema, "https://raw.githubusercontent.com/feaworkspace/templates/refs/heads/main/components/"); - await this.renderIncludes(this.ymlConfig.components, workspaceComponentSchema, "https://raw.githubusercontent.com/feaworkspace/templates/refs/heads/main/scripts/"); + await this.renderIncludes(this.ymlConfig.workspace.init, workspaceScriptSchema, this.ymlConfig.registryURL + "/components/"); + await this.renderIncludes(this.ymlConfig.components, workspaceComponentSchema, this.ymlConfig.registryURL + "/scripts/"); this.ymlConfig = this.renderYaml(this.ymlConfig); diff --git a/src/config/types/WorkspaceConfig.ts b/src/config/types/WorkspaceConfig.ts index 0e6348f..d129ba6 100644 --- a/src/config/types/WorkspaceConfig.ts +++ b/src/config/types/WorkspaceConfig.ts @@ -156,6 +156,7 @@ export interface WorkspaceConfig { name: string; namespace: string; domain: string; + registryURL: string; nodeSelector: Record; pvc: WorkspacePVCConfig; gateway: WorkspaceGatewayConfig; @@ -167,6 +168,7 @@ export const workspaceSchema = z.object({ name: z.string(), namespace: z.string(), domain: z.string(), + registryURL: z.string().default('https://raw.githubusercontent.com/feaworkspace/templates/refs/heads/main'), nodeSelector: z.record(z.string()).default({}), pvc: workspacePVCSchema, gateway: workspaceGatewaySchema, From 8cd4e111dc2fec8459533eef51f79c5a3b8f7fe8 Mon Sep 17 00:00:00 2001 From: Feavy Date: Tue, 15 Apr 2025 00:11:42 +0200 Subject: [PATCH 68/75] Add config for OCT --- .../workspace/KubernetesGatewayComponent.ts | 5 ++++- .../workspace/KubernetesWorkspaceComponent.ts | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/kubernetes/workspace/KubernetesGatewayComponent.ts b/src/kubernetes/workspace/KubernetesGatewayComponent.ts index 2778f0c..0ddd106 100644 --- a/src/kubernetes/workspace/KubernetesGatewayComponent.ts +++ b/src/kubernetes/workspace/KubernetesGatewayComponent.ts @@ -2,8 +2,10 @@ import KubernetesComponent from "./KubernetesComponent"; import { WorkspaceComponentConfig, WorkspaceConfig, WorkspaceGatewayConfig } from "../../config/types/WorkspaceConfig"; import { merge } from "../../utils/ObjectUtils"; import KubernetesOctServerComponent from "./KubernetesOctServerComponent"; +import KubernetesWorkspaceComponent from "./KubernetesWorkspaceComponent"; export default class KubernetesGatewayComponent extends KubernetesComponent { + public static readonly NAME = "gateway"; public static readonly PORT = 28543; public constructor(mainConfig: WorkspaceConfig, private gatewayConfig: WorkspaceGatewayConfig, componentsConfig: Array) { @@ -23,7 +25,8 @@ export default class KubernetesGatewayComponent extends KubernetesComponent { targetPort: port.number }))), "HOSTNAME": this.getHost(this.gatewayConfig.name), - "OCT_SERVER_URL": "https://" + this.getHost(KubernetesOctServerComponent.NAME), + "THEIA_HOSTNAME": this.getHost(KubernetesWorkspaceComponent.NAME), + "OCT_SERVER_URL": "http://127.0.0.1:" + KubernetesOctServerComponent.PORT, "TOKEN_NAME": this.name("token"), "WORKSPACE_NAME": mainConfig.name }, diff --git a/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts b/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts index 6495a9e..6c7ef22 100644 --- a/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts +++ b/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts @@ -3,24 +3,31 @@ import { WorkspaceConfig, WorkspaceWorkspaceConfig } from "../../config/types/Wo import { merge } from "../../utils/ObjectUtils"; export default class KubernetesWorkspaceComponent extends KubernetesComponent { + public static readonly NAME = "theia"; + public constructor(mainConfig: WorkspaceConfig, config: WorkspaceWorkspaceConfig) { - super(mainConfig, merge(config, { + super(mainConfig, config as any); + + this.config = merge(config, { namespace: mainConfig.namespace, args: ["/workspace", "--hostname=0.0.0.0", "--port=28544"], - env: {}, + env: { + "COLLABORATION_SERVER_URL": "https://" + this.getHost("oct-server"), + "WORKSPACE_SERVER_URL": "https://" + this.getHost(this.mainConfig.gateway.name) + }, volumes: [], ports: [ { - name: "theia", + name: KubernetesWorkspaceComponent.NAME, protocol: "TCP", number: 28544, ingress: { - subdomain: "theia", + subdomain: KubernetesWorkspaceComponent.NAME, path: "/", auth: true } } ] - })); + }); } } From be7bf73afb6f8877bd175f288fac5484cb9be522 Mon Sep 17 00:00:00 2001 From: Feavy Date: Tue, 15 Apr 2025 21:38:24 +0200 Subject: [PATCH 69/75] Add workspace volume mount --- src/kubernetes/workspace/KubernetesGatewayComponent.ts | 7 ++++++- src/kubernetes/workspace/KubernetesWorkspaceComponent.ts | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/kubernetes/workspace/KubernetesGatewayComponent.ts b/src/kubernetes/workspace/KubernetesGatewayComponent.ts index 0ddd106..a5d3013 100644 --- a/src/kubernetes/workspace/KubernetesGatewayComponent.ts +++ b/src/kubernetes/workspace/KubernetesGatewayComponent.ts @@ -42,7 +42,12 @@ export default class KubernetesGatewayComponent extends KubernetesComponent { } } ], - volumes: [] + volumes: [ + { + name: "workspace", + mountPath: "/workspace" + } + ] }); } } diff --git a/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts b/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts index 6c7ef22..9aaaf44 100644 --- a/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts +++ b/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts @@ -15,7 +15,12 @@ export default class KubernetesWorkspaceComponent extends KubernetesComponent { "COLLABORATION_SERVER_URL": "https://" + this.getHost("oct-server"), "WORKSPACE_SERVER_URL": "https://" + this.getHost(this.mainConfig.gateway.name) }, - volumes: [], + volumes: [ + { + name: "workspace", + mountPath: "/workspace" + } + ], ports: [ { name: KubernetesWorkspaceComponent.NAME, From 1a5cb035afe2c6602e5274507a3083748f8b4c73 Mon Sep 17 00:00:00 2001 From: Feavy Date: Fri, 18 Apr 2025 23:26:56 +0200 Subject: [PATCH 70/75] Override Theia entrypoint to write ssh key and clone repositories --- .gitignore | 2 + src/Settings.json | 4 +- src/config/types/WorkspaceConfig.ts | 12 ++--- .../workspace/KubernetesWorkspaceComponent.ts | 47 ++++++++++++++++++- workspace.yml | 5 +- 5 files changed, 57 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 1509f11..9492cdd 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ packages/*/types Dockerfile.*bak* serviceAccountKey.json .env +key +key.pub \ No newline at end of file diff --git a/src/Settings.json b/src/Settings.json index 9781490..1024123 100644 --- a/src/Settings.json +++ b/src/Settings.json @@ -1,11 +1,11 @@ { "gateway": { "image": "ghcr.io/feaworkspace/gateway", - "tag": "main-cba915e" + "tag": "main-7f6554a" }, "theia": { "image": "ghcr.io/feaworkspace/theia-ide", - "tag": "master-2079c19" + "tag": "master-e263fd4" }, "oct-server": { "image": "ghcr.io/feaworkspace/oct-server", diff --git a/src/config/types/WorkspaceConfig.ts b/src/config/types/WorkspaceConfig.ts index d129ba6..1bd2a33 100644 --- a/src/config/types/WorkspaceConfig.ts +++ b/src/config/types/WorkspaceConfig.ts @@ -79,14 +79,14 @@ export const workspaceIncludeSchema = z.object({ }); export interface RepositoryConfig { - remote: string; - name?: string; + url: string; + path?: string; branch?: string; } export const workspaceRepositorySchema = z.object({ - remote: z.string(), - name: z.string().optional(), + url: z.string(), + path: z.string().optional(), branch: z.string().optional(), }); @@ -120,7 +120,7 @@ export interface WorkspaceWorkspaceConfig { name: string; image: string; tag: string; - gitPrivateKey?: string; + sshPrivateKey?: string; repositories: Array; init: Array; ports: Array; @@ -133,7 +133,7 @@ export const workspaceWorkspaceSchema = z.object({ name: z.string().default('workspace'), image: z.string().default(Settings.theia.image), tag: z.string().default(Settings.theia.tag), - gitPrivateKey: z.string().optional(), + sshPrivateKey: z.string().optional(), repositories: z.array(workspaceRepositorySchema).default([]), init: z.array(z.union([workspaceScriptSchema, workspaceIncludeSchema])).default([]), ports: z.array(workspacePortSchema).default([]), diff --git a/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts b/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts index 9aaaf44..9c1ecf1 100644 --- a/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts +++ b/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts @@ -10,10 +10,53 @@ export default class KubernetesWorkspaceComponent extends KubernetesComponent { this.config = merge(config, { namespace: mainConfig.namespace, - args: ["/workspace", "--hostname=0.0.0.0", "--port=28544"], + command: ["bash", "-c"], + args: + [` +# Setup ssh private key for git +if [ -n "$SSH_PRIVATE_KEY" ] ; then + echo "Set SSH key" + mkdir -p ~/.ssh + echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa + chmod 700 ~/.ssh/id_rsa +fi + +git config --global user.name "Workspace" +git config --global user.email "workspace" + +# Clone repositories if needed +if [ -n "$GIT_REPOSITORIES" ] ; then + GIT_REPOSITORIES=$(echo "$GIT_REPOSITORIES" | jq -c '.[]') + + for repo in $GIT_REPOSITORIES; do + repo_url=$(echo $repo | jq -r -c '.url') + repo_name=$(basename -s .git "$repo_url") + repo_host=$(echo "$repo_url" | cut -d@ -f2 | cut -d: -f1) + repo_path=/workspace/$(echo $repo | jq -r -c ".path // \\"$repo_name\\"") + + if [ ! -d "$repo_path" ] ; then + ssh-keyscan -t rsa $repo_host >> ~/.ssh/known_hosts + echo "Cloning repository $repo_url" + git clone $repo_url $repo_path + fi + done + # for repo in "$GIT_REPOSITORIES" ; do + # if [ -n "$dir" && ! -f "$dir" ] ; then + # mkdir -p "$dir" + # fi + # git clone $repo + # done +fi + +node /home/theia/applications/browser/lib/backend/main.js /workspace --hostname=0.0.0.0 --port=28544 + `], env: { "COLLABORATION_SERVER_URL": "https://" + this.getHost("oct-server"), - "WORKSPACE_SERVER_URL": "https://" + this.getHost(this.mainConfig.gateway.name) + "WORKSPACE_SERVER_URL": "https://" + this.getHost(this.mainConfig.gateway.name), + "GIT_REPOSITORIES": JSON.stringify(config.repositories || []) + }, + secrets: { + "SSH_PRIVATE_KEY": config.sshPrivateKey ?? "" }, volumes: [ { diff --git a/workspace.yml b/workspace.yml index 9238e86..9d29693 100644 --- a/workspace.yml +++ b/workspace.yml @@ -11,9 +11,8 @@ gateway: firebaseServiceAccountKey: "{{ readFile('serviceAccountKey.json') }}" workspace: repositories: - - remote: https://github.com/feavy/ppbo.git - branch: main - gitPrivateKey: "test" + - url: git@github.com:Feavy/ppbo.git + sshPrivateKey: "{{ readFile('key') }}" init: - include: "../templates/scripts/install-java.yml" # - include: "@install-java.yml" From e7867be6616cf255f96f0831a756dfe51eabb6e4 Mon Sep 17 00:00:00 2001 From: Feavy Date: Fri, 18 Apr 2025 23:53:27 +0200 Subject: [PATCH 71/75] Play initScripts --- src/config/WorkspaceConfigRenderer.ts | 2 +- src/config/types/WorkspaceConfig.ts | 4 ++-- .../workspace/KubernetesWorkspaceComponent.ts | 23 +++++++++++++------ workspace.yml | 2 +- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/config/WorkspaceConfigRenderer.ts b/src/config/WorkspaceConfigRenderer.ts index 589a521..cd48d8f 100644 --- a/src/config/WorkspaceConfigRenderer.ts +++ b/src/config/WorkspaceConfigRenderer.ts @@ -20,7 +20,7 @@ export default class WorkspaceConfigRenderer { this.ymlConfig = this.renderYaml(this.ymlConfig); this.ymlConfig = workspaceSchema.parse(this.ymlConfig); - await this.renderIncludes(this.ymlConfig.workspace.init, workspaceScriptSchema, this.ymlConfig.registryURL + "/components/"); + await this.renderIncludes(this.ymlConfig.workspace.initScripts, workspaceScriptSchema, this.ymlConfig.registryURL + "/components/"); await this.renderIncludes(this.ymlConfig.components, workspaceComponentSchema, this.ymlConfig.registryURL + "/scripts/"); this.ymlConfig = this.renderYaml(this.ymlConfig); diff --git a/src/config/types/WorkspaceConfig.ts b/src/config/types/WorkspaceConfig.ts index 1bd2a33..008b628 100644 --- a/src/config/types/WorkspaceConfig.ts +++ b/src/config/types/WorkspaceConfig.ts @@ -122,7 +122,7 @@ export interface WorkspaceWorkspaceConfig { tag: string; sshPrivateKey?: string; repositories: Array; - init: Array; + initScripts: Array; ports: Array; env: Record; secrets: Record; @@ -135,7 +135,7 @@ export const workspaceWorkspaceSchema = z.object({ tag: z.string().default(Settings.theia.tag), sshPrivateKey: z.string().optional(), repositories: z.array(workspaceRepositorySchema).default([]), - init: z.array(z.union([workspaceScriptSchema, workspaceIncludeSchema])).default([]), + initScripts: z.array(z.union([workspaceScriptSchema, workspaceIncludeSchema])).default([]), ports: z.array(workspacePortSchema).default([]), env: z.record(z.string()).default({}), secrets: z.record(z.string()).default({}), diff --git a/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts b/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts index 9c1ecf1..f6ec11d 100644 --- a/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts +++ b/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts @@ -40,12 +40,20 @@ if [ -n "$GIT_REPOSITORIES" ] ; then git clone $repo_url $repo_path fi done - # for repo in "$GIT_REPOSITORIES" ; do - # if [ -n "$dir" && ! -f "$dir" ] ; then - # mkdir -p "$dir" - # fi - # git clone $repo - # done +fi + +# Play init scripts +if [ -n "$INIT_SCRIPTS" ] ; then + INIT_SCRIPTS=$(echo "$INIT_SCRIPTS" | jq -c '.[]') + + for initScript in "$INIT_SCRIPTS"; do + title=$(echo "$initScript" | jq -r -c '.title') + script=$(echo "$initScript" | jq -r -c '.script') + + echo "$title" + + bash -c "$script" + done fi node /home/theia/applications/browser/lib/backend/main.js /workspace --hostname=0.0.0.0 --port=28544 @@ -53,7 +61,8 @@ node /home/theia/applications/browser/lib/backend/main.js /workspace --hostname= env: { "COLLABORATION_SERVER_URL": "https://" + this.getHost("oct-server"), "WORKSPACE_SERVER_URL": "https://" + this.getHost(this.mainConfig.gateway.name), - "GIT_REPOSITORIES": JSON.stringify(config.repositories || []) + "GIT_REPOSITORIES": JSON.stringify(config.repositories || []), + "INIT_SCRIPTS": JSON.stringify(config.initScripts || []) }, secrets: { "SSH_PRIVATE_KEY": config.sshPrivateKey ?? "" diff --git a/workspace.yml b/workspace.yml index 9d29693..4e740db 100644 --- a/workspace.yml +++ b/workspace.yml @@ -13,7 +13,7 @@ workspace: repositories: - url: git@github.com:Feavy/ppbo.git sshPrivateKey: "{{ readFile('key') }}" - init: + initScripts: - include: "../templates/scripts/install-java.yml" # - include: "@install-java.yml" with: From 68ed9ad098996ca24918a7d0abdec421b4726af1 Mon Sep 17 00:00:00 2001 From: Feavy Date: Sat, 19 Apr 2025 00:15:47 +0200 Subject: [PATCH 72/75] Show workspace url after deployment --- src/Settings.json | 2 +- src/index.ts | 3 ++- src/kubernetes/workspace/KubernetesWorkspace.ts | 2 +- workspace.yml | 6 +++--- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Settings.json b/src/Settings.json index 1024123..6dc321d 100644 --- a/src/Settings.json +++ b/src/Settings.json @@ -1,7 +1,7 @@ { "gateway": { "image": "ghcr.io/feaworkspace/gateway", - "tag": "main-7f6554a" + "tag": "main-38f557e" }, "theia": { "image": "ghcr.io/feaworkspace/theia-ide", diff --git a/src/index.ts b/src/index.ts index f3f1a2e..578eb36 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,10 +3,10 @@ import './utils/ArrayUtils'; import WorkspaceConfigRenderer from './config/WorkspaceConfigRenderer'; import { fromError } from 'zod-validation-error'; import KubernetesWorkspace from './kubernetes/workspace/KubernetesWorkspace'; -import * as yaml from 'yaml'; import * as dotenv from 'dotenv'; import KubernetesClient from "./kubernetes/KubernetesClient"; import {dataValuesFromBase64} from "./kubernetes/utils/encoding"; +import KubernetesWorkspaceComponent from './kubernetes/workspace/KubernetesWorkspaceComponent'; /* CLI Parameters: @@ -36,6 +36,7 @@ dotenv.config(); console.log("Deploying workspace..."); await client.deploy(kubernetesWorkspace, true); console.log("Workspace deployed successfully!"); + console.log("Available at https://" + kubernetesWorkspace.getHost(KubernetesWorkspaceComponent.NAME)); } catch (error: any) { const validationError = fromError(error); console.error(error); diff --git a/src/kubernetes/workspace/KubernetesWorkspace.ts b/src/kubernetes/workspace/KubernetesWorkspace.ts index 497406b..5c9a53b 100644 --- a/src/kubernetes/workspace/KubernetesWorkspace.ts +++ b/src/kubernetes/workspace/KubernetesWorkspace.ts @@ -152,7 +152,7 @@ export default class KubernetesWorkspace { return resources; } - private getHost(subdomain?: string) { + public getHost(subdomain?: string) { let domain = this.config.domain.replace("%s", subdomain || ""); if (!subdomain) { domain = domain.substring(1); // remove separator diff --git a/workspace.yml b/workspace.yml index 4e740db..92a845b 100644 --- a/workspace.yml +++ b/workspace.yml @@ -1,7 +1,7 @@ # version: 1 -name: "ppbo" -namespace: "ppbo" -domain: "%s-ppbo.feavy.world" +name: "my-workspace" +namespace: "workspaces" +domain: "%s-my-workspace.feavy.world" nodeSelector: kubernetes.io/arch: "amd64" pvc: From b3522aaa27b5f59873ea207c28f5ac7e4302eaf8 Mon Sep 17 00:00:00 2001 From: Feavy Date: Thu, 24 Apr 2025 23:17:07 +0200 Subject: [PATCH 73/75] Init .theia config dir at start --- src/kubernetes/workspace/KubernetesWorkspaceComponent.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts b/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts index f6ec11d..982bbb4 100644 --- a/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts +++ b/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts @@ -56,6 +56,9 @@ if [ -n "$INIT_SCRIPTS" ] ; then done fi +# Create theia config dir +mkdir /workspace/.theia + node /home/theia/applications/browser/lib/backend/main.js /workspace --hostname=0.0.0.0 --port=28544 `], env: { From 879b868301f01d3d267e3e29b7156c6efaec59ad Mon Sep 17 00:00:00 2001 From: Feavy Date: Thu, 24 Apr 2025 23:57:43 +0200 Subject: [PATCH 74/75] Override mini_browser and webview host pattern --- src/kubernetes/workspace/KubernetesWorkspaceComponent.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts b/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts index 982bbb4..0f4845c 100644 --- a/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts +++ b/src/kubernetes/workspace/KubernetesWorkspaceComponent.ts @@ -65,7 +65,9 @@ node /home/theia/applications/browser/lib/backend/main.js /workspace --hostname= "COLLABORATION_SERVER_URL": "https://" + this.getHost("oct-server"), "WORKSPACE_SERVER_URL": "https://" + this.getHost(this.mainConfig.gateway.name), "GIT_REPOSITORIES": JSON.stringify(config.repositories || []), - "INIT_SCRIPTS": JSON.stringify(config.initScripts || []) + "INIT_SCRIPTS": JSON.stringify(config.initScripts || []), + "THEIA_MINI_BROWSER_HOST_PATTERN": "{{hostname}}", + "THEIA_WEBVIEW_EXTERNAL_ENDPOINT": "{{hostname}}" }, secrets: { "SSH_PRIVATE_KEY": config.sshPrivateKey ?? "" From b4f619c47a6efe125c6bd3f24e4af31c6a88e7a7 Mon Sep 17 00:00:00 2001 From: Feavy Date: Sun, 27 Apr 2025 11:03:21 +0200 Subject: [PATCH 75/75] Add files config --- src/Settings.json | 6 +- src/config/types/WorkspaceConfig.ts | 12 +++ src/kubernetes/utils/createConfigMap.ts | 4 +- src/kubernetes/utils/createDeployment.ts | 77 ++++++++++++++++--- .../workspace/KubernetesComponent.ts | 23 ++++-- .../workspace/KubernetesOctServerComponent.ts | 1 + src/utils/ObjectUtils.ts | 8 ++ 7 files changed, 110 insertions(+), 21 deletions(-) diff --git a/src/Settings.json b/src/Settings.json index 6dc321d..e254200 100644 --- a/src/Settings.json +++ b/src/Settings.json @@ -1,14 +1,14 @@ { "gateway": { "image": "ghcr.io/feaworkspace/gateway", - "tag": "main-38f557e" + "tag": "main-19fc5a7" }, "theia": { "image": "ghcr.io/feaworkspace/theia-ide", - "tag": "master-e263fd4" + "tag": "master-d73239c" }, "oct-server": { "image": "ghcr.io/feaworkspace/oct-server", - "tag": "release-0-2-0-ecff0fc" + "tag": "release-0-2-0-4d7efca" } } diff --git a/src/config/types/WorkspaceConfig.ts b/src/config/types/WorkspaceConfig.ts index 008b628..7225928 100644 --- a/src/config/types/WorkspaceConfig.ts +++ b/src/config/types/WorkspaceConfig.ts @@ -46,6 +46,16 @@ export const workspaceVolumeSchema = z.object({ mountPath: z.string(), }); +export interface WorkspaceFileConfig { + mountPath: string; + content: string; +} + +export const workspaceFileSchema = z.object({ + mountPath: z.string(), + content: z.string() +}); + export interface WorkspaceComponentConfig { name: string; image: string; @@ -55,6 +65,7 @@ export interface WorkspaceComponentConfig { ports: Array; env: Record; secrets: Record; + files: Record; volumes: Array; } @@ -65,6 +76,7 @@ export const workspaceComponentSchema = z.object({ ports: z.array(workspacePortSchema).default([]), env: z.record(z.string()).default({}), secrets: z.record(z.string()).default({}), + files: z.record(workspaceFileSchema).default({}), volumes: z.array(workspaceVolumeSchema).default([]), }); diff --git a/src/kubernetes/utils/createConfigMap.ts b/src/kubernetes/utils/createConfigMap.ts index 3dca7ac..c6c435c 100644 --- a/src/kubernetes/utils/createConfigMap.ts +++ b/src/kubernetes/utils/createConfigMap.ts @@ -5,15 +5,17 @@ interface ConfigMapDefinition { name: string; namespace: string; data: Record; + annotations?: Record; } -export default function createConfigMap({ name, namespace, data }: ConfigMapDefinition): V1ConfigMap { +export default function createConfigMap({ name, namespace, data, annotations }: ConfigMapDefinition): V1ConfigMap { return { apiVersion: 'v1', kind: 'ConfigMap', metadata: { name, namespace, + annotations }, data: valuesToString(data) }; diff --git a/src/kubernetes/utils/createDeployment.ts b/src/kubernetes/utils/createDeployment.ts index 43aa4bb..c16cbc9 100644 --- a/src/kubernetes/utils/createDeployment.ts +++ b/src/kubernetes/utils/createDeployment.ts @@ -1,9 +1,10 @@ -import {V1ConfigMap, V1Deployment, V1EnvFromSource, V1PersistentVolumeClaim, V1Secret} from "@kubernetes/client-node"; +import {V1ConfigMap, V1Deployment, V1EnvFromSource, V1PersistentVolumeClaim, V1Secret, V1Volume, V1VolumeMount} from "@kubernetes/client-node"; export interface ContainerDefinition { name: string; image: string; configMap?: V1ConfigMap; + configMapFiles?: V1ConfigMap; secret?: V1Secret; ports?: PortDefinition[]; volumeMounts?: Array; @@ -79,18 +80,9 @@ export default function createDeployment(definition: DeploymentDefinition): V1De protocol: port.protocol })), envFrom: envFrom(container.configMap, container.secret), - volumeMounts: container.volumeMounts && container.volumeMounts.map(volume => ({ - name: definition.volume.metadata?.name!, - subPath: volume.name, - mountPath: volume.mountPath - })) + volumeMounts: volumeMounts(definition.volume, container), })), - volumes: definition.volume && [{ - name: definition.volume.metadata?.name!, - persistentVolumeClaim: { - claimName: definition.volume.metadata?.name! - } - }], + volumes: volumes(definition.volume, definition.containers.map(c => c.configMapFiles).filter(Boolean) as V1ConfigMap[]) } } } @@ -106,4 +98,65 @@ function envFrom(configMap?: V1ConfigMap, secret?: V1Secret): V1EnvFromSource[] env.push({secretRef: {name: secret.metadata?.name!}}); } return env; +} + +function volumes(pvc?: V1PersistentVolumeClaim, configs: V1ConfigMap[] = []): V1Volume[] { + const volumes: V1Volume[] = []; + + if(pvc) { + volumes.push({ + name: pvc.metadata?.name!, + persistentVolumeClaim: { + claimName: pvc.metadata?.name! + } + }); + } + + for(const config of configs) { + volumes.push({ + name: config.metadata?.name!, + configMap: { + name: config.metadata?.name! + } + }); + } + + return volumes; + + // volumes: definition.containers.map(container => container.configMapFiles).filter(Boolean).map(config => ({ + // name: config?.metadata?.name!, + // configMap: { + // name: config?.metadata?.name! + // } + // })).concat(definition.volume ? [{ + // name: definition.volume.metadata?.name!, + // persistentVolumeClaim: { + // claimName: definition.volume.metadata?.name! + // } + // }] : []) +} + +function volumeMounts(pvc: V1PersistentVolumeClaim, container: ContainerDefinition): V1VolumeMount[] { + const volumeMounts: V1VolumeMount[] = []; + + for(const volumeMount of container.volumeMounts ?? []) { + volumeMounts.push({ + name: pvc.metadata?.name!, + subPath: volumeMount.name, + mountPath: volumeMount.mountPath + }); + } + + if(container.configMapFiles) { + const files = JSON.parse(container.configMapFiles?.metadata?.annotations!["files"]!); + for(const [name, path] of Object.entries(files)) { + volumeMounts.push({ + name: container.configMapFiles.metadata?.name!, + mountPath: path as string, + subPath: name + }); + } + } + + return volumeMounts; } \ No newline at end of file diff --git a/src/kubernetes/workspace/KubernetesComponent.ts b/src/kubernetes/workspace/KubernetesComponent.ts index c8783c3..5fd07a8 100644 --- a/src/kubernetes/workspace/KubernetesComponent.ts +++ b/src/kubernetes/workspace/KubernetesComponent.ts @@ -3,6 +3,7 @@ import K8sObject from "../types/K8sObject"; import { ContainerDefinition } from "../utils/createDeployment"; import { WorkspaceComponentConfig, WorkspaceConfig } from "../../config/types/WorkspaceConfig"; import { formatName } from "../utils/encoding"; +import { isNotEmpty } from "../../utils/ObjectUtils"; export default class KubernetesComponent { public constructor(protected readonly mainConfig: WorkspaceConfig, public config: WorkspaceComponentConfig) { @@ -21,19 +22,30 @@ export default class KubernetesComponent { } public get configMap() { - return this.config.env && K8SUtils.createConfigMap({ + return isNotEmpty(this.config.env) ? K8SUtils.createConfigMap({ name: this.name("config"), namespace: this.mainConfig.namespace, data: this.config.env - }); + }) : undefined; } public get secret() { - return this.config.secrets && K8SUtils.createSecret({ + return isNotEmpty(this.config.secrets) ? K8SUtils.createSecret({ name: this.name("secret"), namespace: this.mainConfig.namespace, stringData: this.config.secrets - }); + }) : undefined; + } + + public get configMapFiles() { + return isNotEmpty(this.config.files) ? K8SUtils.createConfigMap({ + name: this.name("config-files"), + namespace: this.mainConfig.namespace, + annotations: { + files: JSON.stringify(Object.entries(this.config.files).reduce((acc, item) => ({...acc, [item[0]]: item[1].mountPath}), {})), + }, + data: Object.entries(this.config.files).reduce((acc, item) => ({...acc, [item[0]]: item[1].content}), {}) + }) : undefined; } public get containerDefinition(): ContainerDefinition { @@ -43,6 +55,7 @@ export default class KubernetesComponent { command: this.config.command, args: this.config.args, configMap: this.configMap, + configMapFiles: this.configMapFiles, secret: this.secret, ports: this.config.ports.map(port => ({ name: port.name, @@ -58,7 +71,7 @@ export default class KubernetesComponent { }; public getResources(definedResources: Array): Array { - return [this.configMap, this.secret].filter(Boolean) as Array; + return [this.configMap, this.configMapFiles, this.secret].filter(Boolean) as Array; } public getHost(subdomain?: string) { diff --git a/src/kubernetes/workspace/KubernetesOctServerComponent.ts b/src/kubernetes/workspace/KubernetesOctServerComponent.ts index 6bd4809..b645dbc 100644 --- a/src/kubernetes/workspace/KubernetesOctServerComponent.ts +++ b/src/kubernetes/workspace/KubernetesOctServerComponent.ts @@ -18,6 +18,7 @@ export default class KubernetesOctServerComponent extends KubernetesComponent { "OCT_JWT_PRIVATE_KEY": KubernetesOctServerComponent.OCT_JWT_PRIVATE_KEY, }, env: {}, + files: {}, volumes: [], ports: [ { diff --git a/src/utils/ObjectUtils.ts b/src/utils/ObjectUtils.ts index fcac015..88d458a 100644 --- a/src/utils/ObjectUtils.ts +++ b/src/utils/ObjectUtils.ts @@ -115,4 +115,12 @@ export function merge(target: any, source: any) { } } return target; +} + +export function isEmpty(obj: object) { + return !obj || Object.keys(obj).length === 0; +} + +export function isNotEmpty(obj: object) { + return !isEmpty(obj); } \ No newline at end of file